11 XML-entiteetit. Edellisistä laillisia ominaisuusyhdistelmiä ovat siis vain aikaisemmin luetellut viisi:

Samankaltaiset tiedostot
11 XML-entiteetit. <eg> Using HTML tag <FONT> is not recommended! </eg> <eg> Using HTML tag <FONT> is not recommended! </eg> XML-entiteetit

11 XML-entiteetit. <eg> HTML-elementin <FONT> käyttöä ei suositella! </eg> <eg> HTML-elementin <FONT> käyttöä ei suositella! </eg> XML-entiteetit

XML-merkkaus. Merkkidata, prosessointikomennot, kommentit

7 DTD ja entiteetit: dokumentin fyysinen rakenne

7 DTD ja entiteetit: dokumentin fyysinen rakenne

XML kielioppi. Elementtien ja attribuuttien määrittely. Ctl230: Luentokalvot Miro Lehtonen

6 DTD ja dokumentin tyyppimääritys

XML johdatus: DTD. Jaana Holvikivi

10 XML ja dokumenttien tyyppimäärittely

6 DTD ja dokumentin tyyppimääritys

Elementtien tyyppideklaraatiot

9 XML perusteet

6 DTD ja dokumentin tyyppimääritys

9 XML perusteet

9 XML perusteet

Tutkitaan sitten HTML-dokumenttien anatomiaa, jotta päästään käsiksi rakenteisten dokumenttien käsitteistöön esimerkkien kautta.

5 Merkkaus: XML protokollana

5 Merkkaus: XML protokollana

Johdatus rakenteisiin dokumentteihin

M. Merikanto 2012 XML. Merkkauskieli, osa 2

XML prosessori. XML prosessointi. XML:n kirjoittaminen. Validoiva jäsennin. Tapahtumaohjattu käsittely. Tapahtumaohjattu käsittely.

P e d a c o d e ohjelmointikoulutus verkossa

<Element> <ELEMENT> <element> </element> </ELEMENT> </Element>

XML-saatavuuskysely. XML-tiedoston kuvaus. versio

XML / DTD / FOP -opas Internal

Sisältö. XML, XHTML ja CSS XML XML. XML:n ja HTML:n ero. XML kieliä XML XHTML CSS XSL. T Hypermediadokumentin laatiminen 2002

13 Nimiavaruudet. kirjoitetaan muotoon (ja koodataan vähän lisätietoa) huomataan heti, mitä kirjoittaja ajaa takaa ja tarkoittaa. Vai huomataanko?

6 XML-työkalut 1. 6 XML-työkalut

XHTML - harjoitus. Tehtävä1: Tee xhtml tiedosto käyttäen notepad (muistio) ohjelmaa. Tiedoston tallennus notepad (muistio) ohjelmassa:

Vaasan yliopiston toimintaa tukevat informaatiopalvelut ovat käytettävissä WWW:n kautta.

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli (2011) Harri Laine 1. Jäsennys ja sarjallistaminen

Poikkeusinfo XML-rajapinnan kuvaus, rajapinnan versio 2 Seasam Group

Luento 2: XML:n syntaksi

HTML & CSS. HTML (HyperText Markup Language) Antti Koivisto. ! HTML on sivujen kuvauskieli.

9.16 XSLT ja nimiavaruudet (1/3): literaali oletusnimiavaruus

XML rakenteen suunnittelu. Jaana Holvikivi

SISÄLLYS. Johdanto JOHDATUS XML:n PARIIN 1.1 Extensible Markup Languge XML:n edut Mitä XML:llä tehdään? 3

Tuomas Komulainen LUOVA LOMAKE ANALYSOINTITYÖKALU

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

10 XML ja dokumenttien tyyppimäärittely

3 Verkkosaavutettavuuden tekniset perusteet

Tietojen toimittaminen Skeemat Vastaanottokuittaus Kansallisen tulorekisterin perustamishanke

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

WWW-ohjelmoinnin kokonaisuus. WWW-OHJELMOINTI 1 Merkkauskielet. Merkkauskielten idea. Merkkauskielet (markup languages) Merkkauskielten merkitys

