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:
- SGML sallii samannimisten tietoelementtien määrittelyn eri kohtiin
dokumenttia.
- SGML:ssä voidaan elementtejä rajattomasti
upottaa toisiinsa (mitä mahdollisuutta TUHTI-määrittelyssä
myös on käytetty), TRIPissä tämä ei ole mahdollista.
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.
- Tutkimussopimuksen tiedot sisältlävää
TUHTIn tutksop-elementin määrittelyä vastaa TRIPissä kahdesta
kentästä muodostettu taulukko, johon kuuluvat kentät
ja TSOS johon kirjataan kaikki osapuolet,
ja TSKO (sopimuskoodi).
osapuolet erotetaan toisistaan puolipisteellä.
osapuoli;...;osapuoli.
<!ELEMENT tutksop - o (osapuoli*, sopkoodi?)>
<!ELEMENT (osapuoli, sopkoodi)
- o (#PCDATA)>
- Suomen- ja englanninkieliset avain- ja asiasanat
on jaettu siten, että suomenkieliset avain- ja asiasanat ovat
TRIP-toteutuksessa AS-kentässä.
Asiasanat merkitään edeltävällä asteriskilla: *asiasana.
Englanninkieliset avain- ja asiasanat ovat omassa KW-kentässään,
merkintäratkaisu on kuten suomenkielistenkin sanojen kohdalla.
<!ELEMENT avainsan - o (av | as)+>
<!ELEMENT keywords - o (kw | sp)+>
<!ELEMENT av, as, kw, sp)
- o (#PCDATA)>
- Kaikki päivämäärätiedot joudutaan kääntämään, koska
TRIP haluaa ne järjestyksessä vuosi-kuukausi-päivä, ja
TUHTI:ssa ne on määritelty toisin päin.
- Rahoitus on TRIP-tietokannassa määritelty
alitietueeksi.
TRIP mahdollistaa kussakin tietokantamääritelyssä yhden alitietueen.
Alitietueen paikka TRIPin TFORM-syöttömuodoossa on tietueen
lopussa, joten muunnoksessa SGML-dokumentista TFORM-muotoon se
on siirrettävä sinne omalla ohjelmallaan.
<!ELEMENT rahoitus - o (rahkausi)+>
<!ELEMENT rahkausi - o (kausi?, menot?, henktkk, rahkerto?)>
<!ELEMENT kausi - o (vuosi | (alkupvm, loppupvm))>
<!ELEMENT menot - o (omat?,vieraat?)>
<!ELEMENT omat - o (perus?, erityis?)>
<!ELEMENT vieraat - o (antaja, maara, yksikko)+>
<!ELEMENT (antaja, perus, erityis, henktkk, vuosi, maara, yksikko)
- o (#PCDATA)>
<!ELEMENT rahkerto - o (#PCDATA) +(pvm | summa | org)>
<!ELEMENT summa - - (#PCDATA) -(pvm | summa | org)>
<!ELEMENT org - o (orgnimi, postios?, sijainti?,
puh?, fax?, email?, muuta?)>
- SGML-elementin tutkijat alielementti tyojakso
on ongelmallinen.
Se sisältää neljä peräkkäistä alielementtiä, joista kolme
on vapaaehtoisia.
Näistä loppupvm voidaan päätellä sillä perusteella
että se on ainoa numeerinen tieto tässä joukossa.
Muiden erottamiseen tarvitaan ennaltamäärättyjä
esitysmuotoja tiedolle.
Olen konversioita tehdessäni olettanut, että kansallisuustieto
esitetään jonkin standardin mukaisena maakoodina, jolloin se koostuu
kahdesta tai kolmesta isosta kirjaimesta.
<!ELEMENT tutkijat - o (tutkija)+>
<!ELEMENT tutkija o o (hlo, oppiarvo?, vuosi?,
sukup?, kansal?, tyojakso+)>
<!ELEMENT tyojakso - o (alkupvm, loppupvm?, asema?, maa?)>
- Julkaisujen käsittelyssä on omat ongelmansa. Julkaisut on
TRIP-tietokannassa määritelty taulukoksi, johon kuuluvien kenttien
tulkinta riippuu julkaisutyypistä.
- Julkaisun tyyppitieto on TRIPissä yksi kenttä, JUKP, joka vastaa
yhtä viidestä TUHTI:n vaihtoehtoisesta julkaisuelementistä.
- Kenttä JUTE käännetään joko kirjoittajiksi tai toimittajiksi
(kirjassa), tekijöiksi (ATK-tallenteessa), tai keksijöiksi (patentissa).
Kaikissa muissa julkaisutyypeissä se sisältää kirjoittajien nimitiedot.
Jos kentässä on toimittajien tiedot, se alkaa merkkijonolla toim:
- Patentin tiedot on asetettu TRIPin kenttiin , JUTE (keksijät),
JUOT (patentin nimi), JUTO (patentin haltijat),
JUKP (julkaisijamaa), JUKV (myöntämisvuosi) ja
JUKP Sisällön kuvaus ja huomautukset.
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.