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

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

XML-merkkaus. Merkkidata, prosessointikomennot, kommentit

Elementtien tyyppideklaraatiot

9 XML perusteet

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

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

XML johdatus: DTD. Jaana Holvikivi

6 DTD ja dokumentin tyyppimääritys

6 DTD ja dokumentin tyyppimääritys

7 DTD ja entiteetit: dokumentin fyysinen rakenne

Johdatus rakenteisiin dokumentteihin

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

7 DTD ja entiteetit: dokumentin fyysinen rakenne

6 DTD ja dokumentin tyyppimääritys

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

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

M. Merikanto 2012 XML. Merkkauskieli, osa 2

5 Merkkaus: XML protokollana

10 XML ja dokumenttien tyyppimäärittely

12 Dokumenttiluokan toteuttamisesta

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

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

P e d a c o d e ohjelmointikoulutus verkossa

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

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.

XML-saatavuuskysely. XML-tiedoston kuvaus. versio

Ctl160 Tekstikorpusten tietojenkäsittely p.1/15

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

3 Verkkosaavutettavuuden tekniset perusteet

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

XML rakenteen suunnittelu. Jaana Holvikivi

Poikkeusinfo XML-rajapinnan kuvaus, rajapinnan versio 2 Seasam Group

Luento 2: XML:n syntaksi

Yhteentoimivuusalusta: Miten saadaan ihmiset ja koneet ymmärtämään toisiaan paremmin?

Apuja ohjelmointiin» Yleisiä virheitä

Extensible Stylesheet Language (XSL)

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

Tietojen toimittaminen Skeemat Vastaanottokuittaus Kansallisen tulorekisterin perustamishanke

Taulukot. Jukka Harju, Jukka Juslin

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

Varmennepalvelu Rajapintakuvaus Kansallisen tulorekisterin perustamishanke

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

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

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

3 XHTML-dokumenttien anatomia

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

Ohjelmoinnin perusteet, syksy 2006

Digitaalisen median tekniikat xhtml - jatkuu

Digitaalisen median tekniikat xhtml - jatkuu Harri Laine 1

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

ASCII-taidetta. Intro: Python

Sivuston tiedotgoogle.com

ITKP102 Ohjelmointi 1 (6 op)

Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke

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

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Tietojen jakelu Skeemat Lokitiedot Kansallisen tulorekisterin perustamishanke

Luento 12: XML ja metatieto

Korpusten käsittely clt131, P Luento 6

Tuomas Komulainen LUOVA LOMAKE ANALYSOINTITYÖKALU

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

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti

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

kansainvälistäminen ja paikallistaminen Zopessa Plonen käännöstyö Asko Soukka, Jyväskylän yliopisto

Avoin metsätieto - Rajapintapalvelut

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

Ohjelmoinnin perusteet Y Python

Sivuston tiedotpechaticentr.ru

Osoitin ja viittaus C++:ssa

Hohde Consulting 2004

CSS - tyylit Seppo Räsänen

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

Ohjelmoinnin perusteet Y Python

Kansallinen koodistojen siirtoformaatti

Tietojen toimittaminen Skeemat Viestit Kansallisen tulorekisterin perustamishanke

Tietojen toimittaminen Skeemat Vastaanottokuittaus Kansallisen tulorekisterin perustamishanke

è è è RDF-perusteet 7 RDF-perusteet

XML Technologies and Applications - harjoitustyö -

Digitaalisen median tekniikat xhtml - jatkuu

Sivuston tiedotskillers.tech

Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke

Ontologiat merkitysten mallintamisessa: OWL. Eeva Ahonen

Sisältö. 2. Taulukot. Yleistä. Yleistä

Rakenteisen oppimateriaalin tuottaminen verkossa esimerkki Rhaptos. Antti Auer Koordinaattori, HT Jyväskylän yliopisto Virtuaaliyliopistohanke

Varmennepalvelu Rajapintakuvaus Tulorekisteriyksikkö

4. Lausekielinen ohjelmointi 4.1

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Reaalilukuvälit, leikkaus ja unioni (1/2)

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

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

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> 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 "&ampt;" 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 "&#60;"> ">"> "&#38;"> "&#39;"> """> Huomaa erityisesti miten esim. entiteetin lt literaaliarvo "&#60;" 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