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.
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
Yksinkertaisimmillaan 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 kompaktissa 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.
Rajoitteita on asetettavissa enemmän `config`-komentoriviparametrillä annettavassa konfiguraatiotiedostossa:
Komentoriviparametri | Konfiguraatiotiedosto | Oletusarvo ohjelman muuttujissa | Selite |
---|---|---|---|
--config | konfigointitiedoston sijainti | ||
--config_section | asetettava, jos 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ä 688-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 = [] | sanasto(t), joita halutaa |
--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 |
--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 | jos tulostetaan vain muuttuneet käsitteet, annetaan päivämäärä muodossa YYYY-MM-DD | ||
--languages | kieli tai kielet (erota pilkuin), jotka halutaan sanastoon | ||
--loc_directory | locDirectory | tallennuskansio kongressin kirjaston MARC21-tietueille | |
--log_file | lokitiedoston sijainti | ||
--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 | ||
pickleFile | Pythonin pickle-muotoinen tiedosto, johon sanastotiedosto pakataan 1. käyttökerralla | ||
--previous_records | sijainti syötetiedostolle, johon uusia käsitteitä verrataan ja . Voi olla sama kuin tulostettava tiedosto | ||
--vocabulary_code | Sanastokoodi, joka tulee MARC21:een. Yso-paikoilla "yso" |
Näiden lisäksi ohjelmassa on oletusarvoina ja tkonfiguroitavissa nimiön arvot ja luettelointikoodit (ei käytössä).
__Käsitteiden suodattuminen on tarkoituksenmukaista. Jos sanaston käsitteillä on viittauksia toisiin sanastoihin, tulee näiden graafit saattaa ohjelman tietoon__ `--endpoint` ja `--endpoint_graphs`__-parametreilla.__
Ohjelmaa voidaan ajaa kolmella tavalla:
1. Tuotetaan sanaston kaikki käsitteet
2. Tuotetaan sanaston kaikki käsitteet ja ylläpidetään tiedostoa MARC21-tietueiden muutospäivämääristä
3. Haetaan muutospäivämäärät edellä mainitusta tiedostosta
Tämä edellyttää, että ohjelma ajetaan aina ensin 2. tavalla, jos halutaan muuttuneet käsitteet. 2. tapa edellyttää komentoriviparametrejä --previous_records ja --modification_dates, 3. tapa edellyttää parametrejä --keep_modified_after ja --modification_dates. 2. tavassa syöte- ja tulostiedosto voivat olla sama (esim. edellisen päivän tiedosto, jonka päälle tallennetaan kaikki käsitteet).
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.
Katso tarkemmat ohjeet --help-komennolla.
### Konfiguraatiotiedosto
Kaikille (paitsi pakolliselle `vocabulary_code`-komentoriviparametrille) on olemassa oma vastaava konfiguraatiotiedostossa asetettava kohtansa. `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.__ Huomaathan, että kaikkia ominaisuuksia ei voi asettaa komentoriviltä. 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).