Syntaksi ja perustoiminnallisuus


Extensible Markup Language 1.0 (XML)

W3C Recommendation - lokakuu 2000

XML-määrittelyssä kuvataan (meta)kieli, jolla voidaan kehittää rakenteisia kuvauskieliä. Itse asiassa XML-määrittely kattaa varsin monta asiaa sen ympärille kehitettyihin määrittelyihin verrattuna:

XML-määrittely siis käsittää pienestä koostaan huolimatta varsin laajan alueen ja siinä on monia ongelmakohtia ja aukkoja. Näistä puutteistaan huolimatta se on hyvin onnistunut määrittely, kuten suuresta suosiosta voidaan huomata.

Tavallisessa käytössä XML itse ei varsinaisesti ole parrasvaloissa vaan sen pohjalta tehdy kielet, esimerkiksi XHTML, XSLT ja Docbook. XML:llä tehtyjä kieliä voidaan käyttää moniin asioihin, kuten ihmiselle tarkoitettujen dokumenttien rakenteen tai ulkoasun kuvaukseen, sovellusten väliseen tiedonvaihtoon, dokumenttien muokkaukseen ja sovellusten sisäisten tietojen säilytykseen. XML on perusta, jolle nämä kielet rakennetaan ja siten ne jakavat monia yhteisiä piirteitä ja ominaisuuksia, jotka helpottavat sovellusten ja käyttötapojen kehittämistä. Aina on kuitenkin muistettava, ettei XML mainostuksesta huolimatta sovi kaikkiin käyttötarkoituksiin - monet muut tavat saattavat hyvinkin olla tehokkaampia ja helppokäyttöisempiä kuin XML.

XML on vasta muutaman vuoden ikäinen määrittely mutta se pohjautuu vuonna 1986 julkaistuun SGML-standardiin XML:n voidaankin ajatella olevan SGML:n yksinkertaistus.

XML-määrittelystä on olemassa kaksi eri versiota: ensimmäinen vuonna 1998 julkaistu alkuperäinen XML-määrittely ja vuonna 2000 julkaistu korjauspainos alkuperäiseen määrittelyyn. Korjauspainos ei tuo uusia ominaisuuksia tai piirteitä lisää vaan keskittyy korjaamaan alkuperäiseen jääneitä virheitä ja epätarkkuuksia. Alkuperäisen XML-määrittelyn voikin huoletta unohtaa ja käyttää sen sijaan korjauspainosta.

Kenelle tarkoitettu: Niille, joilla on rakenteisessa muodossa olevaa dataa käsiteltävänään.

Määrittely:Extensible Markup Language (XML) 1.0 (Second Edition)

Muita läheisiä määrittelyjä:Unicode , Common XML , Minimal XML , Namespaces


The Unicode Standard 3.0 (Unicode)

julkaistu

Unicode-määrittely kuvaa merkkien koodauksen, niiden ominaisuuksia (kuten kirjoitussuunnan) ja algoritmeja määrittelyn toteutukseen. Unicode 3.0 kuvaa lähes 50 000 merkkiä - mukana ovat mm. länsimaiset, kiinalaiset, arabialaiset, kreikkalaiset ja kyrilliset merkit, sekä riimut, rahayksikköjen tunnuksia ja matemaattisia merkkejä. Sen sijaan esimerkiksi egyptiläiset hieroglyfit ja klingonien tai Keski-Maan kirjoitusmerkit eivät (ainakaan vielä...) kuulu Unicoden kuvaamiin merkkeihin. Kansainvälinen ISO/IEC 10646 -standardi on Unicode-määrittelyn kanssa yhtenevä - eroja on, mutta käytännössä niistä ei tarvitse paljoa välittää.

XML:n kannalta Unicode on hyvin merkittävä määrittely, sillä XML-dokumenttien sisältämät merkit ovat Unicodea. Länsimaissa tämä saattaa mennä ohi huomaamatta, sillä Unicodea edeltävät merkistöjen koodaustavat, kuten ASCII ja Iso-Latin1, ovat suurimmaksi osaksi yhteneviä Unicoden kanssa. Toisaalta esimerkiksi ääkköset eivät kuulu tähän yhtenevään joukkoon, sillä ne on kuvattu eri kohtiin eri merkistöissä - eli suomenkielisten dokumenttien kanssa on oltava tarkkana.

