• Ei tuloksia

8 Ratkaisuvaihtoehdot

8.2 Siirtotiedoston formaatti

8.2.1 XML siirtotiedoston formaattina

XML, eli Extensible Markup Language [W3C 2000] on suurta huomiota viimeaikoina saanut The World Wide Web Consortiumin vuonna 1998 standardoima kuvauskieli, jonka avulla voidaan muunmuassa kuvata rakenteellinen tieto tekstimuotoisena. XML, kuten HTML:kin, perustuu ”tageihin”, joita käyttämällä alku- ja lopputagien välissä olevalle tiedolle määritellään ominaisuuksia. Toisin kuin HTML:ssa, missä tageja käytetään tiedon ulkonäön määrittelemiseen, XML:ssa tagit määrittelevät tekstin varsinaisen merkityksen [Widom 1999]. Se että XML perustuu tageihin, tarkoittaa myös

8. Ratkaisuvaihtoehdot sitä, että XML-tiedostot kasvavat helposti suuremmaksi kuin tiedosto, jossa sama tieto on kuvattu jollain muulla menetelmällä.

XML ei myöskään sinällään ole tarkoitettu ihmisen muuteltavaksi, mikä on yksi siirtotiedoston formaatin vaatimuksista. XML-tiedostoille on kuitenkin olemassa jatkuvasti kasvava määrä erilaisia muokkausohjelmia, joilla tiedostojen muokkaus helpottuu huomattavasti. Esimerkiksi James Tauberin kokoamassa listassa [Tauber 2000] on lueteltuna tämän kirjoitushetkellä 33 erilaista XML-muokkausohjelmaa.

Koska XML-kielen kehitys on ollut tiukasti sidoksissa intemettiin, voi sillä toteuttaa helposti dokumentteja, jotka sisältävät linkkejä muihin XML-dokumentteihin. Näitä linkityksiä voisi Mustissa hyödyntää esimerkiksi eripuolilla tietoverkkoa löytyvien Must-oliomallien automaattiseen ajantasalle päivittämiseen aina mallin latauksen yhteydessä.

XML-kieltä on muunmuassa selkeän ohjelmointirajapinnan ja yksinkertaisen, skaalautuvan rakenteensa ansiosta käytetty tiedon muuntamiseen ohjelmistoista toiseen.

Myös tätä tarkoitusta varten tehtyjä ohjelmia löytyy useita.

XML-standardin määrittelemä kuvauskieli on kokonaisuudessaan hyvin laaja, eikä tämän diplomityön vaatimien ominaisuuksien toteuttaminen vaadi välttämättä koko XML-kielen hallintaa. Sensijaan ohjelman on hyvä varoittaa selkeällä virheilmoituksella, mikäli sille yritetään antaa tiedostoa, joka sisältää ohjelmalle tuntemattomia XML:een kuuluvia tai kuulumattomia rakenteita.

XML-tiedostojen jäsentämiseen käytettävien komponenttien käyttäminen tapahtuu yleensä joko SAX (Simple API for XML) tai DOM (Document Object Model) rajapintojen välityksellä. Yleisesti hyväksyttyjen rajapintojen ansiosta jäsentämiseen käytettävä komponentti voidaan tarvittaessa vaihtaa pienin muutoksin itse komponenttia käyttävään ohjelmaan.

XML-dokumentissa käytettävät tagit esitellään erillisessä DTD (Document Type Declaration) osiossa, jossa määritellään XML-dokumentissa esiintyvät tagit (entiteetit) ominaisuuksineen ja rajoituksineen. XML-dokumentin voidaan sanoa olevan kokonaan määritelty, mikäli se on käyttämänsä DTD:n mukainen. DTD-osion tulee sijaita joko XML-dokumentin alussa, tai jossain toisessa tiedostossa.

XML-siirtotiedoston formaatin määrittely vastaa käytännössä juuri edellämainitun DTD:n, sekä tämän semantiikan määrittelyä.

Seuraavassa esitetään lyhyesti kaksi toisistaan eroavaa toteutusvaihtoehtoa, sekä luetellaan näiden vahvuuksia ja heikkouksia.

Toteutusvaihtoehto 1

Määritellään jokaiselle luokalle ja instanssille omat tagit.

Attribuutit

Attribuutit määritellään luokille tyypin mukaan omilla lageillaan (ITEM, RELATION) ja instansseille yhteisellä lagilla (VALUE). Kaikilla

8. Ratkaisuvaihtoehdot edellämainituilla lageilla on pakollisen ID-tagin, jolla määritellään attribuutin tunniste, lisäksi tagista riippuvia attribuutteja, esim. TYPE, TARGET_CLASS, CARDINALITY. Tagien attribuuteille valitaan lisäksi tarpeen mukaan sopivat oletusarvot, kuten merkkijono “Number” TYPE-attribuutille, “Many”

CARDINALITY:ksi, ja niin edelleen.

Luokat

Oma luokan tunnisteen mukainen tagi jokaiselle luokalle. Tunnisteesta tehdään tagi lisäämällä sen eteen merkkijono ”C_”, jotta vältyttäisiin moninkertaisilta saman tagin määrittelyiltä. Luokan yläluokka määritellään tagin SUPERCLASS- attribuutin arvona.

Esimerkki:

<C_Opiskelija SUPERCLASS="Ihminen">

<ITEM ID="nimi" TYPE="String" />

