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

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

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

XML-merkkaus. Merkkidata, prosessointikomennot, kommentit

XML johdatus: DTD. Jaana Holvikivi

Luonnollisten lukujen laskutoimitusten määrittely Peanon aksioomien pohjalta

10 XML ja dokumenttien tyyppimäärittely

7 DTD ja entiteetit: dokumentin fyysinen rakenne

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

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

9 XML perusteet

6 DTD ja dokumentin tyyppimääritys

9 XML perusteet

9 XML perusteet

7 DTD ja entiteetit: dokumentin fyysinen rakenne

10 XML ja dokumenttien tyyppimäärittely

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

6 DTD ja dokumentin tyyppimääritys

Elementtien tyyppideklaraatiot

String-vertailusta ja Scannerin käytöstä (1/2) String-vertailusta ja Scannerin käytöstä (2/2) Luentoesimerkki 4.1

Johdatus rakenteisiin dokumentteihin

6 DTD ja dokumentin tyyppimääritys

XML-perusteet. 3 XML-merkintäkieli

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

5 Merkkaus: XML protokollana

Uudistuva RISKINARVIO-ohje

5 Merkkaus: XML protokollana

Matematiikan tukikurssi

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

Lue ohjeet huolellisesti ennen laitteen käyttöä.

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

Lisää segmenttipuusta

Käyttöjärjestelmät: Virtuaalimuisti

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

Hae Opiskelija käyttöohje

5 Olio-ohjelmointi 133

M. Merikanto 2012 XML. Merkkauskieli, osa 2

Aluksi Kahden muuttujan lineaarinen epäyhtälö