Unicode - kuten merkistöihin liittyvät asiat yleensäkin - on kaikkea muuta kuin yksinkertainen asia. Onneksi ainakin jotkin XML-työkalut osaavat olla aika älykkäitä merkistöjen tunnistamisen ja käsittelyn kanssa. Toisaalta täytyy muistaa, että esimerkiksi tekstieditorilla kirjoitetuissa dokumenteissa ääkköset eivät yleensä ole Unicoden mukaisia ja XML-dokumentissa täytyy tällöin kertoa millaista koodausta dokumentti noudattaa (yleensä "ISO-8859-1" eli Iso- Latin1 on aika hyvä arvaus). Myös meidän kannaltamme eksoottisimpien, kuten kiinan tai japaninkielisten, dokumenttien kanssa täytyy olla hyvin varovainen - sovellukset eivät välttämättä ymmärrä niitä, vaikka kuinka yrittäisi kertoa oikeaa koodaustapaa.

Unicodeen liittyviä termejä ovat mm. UTF-8 (merkkien koodaus kahdeksan bitin jaksoissa), UTF-16 (merkkien koodaus 16:sta bitin jaksoissa), UCS-2 ja UCS-4 (itse asiassa kaksi viimeistä liittyvät ISO/IEC 10646 - standardiin).

Kenelle tarkoitettu: Kaikille XML:n parissa työskenteleville. XML-sovellusten tekijöiden, joiden sovellukset joutuvat pyörittelemään merkkejä, on syytä paneutua Unicodeen vakavissaan. Muiden kannattaa ongelmien välttämiseksi opetella jokunen Unicoden perusajatus jostain yksinkertaisesta oppaasta.

Määrittely:Unicode 3.0 Online Edition


Common XML

Final Draft Specification - syyskuu 2000

Common XML rajaa kaikista XML-määrittelyn ja nimiavaruuksien piirteistä sellaisen osan, jonka pitäisi olla yleisesti hyvin tuettu erilaisissa XML-sovelluksissa. Esimerkiksi rakennemäärittelyt, määritteiden oletusarvot ja nimiavaruuksien esittely muualla kuin dokumenttielementissä ovat piirteitä, jotka on rajattu Common XML:n ulkopuolelle.

Pohjimmiltaan Common XML on luettelo ohjeita ja hyviä tapoja, joita noudattamalla voidaan välttyä yhteensopivuusongelmilta. Se ei ole uusi metakieli eikä laajenna nykyistä XML + nimiavaruudet -yhdistelmää millään tavalla. Common XML -määrittelyä noudattava dokumentti on siis täysin yhteensopiva XML- määrittelyn ja nimiavaruuksien kanssa.

Määrittelyyn kuuluu kaksi osaa: ensimmäisessä luetellaan Common XML:n ytimeen kuuluvat piirteet. Toisessa osassa kerrotaan miten ytimen ulkopuolelle jääneitä piirteitä kannattaa käyttää, jotta yhteensopivuusongelmat voidaan minimoida.

Mikäli tuntuu siltä, että XML-määrittely sisältää paljon turhia, vaikeita tai työtä hankaloittavia piirteitä, kannattaa vilkaista Common XML:ää. Määrittely on lyhyt ja selkeä, joten sen lukemisen ei ole hankalaa. XML-määrittelyn lukemiseltä Common XML ei kuitenkaan pelasta, sillä useissa kohdin siinä selitysten sijaan vain viitataan XML-määrittelyyn.

Kenelle tarkoitettu: Niille, joiden mielestä XML-määrittely on liian laaja tai turhan monimutkainen mutta jotka kuitenkin haluavat käyttää XML:ää.

Määrittely:Common XML

Muita läheisiä määrittelyjä:XML , Minimal XML , Namespaces


Minimal XML 1.0 (MinXML)

Preliminary Specification - huhtikuu 2000

