7 DTD ja entiteetit: dokumentin fyysinen rakenne

Samankaltaiset tiedostot
7 DTD ja entiteetit: dokumentin fyysinen rakenne

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

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

XML-pohjaiset rakennemäärittelyt

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

3 Verkkosaavutettavuuden tekniset perusteet

XML standardeja. nimiavaruudet, namespaces XHTML XML Schema linkitys Jaana Holvikivi 1

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

XML-merkkaus. Merkkidata, prosessointikomennot, kommentit

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

XML johdatus: DTD. Jaana Holvikivi

Paikkatiedot ja Web-standardit

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

2 XML Schema: johdanto ja rakenteiden perusteet

XML johdanto, uusimmat standardit ja kehitys

6 DTD ja dokumentin tyyppimääritys

2 XML Schema: johdanto ja rakenteiden perusteet

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

Semanttinen Web. Ossi Nykänen Tampereen teknillinen yliopisto (TTY), DMI / Hypermedialaboratorio W3C Suomen toimisto

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

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

XML, XHTML ja CSS. T Hypermediadokumentin laatiminen. Mikko Pohja

6 DTD ja dokumentin tyyppimääritys

3 XHTML-dokumenttien anatomia

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

6 DTD ja dokumentin tyyppimääritys

2. PEHMEÄ XHTML XRAJAHTML

Digitaalisen median tekniikat. JSP ja XML

NELLI-Tunnis. Käyttäjän tunnistus NELLI-tiedonhakuportaalissa yleisissä kirjastoissa. Versio Ere Maijala Kansalliskirjasto

P e d a c o d e ohjelmointikoulutus verkossa

W3C-teknologiat ja yhteensopivuus

XML-metakieli, k

Johdatus rakenteisiin dokumentteihin

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

XML / DTD / FOP -opas Internal

Semanttinen Web. Ossi Nykänen. Tampereen teknillinen yliopisto (TTY), Digitaalisen median instituutti (DMI), Hypermedialaboratorio W3C Suomen toimisto

Extensible Stylesheet Language (XSL)

Elementtien tyyppideklaraatiot

Luento 2: XML:n syntaksi

2.17 Esimerkki järkevän relaatiotietokannan rakenteesta

3 Verkkosaavutettavuuden tekniset perusteet

Luento 12: XML ja metatieto

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

5 Merkkaus: XML protokollana

5 Merkkaus: XML protokollana

W3C ja alueellinen standardointi

XML Technologies and Applications - harjoitustyö -

XML-saatavuuskysely. XML-tiedoston kuvaus. versio

XSL-muunnokset. 9 XSL-muunnokset

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

è è è RDF-perusteet 7 RDF-perusteet

Helsingin yliopisto / TKTL XML-Metakieli XML Schema

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

9 XML perusteet

M. Merikanto 2012 XML. Merkkauskieli, osa 2

XML rakenteen suunnittelu. Jaana Holvikivi

CSE-A1200 Tietokannat

SÄHKE-hanke. Tekninen mallintaminen SÄHKE-metatietojen XML Schema

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

W3C ja Web-teknologiat

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

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

XML - perusteet. Ctl230: Luentokalvot Miro Lehtonen

Ctl160 Tekstikorpusten tietojenkäsittely p.1/15

Rakenteisten dokumenttien jatkokurssi, syksy 2006

XSL-muunnokset. 9 XSL-muunnokset

XSLT - ohjelmoinnin perusteet. Jaana Holvikivi Metropolia

Luento 7: XML-ohjelmointirajapinnat

XML and XML Schema 29

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

Opiskeluoikeudet. Kaaviokuva

10 XML ja dokumenttien tyyppimäärittely

è è è XSL-muunnokset 9 XSL-muunnokset

Tuomas Komulainen LUOVA LOMAKE ANALYSOINTITYÖKALU

12 Dokumenttiluokan toteuttamisesta

Opintosuoritukset. Kaaviokuva

