Johdanto
Ysasta Ysoon siirtymän vuoksi tietueiden ylläpito siirtyi MARC21-tietueiden ylläpidosta RDF-muotoisen tietokannan yläpitoon. Koska kirjastojärjestelmät käsittelevät edelleen MARC21-muotoisia tietueita, tarvitaan konversio-ohjelma, joka kääntää SKOS-muotoiset sanastot (YSO, YSO-paikat, SLM) MARCXML-muotoon. Sanastot on julkaistu Finto.fi-palvelussa, jossa ne ovat vapaasti selattavissa. Myös MARCXML-muotoiset sanastot ovat tulevaisuudessa ladattavissa kunkin sanaston etusivulta, jossa ne ovat myös RDF-muodossa ladatattavissa.
Finto-skos-to-marc-muunnin
Ohjelman lähdekoodi: https://github.com/NatLibFi/Finto-data/tree/master/tools/finto-skos-to-marc
Muuntaa Finton SKOS-muotoisen sanastotiedoston MARC-muotoiseksi (.mrcx).
Ohjelma tukee tällä hetkellä Yso-, Yso-paikat- ja SLM-sanastojen erikoisominaisuuksia.
Ajaminen ja muunnos
Ohjelma edellyttää vähintään Python versiota 3.4.
Ohjelmaa voidaan ajaa kolmella tavalla:
1. Tuotetaan sanaston kaikki käsitteet MARC21-muodossa
2. Tuotetaan sanaston kaikki käsitteet ja ylläpidetään tiedostoa MARC21-tietueiden muutospäivämääristä
3. Haetaan vain muuttuneet käsitteet
Yksinkertaisimmillaan eli 1. tavalla muunnos tapahtuu esimerkiksi seuraavalla komennolla:
python3 finto-skos-to-marc.py --vocabulary_code="sanastotunnus" --input="tiedostopolku" --languages="fi" --output="tiedostopolku2" --log_file="tiedostopolku3"
Tämä luo tiedostopolku2-tiedostopolkuun tiedoston, jossa on laveassa MARCXML-muodossa ohjelman muuntamat käsitteet. Osa käsitteistä voi jäädä muuntamatta esimerkiksi puutteellisen tiedon vuoksi. Näin mm. tapahtuu, jos käsitteellä ei ole muunnettavalla kielellä skos:prefLabel-ominaisuutta) tai esimerkiksi --keep_deprecated_after="None" -rajoitteen vuoksi.
2. tavalla komentoon on lisättävä --modification_dates-parametri, joka on tiedostopolku tietueiden muutospäivämäärät sisältävään tietueeseen. Tiedosto on muotoa '{käsitteen URI: (muutospäivämäärä, tietueen MD5-tiiviste)}. Jos tiedostoa ei ole olemassa ennestään, tiedosto luodaan ja viimeiseksi muutospäivämääräksi jokaiselle käsitteelle annetaan ajon aikainen päivämäärä.
3. tavalla on --modification_dates-parametrin lisäksi tarvitaan --keep_modified_after-parametrin, jonka avulla haetaan parametrin päivämääränä ja sen jälkeen muuttuneet käsitteet.
Rajoitteita on asetettavissa enemmän config-komentoriviparametrillä annettavassa konfiguraatiotiedostossa:
Komentoriviparametri | Konfiguraatiotiedosto | Oletusarvo ohjelman muuttujissa | Selite |
---|---|---|---|
--config | konfigointitiedoston sijainti | ||
--config_section | asetettava, jos konfigurointitiedoston sektion nimi on eri kuin sanastokoodi (esim. "yso-paikat") | ||
creatorAgency | FI-NL | 003-kenttään kirjoitettava ISIL-tunnus | |
--default_creation_date | defaultCreationDate | 1980-01-01 | päivämäärä 008-kenttään, jos käsitteessä tätä ei ole määritelty |
--endpoint | endpoint | ENDPOINT_ADDRESS http://api.dev.finto.fi/sparql | osoite, josta haetaan sanastoon linkittyneitä muita sanastoja |
--endpoint_graphs | endpointGraphs | ENDPOINTGRAPHS = [] | palvelupisteen graafien osoitteet, jotka ladataan läpikäytäviin muihin graafeihin |
--grouping_classes | groupingClasses | GROUPINGCLASSES | YSOn ryhmäkäsitteet, joita ei tulosteta, jos keepGroupingClasses |
--input | Konvertoitavan sanaston tiedosto | ||
--input_format | inputFormat | oletusarvo turtle, joku RDFLib-kirjaston hyväksymistä https://rdflib.readthedocs.io/en/stable/plugin_parsers.html | |
--ignore_other_graph_warnings | ignoreOtherGraphWarning | False | Ei lokiteta mitään, jos toisesta sanastosta ei löydy vastinetta (arvo = True) |
--keep_deprecated_after | keepDeprecatedAfter | ALL | Päivämäärä, jonka jälkeen deprekoidut käsitteet tuotetaan MARC21-muodossa ("all" tai "none", jos ei päivämäärää) |
--keep_grouping_classes | keepGroupingClasses | Tulostetaan sanaston ryhmäkäsitteet, jotka määritelty konfigointitiedoston groupingClasses-kohdassa | |
--keep_modified_after | ALL | Jos tulostetaan vain muuttuneet käsitteet, annetaan päivämäärä muodossa YYYY-MM-DD. Edellyttää tiedostonimeä komentoriviparametrillä modification_dates, josta haetaan MARC21-muutospäivät | |
--languages | kieli tai kielet (erota pilkuin), jotka halutaan samaan sanastoon (jos jaotellaan eri sanastoihin, niin ohjelma ajettava uudelleen muita kieliversiota varten) | ||
--loc_directory | locDirectory | tallennuskansio kongressin kirjaston MARC21-tietueille | |
--log_file | lokitiedoston sijainti. Jos parametriä ei ole määritetty, lokitus tapahtuu stderr-kanavalle. | ||
--modification_dates | Pythonin pickle-muotoinen tiedosto, jossa ylläpidetään MARC21-tietueiden muutospäivämääriä | ||
--multilanguage_vocabulary | multilanguage | Jos kyseessä on monikielinen sanasto ja sanastokoodiin halutaan kielikoodi, arvoksi True | |
NORMALIZATION_FORM = "NFD" | käytetään UTF8-merkkien dekoodauksessa | ||
--output | kirjoitettava tiedosto | ||
--pickle_vocabulary | pickleVocabulary | Pythonin pickle-muotoinen tiedosto, johon sanastotiedosto pakataan päivän 1. käyttökerralla seuraavan ajokerran nopeuttamiseksi | |
--vocabulary_code | Sanastokoodi, joka tulee MARC21:een. Yso-paikoilla "yso" |
Näiden lisäksi ohjelmassa on oletusarvoina ja konfiguroitavissa nimiön arvot ja luettelointikoodit (luettelokoodit eivät ole tällä hetkellä ohjelman tulostamissa tietueissa).
Jos sanaston käsitteillä on viittauksia toisiin sanastoihin, tulee näiden graafit saattaa ohjelman tietoon --endpoint ja --endpoint_graphs -parametreilla. Yhdysvaltojen Kongressin kirjaston `LCSH`- ja `LCGF`-viitteitä ei kuitenkaan tarvitse asettaa näin: ne haetaan ja tallennetaan myöhempää käyttöä varten ohjelman toimesta automaattisesti, jos `--loc_directory="tiedostopolku"`-parametri on asetettu (varmistathan, että tällainen tiedostopolun mukainen kansio on olemassa ja siihen on ohjelmalla käyttö- ja kirjoitusoikeus).
Muunnettavan tiedosto on myös mahdollista putkittaa ohjelmalle, ja muunnettu tiedosto sekä lokitiedosto edelleenputkittaa UNIX-käytänteiden mukaisesti. Putkituksella ei kuitenkaan ole mahdollista ulostulostaa useita erikielisiä tiedostoja yhdellä kertaa - `--output`-parametria käytettäessä eri kieliversiot eritellään toisistaan `nimi-kielitarkenne`-erotuksilla.
Konfiguraatiotiedosto
Projektin kansion tiedosto config.ini sisältää perusmuotoisen konfiguraatiotiedoston, jota voi käyttää pohjana. [DEFAULT]-osiossa on määritelty kaikille sanastoille yhteiset ominaisuudet, joita voi yliajaa muissa osioissa. Komentoriviparametrit kuitenkin AINA yliajavat asetettuina konfiguraatiotiedoston vastaavat määritykset. Listojen ilmaisemisessa välimerkkinä käytetään pilkkua. Ohjelma käyttää oletusarvoisesti pakollista sanastokoodia vastaavaa osiota, mutta tämän voi yliajaa asettamalla config_section-komentoriviparametrin (tarpeen esimerkiksi yso-paikkojen tapauksessa, jos haluaa pitää samassa konfiguraatiotiedossa kaikki sanastot).