MinXML on XML :än pohjautuva metakieli, joka sisältää hyvin pienen osajoukon XML- määrittelystä. Sen tavoitteena on määritellä XML:n piirteistä pieni, helposti toteutettava ja helposti opittava joukko, joka silti on riittävä sovellusten väliseen tiedonvaihtoon. MinXML:n kehitys on vielä pahasti kesken ja koko projekti tuntuu pysähtyneen.

MinXML näyttää onnistuneen tavoitteessaan varsin hyvin: se sallii dokumentin sisältävän vain elementtejä tai tekstiä. Näitäkään ei saa yhdistellä miten tahansa, vaan elementin sisällä saa olla joko elementtejä tai tekstiä, mutta ei kumpaakin - toisin sanoen yhdistelmäsisältö ei ole sallittu. Kuten edelläolevasta selviää, monet XML-suositukselle ominaisista piirteistä on MinXML:ssä heitetty yli laidan. Esimerkiksi rakennemäärittely, määritteet, entiteetit ja tyhjä elementit ovat saaneet poistua yksinkertaisuutta tavoiteltaessa. Kaikesta karsimisesta huolimatta jokainen MinXML:n mukainen dokumentti on myös XML-dokumentti, jolloin kaikki XML-sovellukset osaavat käsitellä myös MinXML-dokumentteja.

Minimalistiset ominaisuudet tekevät MinXML:stä huonon teknologian esimerkiksi dokumenttien kirjoittamiseen - yleensäkin MinXML:n laverteleva ja yksitoikkoinen rakenne sopii huonosti ihmisten luettavasti ja tuotettavaksi. Sen sijaan sovelluksille se on omiaan, sillä ohjelmille yksinkertaisuus ja tehokkuus on usein tärkeämpää kuin helppolukuisuus. Hyviä käyttökohteita MinXML:lle löytyy esimerkiksi sovellusten välisestä kommunikoinnista tai ohjelmien asennustiedostojen formaateista.

Kenelle tarkoitettu: XML:n käyttäjille, jotka kaipaavat enemmän yksinkertaisuutta ja tehokkuutta, mutta haluavat silti säilyttää XML:n edut.

Määrittely:Minimal XML in a Nutshell

Muita läheisiä määrittelyjä:XML , Common XML


Namespaces in XML (Namespace)

W3C Recommendation - tammikuu 1999

Namespaces-määrittelyn (suomeksi nimiavaruudet) tekniikoiden avulla voidaan elementit ja määritteet tunnistaa yksikäsitteisesti. Näin samassa dokumentissa voidaan käyttää samannimisiä elementtejä eri tarkoituksiin, mikäli ne kuuluvat eri nimiavaruuksiin. Esimerkiksi <title>-elementillä voidaan yhdessä nimiavaruudessa tarkoittaa dokumentin otsikoa ja toisessa nimiavaruudessa henkilön arvonimeä ja näillä voi olla erilainen sisältömalli. Eroavaisuuksistaan huolimatta näitä <title>-elementtejä voidaan käyttää samassa dokumentissa, sillä ne voidaan erottaa toisistaan nimiavaruuksien avulla.

Nimiavaruus-määrittely ovat osoittautunut hyvin hankalaksi ja monimutkaiseksi. Määrittely sinänsä ei ole kovin monimutkainen ja perusasiat ovat helppoja, mutta käytäntö on osoittanut määrittelyssä olevan monia sudenkuoppia sekä paljastanut hankaluuksia ja asioita, joita ei vielä ole lainkaan määritelty. Lisäksi nimiavaruudet toimivat todella huonosti yhteen rakennemäärittelyjen kanssa. Nimiavaruuksien kanssa kannattaa siis pitäytyä perusasioissa ja välttää turhia kikkailuja.

Nimiavaruudet ovat itse XML-määrittelyn lisäksi toinen keskeinen tekijä perustassa, jonka päälle muita määrittelyjä rakennetaan. Niihin ei voi olla törmäämättä. Esimerkiksi XSLT , XLink ja SVG käyttävät nimiavaruuksia hyväkseen.

Kenelle tarkoitettu: Kaikille XML:n parissa työskenteleville. Nimiavaruuksilta on vaikea välttyä.

Määrittely:Namespaces in XML

Muita läheisiä määrittelyjä:XML , Common XML , XML Schema


XML Information Set (Infoset)