Johdatus XML teknologioihin

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

Poikkeusinfo XML-rajapinnan kuvaus, rajapinnan versio 2 Seasam Group

2 Rakenteisten dokumenttien perusteet

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

Helsingin yliopisto/tktl XML-metakieli XPath

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

Ylläpitodokumentti. Aija. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Hohde Consulting 2004

Digitaalisen median tekniikat xhtml - jatkuu Harri Laine 1

4 Johdanto XML-maailmaan

Digitaalisen median tekniikat xhtml - jatkuu

Yhteentoimivuutta edistävien työkalujen kehittäminen

XML-tietojenkäsittely

Yleistä. Dokumentin mallintaminen. Dokumentin analysointi. Desktop publishing vs. XML. Tietokantakaavion analysointi. Dokumentin osien analysointi

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

Ajatus kaiken taustalla

Eero Hyvönen. Semanttinen web. Linkitetyn avoimen datan käsikirja

GML-mallinnus. 1 Johdanto 1/27. Paikkatietojen mallintaminen tiedonsiirtoa varten. Liite III

Varmennepalvelu Rajapintakuvaus Kansallisen tulorekisterin perustamishanke

9 XML perusteet

9 XML perusteet

Julkishallinnon XML-skeemat v0.5 JHS-suositus

Tietojen toimittaminen Skeemat Vastaanottokuittaus Kansallisen tulorekisterin perustamishanke

Transkriptio:

è è è DTD ja entiteetit: dokumentin fyysinen rakenne 7 DTD ja entiteetit: dokumentin fyysinen rakenne Tietojenkäsittelyssä kaikki tieto talletetaan jonnekin. XML-dokumenttien fyysinen rakenne määräytyy ns. entiteettien avulla. Entiteetti muodostuu aina automaattisesti kun XML-dokumentti määritellään ja talletetaan muistiin (dokumenttientiteetti). Erikseen määriteltäviä entiteettejä voidaan käyttää esim. tiedon järkevään paloitteluun. Entiteettien määrittely on osa XML:n DTD-kieltä. Validi XML-dokumentti määrittelee kaikki entiteettinsä. 140

è è è DTD ja entiteetit: dokumentin fyysinen rakenne 7.1 Entiteetit tiedon fyysisinä lokeroina Aina kun tietoa käsitellään, se pitää tallettaa jonnekin käsittelyn ajaksi XML 1.0 määrittelee tiedon fyysisen rakenteen entiteetti-käsitteen avulla - entiteetti on nimetty tietosäiliö; tiedosto-käsitteen yleistys Entiteetteihin liittyviä ominaisuuksia - sisäinen vs. ulkoinen (missä sisältö?) - teksti vs. data (jäsennetäänkö?) - (yleinen) vs. parametri (käyttö DTD- vai esiintymäosassa?) Dokumenttientiteetti 141

è è è DTD ja entiteetit: dokumentin fyysinen rakenne 7.2 Elementtien määrittelyn perusteet ([Yleisen] sisäisen teksti)entiteetin määritys näyttää esim. seuraavalta <!ENTITY copyright "Oy Firma Ab"> 1 2 Taas tiedon lokeroinnin idea: nimi (1) vs. sisältö (tai arvo) (2) Tekstientiteetin sisältö voi sisältää myös merkkausta; se jäsennetään auki entiteetin lukemisen yhteydessä (literaaliarvo vs. korvausteksti) - merkkiviittaukset ja parametrientiteetit avataan, muu jää esiintymäosaan Esimerkki <!ENTITY bigboys "AT&T;">... <DOC>Esimerkki suuresta yrityksestä: &bigboys;</doc> [Esimerkki erittäin suuresta yrityksestä: AT&T;] 142

