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> Using HTML tag <FONT> is not recommended! </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> Using HTML tag <FONT> is not recommended! </eg> 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 235
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 yleisentiteetti ([internal general entity]) 2) ulkoinen parsittu yleisentiteetti ([external parsed general entity]) 3) parsimaton entiteetti ([unparsed entity]) 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 236
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 tyyppideklaraatioiden avulla, määritellään käytetyt entiteetit entiteettideklaraatioiden avulla Poikkeuksena on dokumenttientiteetti, jota ei koskaan määritellä suoraan (vaan se seuraa dokumentin tyyppideklaraatiosta implisiittisesti) Viisi muuta entiteettityyppiä määritellään kaikki ENTITY-deklaraation 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 parametrisoitu ([general vs. parameter]) - parsittu tai parsimaton ([parsed vs. unparsed]) Entiteettien nimet on valittu XML-spesifikaatioon "huonosti"; kielenkäyttö olisi selkeämpää, jos esim. termit "parsittu" ja "parsimaton" olisi korvattu termeillä "teksti" ja "data" ("parsittua entiteettiä" kun ei automaattisesti aina välttämättä parsita!) 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 237
Edellisistä laillisia ominaisuuskombinaatioita ovat siis vain aikaisemmin luetellut viisi: "TYYPPINIMI" OMINAISUUS internal EXTERNAL general PARAMETER parsed UNPARSED sisäinen yleisentiteetti I G P ulk. parsittu yleisentiteetti E G P parsimaton entiteetti 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 niinkään tuo "uutta" XML-dokumentteihin, vaan pikemminkin tehostavat ja monipuolistavat dokumenttien käsittelyä 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 238
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 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 239
Entiteettien peruskäsitteet Dokumentin juurientiteetti on lähinnä käsitteellinen entiteetti, josta ei "erikseen tarvitse huolehtia": keskitytäänkin jatkossa yksinomaan viiteen muuhun entiteetti"tyyppiin" (ellei toisin erikseen mainita) Jokaisella entiteetillä on nimi ja sisältö Entiteeteillä on kaksi eri nimiavaruutta: yleisillä entiteeteillä omansa ja parametrientiteeteillä omansa Yleisentiteettejä käytetään esiintymäosassa, parametrientiteettejä dokumentin tyyppimäärittelyssä Entiteetin sisältö on joko parsittavaa merkkidataa (parsittavat entiteetit ([parsed entity])) tai "raakadataa" ([unparsed entity]) - parsittava merkkidata tulkitaan XML-prosessorin toimesta (tarvittaessa) - raakadataa käsitellään vain nimettynä tiedostona, jonka sisältöön ei oteta kantaa 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 240
Literaaliarvo vs. korvausteksti Seuraavan ymmärtäminen oikeastaan jo edellyttää "erityyppisten" entiteettien tuntemista - palaa tähän kohtaan aineistoa myöhemmin uudestaan kun olet lukenut yleis- ja parametrientiteeteistä Sisäisen parsittavan yleisentiteetin sisällöstä erotetaan literaaliarvo ([literal entity value]) jonka perusteella muodostetaan (entiteetin nimen) korvausteksti ([replacement text]) (vrt. attribuuttien arvojen normalisoiminen) Korvausteksti parsitaan literaaliarvosta parsimalla auki 1) merkkiviittaukset JA 2) parametrientiteettiviittaukset Muut entiteettiviittaukset - mukaanlukien oletusentiteetit - parsitaan vasta korvaustekstiä käsiteltäessä (oletusentiteeteillä tarkoitetaan tässä entieettejä 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 2002) luentorunko ON 241
Esimerkkejä Esimerkki 1: kun entiteettiä <!ENTITY bigboys "AT&T;"> käytetään dokumentin esiintymässä tyyliin: <DOC>An example of a very large company is &bigboys;</doc> on lopputuloksena elementin sisällä korvausteksti, jonka looginen muoto on: An example of a very large company is AT&T; mikä XML-prosessori käsittelee sovellukselle muotoon (hakasulut lisätty taas vain esimerkin selventämiseksi): [An example of a very large company is AT&T;] ts. elementin sisällä ei ole viittausta entiteettiin T, vaan vain merkkidataa "&t;" joka sisältää viittauksen entiteettiin amp Kerrataan vielä: edellä kohdista 1-2 seuraa siis, että erityyppiset entiteetit tuodaan korvaustekstiin "eri aikoina" ja tulkitaan "eri paikoissa" 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 242
Esimerkki 2: jos määritelläänkin entiteetti bigboys muodossa <!ENTITY bigboys "AT&T;"> ja käytetään kuten edellä, niin lopputuloksena on korvausteksti: An example of a very large company is AT&T; jos 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 [An example of a very large company is 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 2002) luentorunko ON 243
Entiteettien määrittely Entiteettideklaraation 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 attribuuttideklaraatiotkin 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 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 2002) luentorunko ON 244
Sisäiset yleisentiteetit Sisäiset yleisentiteetit ( [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 entiteettideklaraation yhteydessä XML-dokumentissa - sisältöön kirjoitettavien parametrientiteetti- ja merkkiviittausten kanssa saa olla tarkkana! Tyypillinen käyttö on (oletettavasti vaihtuvien) vakiomerkkijonojen nimeäminen: <?xml version="1.0"?> <!DOCTYPE DOC [ <!ELEMENT DOC (#PCDATA)> <!ENTITY legalnotice "Copyright (C) 2000 Acme Inc."> ]> <DOC> &legalnotice; </DOC> 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 245
Sisältönä voi olla myös entiteettiviittauksia ja merkkausta: <!ENTITY Phrase... &Phrase; "<RECORD>Peto minussa!</record>"> Rajoituksia (pätevät parsittaville entiteeteille myös yleisesti): - ei rekursiota sisällössä - entiteetin sisällön tulee olla oikein muodostettu (WF) - käytännössä tämä tarkoittaa sitä, että parsitut entiteetit ovat kuin "pieniä XML-dokumentteja" (ilman eksplisiittistä juurielementtiä) Tietyssä mielessä entiteettien käsittely vastaa juuri "pienten XML-dokumenttien yksinkertaista parsimista" On kuitenkin syytä pitää mielessä, että - merkkiviittaukset ja parametrientiteetit parsitaan auki jo korvaustekstissä - jossa mahdollisesti sijaitsevat yleisentiteetit parsitaan auki dokumentin esiintymässä 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 246
Huomautuksia ja esimerkkejä Viisi oletusentiteettiä pitää esitellä tuplaviittauksillä tyyliin <!ENTITY lt <!ENTITY gt <!ENTITY amp <!ENTITY apos <!ENTITY quot "<"> ">"> "&"> "'"> """> Huomaa erityisesti miten esim. entiteetin lt literaaliarvo "<" tulkitaan korvaustekstiksi "<", mikä edelleen dokumentin esiintymässä tulkitaan merkkiviittaukseksi merkkiin [<] Esimerkki 1: HUOMAA, ETTÄ SEURAAVA DEKLARAATIO ON AINA VIRHE: <!ENTITY lt "<"> sillä nyt entiteetin käytön <DOC><</DOC> tuloksena saadaan XML-prosessorin luettavaksi merkki "<" joka siis tarkoittaa tagin aloittavaa merkkiä! 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 247
Esimerkki 2: literaaliarvoiksi voidaan periaatteessa kirjoittaa myös tageja tyyliin <!ENTITY badexample "<TAG/>"> minkä käytön seurauksena XML-prosessori näkee tekstin "<TAG/>" joka tarkoittaa tyhjän elementin tagia ja entiteetin korvaustekstinä on siis merkkausta Asia on syytä ymmärtää koska merkkiviittauksen < huolimaton käyttö literaaliarvoissa aiheuttaa muuten omituiselta näyttäviä virheilmoituksia, mutta tämänkaltaisia tagien määrittelyjä ei 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. Esimerkki 3: viittauksia sisäisiin yleisentiteetteihin on laillista kirjoittaa myös osaksi attribuuttiarvoja. Olkoon annettu entiteettideklaraatio <!ENTITY example "'Hello world!'"> 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 248
Entiteetin käyttäminen attribuutin arvona onnistuu nyt muodossa <MYELEMENT ATTR="&example;"> XML-entiteetit edellyttäen tietenkin, että ko. elementille saa attribuutin antaa ja että attribuutin arvoalue on sopiva Huomioita: - attribuutin arvon tulee olla laillisen muotoinen literaali - 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ä kannattaakin käytännössä literaaliarvoissa välttää 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 249
Ulkoiset parsitut yleisentiteetit Ulkoiset parsitut yleisentiteetit ( [external general parsed entity]) mahdollistavat XML-dokumenttien paloittelun useiksi tiedostoiksi Ominaisuuksia: - käyttö vain dokumentin esiintymäosassa, joskaan ei attribuutin arvona - tiedoston sisältönä oikein muodostettu XML-dokumentti (tai sen WF osa), jonka saa lisätä ([include]) entiteettiviittauksen kohtaan - XML-dokumentin ei-validoiva parsimisprosessi saattaa kuitenkin jättää ulkoisen tiedoston parsimatta ja lisäämättä entiteettiviittauksen kohtaan! Tyypillinen käyttötarkoitus on ulkoisen tekstitiedoston lisääminen XMLdokumentin osaksi: <?xml version="1.0"?> <!DOCTYPE DOC [ <!ELEMENT DOC (#PCDATA)> <!ENTITY chap01 SYSTEM "Story_Chap01.xml"> ]> <DOC> &chap01; </DOC> 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 250
Ulkoiset parsitut entiteettit voivat käyttää eri merkkikoodauksia: XML-entiteetit - XML-prosessorin tulee osata lukea (ainakin) UTF-8 ja UTF-16-koodattuja tekstitiedostoja - joista jälkimmäisen tulee sisältää tiedostonsa prefiksinä koodaustunniste ([encoding signature]) #xfeff Ulkoinen parsittu entiteetti voi lisäksi alkaa eksplisiittisellä tekstideklaraatiolla ([text declaration]), joka vastaa käytännössä XML-deklaraatiota ilman standalone-pseudoattribuuttia [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>' Itse asiassa ulkoinen parsittu entiteetti vastaa käsitteellisesti hyvin "pientä XML-dokumenttia" (ilman juurielementin tageja), sillä senkin tulee olla oikein muodostettu ja olla johdettavissa XML-produktiosta 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 2002) luentorunko ON 251
Parsimattomat entiteetit Parsimattomat entiteetit ( [external general unparsed entity]) mahdollistavat XML-dokumenttiin sisällytettävät, muihin kuin XML-tyyppisiin tiedostoihin kohdistuvat viittaukset Parsimattomat entiteetit ovat aina ulkoisia - erona edellä esiteltyihin ulkoisiin parsittuihin entiteetteihin on optionaalinen viittaus notaatiodeklaraatioon: [76] NDataDecl ::= S 'NDATA' S Name [ VC: Notation Declared ] Parsimattomien entiteettien ominaisuuksia: - käyttö vain dokumentin esiintymäosassa ENTITY- tai ENTITIEStyyppisten attribuuttien arvona - tiedosto sisältää "jotain dataa" 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ö parsimattoman entiteetin 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 2002) luentorunko ON 252
Parsimattomia entiteettejä käytetään attribuuttien välityksellä tyyliin: <?xml version="1.0"?> <!DOCTYPE DOC [ <!ELEMENT DOC (#PCDATA)> <!ATTLIST DOC BG ENTITY #REQUIRED> <!NOTATION JPG SYSTEM "ps2jpg.exe"> <!ENTITY jpglogo SYSTEM "Acme.jpg" NDATA JPG> <!ENTITY giflogo SYSTEM "Acme.gif"> ]> <DOC BG="giflogo"></DOC> XML-entiteetit Parsimattomien entiteettien soveltaminen edellyttää yleensä jonkin tietyn XMLsovellusohjelman käyttämistä Tyypillisiä sovelluskohteita ovat esim: - kuva-, ääni-, yms. tiedostojen välittäminen sovelluksille attribuutteina - linkkiviittausten välittäminen - jne. 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 253
Sisäiset ja ulkoiset parametrientiteetit Sisäiset ja ulkoiset parametrientiteetit ( [internal/external parameter (parsed) entity]) mahdollistavat merkkausdeklaraation sieventämisen "makromuuttujien" avulla Ominaisuuksia: - käyttö vain dokumentin tyyppimäärittelyn osana - parametrientiteetit parsitaan auki yleisentiteettien korvaustekstiksi ennen yleisentiteettien sisällön sijoittamista dokumentin esiintymässä - parametrientiteeteillä ja yleisentiteeteillä on erilliset nimiavaruudet Parametrientiteetin deklaraatio ja viitaus eroavat yleisentiteetin deklaraatiosta prosenttimerkin "%" käytöllä sekä deklaraation että entiteettiviittauksen yhteydessä: <?xml version="1.0"?> <!DOCTYPE DOC [ %EXAMPLE; <!ENTITY % EXAMPLE "<!ELEMENT DOC (#PCDATA)>"> ]> <DOC></DOC> 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 254
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ä: <?xml version="1.0"?> <!DOCTYPE DOC SYSTEM "mybook.dtd" [ <!ELEMENT DOC (book?)> <!ENTITY % detailed "IGNORE"> <!ENTITY % sparse "INCLUDE"> ]> <DOC>... XML-entiteetit 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 255
Parametrientiteettien käyttäminen poikkeaa hieman yleisentiteettien käyttämisestä siinä, että parametrientiteetti voi viitata toiseen parametrientiteettiin vain jos tämä on määritetty dokumentissa "aikaisemmin" Parametrientiteettien harkitsematon tai liiallinen käyttö johtaa käytännössä poikkeuksetta spagettimaisiin DTD-määrittelyihin Parametrientiteetit ovat yleensä käteviä esim. mutkikkaiden elementtien tietomallien määrittelyjen sieventämisessä (esimerkissä parametrientiteetti submodel nimeää ns. elementtiluokan [element class]): <?xml version="1.0"?> <!DOCTYPE DOC [ <!ELEMENT DOC (ABSTRACT,BOOK,COMMENT*)> <!ENTITY % submodel "CITE DEF EX FRM"> <!ELEMENT BOOK (PROLOG,P+)> <!ELEMENT PROLOG (#PCDATA %submodel;)*> <!ELEMENT P (#PCDATA %submodel;)*> <!ELEMENT COMMENT (TITLE,%submodel;)>... ]>... Käytännössä jos XML-prosessori Y ei tue "jotain" XML-piirrettä, on "se puuttuva piirre" todennäköisesti juuri parametrientiteetit 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 256
Esimerkki parametri- ja yleisentiteettien yhteiskäytöstä On syytä muistaa miten parametrientiteetit käsitellään (sisäisten parsittavien) yleisentieettien literaaliarvoissa ja miten esim. merkkiviittaukset parsitaan Esimerkki: olkoon annettu deklaraatiot <!ENTITY % title "Fancy Title"> <!ENTITY example "use the given %title; string"> Nyt entiteetin example käyttämisen <DOC>&example;</DOC> seurauksena XML-prosessori välittää sovellukselle elementin DOC sisällön merkkidatana muodossa [use the give Fancy Title string] Huomioita: - parametrientiteettiä saa käyttää vain tyyppideklaraatiossa - mutta välilliset vaikutukset voivat näkyä myös dokumentin esiintymässä 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 257
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) - pitkien elementtideklaraatioiden luettavuuden parantamiseen Harkintaa tarvitaan tässäkin, sillä esimerkiksi vakiomerkkijonojen laaja käyttö - vähentää kirjoitusvirheitä - säästää käsityöltä jos tekstiä tarvitsee systemaattisesti muuttaa 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 2002) luentorunko ON 258
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ätkä sen tuottavasta merkkausdeklaraatiosta, niin - yhtä ja samaa DTD-tiedostoa käsitellään mahdollisesti useilla eri prosessoreilla (deklaraatioiden monipuolisuus on siis valittava vaatimattomimman prosessorin ominaisuuksien mukaan) Merkkauksen jatkuva kirjoittaminen sisäisten yleisentiteettien sisällöksi hankaloittaa dokumentin editoimista (etenkin jos DTD on annettu & kiinnitetty) Toisaalta taas esim. parametrientiteettien käyttäminen deklaraatioiden avainsanojen tuottamiseen tai merkkauksen "koostamiseen" johtaa tarpeettoman sotkuiseen dokumenttimääritykseen (ylläpitäjän ja dokumentoijan painajainen) 73275 RAKENTEISET DOKUMENTIT (kevät 2002) luentorunko ON 259