Ctl160 Tekstikorpusten tietojenkäsittely p.1/15

12 Dokumenttiluokan toteuttamisesta

Tietojen jakelu Skeemat Lokitiedot Kansallisen tulorekisterin perustamishanke

Taulukot. Jukka Harju, Jukka Juslin

Extensible Stylesheet Language (XSL)

Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke

Verkkosivut perinteisesti. Tanja Välisalo

Tietojen toimittaminen Skeemat Vastaanottokuittaus Kansallisen tulorekisterin perustamishanke

3 XHTML-dokumenttien anatomia

Tietojen toimittaminen Skeemat Viestit Kansallisen tulorekisterin perustamishanke

Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke

Sivuston tiedotgoogle.com

HTML ja CSS. Tästä se lähtee: portfolio-sivusto. Sivuston pääkansio, jonka sisällä on kaikki sivustoon kuuluvat alikansiot ja tiedostot.

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

Digitaalisen median tekniikat xhtml - jatkuu

Digitaalisen median tekniikat xhtml - jatkuu Harri Laine 1

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Tietojen jakelu Skeemat Viestit Kansallisen tulorekisterin perustamishanke

XML Technologies and Applications - harjoitustyö -

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

Ohjelmoinnin perusteet, syksy 2006

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Kvarkki XUA: sähköisen allekirjoituksen määritys 1 (6) V 1.0. Kvarkki XUA: sähköisen allekirjoituksen määritys

Luento 12: XML ja metatieto


Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Kuva-aineistojen arkisto XUA-allekirjoituksen määritys

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Apuja ohjelmointiin» Yleisiä virheitä

Tietojen toimittaminen Skeemat Käsittelypalaute Kansallisen tulorekisterin perustamishanke

2.17 Esimerkki järkevän relaatiotietokannan rakenteesta

etunimi, sukunimi ja opiskelijanumero ja näillä

H T M L eli kuinka laadin itselleni päheät kotisivut. Janne Käki

Proseduraalinen dokumentti: sisältö, rakenne ja ulkoasu yhdessä, esim. worddokumentti

Tietojen toimittaminen Skeemat Mitätöintitiedot Kansallisen tulorekisterin perustamishanke

Ohje - Kuntien ilmoitukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Tietueet. Tietueiden määrittely

Kotisivuohjeet. Eteläpohjalaiset Kylät ry. Sivupohjien rakenne

Korpusten käsittely clt131, P Luento 6

Harjoitus 1 -- Ratkaisut

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

StanForD-XML. Juha-Antti Sorsa, Tapio Räsänen, Vesa Imponen

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

OHJE RFID - Suoraohjauskoodin muodostamiseen Toshiba SX sarjan tulostimilla

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

CSE-A1200 Tietokannat

XML -muotoisen raportin luonti

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016

Asiakas ja tavoite. Tekninen toteutus

Ohjelmoinnin perusteet Y Python

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Transkriptio:

11 XML-entiteetit Entiteetit ovat tuttuja jo HTML-kielestä - entiteettien avulla dokumenttiin voidaan esim. liittää merkkijonoja, joille on annettu erisnimi Seuraava esimerkki liittää merkkidataan "<" ja ">" -merkit entiteettiviittauksen avulla: <eg> HTML-elementin <FONT> käyttöä ei suositella! </eg> XML-spesifikaatio määrittelee oletusarvoisesti viisi tämäntyyppistä entiteettiä: "lt", "gt", "amp", "apos" ja "quot" (validi XML-dokumentti esittelee eksplisiittisesti myös nämä itse) Esimerkissä konkreettinen hyöty oli kuitenkin vähäinen, sillä edellinen esimerkki olisi voitu hyvin kirjoittaa myös merkkiviittausten avulla esim. seuraavasti: <eg> HTML-elementin <FONT> käyttöä ei suositella! </eg> 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 228 XML-entiteetit voivat olla kuitenkin huomattavastikin tätä monimutkaisempia - XML-entiteettien avulla on mahdollista erityisesti: - nimetä vakiomerkkijonoja ja liittää merkkijonoja merkkidatan joukkoon em. nimien avulla - jakaa XML-dokumentti useisiin fyysisiin osiin - liittää XML-dokumenttiin viittauksia muihin dokumentteihin joiden rakennetta XML 1.0 ei käsittele (esim. kuvat, äänet, tietokoneohjelmat) - sieventää ja parametrisoida DTD-määrityksiä XML-spesifikaation määrittelemä entiteetti ([entity]) voidaankin ymmärtää tiedoston ([file]) laiteriippumattomana abstraktiona Entiteettejä on XML:ssä olemassa kuutta eri tyyppiä (nimeämiskäytäntö selvitetään pian): 0) dokumenttientiteetti ([document entity]) 1) sisäinen tekstientiteetti ([internal general entity]) 2) ulkoinen tekstientiteetti ([external parsed general entity]) 3) dataentiteetti ([unparsed entity]) 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 229 4) sisäinen parametrientiteetti ([internal parameter entity]) 5) ulkoinen parametrientiteetti ([external parameter entity]) Samaan tapaan kun validissa XML-dokumentissa määritellään käytetyt elementit elementtien tyyppijulistusten avulla, määritellään käytetyt entiteetit entiteettijulistusten avulla Poikkeuksena on dokumenttientiteetti, jota ei koskaan määritellä erikseen (dokumenttientiteetti on se XML-dokumentin fyysinen osa, joka sisältää XMLjulistuksen, dokumentin tyyppijulistuksen ja dokumentin juurielementin) Viisi muuta entiteettityyppiä määritellään kaikki ENTITY-julistuksen avulla; tulkinta on se, että XML:ssä on vain olemassa "yhdentyyppisiä" entiteettejä, joilla voi olla erilaisia ominaisuuksia: - sisäinen vs. ulkoinen ([internal vs. external]) - yleinen tai parametri ([general vs. parameter]) - jäsennetty tai jäsentämätön ([parsed vs. unparsed]) Edellisistä laillisia ominaisuusyhdistelmiä ovat siis vain aikaisemmin luetellut viisi: ENTITEETIN TYYPPI OMINAISUUS sisäinen ULKOINEN yleinen PARAMETRI jäsennetty JÄSENTÄMÄTÖN sisäinen tekstientiteetti I. G. P. ulkoinen tekstientiteetti. E G. P. dataentiteetti. E G.. U sisäinen parametrientiteetti I.. A P. ulkoinen parametrientiteetti. E. A P. Nimien muistamisen sijaan kannattaa muistaa entiteetit em. ominaisuustaulukon merkityksen mukaisesti Entiteetit eivät oikeastaan tuo mitään uutta XML-dokumentteihin, ne pikemminkin tehostavat ja monipuolistavat dokumenttien käsittelyä 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 230 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 231