Oletetaan, että funktio f on määritelty jollakin välillä ]x 0 δ, x 0 + δ[. Sen derivaatta pisteessä x 0 on

Tietokannan rakenteen suunnittelu

Algoritmit ja tietorakenteet Copyright Hannu Laine. 1, kun n= 0. n*(n-1)!, kun n>0;

Induktio kaavan pituuden suhteen

Epäyhtälön molemmille puolille voidaan lisätä sama luku: kaikilla reaaliluvuilla a, b ja c on voimassa a < b a + c < b + c ja a b a + c b + c.

Web-teknologiat. XML-datan kysely Topi Sarkkinen

Windows Live SkyDrive - esittely

- Valitaan kohta Asetukset / NAT / Ohjelmallinen palvelin - Seuraavassa esimerkki asetuksista: valitaan käytössä oleva ohjelmistorajapinta

Kalenterimerkintöjen siirtäminen Notesista

X-Robot-sovellus ja ITK222 XML-laboratoriotyö -kurssi

Rekisterinpidon ja käytönvalvonnan haasteet

Väli- ja loppuraportointi

2.2 Täydellinen yhtälö. Ratkaisukaava

Merkintöjen tekeminen pohjakuvaan Libre Officella v.1.2

Matematiikan tukikurssi 3.4.

P e d a c o d e ohjelmointikoulutus verkossa

VARMENNUSTODISTUKSEN ARVIOINTIPERUSTEET NRO Palosuojatuotteet

HE 226/2008 vp. Esityksessä ehdotetaan muutettavaksi työttömyysturvalakia

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

Esimerkkejä derivoinnin ketjusäännöstä

Tutkija Mikko Salmenperä. huone: sd109. TTY / Systeemitekniikan laitos. puh: mikko.salmenpera@tut.fi

Luento 12: XML ja metatieto

Johdatus L A TEXiin. 6. Omat komennot ja lauseympäristöt Markus Harju. Matemaattiset tieteet

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

XML / DTD / FOP -opas Internal

SKYPE-RYHMÄN LUOMINEN

Tarjoajalla on oltava hankinnan kohteen laatu ja laajuus huomioon ottaen kokemusta seuraavilla alueilla:

Sähköpostiohjeet. Tehokas ja huoleton sähköposti

Luento 6. June 1, Luento 6

WORKPLACE Käyttäjän OPAs

Ulkoiset mediakortit Käyttöopas

Racket ohjelmointia. Tiina Partanen 2014

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

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

Yhteinen ehdotus NEUVOSTON ASETUS. rajoittavista toimenpiteistä Keski-Afrikan tasavallan tilanteen huomioon ottamiseksi

Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Ta

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

Työtapaturman ilmoittaminen 2016-> Uusi sähköinen lomake, täyttäminen esimies ja palkkahallinto

Yrityssuomi.fi:n toiminnallisuus ja ontologian hyödyntäminen Yritys-Suomen verkkopalveluissa. Eeva Koivisto, Yritys-Suomen verkkotoimitus 1.11.

Induktiosilmukka LPS-4 Käyttöopas painos

Massaeditorikoulutus KANSALLISKIRJASTO - Kirjastoverkkopalvelut

Nuorten tieto- ja neuvontatyön osaamiskartta Pirjo Kovalainen

Huomaathan, että ohjeessa olevat näytöistä otetut kuvat voivat poiketa sinun koulutuksesi vastaavien sivujen kuvista.

AC-HOST-vinkkejä eape3 Milla Ahola 2014

Raportointi hankkeen tulosten kuvaajana ja toteutuksen tukena

Hyvä vesihuoltohanke, suunnittelijan näkökulma

Käyttöönotto-ohje. DNA Sähköposti

Excel pivot. Mihin ja milloin pivot:ia voi käyttää

Osion kaksi kertaus. Jukka Juslin. Jukka Juslin

Matkahuolto lisäosa WooCommerce alustalle (c) Webbisivut.org

XML-dokumenttien kommentit ovat samannäköisiä kuin HTMLdokumenteissakin: [15] Comment ::= '<!--' ((Char - '-') ('-' (Char - '-')))* '-- >'

Mobiiliturva Palvelun käyttöönotto

ESR-Henkilö. Tunnistautuminen ESR-Henkilö -järjestelmässä

2.7 Neliöjuuriyhtälö ja -epäyhtälö

Webforum. Version 16.2 uudet ominaisuudet. Päivitetty:

Ohje PhotoPortaalin käytöstä

Lapin innovaatioassistentti -valmennuskokonaisuus 2016

Lupapiste-palvelua koskeva Yritystilisopimus

sivu 1 (5) Sähköinen lääkemääräys vaatimusmäärittely versio 2.8

L2TP LAN to LAN - yhteys kahden laitteen välille

Ala- ja loppuviite. Viitteen lisääminen

YHTEISKUNTATIETEIDEN JA FILOSOFIAN HAKUKOHTEEN VALINTAKOE TO klo (filosofia, sosiologia, valtio-oppi, yhteiskuntapolitiikka)

Veneilijän merenkulkuoppi I Saaristonavigointi 12 painos Korjauksia

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]) 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 230

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 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 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 232

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 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;"> ja käytetään kuten edellä, niin lopputuloksena on korvausteksti: An example of a very large company is 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

Entiteettien määrittely 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: <?xml version="1.0"?> <!DOCTYPE DOC [ <!ELEMENT DOC <!ENTITY legalnotice ]> <DOC> &legalnotice; </DOC> (#PCDATA)> "Copyright (C) 2004 Acme Inc."> 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 238

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 239

Huomautuksia ja esimerkkejä Viisi oletusentiteettiä pitää esitellä tuplaviittauksillä tyyliin <!ENTITY lt "&#60;"> <!ENTITY gt ">"> <!ENTITY amp "&#38;"> <!ENTITY apos "&#39;"> <!ENTITY quot """> Huomaa erityisesti miten esim. entiteetin lt literaaliarvo "&#60;" tulkitaan korvaustekstiksi "<", mikä edelleen dokumentin esiintymässä tulkitaan merkkiviittaukseksi merkkiin [<] Esimerkki 1: HUOMAA, ETTÄ SEURAAVA JULISTUS 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 2004) luentorunko ON & JH 240

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. 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. Esimerkki 3: viittauksia sisäisiin yleisentiteetteihin on laillista kirjoittaa myös osaksi attribuuttiarvoja. Olkoon annettu entiteettideklaraatio <!ENTITY example "'Hei maailma!'"> 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 241

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ä 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ä oikein 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: <?xml version="1.0"?> <!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: <?xml version="1.0"?> <!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. 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 246

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 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ä 73275 RAKENTEISET DOKUMENTIT (kevät 2004) luentorunko ON & JH 248

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>... 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