TUHTI-määrittelyn mukainen mallitietokanta

Opetusministeriön muistiossa numero 5/1994 Suositukset tutkimustietokantojen tietosisällöksi ja perustamiseksi on esitetty TUHTI-mallitietosisältö korkeakoulujen tutkimustietokannoille. Mallisisältö on esitetty SGML-määrittelynä. Tätä kirjoittaessa ei kuitenkaan markkinoilla ole SGML-tietokantaohjelmia.

Olen rakentanut TUHTI-tietosisällön mukaisen kokeilutietokannan TRIP-tekstitietokantaohjelmistoon. SGML ja TRIP eivät ole rakenteellisten mahdollisuuksiensa puolesta täysin yhteensopivat. TRIP-tietokanta sisältää lähes kaikki ne tietoelementit, jotka esiintyvät TUHTI-määrittelyssä. Tämä teksti käsittelee TUHTI-määrittelyn mukaisen SGML-dokumentin ja TUHTI-määrittelyä mukailevan TRIP-tietokannan välisten konversioiden ongelmia, ja niiden perusratkaisuja. Ratkaisujen tarkempi tekninen selostus on kirjattu lähdekooditiedostoihin kommentteina. Tämän tekstin tarkoituksena on valottaa muunnoksen yleisiä periaatteita.

Tiedosto triptuhti.def on TUHTIn mukainen TRIP-tietokantamäärittely. Se sisältää lähes kaikki TUHTI:n tietoelementit tavalla tai toisella sisältävän TRIP-tietokatamäärittelyn, tietojen syöttölomakkeiden määrittelyn ja SGML- ja HTML -tulostusformaattien määrittelyt. Tiedoston voi TRIPin IMPORT-komennolla
IMPORT base=tuhti.* file=triptuhti.def
ladata TRIPiin, jolloin käytössä ja muunneltavissa on valmis pohja tutkimustietokannalle. Tietokannasta on myös kommentoitu kenttälistaus, joka selvittää hiukan SGML-dokumentin ja TRIP-tietokannan välisiä suhteita.

Muunnoksen perusongelmat

Konversiossa perustavalta tietosisällöltään yhtenevien tietokantojen välillä perusmekanismi on ilmeinen - muunnetaan lähtötietokannan tietoelementtien tai -kenttien nimet tulostietokannan mukaisiksi. TUHTI-määrittelyn mukaisen SGML-dokumentin (tiedoston) ja TRIP-tiedoston välisessä muunnoksessa tämä ratkaisu kuitenkin jättää ongelmia.

Ongelmien syitä on pohjimmaltaan kaksi:

Lisäksi muista syistä voidaan konversioiden aikana joutua järjestelemään tietoja uudelleen.

Ensimmäiseen ongelmaan ei ole yleispätevää ratkaisua, tarvittaessa on konversion kuluessa jouduttu kontekstista päättelemään, mikä samannimisistä TUHTI-elementeistä vastaa mitäkin TRIP-tietokannan kenttää.

Toinen ongelma on yleisesti ratkaistu mahduttamalla samaan TRIP-kenttään useita TUHTI-elementtejä, joiden äitielementtiä kenttä sitten vastaa.

Sääntönä on erottaa tiedot TRIP-tietokannan kentässä pilkulla silloin, kun TUHTI-dokumentissa vastaavassa kohdassa alkaa uusi tietoelementti, ja puolipisteellä silloin, kun sama tietoelementti tai elementtiryhmä toistuu. Ongelmia tässä ratkaisussa tuottavat vapaaehtoiset tietoelementit. Missä TUHTI-määrittelyssä on useita vapaaehtoisia elementtiä peräkkäin, ei voida tietää minkä alkumerkkiä TRIPin kentässä oleva pilkku edustaa.

TRIP-tietokannan tietosisältö verrattuna TUHTI-määritelmään

Koska suurin osa TRIP-tietokannan kentistä vastaa suoraan TUHTI.dtd:n tutkimus-elementin attribuutteja tai toisen tason elementtejä, en käy kohta kohdalta läpi eroja määrittelyiden välillä. Käyn läpi ne rakenteelliset erot, joiden johdosta TRIP-tiedoston ja TUHTI:n mukaisen SGML-dokumentin konversio ei ole ongelmaton.

Konversioiden perusmekanismit

Olen rakentanut konversio-ohjelmistot TRIP-tietokannan ja TUHTI-määrittelyn mukaisen SGML-dokumentin välillä. Molemmissa koversioissa perustyö voidaan hoitaa tarkoitukseen nimenomaisesti suunnitelluilla välineillä. Muunnosten viimeistelyyn olen käyttänyt flex-ohjelmaa, joka annetun määrittelyn perusteella tuottaa leksikaalisen analysaattorin C-koodin. Viimeistely on yleisesti ollut tietoelementtien keskinäisen järjestyksen muuttamista (esimerkiksi päivämäärät tulostetaan TRIPiss muodossa vuosi-kuukausi-päivä, kun TUHTI:ssa ne on määritelty toisin päin), tai sellaisia kohtia, joissa SGML-tietoelementti on pääteltävä TRIP-kentän sisällöstä tai yhteydestä.

Muunnos TRIP-tietokannasta SGML-dokumentiksi

TRIP antaa tietokannan suunnittelijalle mahdollisuuden määritellä tulostusformaatteja. Tulostusformaatissa voidaan määrätä tulostettavien tietojen järjestys, kullekin kentälle otsikko, ja toistettaville kentille väliotsikot.

Määrittelin TRIP-tietokannalle SGML-tulostusformaatin, jossa tietojen järjestys on pääosin sama kuin TUHTI-määrittelyssä. Tämän tulostuksen korjailuun rakensin ohjelmiston, joka muuntaa sen TUHTI-dtd:n mukaiseksi SGML-dokumentiksi.

Muunnos SGML-dokumentista TRIP-tietokantaan

Muunnokseen SGML-muotoisesta dokumentista TFORM-tiedostoksi käytetään sgmls- ja instant -ohjelmia, joka määritellyn muunnossäännöstön peruteella muuntaa SGML-elementtien alku- ja loppumerkit muiksi merkkijonoiksi, tässä tapauksessa TRIPin TFORM-syöttömuodon mukaisiksi kenttämäärittelyiksi. Muunnosohjelmistoon kuuluu edellä mainittu konversio ja flex-ohjelmia sen lopputuloksen korjailuun.