Dokumenttientiteetti Yksinkertaisen, yhdestä tiedostosta koostuvan XML-dokumentin looginen rakenne rakentuu hierarkkisesti elementtien varaan - merkkidata sijaitsee attribuuttien arvoissa tai elementtien sisällä, - attribuutit liittyvät elementteihin näiden alkutagien kautta ja - elementit sijaitsevat toisten elementtien sisällä - paitsi juurielementti, joka ei sijaitse minkään elementin sisällä Missäs juurielementti sitten sijaitsee? Vastaus: juurielementti sijaitsee ko. XML-dokumentin implisiittisesti määritellyn dokumenttientiteetin ([document entity]) sisällä XML-prosessorin näkökulmasta dokumenttientiteetti vastaa tiedostoa (viittaa tiedostoon), joka sisältää XML-dokumentin ja joka ladataan käsiteltäväksi - sisältönä unikoodattu tekstitiedosto - lataaminen käsittelyä varten suoritetaan esim. URL-viittauksella Entiteettien peruskäsitteet Dokumenttientiteetti on lähinnä käsitteellinen entiteetti, josta ei erikseen tarvitse huolehtia: keskitytäänkin jatkossa yksinomaan viiteen muuhun entiteettityyppiin (ellei toisin erikseen mainita) Jokaisella entiteetillä on nimi ja sisältö Entiteeteillä on kaksi eri nimiavaruutta: yleisentiteeteillä (teksti- ja dataentiteetit) omansa ja parametrientiteeteillä omansa Yleisentiteettejä käytetään esiintymäosassa, parametrientiteettejä dokumentin tyyppimäärittelyssä Entiteetin sisältö on joko jäsennettyä merkkidataa (jäsennettävät entiteetit ([parsed entity])) tai jäsentämätöntä dataa ([unparsed entity]) - jäsennettävä merkkidata tulkitaan XML-prosessorin toimesta (tarvittaessa) - jäsentämätön data käsitellään vain nimettynä tiedostona, jonka sisältöön ei oteta kantaa 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 232 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 233 Literaaliarvo vs. korvausteksti Seuraavan ymmärtäminen oikeastaan jo edellyttää erityyppisten entiteettien tuntemista - palaa tähän kohtaan aineistoa myöhemmin uudestaan kun olet ensin perehtynyt yleis- ja parametrientiteetteihin Sisäisen tekstientiteetin sisällöstä erotetaan literaaliarvo ([literal entity value]) jonka perusteella muodostetaan (entiteetin nimen) korvausteksti ([replacement text]) (vrt. attribuuttien arvojen normalisoiminen) Korvausteksti muodostetaan literaaliarvosta jäsentämällä auki 1) merkkiviittaukset JA 2) parametrientiteettiviittaukset Muut entiteettiviittaukset - mukaanlukien oletusentiteetit - jäsennetään vasta korvaustekstiä käsiteltäessä (oletusentiteeteillä tarkoitetaan tässä entiteettejä joiden nimet ovat lt, gt, amp, apos ja quot ) Huomaa, että korvausteksti voi siis sisältää sekä merkkidataa että merkkausta, mukaan lukien entiteettiviittauksia (joskaan ei entiteettiin itseensä, koska rekursio on ymmärrettävästikin kielletty) 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 234 Esimerkkejä Esimerkki 1: kun entiteettiä <!ENTITY bigboys "AT&T;"> käytetään dokumentin esiintymässä tyyliin: <DOC>Esimerkki erittäin suuresta yrityksestä: &bigboys;</doc> on lopputuloksena elementin sisällä korvausteksti, jonka looginen muoto on: Esimerkki erittäin suuresta yrityksestä: AT&T; XML-prosessori käsittelee korvaustekstin sovellukselle muotoon (hakasulut lisätty taas vain esimerkin selventämiseksi): [Esimerkki erittäin suuresta yrityksestä: AT&T;] ts. elementin sisällä ei ole viittausta entiteettiin T, vaan vain merkkidataa "&T;" joka sisältää viittauksen entiteettiin amp Kerrataan vielä: kohdista 1-2 seuraa siis, että erityyppiset entiteetit tuodaan korvaustekstiin eri aikoina ja ne tulkitaan eri paikoissa 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 235