<ITEM ID="painotettuKeskiarvo">

<RULE>

Sum (opintosuoritukset.painotettuArvosana)/

Sum(opintosuoritukset.kurssi.opintoviikot)

</RULE>

</ITEM>

<RELATION ID="opintosuoritukset"

TARGET_CLASS="Opintosuoritus" />

</C_Opiskelija>

Tämän lisäksi täytyy jokainen luokkatagi määritellä erikseen myös DTD- osiossa.

Instanssit

Oma luokan tunnisteen mukainen tagi jokaiselle instanssille. Tunnisteesta tehdään tagi lisäämällä sen eteen merkkijono ”I_”. Instanssin luokka määritellään tagin attribuuttina.

Esimerkki:

<I_12345A BASECLASS="Opiskelija">.

<VALUE ID="nimi">

Olli Opiskelija

</VALUE>

<VALUE ID="opintosuoritukset">

Opintosuoritus!

</VALUE>

</I_12345A>

Tämän lisäksi täytyy jokainen instanssitagi määritellä erikseen myös DTD- osiossa.

Tämän menetelmän todellisena heikkoutena on se, että tieto hajautuu pahasti XML- tiedoston eri osiin, koska jokainen instanssi ja luokka pitää esitellä myös DTD-osiossa.

Lisäksi se, että instanssien ja luokkien nimien eteen pitää muistaa lisätä erityiset alkuliitteet, saattaa aiheuttaa loppukäyttäjille ongelmia. Tästä johtuen, tiedostoista tulee myös pidempiä kuin vaihtoehto 2:n mukaista kuvausta käytettäessä. Vahvuutena tällä

8. Ratkaisuvaihtoehdot menetelmällä on tiedostossa määriteltävien luokkien ja instanssien listaaminen heti tiedoston alussa (mikä on myös heikkous, kuten edellä todettiin). Lisäksi luokkien ja instanssien nimiä ei tarvitse etsiä niin syvältä XML-tagihierarkiasta XML- selainohjelmilla kuin 2. toteutusvaihtoehtoa käytettäessä.

Toteutusvaihtoehto 2

Toteutusvaihtoehto l:stä poiketen, määritellään luokat CLASS-tagia, ja instanssit INSTANCE-tagia käyttäen.

Esimerkki:

Määritellään Opiskelija-luokka seuraavasti:

<CLASS ID="Opiskelija" SUPERCLASS="Ihminen">

<ITEM ID="nimi" TYPE="String" />

<ITEM ID="painotettuKeskiarvo">

<RULE>

Sum(opintosuoritukset.painotettuArvosana) / Sum(opintosuoritukset.kurssi.opintoviikot)

</RULE>

</ITEM>

<RELATION ID="opintosuoritukset"

TARGET_CLASS="Opintosuoritus" />

</CLASS>

Vastaavasti instanssi 12345A määritellään seuraavasti:

<INSTANCE ID="12345A" CLASS="Opiskelija">

<VALUE ID="nimi">

Olli Opiskelija

</VALUE>

<VALUE ID="opintosuoritukset">

Opintosuoritus!

</VALUE>

</INSTANCE>

Kummassakaan määrittelyssä ei DTD-osioon tarvitse koskea INSTANCE ja CLASS tagien määrittelyjen lisäksi lainkaan.

Tätä menetelmää käyttäen saadaan toisiinsa liittyvä tieto määriteltyä lähempänä toisiaan kuin ensimmäisessä toteutusvaihtoehdossa. Tämä johtuu pääasiassa siitä, että DTD-osio ei sisällä lainkaan siirrettävistä oliomallin osista riippuvaa tietoa. Siirtotiedosto on myös helpommin ymmärrettävää, koska instanssien ja luokkien määrittelyt on selvästi omilla lageillaan erotettu muusta XML-tiedostosta, sen sijaan, että erottelu tehtäisiin lagin nimen alkuliitteen perusteella, kuten ensimmäisessä toteutusvaihtoehdossa.

Kokonaisuudessaan kappaleessa 8.1.3 esitetyn esimerkin ensimmäisen käyttötapauksen tuottama XML-siirtotiedosto toista toteutusvaihtoehtoa käytettäessä löytyy liitteestä C.

8. Ratkaisuvaihtoehdot XML siirtotiedoston formaattina yleisesti

Toteutuksen vaatima työmäärä

Suurin osa ajasta menee todennäköisesti valmiin selaintyökalun etsimiseen ja käytön opetteluun. Varsinainen abstraktin syntaksin muodostaminen työkalun käytön opettelun jälkeen, on todennäköisesti varsin helppoa.

Käyttökelpoisuus loppukäyttäjän näkökulmasta

Mikäli XML-siirtotiedostoa muokataan käsin, ilman erityisiä XML:n muokkaukseen käytettäviä apuohjelmia, voi se olla hieman vaivalloista, etenkin lopputagien pakollisuuden takia. Tekstimuodossa XML on varsin nopeasti ymmärrettävää, etenkin jos tuntee ennestään XML:n kaltaisia kuvauskieliä, kuten HTML.

Tietokantakonversioiden helpottumisen takia käyttökelpoisuus kasvaa huomattavasti.

Huomattavat lisäarvot ja ongelmat

Tietokantakonversiot helpottuvat. On olemassa runsaasti ilmaisia ohjelmistoja XML- tiedostojen muokkaamiseen ja visualisointiin.