è è è DTD ja entiteetit: dokumentin fyysinen rakenne 7.3 Oletusentiteettien määrittely, merkkaus arvona DTD määrittelee kaikki entiteettinsä, myös ns. oletusentiteetit Huomaa tuplaviittaukset määrittelyssä: <!ENTITY lt "&#60;"> <!ENTITY amp "&#38;"> <!ENTITY gt "&#62;"> <!-- tai ">" --> <!ENTITY apos "&#39;"> <!-- tai "&#39;" --> <!ENTITY quot "&#34;"> <!-- tai """ --> Esim. seuraava määrittely on aina virhe (miksi?) <!ENTITY lt "<"> Tekstientiteetit tarjoavat teknisen keinon kirjoittaa varsin mutkikkaita viittausrakenteita; käytännössä kannattaa tietenkin pyrkiä yksinkertaisuuteen 143

è è è DTD ja entiteetit: dokumentin fyysinen rakenne 7.4 (Yleiset) ulkoiset tekstientiteetit Ulkoiset tekstientiteetit mahdollistavat XML-dokumenttien paloittelun useiksi tiedostoiksi - käyttö vain dokumentin esiintymäosassa - sisältönä hyvin muodostettu XML-dokumentti (tai sen WF osa), jonka saa lisätä entiteettiviittauksen kohtaan - ei-validoiva jäsentämisprosessi saattaa kuitenkin jättää ulkoisen tiedoston jäsentämättä ja olla lisäämättä entiteettiviittauksen kohtaan (!) Esimerkki (huomaa taas SYSTEM-avainsana ja URI-viittaus) <?xml version="1.0"?> <!DOCTYPE doc [ <!ELEMENT doc (#PCDATA)> <!ENTITY chap01 SYSTEM "Story_Chap01.xml"> ]> <doc> &chap01; </doc> 144

è è è DTD ja entiteetit: dokumentin fyysinen rakenne 7.5 Hyvin muodostettu tekstientiteetti Ulkoiset tekstientiteetit voivat käyttää eri merkkikoodauksia (ainakin UTF-8 ja UTF-16) Ulkoinen tekstientiteetti voi alkaa ulkoisen tekstitentiteetin XML-esittelyllä joka vastaa käytännössä XML-esittelyä ilman standalonepseudoattribuuttia, esim. Käytännössä ulkoinen tekstientiteetti vastaa XML-dokumentin hyvin muodostettua osaa (tasapainotettu merkkausrakenne mutta kenties ilman yksikäsitteistä juurielementtiä), esim. <?xml version="1.0" encoding="iso-8859-1"?> Ks. <a href="http://www.w3.org/">w3c</a> saadaksesi lisätietoja. 145

è è è DTD ja entiteetit: dokumentin fyysinen rakenne 7.6 (Ulkoiset) dataentiteetit XML tarjoaa myös keinon assosioida dokumentin kanssa "dataa" (voi toki olla myös tekstimuotoista, mutta sitä ei vain haluta nyt jäsennettävän) Viittaus notaation välittää XML-sovellukselle kuinka tiedostoa tulisi käsitellä (XML-prosessori itse ei toki viittauksen sisältöä ymmärrä) 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> Nykyisin vähänlaisesti käyttöä (ei juuri esim. XML-perheen standardeissa) 146

è è è DTD ja entiteetit: dokumentin fyysinen rakenne 7.7 Parametrientiteetit (ulkoinen DTD-osajoukko) Yleisiä entitteettejä käytetään dokumentin esiintymäosassa, parametrientiteetit tarjoavat nimensä mukaisesti keinon parametrisoida ja paloitella dokumentin tyyppimäärittelyä (Sisäisen) parametrientiteetin määritys näyttää esim. seuraavalta <!ENTITY % cmodel "em quote"> 1 2 3 Tyypillinen käyttö on elementtien tietomallien ja attribuuttien määrittelyn sieventäminen, esim. (huomaa viittauksen merkkausrakenne; %-merkki) <!ENTITY % cmodel "em quote"> <!ENTITY % coreattrs "id ID #IMPLIED title CDATA #IMPLIED"> <!ELEMENT example (#PCDATA %cmodel;)*> <!ATTLIST example %coreattrs;> 147

è è è DTD ja entiteetit: dokumentin fyysinen rakenne 7.8 Parametrientiteetit: DTD:n paloittelu ja parametrisointi Parametrientiteetit mahdollistavat ulkoisen DTD-osajoukon paloittelun; tyypillinen käyttö on esim. entiteettimääritysten tai "ajureiden" kierrätys <!ENTITY % entdecl SYSTEM "namelist.ent"> %entdecl; Yhdessä ns. ehdollisten DTD-lohkojen kanssa parametrientiteetit mahdollistavat jossain määrin yleiskäyttöisten DTD-ajurien kirjoittamisen <!ENTITY % detailed "IGNORE"> <!ENTITY % sparse "INCLUDE"> <![%detailed;[ <!ELEMENT book (comments*, title, body, supplements)> ]]> <![%sparse;[ <!ELEMENT book (title, body)> ]]> 148

è è è DTD ja entiteetit: dokumentin fyysinen rakenne 7.9 Huomautuksia entiteettien käytöstä Hyviä (tai yleisiä) käyttökohteita - dokumentin tyyppimäärityksen parametrisointi (hallittavuuden parantamiseksi) - merkkauslyhenteet (merkkidatassa, käyttöä esim. nimiavaruuksien lyhenteiden yhteydessä) - dokumentin paloittelu tuotantotyön helpottamiseksi Suunnittelussa kannattaa kuitenkin pitää huoli, että lähdedokumenttiin kirjataan vain sinne kuuluvaa tietoa (!) - tiedon & työnjako käsikirjoituksen ja sitä kuorruttavan tyylin välillä (lue: älä käytä entiteettejä tuomaan esim. ulkoasuun liittyvää vakiotekstiä rakenteiseen lähdedokumenttiin) Esim. XML Schema ei määrittele entiteettejä...toisaalta tekniikka kehittyy muilta osin 149

è è è DTD ja entiteetit: dokumentin fyysinen rakenne 7.10 Entiteettien tulevaisuus? XML-perheen (uusi) suositus XML Inclusions (XInclude) Version 1.0 sisältää XML-dokumenttien lohkomisessa tyypillisesti liittyvän tekniikan...jos ja kun välineiden (rikkaampi! vrt. XPtr...) XInclude -tuki toteutuu, entiteettien käyttö paloittelutehtävissä todennäköisesti vähenee (aina vain) Esimerkki (huomaa myös nimiavaruuksien käyttö -- tähän palataan kohta): <?xml version='1.0'?> <document xmlns:xi="http://www.w3.org/2001/xinclude"> <p>this document has been accessed <xi:include href="count.txt" parse="text"/> times.</p> </document> (count.txt = [324387]) <?xml version='1.0'?> <document xmlns:xi="http://www.w3.org/2001/xinclude"> <p>this document has been accessed 324387 times.</p> </document> 150

8 Nimiavaruudet Yleiskäyttöisten XML-sovellusten lisääntyminen johtaa tilanteeseen jossa tietyt nimet halutaan varata tiettyyn käyttöön. Sovellusten yhdistelyssä vaarana kuitenkin on että nimet menevät sovelluksissa sekaisin. Tietojenkäsittelyn 1-käsitteisyyden hengessä koneiden kontekstin tajuun ei kuitenkaan voi luottaa. XML-nimiavaruudet on tekniikka dokumenteissa esiintyvien elementtien ja attribuuttien nimien yksikäsitteiseen (globaaliin) määrittelyyn ja käyttöön. Perusidea on suunnitella nimet Internetin domain-nimistä tutun hajautetun nimeämiskäytännön mukaisesti: "Jos haluat keksiä uuden yleiskäyttöisen nimen, johda se kotisivusi URL-osoitteesta" 151

8.1 Esimerkki: XInclude-sovellus Yritetään rakentaa XInclude-sovellus ilman nimiavaruuksien käyttö (ks. edellinen luku) ei onnistu!...ts. keksitään "yleiskäyttöinen komento" include jota käytetään seuraavasti: <?xml version='1.0'?> <document> <p>this document has been accessed <include href="count.txt" parse="text"/> times.</p> </document> Kysymys: mitä tapahtuu jos dokumentin sanastoon (= elementtien ja attribuuttien nimet) jo sisältyy nimi include (jossain toisessa merkityksessä)? Vastaus: tapahtuu törmäys jossa riskinä on se, että homonyymit (saman nimiset, eri asioita tarkoittavat sanat) sekoittuvat (josta seuraa pulmia) Ratkaisu: koodataan nimi include (ja muut yleiskäyttöiset nimet) riittävän pitkällä nimellä jonka rakenne sovitaan sellaiseksi että törmäykset voidaan välttää (sovitaan nyt konteksti http://www.w3.org/2001/xinclude) 152

8.2 Peruskäsitteistä ja määrittelystä Nimiavaruuden nimi on mielivaltainen IRI-merkkijono (~kans.välinen URI) Tiettyyn sovellukseen liittyy sovelluksen sanasto Nimiavaruuden avulla sanasto voidaan globaalisti nimetä IRI-nimen (usein URL) avulla (yleensä sovellusspesifi, esim. xhtml-, xinclude-, yms. sanastot) Toisin sanoen, jos ja kun halutaan välttää törmäyksiä, sanastot suunnitellaan nimiavaruuksien avulla (=sanastot nimetään globaalisti) ja viittauksissa kaikki tarpeellinen tieto nimistä merkataan XML-dokumentteihin (xmlns jne.) XML-perheen suositus Namespaces in XML (1.1) määrittelee jälkimmäisen, so. miten nimiavaruuksia merkataan dokumentteihin Nimiavaruus määritellään teknisesti XML 1.0 (1.1) -suosituksen EBNFtuottosääntöjen päälle rakentuvana uutena semanttisena mutta merkkausteknisesti läpinäkyvänä rakennetason kerroksena 153

8.3 Kaksi tapaa merkata nimiavaruus Elementin nimiavaruuden voi (ilmoittaa eli) merkata dokumenttiin kahdella eri tavalla: Oletusnimiavaruuteen perustuva merkkaus on käyttökelpoista silloin kun suurin osa dokumentin elementeistä kuuluu samaan nimiavaruuteen Kvalifioitujen nimien avulla elementtien nimiavaruus on helppo merkata yksi kerrallaan, erityisesti silloin kun sisarukset kuuluvat eri nimiavaruuksiin Ellei elementin nimiavaruutta merkata (tai jos se ei peri nimiavaruutta edeltäjältään), se ei kuulu mihinkään nimiavaruuteen Jos on tarvis, attribuuttien nimiavaruus merkataan kvalifioitujen nimien avulla; usein attribuuteille ei osoiteta nimiavaruutta (koska attribuuttien ajatellaan olevan konkreettisia elementtejä luonnehtivia abstrakteja määreitä ja "joka tapauksessa kuuluvat elementtiensä yhteyteen") 154

8.4 Oletusnimiavaruus Oletusnimiavaruuden syntaksi on "tuttua" jo XHTML:n yhteydestä <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>virtual Library</title> </head> <body> <p>check <a href="http://example.org/">example.org</a>.</p> </body> </html> Ominaisuuksia: - käytännössä "XML-perheen universaali attribuutti xmlns" (vrt. xml:lang ja xml:space) - periytyy; jälkeläiset voivat vaihtaa nimiavaruuden xmlns-attribuutillaan - ei ulotu attribuuteille (ts. eivät oletuksena kuulu mihinkään nimiavar.) - voidaan kytkeä pois päältä (arvo "" ~ ei nimiavaruutta) 155

8.5 Kvalifioitu nimiavaruus (1/2) Kvalifioidun nimiavaruuden ideana on vähentää kirjoitustyötä ja tarjota keino asettaa myös attribuuttien nimiavaruus. Vrt. esim. XSL-muunnos <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:output method="html" indent="yes" encoding="iso-8859-1"/> <xsl:template match="/"> <html> <head> <title>esimerkki</title> </head> <body> <xsl:for-each select="//album"> <p><xsl:value-of select="@artist"/></p> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet> 156

8.6 Kvalifioitu nimiavaruus (2/2) Kvalifioitu nimiavaruusmäärittely tarjoaa keinon erottaa toisistaan nimiavaruuden nimen esittely ja sen (toistuva) soveltaminen ko. sanaston merkkauksessa, esim. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:xhtml="http://www.w3.org/1999/xhtml" version="1.0"> Kvalifioitu nimi koostuu nimiavaruuden prefiksistä ja nimen lokaaliosasta:...<xsl:template match="//xhtml:body">...</xsl:template> Ominaisuuksia: - voidaan käyttää myös attribuuteille - prefiksi näkyy (periytyy) kaikille lapsille (mutta kvalifioitu nimi ei pakota lasten nimiavaruutta) - prefiksi voidaan version 1.1 myötä myös kytkeä pois päältä (xmlns:p="") (käytännössä prefiksinimien "tihkuminen" on joskus ongelma) 157

8.7 Takaisin XInclude-esimerkkiin... Ts. osaamme nyt tulkita mitä seuraava tarkoittaa <?xml version='1.0'?> <document xmlns:xi="http://www.w3.org/2001/xinclude"> <p>this document has been accessed <xi:include href="count.txt" parse="text"/> times. </p> </document>...ja tiedämme miksi seuraava (ideatasolla sama) lähestymistapa olisi "yleisesti ottaen paljon huonompi" (mieti!): <?xml version='1.0'?> <document> <p>this document has been accessed <Ossi-Nykäsen-ikioma-include-MAT-TTY-Suomi href="count.txt" parse="text"/> times. </p> </document> 158

8.8 Huomautuksia (1/2) Nimiavaruuksia käytetään sovelluksissa runsaasti; erityisesti kaikki yleiskäyttöiset tai standardoidut XML-sovellukset esittelevät yleensä oman nimiavaruuden Nimiavaruuden nimen osoittamasta (URL-)osoitteesta ei Webistä tarvitse löytyä yhtään mitään eikä XML-sovellus ole velvoitettu käyttämään verkkoyhteyttä osoitteesta voi kuitenkin löytyä ko. nimiavaruuden kotisivu (ns. namespace document) Nimiavaruuksien semantiikka rakentuu XML-merkkauskieliopin päälle - uusia vaatimuksia XML-prosessoreille: tuki nimiavaruuksille -...käsittely kuitenkin periaatteessa onnistuu ilman semantiikan tulkintaa, mutta tällöin dokumentin tulkinta yleensä muuttuu ratkaisevasti Käytännössä nimiavaruus tuottaa uuden (implisiittisen) solmutyypin XMLdokumentin jäsennyspuuhun (vrt. nimi, nimiavaruus ja nimen lokaaliosa) 159

8.9 Huomautuksia (2/2) Nimiavaruuksien ja erityisesti kvalifioitujen nimien käyttö monimutkaistaa dokumenttien käsittelyä ja hankaloittaa esim. dokumenttien paloittelua (opetus: älä tee ohjelmallisesti ilman oikean XML-prosessorin tukea)... <count prefixa:len="1" prefixb:len="2" />... <xsl:template match="//xhtml:body">...</xsl:template> Huomaa että tarkkaan ottaen prefiksinimiin liittyvä merkkijonotieto kuuluisi loogisesti vain merkkauskielioppiin, eikä sen tulisi näkyä sovellukselle... mutta - Käytännössä prefiksinimiä käytetään kuitenkin esim. XPath-lausekkeissa (vrt. XSL-esimerkki yllä) ja tietyissä Semanttisen Webin sovelluksissa (mikä on tietyssä mielessä erittäin ikävää) - Tämä tarkoittaa sitä että merkkauksen nimiin viitataan merkkidatasta, vaikka kyse on tietynlaisesta suunnittelun "kategoriavirheestä" (opetus: käytä aina samoja, standardien esittelemiä prefiksinimiä) 160

8.10 DTD ei tue nimiavaruuksia XML-skeemat Nimiavaruudet tekevät ratkaisevan pesäeron SGML:ään Erityisesti XML 1.0 (1.1):een sisältyvä DTD-kieli ei tarjoa semanttista tukea nimiavaruuksille; käytännössä DTD-kielen käyttö nimiavaruuksien yhteydessä onkin niin kömpelöä että hommaan ei yleensä kannata ryhtyä (muista kuitenkin esim. XHTML, SVG yms.) - lokaalin sovelluksen kääriminen on kuitenkin mekaanisesti helppoa Suositus XML Schema (XML-skeemat) määrittelee DTD:tä yleisemmän dokumenttien tyyppimäärityskielen - XML-kielioppi, tuki nimiavaruuksille ja tietotyyppien yhdistelylle, johdetut tietotyypit, säännönmukaiset lausekkeet, datatyypit,... Ei syvennytä tällä kurssilla, aiheeseen palataan Rakenteisten dokumenttien jatkokurssilla (osana rakenteisen kuvailutiedon laajempaa viitekehystä) 161

8.11 XML-skeemat, esimerkki (1/2) Esimerkkidokumentti, muistio <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE muistio SYSTEM "muistio.dtd" > <muistio pvm="2005-01-20"> <otsikko>xml-koulutus</otsikko> <asia>muista ilmoittautua koulutukseen 28.6.2005.</asia> <huom>katso ennakkotehtävät.</huom> </muistio> Sopiva tyyppimäärittely (DTD) <!ELEMENT muistio (otsikko, asia?, huom+) > <!ATTLIST muistio pvm CDATA #REQUIRED > <!ATTLIST muistio henk (on jfk th) #IMPLIED > <!ELEMENT otsikko (#PCDATA) > <!ELEMENT asia (#PCDATA) > <!ELEMENT huom (#PCDATA) > 162

8.12 XML-skeemat, esimerkki (2/2) <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name="muistio" type="muistiotype"/> <xsd:complextype name="muistiotype"> <xsd:sequence> <xsd:element name="otsikko" type="xsd:string"/> <xsd:element name="asia" type="xsd:string" minoccurs="0"/> <xsd:element name="huom" type="xsd:string" maxoccurs="unbounded"/> </xsd:sequence> <xsd:attribute name="pvm" type="xsd:date" use="required"/> <xsd:attribute name="henk" type="henkilottype" use="optional"/> </xsd:complextype> <xsd:simpletype name="henkilottype"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="on"/> <xsd:enumeration value="jfk"/> <xsd:enumeration value="th"/> </xsd:restriction> </xsd:simpletype> </xsd:schema> 163

8.13 Lopuksi Nimiavaruuksien merkkauskielioppi on melko ikävän näköistä; sovelluksissa asialla on kuitenkin vähänlaisesti merkitystä Nimiavaruuksien myötä puitteet XMLtietojenkäsittelyn abstrahoinnille ja rikkaalle sovellusperheelle ovat nyt olemassa Lue: tähän asti XML-perheen esittely on tavallaan ollut "itsestään selvien" perustietojen läpikäymistä tästä eteenpäin suunnistamisen vaihtoehdot kasvavat räjähdysmäisesti (potentiaalisesti hyödyllisiä sovelluksia löytyy miltei kaikista kuviteltavissa olevista sovellusalueista) Hypermedian kontekstissa ja maksimihyödyn hengessä, valitsemme rakenteisen tiedon julkaisupainotteisen tien... 164