Esimerkki 2: jos määritelläänkin entiteetti bigboys muodossa <!ENTITY bigboys "AT&T;"> Entiteettien määrittely ja käytetään kuten edellä, niin lopputuloksena on korvausteksti: Esimerkki erittäin suuresta yrityksestä: AT&T; joka sisältää siis entiteettiviittauksen "&T;". Mikäli entiteettiä ei ole määritelty, on tuloksena virhe. Jos asian korjaamiseksi vielä määritellään <!ENTITY T "TILA INDUSTRIES"> niin lopputuloksena XML-sovellus näkee sisällön muodossa [Esimerkki erittäin suuresta yrityksestä: ATTILA INDUSTRIES] Entiteettiviittauksia voi myös ketjuttaa (yleistä edellistä esimerkkiä) mutta siinä on harvoin mitään järkeä Entiteettejä kannattaa käyttää aina harkiten koska virheiden tekeminen on helppoa (lisää vaarallisia esimerkkejä seuraa myöhemmin) 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 236 Entiteettijulistuksen määritelmä annetaan XML-kieliopissa muodossa [70] EntityDecl ::= GEDecl PEDecl [71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>' [72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>' [73] EntityDef ::= EntityValue (ExternalID NDataDecl?) [74] PEDef ::= EntityValue ExternalID Entiteettien määrittely tehdään dokumentin tyyppimäärittelyn yhteydessä kuten elementti-, notaatio ja attribuuttijulistuksetkin Vaikka XML-spesifikaatio määrittelee viisi oletusentiteettiä, pitää myös nämä esitellä validissa XML-dokumentissa (jos niitä käytetään) Oletusentiteettien määrittelyssäkin pitää huomioida se, miten XML prosessoi entiteettien literaaliarvot! Mainitaan lopuksi vielä että sisäisten entiteettien sisältö esitellään XMLdokumentissa, ulkoisten noudetaan tiedostosta (tarvittaessa) 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 237 Sisäiset tekstientiteetit Sisäiset tekstientiteetit ( [internal general parsed entity]) hoitavat XML:ssä entiteetin sisältönä annettavien korvaustekstien ([replacement text]) nimilappujen virkaa Ominaisuuksia: - käyttö vain dokumentin esiintymäosassa - sisältö esitellään entiteettijulistuksen yhteydessä - sisältöön kirjoitettavien parametrientiteetti- ja merkkiviittausten kanssa on syytä olla tarkkana! Tyypillinen käyttö on (oletettavasti vaihtuvien) vakiomerkkijonojen nimeäminen: <!DOCTYPE DOC [ <!ELEMENT DOC <!ENTITY legalnotice <DOC> &legalnotice; </DOC> (#PCDATA)> "Copyright (C) 2004 Acme Inc."> Sisältönä voi olla myös entiteettiviittauksia ja merkkausta: <!ENTITY Phrase... &Phrase; "<RECORD>Peto minussa!</record>"> Rajoituksia (pätevät jäsennettäville entiteeteille myös yleisesti): - ei rekursiota sisällössä - entiteetin sisällön tulee olla hyvin muodostettu (WF) - käytännössä tämä tarkoittaa sitä, että jäsennetyt entiteetit ovat kuin pieniä XML-dokumentteja (ilman yksikäsitteistä juurielementtiä) Tietyssä mielessä entiteettien käsittely vastaa juuri pienten XML-dokumenttien yksinkertaista jäsentämistä On kuitenkin syytä pitää mielessä, että - merkkiviittaukset ja parametrientiteetit jäsennetään auki jo korvaustekstissä - jossa mahdollisesti sijaitsevat yleisentiteetit jäsennetään auki dokumentin esiintymässä 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 238 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 239

Huomautuksia ja esimerkkejä Esimerkki 1: HUOMAA, ETTÄ SEURAAVA JULISTUS ON AINA VIRHE: <!ENTITY lt "<"> Oletusentiteetit lt ja amp on aina esiteltävä tuplaviittauksin tyyliin <!ENTITY lt "&#60;"> <!ENTITY amp "&#38;"> Muiden oletusentiteettien (gt, apos ja quot) esittelyssä tuplaviittausten käyttäminen on vapaaehtoista mutta suositeltavaa: <!ENTITY gt "&#62;"> <!-- tai ">" --> <!ENTITY apos "&#39;"> <!-- tai "&#39;" --> <!ENTITY quot "&#34;"> <!-- tai """ --> Huomaa erityisesti miten esim. entiteetin lt literaaliarvo "&#60;" tulkitaan korvaustekstiksi "<", mikä edelleen dokumentin esiintymässä tulkitaan merkkiviittaukseksi merkkiin [<] Entiteetin gt literaaliarvo "&#62;" tulkitaan korvaustekstiksi >", joten dokumentin esiintymäosaan tulee merkki [>], joka on sinänsä sallittu merkki myös merkkidatan keskellä (merkki korvataan yleensä entiteetillä tai merkkiviittauksella siksi, että dokumentin luettavuus ei kärsi) sillä nyt entiteetin käytön <DOC><</DOC> tuloksena saadaan XML-prosessorin luettavaksi tagin aloittava merkki "<"! Esimerkki 2: literaaliarvoiksi voidaan periaatteessa kirjoittaa myös tageja tyyliin <!ENTITY badexample "<TAG/>"> Entiteetin käytön seurauksena XML-prosessori näkee tekstin "<TAG/>" joka tarkoittaa tyhjän elementin tagia ja entiteetin korvaustekstinä on siis merkkausta. Tämänkaltaisia tagien määrittelyjä ei kuitenkaan pidä koskaan käyttää. Parempi olisi kirjoittaa elementin literaaliarvo reilusti muotoon <!ENTITY betterexample "<TAG/>"> Tosin tagien käyttöä literaaliarvoissa kannattaa pyrkiä aina välttämään, sillä se todennäköisesti tekee dokumenttien editoimisesta hankalaa. 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 240 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 241 Esimerkki 3: viittauksia sisäisiin tekstientiteetteihin on laillista kirjoittaa myös osaksi attribuuttiarvoja. Olkoon annettu entiteettijulistus <!ENTITY example "'Hei maailma!'"> Entiteetin käyttäminen attribuutin arvona onnistuu nyt muodossa <MYELEMENT ATTR="&example;"> edellyttäen tietenkin, että attribuutin arvoalue on sopiva. Heitto- ja lainausmerkit entiteetin literaaliarvossa tulkitaan merkkidataksi Entiteettien käyttämisessä kannattaa pyrkiä pikemminkin yksinkertaisuuteen kuin maksimaaliseen tehokkuuteen - runsas merkkausta sisältävien entiteettien käyttö tekee yksinkertaisestakin dokumentista vaikealukuisen! - kaikki prosessoriohjelmat eivät ymmärrä monimutkaisia entiteettejä Tarpeettomien merkki- ja parametrientiteettiviittausten käyttämistä literaaliarvoissa kannattaakin käytännössä välttää 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 242 Ulkoiset tekstientiteetit Ulkoiset tekstientiteetit ( [external general parsed entity]) mahdollistavat XMLdokumenttien paloittelun useiksi tiedostoiksi Ominaisuuksia: - käyttö vain dokumentin esiintymäosassa, joskaan ei attribuutin arvona - tiedoston sisältönä hyvin muodostettu XML-dokumentti (tai sen WF osa), jonka saa lisätä ([include]) entiteettiviittauksen kohtaan - XML-dokumentin ei-validoiva jäsentämisprosessi saattaa kuitenkin jättää ulkoisen tiedoston jäsentämättä ja lisäämättä entiteettiviittauksen kohtaan! Tyypillinen käyttötarkoitus on ulkoisen tekstitiedoston lisääminen XMLdokumentin osaksi: <!DOCTYPE DOC [ <!ELEMENT DOC <!ENTITY chap01 <DOC> &chap01; </DOC> (#PCDATA)> SYSTEM "Story_Chap01.xml"> 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 243

Ulkoiset tekstientiteettit voivat käyttää eri merkkikoodauksia: - XML-prosessorin tulee osata lukea (ainakin) UTF-8 ja UTF-16-koodattuja tekstitiedostoja Ulkoinen tekstientiteetti voi lisäksi alkaa ulkoisen tekstitentiteetin XMLjulistuksella ([text declaration]), joka vastaa käytännössä XML-julistusta ilman standalone-pseudoattribuuttia [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>' Itse asiassa ulkoinen tekstientiteetti vastaa käsitteellisesti pientä XMLdokumenttia (ilman yksikäsitteistä juurielementtiä), sillä senkin tulee olla oikein muodostettu ja olla johdettavissa XML-tuottosäännöstä content: [78] extparsedent ::= TextDecl? content XML-spesifikaation jättämä pelivara XML-prosessoreille (se että parsitaanko ulkoisia tiedostoja vai ei) hankaloittaa dokumenttien tiedostoiksi pilkkomista, mikäli käytettävä XML-prosessori ei ole tiedossa - prosessori Y kun saattaa jättää entiteetin (ja siten jonkin XML-dokumentin osan) kokonaan huomiotta! 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 244 Dataentiteetit Dataentiteetit ( [external general unparsed entity]) mahdollistavat XMLdokumenttiin sisällytettävät, muihin kuin XML-tyyppisiin tiedostoihin kohdistuvat viittaukset Dataentiteetit ovat aina ulkoisia - erona edellä esiteltyihin ulkoisiin tekstientiteetteihin on viittaus notaatiojulistukseen: [76] NDataDecl ::= S 'NDATA' S Name [ VC: Notation Declared ] Dataentiteettien ominaisuuksia: - käyttö vain dokumentin esiintymäosassa ENTITY- tai ENTITIEStyyppisten attribuuttien arvona - tiedosto sisältää raakadataa Viittaus notaation kertoo XML-sovellukselle kuinka tiedostoa tulisi käsitellä: XML-prosessori ei kuitenkaan viittauksen sisältöä ymmärrä Tämä ei kuitenkaan tarkoita, etteikö dataentiteetin sisältönä voisi olla myös XML-dokumentti (esim. jos ko. dokumentin oikein muodostuneisuus tiedetään jo ja dokumentti halutaan vain välittää parametrinä sovellukselle) 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 245 Dataentiteettejä käytetään attribuuttien välityksellä tyyliin: <!DOCTYPE DOC [ <!ELEMENT DOC (#PCDATA)> <!ATTLIST DOC LOGO ENTITY #REQUIRED> <!NOTATION JPG SYSTEM "jpgview.exe"> <!NOTATION GIF SYSTEM "gifview.exe"> <!ENTITY jpglogo SYSTEM "acme.jpg" NDATA JPG> <!ENTITY giflogo SYSTEM "acme.gif" NDATA GIF> <DOC LOGO="giflogo"></DOC> Dataentiteettien soveltaminen edellyttää yleensä jonkin tietyn XMLsovellusohjelman käyttämistä Tyypillisiä sovelluskohteita ovat esim: - kuva-, ääni-, yms. tiedostojen välittäminen sovelluksille attribuuttien arvoina - linkkiviittausten välittäminen - jne. Sisäiset ja ulkoiset parametrientiteetit Sisäiset ja ulkoiset parametrientiteetit ( [internal/external parameter (parsed) entity]) mahdollistavat merkkausjulistusten sieventämisen eräänlaisten makromuuttujien avulla Ominaisuuksia: - käyttö vain dokumentin tyyppimäärittelyn osana - parametrientiteetit jäsennetään auki tekstientiteettien korvaustekstiksi ennen tekstientiteettien sisällön sijoittamista dokumentin esiintymässä - parametrientiteeteillä ja yleisentiteeteillä (teksti- ja dataentiteetit) on erilliset nimiavaruudet 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 246 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 247

Parametrientiteetin julistus ja viittaus eroavat yleisentiteetistä prosenttimerkin "%" käytöllä sekä entiteettijulistuksen että -viittauksen yhteydessä (doc.dtd): <!ENTITY % contentmodel "(#PCDATA EM QUOTE)*"> <!ELEMENT DOC %contentmodel;> <!ELEMENT EM (#PCDATA)> <!ELEMENT QUOTE (#PCDATA)> Entiteetin contentmodel avulla määritellään esimerkissä yleiskäyttöinen elementtiluokka ([element class]) Tyyppimäärityksen mukainen (hyvin muodostettu ja validi) XML-dokumentti (doc.xml): <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE DOC SYSTEM "doc.dtd"> <DOC><EM>Moro nääs!</em></doc> Parametrientiteettien käytöllä pyritään lähinnä sieventämään ja parametrisoimaan DTD-määrittelyjä Tyypillinen käyttötarkoitus on esim. ehdollisten DTD-lohkojen pseudoattribuuttien IGNORE ja INCLUDE parametrisointi: Ulkoinen DTD-osajoukko (mybook.dtd): <![%detailed;[ <!ELEMENT book (comments*, title, body, supplements)> ] <![%sparse;[ <!ELEMENT book (title, body)> ]... Sisäinen DTD-osajoukko ja XML-dokumentin esiintymä: <!DOCTYPE DOC SYSTEM "mybook.dtd" [ <!ELEMENT DOC (book?)> <!ENTITY % detailed "IGNORE"> <!ENTITY % sparse "INCLUDE"> <DOC>... 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 248 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 249 Parametrientiteettien käyttäminen poikkeaa hieman tekstientiteettien käyttämisestä siinä, että parametrientiteetti voi viitata toiseen parametrientiteettiin vain jos tämä on määritetty aikaisemmin dokumentissa Parametrientiteettien harkitsematon tai liiallinen käyttö johtaa käytännössä poikkeuksetta spagettimaisiin DTD-määrittelyihin Parametrientiteetit ovat yleensä käteviä esim. kun halutaan määritellä useampaan elementtiin liitettävä attribuuttilistan julistus: <!ENTITY % coreattrs "id ID #IMPLIED title CDATA #IMPLIED"> <!ELEMENT para (#PCDATA)> <!ATTLIST para %coreattrs;> <!ELEMENT link (#PCDATA)> <!ATTLIST link target-addr NMTOKEN #IMPLIED %coreattrs;> Käytännössä XML-prosessoreiden mahdolliset puutteet XML-kielen erilaisten piirteiden tuessa liittyvät todennäköisesti juuri parametrientiteetteihin 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 250 Esimerkki parametri- ja yleisentiteettien yhteiskäytöstä On syytä muistaa miten parametrientiteetit käsitellään (sisäisten) tekstientieettien literaaliarvoissa ja miten esim. merkkiviittaukset jäsennetään Esimerkki: olkoon annettu entiteettijulistukset: <!ENTITY % greeting "Moro nääs!"> <!ENTITY example "Tamperelainen tervehdys: %greeting;"> Nyt entiteetin example käyttämisen <DOC>&example;</DOC> seurauksena XML-prosessori välittää sovellukselle elementin DOC sisällön merkkidatana muodossa [Tamperelainen tervehdys: Moro nääs!] Huomioita: - parametrientiteettiä saa käyttää vain tyyppijulistuksessa - mutta välilliset vaikutukset voivat näkyä myös dokumentin esiintymässä 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 251

Yleisiä huomioita XML-entiteettien käyttämisestä Vaikka entiteettien avulla onkin mahdollista kirjoittaa mutkikkaan näköisiä XML-dokumentteja, ei siihen tietenkään kannata itseisarvona pyrkiä Entiteettejä kannattaa käyttää lähinnä: - vakiomerkkijonojen nimeämiseen - dokumenttien pilkkomiseen (jos oma prosessori sen sallii) - monimutkaisten merkkausjulistusten luettavuuden parantamiseen Entiteeteistä on hyötyä, sillä esimerkiksi vakiomerkkijonojen laaja käyttö - vähentää kirjoitusvirheitä - vähentää käsityötä jos tekstiä on muutettava systemaattisesti Toisaalta tässäkin kannattaa miettiä (jos mahdollista) myös vaihtoehtoja: - kannattaako vakiomerkkijonot välittää sovellukselle FIXED-attribuutteina? - vaiko sittenkin lisätä vakioelementit vasta ulkoasun prosessointivaiheessa (vrt. esim. CSS2:n content-ominaisuus)? 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 252 Suurten XML-dokumenttien pilkkominen osiksi taas tehostaa dokumentin editoimista ja prosessointia osissa mutta ei sen validointia (koska tämä suoritetaan aina kokonaiselle dokumentille) On lisäksi syytä muistaa, että asiakas (XML-dokumentin kirjoittaja), joka annettua DTD-määritystä käyttää, prosessoi sen todennäköisesti omalla XMLprosessorillaan: - vaikka abstraktin lopputuloksen kannalta asiakkaat ovatkin kiinnostuneita vain dokumentin tyyppimäärityksestä, eivät sen tuottavasta merkkausjulistuksesta, niin - yhtä ja samaa DTD-tiedostoa käsitellään mahdollisesti useilla eri prosessoreilla (julistusten monipuolisuus on siis valittava vaatimattomimman prosessorin ominaisuuksien mukaan) Merkkauksen kirjoittaminen sisäisten yleisentiteettien sisällöksi hankaloittaa dokumentin editoimista (etenkin jos DTD on annettu & kiinnitetty) Parametrientiteettien liiallinen käyttäminen julistusten avainsanojen tuottamiseen tai merkkauksen koostamiseen johtaa helposti tarpeettoman sotkuiseen dokumenttimääritykseen (ylläpitäjän ja dokumentoijan painajainen) 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 253