12 XML-perusteet 3 XML-merkintäkieli XML on merkintäkieli eikä ohjelmointikieli. XML-dokumenttia kirjoitettaessa pitää tuntea XML-kielen syntaksia. Kuvassa 3.1 on esimerkki XML-dokumentista. Ensimmäisellä rivillä on XML-versio (version), kirjaimisto (encoding) ja ulkoinen riippuvuus (standalone). Dokumentin juurielementti on KIRJA, jonka lapsielementit ovat TEKIJA, NIMI ja KUSTANTAJ. Elementillä TEKIJA on lapsielementti NIMI. Elementillä on sekä alku- ja loppukoodi. Elementin KIRJA alkukoodi on <KIRJA> ja loppukoodi </KIRJA. Elementin tietosisältö on alku- ja loppukoodin välinen osa. Alkukoodissa voi myös olla attribuutteja esimerkiksi seuraavasti <imc src= hello.gif alt= hello world > tai <henkilo id= 99923 >. Kuvassa 3.2 dokumentti 03-01.xml on avattu kansiosta C:\xml Internet Explorer 5 -selaimella. Internet Explorer 5 osaa näyttää sivun täydellisesti vasta sen jälkeen, kun sivuun on liite tty XSL- tai CSS-tyylipohja. Kuva 3.1 XML-dokumentti 03-01.xml Kuva 3.2 XML-dokumentti 03-01.xml on avattu IEE 5 -selaimella
3 XML-merkintäkieli 13 3.1 Kommentit XML-kommentti on samankaltainen kuin HTML:ssä. Se alkaa merkkijonolla <!-- ja päättyy merkkijonoon -->. XML-prosssori jättää kaikki alku- ja loppukommenttimerkkien välissä olevan osan käsittelemättä. Kommentit eivät voi edeltää XML-määritystä eli riviä, jossa on <?xml version= 1.0 standalone= yes?>. Kommentteja ei saa sijoittaa merkintäkoodien sisään. Kommenteilla voidaan ympäröidä ja piilottaa merkintäkoodeja. Komentin sisällä ei saa esiintyä kahta yhdysmerkkiä (--). [2] 3.2 Entiteettiviittaukset Entiteettiviittaukset ovat merkintöjä, jotka korvataan merkkimuotoisella tiedolla dok u- mentin jäsennyksessä. XML:n ennalta määritettyjä entiteettiviittauksia on viisi. Viittaus & tarkoittaa merkkiä &, viittaus < on merkki aidosti pienempi kuin (<), viittaus > on merkki aidosti suurempi kuin (>), viittaus " on lainausmerkki ( ), viittaus ' on pilkku (,). 3.3 CDATA Useimmissa tapauksissa merkkien aidosti pienempi kuin (<) ja aidosti suurempi kuin välillä on merkintäkoodia (tag). Kaikki muu on merkkimuotoista tietoa yhtä poi k- keusta lukuun ottamatta, joka on osio CDATA. Osiossa CDATA kaikki merkit ovat merkkimuotoista tietoa eikä XML-prosessori erota tässä osassa merkintäkoodeja tai entiteettiviitauksia. Osiota käytetään, kun halutaan, että kaikki merkit tulkitaan tekstiksi. CDATA-osioissa ei saa kuitenkaan esiintyä merkkijonoa ]]>, joka päättää osion. 3.4 Merkintäkoodit Jokaisella merkintäkoodilla pitää olla nimi. Nimi on merkkijono, joka alkaa kirjaimella tai alaviivalla (_).Muut merkit voivat olla kirjaimia, numeroita, alaviivoja, tavuviivoja ja pisteitä. Nimessä ei saa olla välilyöntejä. 3.5 Elementit Jokaisella XML-dokumentilla on yksi ja vain yksi juurielementti (document element). Kaikki muut elementit ovat lapsielementtejä (child element). Jokaisella lapsielementillä on isäelementti (parent element). XML-kielen elementtien (elements) tunnistamiseen käytetään tunnistimia ja erottimia (delimiters). Tunnisteissa merkki < on alkutunnisteen avaava erotin, merkkijono </ on lopputunnisteen avaava erotin, merkki > on tunnisteen sulkeva erotin ja merkkijono /> on tyhjän tunnisteen sulkeva erotin.
14 XML-perusteet Jos elementin nimi on KIRJA, niin <KIRJA> on elementin aloittava tunniste ja </KIRJA on elementin lopettava tunniste. Elementin alku- ja lopputunnisteen väliin jäävä osa on elementin sisältö. Elementin alku- ja lopputunnisteessa esiintyvä el e- mentin nimen pitää aina olla sama. XML-dokumentissa voidaan käyttää myös tyhjiä elementtejä. Esimerkiksi <kuva/> tarkoittaa tyhjää elementtiä kuva. [3] 3.6 Attribuutit Aloitus- ja lopetuskoodeissa voi olla attribuutteja. Attribuutit ovat nimi- ja arvopareja, joissa nimen ja arvon välissä on yhtäsuuruusmerkki (=). Tarkastellaan esimerkiksi attr i- buuttimääritystä <tervehdys kieli="suomi">, missä < on alkutunnisteen avaava erotin, tervehdys on elementin nimi, kieli on attribuutin nimi, = on arvon osoitin, on literaalisen merkkijonon erotin, suomi on attribuutin arvo ja > on alkutunnisteen sulkeva erotin. Attribuutin nimi on merkkijono, joka noudattaa samoja sääntöjä kuin merkintäkoodin n i- mi. Attribuutin nimi pitää alkaa kirjaimella tai alaviivalla (_). Muut merkit voivat olla kirjaimia, numeroita, alaviivoja, tavuviivoja ja pisteitä. Attribuutin arvo on myös merkkijono, joten attribuuttimäärityksessä <TUKKI PITUUS= 35 > elementin TUKKI attribuutin PITUUS arvona on kahden merkin mittainen merkkijono, jonka merkit ovat 3 ja 5. Attribuutin arvona ei siis ole kokonaisluku 35. 3.7 Entiteetit Loogisella tasolla esitettynä XML-dokumentti koostuu johdannosta ja juurielementistä, joka seuraa johdantoa ja joka sisältää kaikki muut elementit. Käytännössä XMLdokumentin varsinaiset tiedot voivat olla useassa eri tiedostossa. XML-dokumentin osia sisältäviä tallennusyksiköitä kutsutaan entiteeteiksi. Entiteetti voi olla tiedosto, tiet o- kannan tietue tai mikä tahansa tietoja sisältävä yksikkö. XML-määrityksen, dokumentin tyyppimäärityksen ja juurielementin sisältävä tallennusyksikkö on dokumenttientiteetti. 3.8 XML-dokumentin looginen rakenne HTML käyttää merkintäkoodeja ikään kuin ne olisivat kytkimiä, jotka vaihtavat tyyliä. Alkukoodi laittaa ominaisuuden voimaa. Tällainen ominaisuus voi olla alleviivaus <U>. Loppukoodi </U> laittaa ominaisuuden pois päältä. XML käyttää alku- ja loppukoodeja ympäröimään asioita. Alkukoodi, tietosisältö ja loppukoodi muodostavat yhdessä elementin. Elementit ovat osia, joista XML-dokumentti on rakennettu. Joka isessa XMLdokumentissa saa olla siis vain yksi juurielementti. Muiden elementtien täytyy olla tä y- sin elementin sisällä. Tämä tarkoittaa, että jos elementti sisältää muita elementtejä, ni i- den täytyy olla kokonaan tämän elementin sisällä. Kuvan 3.3 XML-dokumentin 03-02.xml looginen rakenne (logical structure) on esitetty kuvassa 3.4.
3 XML-merkintäkieli 15 Kuva 3.3 XML-dokumentti 03-02.xml Kuva 3.4 XML-dokumentin 03-02.xml looginen rakenne
16 XML-perusteet Kuvasta 3.4 nähdään, että dokumentilla on puumainen rakenne, jossa juurielementti <KIRJAT> on puun latvassa tai juuressa tarkastelutavasta riippuen. Kaikki tämän el e- mentin sisältämät elementit ovat siististi toistensa sisällä. XML-dokumentissa saa olla vain yksi juurielementti ja sen edessä tai jäljessä ei saa olla mitään elementtejä, jotka ovat osittain tai kokonaan ulkopuolella. Elementtien välisiä suhteita voisi selventää sanomalla, että elementti on sen sisältä i- en elementtien vanhempi (parent). Elementit, jotka ovat toisen elementin sisällä ovat tämän elementin lapsia (children). Elementit, joilla on sama vanhempi ovat sisaruksia (siblings). Kuvasta 3.4 nähdään, että <KIRJAT> on kaikkien muiden elementtien vanhempi, <TE- KIJA> on <NIMI>-elementin vanhempi, <KUSTANTAJA> on <KIRJA>-elementin lapsi sekä <TEKIJA> ja <KUSTANTAJA> ovat sisaruksia. Kun elementtipuuta tarkastellaan alaspäin, niin huomataan, että kaikkien lapsielementtien täytyy olla täysin vanhempielementin sisällä. Sisaruselementit eivät saa olla toistensa päällä. Elementtien järjestelyä XML-dokurnentissa kutsutaan siis loogiseksi rakenteeksi. Se u- raavassa tarkastellaan XML-dokumentin fyysistä rakennetta (physical structure). Dokumentti on oikeamuotoinen (well-formed) ja käyttökelpoinen, jos XML-dokumentin looginen ja fyysisen rakenne ovat synkroniset (synchronous). Rakenteiden täytyy toisin sanoen täydellisesti ja kunnolla sijaita toistensa sisällä. 3.9 XML-dokumentin fyysinen rakenne Yksi XML:n avainkäsite on entiteetti (entity). XML:ää voi ymmärtää kunnolla vain, jos ymmärtää mitä entiteetit ovat. Entiteetit ovat paljon tärkeämpiä kuin elementit, kun määritellään miten XML-prosessori käsittelee XML-koodia. Tässä vaiheessa riittää, että entiteettiä tarkastellaan fyysisenä säilytysyksikkönä. Se on objekti, vaikka itse asiassa useimpia entiteettejä voi yleensä ajatella erillisinä tietokoneen tiedostoina. Entiteetti on olennaisesti informaatioyksikkö, mutta virallisesti XML-kielen määrittelyissä entiteetti on säilytysobjekti (storage object). Tämä objekti voi olla elementti tai XML ENTITY objekti, joka tavallisesti on jäsentämätön ulkoinen tiedosto. Tärkein entiteetti on dokumenttientiteetti eli juurientiteetti, joka jakautuu loogisesti elementteihin. Entiteetit voivat viitata (reference) muihin entiteetteihin ja aiheuttaa niiden sisältymisen XML-dokumenttiin. Entiteettiviittausten yhteydessä tarkasteltiin ennalta määriteltyjä entiteettejä, joita käytettiin merkkausmerkkien kiertämiseen normaalitekstissä. Ne ovat i t- se asiassa sisäisiä entiteettejä. Katsotaan nyt yksinkertaista viittausta kuvatiedostoon <tausta source="maisema.jpg"/>, joka on yleinen HTML:llä tehdyillä verkkosivuilla. Tässä tausta-elementin source-attribuutti viittaa ulkoiseen entiteettiin maisema.jpg, joka on kuvatiedosto. Kuvatiedosto ei sisälly kyseiseen dokumenttiin. Jos tämä olisi HTML-koodia, kuva näkyisi selaimessa tässä kohtaa dokumenttia. XML-termejä käyttäen kuvatiedostoa kutsutaan jäsentämättömäksi entiteetiksi (unparsed entity). XMLprosessori jättää huomiotta entiteetin sisällön ja siirtää sen edelleen sovellukselle.
3 XML-merkintäkieli 17 XML-dokumentti voi sisältää entiteettejä, joissa on XML-koodia, tekstiä, HTMLkoodia ja melkein mitä tahansa. Riippuen siitä, miten XML-koodia sisältävä viitattu entiteetti identifioidaan, niin entiteetti voidaan jäsentää XML-prosessorilla aivan kuin ko o- di olisi alkuperäisessä dokumentissa eli juurielementissä. Edelleen tämä XML-entiteetti voi viitata toiseen entiteettiin jne. Aivan kuten elementtienjärjestäminen tuottaa loogisen rakenteen, samoin entiteeteistä syntyy fyysinen rakenne. Oletetaan, että sisällytetty entiteetti sisältää myös elementtejä. Tämä ei vaikuta pinnallisesti katsoen erityisellä ongelmalta. Siitä todellakin tulee ongelma, jos sisällytetty entiteetti sisältää elementtejä, joissa on samoja elementtityy p- pien nimiä kuin juuren entiteetissä tai muissa entiteeteissä olevilla elementeillä ja lisä k- si sovelluksen täytyy havaita niiden erot. Tämä ongelma on ratkaistu mekanismilla, jota kutsutaan nimiavaruuksiksi. Edelleen tilanteessa, jossa juurientiteetissä on elementin aloitustunniste ja viitataan sen sisällä ulkoiseen entiteettiin. Jos tämä ulkoinen entiteetti sisältää lopputunnisteen elementille, joka avattiin, niin looginen rakenne on pilalla. Näiden ongelmien esiintymistä on rajoitettu sillä, että XML-entiteettien loogisen ja fy y- sisen rakenteen täytyy olla synkroniset: loogiset entiteetit eivät voit ylittää fyysisten entiteettien rajoja ja fyysisten entiteettien täytyy olla täysin loogisten entiteettien sisällä. Toisinaan on vaikea selvittää, onko näin. Jos vastaus on ei, niin seurauksena saattaa olla monia ongelmia. Tämä vaatimus on ominainen vain XML:lle. SGML- tai HTMLkoodaajille tämä on ehkä hankalin asia käsittää ja yleisin virheiden lähde.
Tiedostonimi: XML-03.DOC Hakemisto: D:\EVITECH\MONISTE\XML\XML03 Malli: C:\Ohjelmatiedostot\Microsoft Office\Mallit\Normal.dot Otsikko: Aihe: Tekijä: Pasi Ranne Avainsanat: Kommentit: Luontipäivä: 12.07.01 10:21 Version numero: 9 Viimeksi tallennettu: 24.07.01 13:06 Viimeksi tallentanut: Pasi Ranne Kokonaismuokkausaika: 18 minuuttia Viimeksi tulostettu: 31.07.01 11:55 Viimeisestä täydestä tulostuksesta Sivuja: 6 Sanoja: 1 553 (noin) Merkkejä: 8 855 (noin)