W3C Working Draft - joulukuu 2000

Infoset kuvaa abstraktin datajoukon, joka sisältää osan XML-dokumentista saatavasta informaatiosta ja niiden suhteista toisiinsa. Infoset ei siis välitä dokumentissa olevasta XML-syntaksista vaan enemmänkin informaatiosta, jota dokumentti ja siinä oleva syntaksi sisältävät. Se esimerkiksi kertoo, että elementeillä on lapsialkioita ja mitä ne alkiot ovat, se kertoo määritteiden kuuluvan johonkin elementtiin ja että määritteen lapsialkiot ovat merkkialkoita. Infoset ei kuitenkaan sisällä koko XML- dokumenttia rakennemäärittelyineen päivineen, vaan jättää osia XML-määrittelyssä kuvatusta alueesta käsittelemättä (esimerkiksi juuri rakennemäärittelyn).

Koska Infoset määrittelee abstraktin datajoukon, voidaan se käytännössä kuvata useaan eri toteutukseen, kuten esimerkiksi DOM :iin, SAX :iin tai XPath :iin. Täytyy kuitenkin muistaa, että esimerkkinä mainitut määrittelyt on tehty ennen Infoset-määrittelyä, joten ne eivät välttämättä noudata sitä täydellisesti.

Infoset:a käytettäessä on lisäksi tärkeää muistaa, että se on vain yksi (ja vieläpä epätäydellinen) malli XML-dokumentin sisällöstä. Muuta mallit ovat mahdollisia ja ehkäpä pakollisiakin. Tällainen tilanne on esimerkiksi XML-editorien kohdalla, joille ei riitä Infoset-määrittelyn XML-dokumentista antama tieto. Eräs toinen malli on SGML-yhteisön kehittämä lehdot (groves), jota HyTime ja DSSSL käyttävät hyväkseen.

Kenelle tarkoitettu: XML-pohjaisten määrittelyjen kirjoittajille ja perustyökalujen tekijöille.

Määrittely:XML Information Set


XML Inclusions 1.0 (XInclude)

W3C Working Draft - lokakuu 2000

XInclude määrittelee yleiskäyttöisen tavan liittää (sisällyttää) dokumentin sisään toinen dokumentti tai dokumenttikatkelma. Tavallaan se tekee samaa asiaa kuin osa XLinkistä tai yleisentiteetit XML:ssä . XInclude eroaa edellisistä siten, että siinä sisällyttäminen tapahtuu dokumentin rakenteen tasolla (XLink liittää dokumenttiin vain toisen dokumentin ulkoasun) eikä sisällyttämiseen tarvita rakennemäärittelyä (kuten yleisentiteettien tapauksessa).

Sisällyttämistiedot kerrotaan omassa elementissään. Sisällyttäminen on tarkoitus suorittaa jäsentimessä automaattisesti ilman, että jäsennintä käyttävä sovellus koskaan näkee missä kohtaa ja mitä käsiteltävään dokumenttiin on sisällytetty - sovellus näkee vain yhtenäisen dokumentin.

On vaikeaa sanoa mikä tapa dokumenttien yhdistämiseksi on paras, sillä XIncludesta ei vielä ole saatavissa laajalle levinneitä toteutuksia. Todennäköisesti XLink puolustaa asemiaan linkityksen puolella, sillä sen toimintaperiaate on selvästi erilainen kuin XIncludella, mutta yleisentiteetit voivat vähitellen jäädä käyttöön pelkästään vanhoihin ratkaisuihin kun uudemmat ratkaisut käyttävät XIncludea. Tulevaisuus näyttää miten käy.

Kenelle tarkoitettu: Dokumenttien kirjoittajille ja tuottajille, joilla on esimerkiksi vakiomuotoinen alku- tai loppuosa dokumenteissaan. Joillekin XML-sovellusten kehittäjille.

Määrittely:XML Inclusions (XInclude) Version 1.0

Muita läheisiä määrittelyjä:XLink , XML


Muita perustaan liittyviä määrittelyjä


Sivua on edellisen kerran päivitetty: 23.01.2001
Kommentteja voi lähettää Henri Ruinille osoitteeseen ruini@cs.helsinki.fi