Umstieg von LITTERA zu Koha – Teil 2
By zefanja
Wie bereits in [Teil 1][1] dieser kleinen Serie angekündigt, möchte ich heute beschreiben, wie wir neben unserer Lehrmittelbibliothek auch mit unserer Schulbibliothek von LITTERA zu Koha umgestiegen sind.
Backup der Daten aus LITTERA
LITTERA macht es einem nicht gerade leicht die aufgenommen Titel und Exemplare zu exportieren, sodass man neben den allgemeinen Angaben zum Titel auch die entsprechenden Schlagworte, Systematik oder die Barcodes in irgendeiner lesbaren Form hat. Die Backupfunktion von LITTERA legt alle Daten in einer Microsoft Access Datenbank ab, in der wiederum alle Daten in Tabellen liegen. Unter Windows ist diese mit einem Passwort geschützt, doch mit Hilfe der mdb-tools (aus den Paketquellen von z.B. Ubuntu) kann man sich ohne Probleme den Inhalt dieser Datenbank anschauen.
Mit mdb-tables littera.mdb kann man sich die einzelnen Tabellen innerhalb der Datenbank anschauen und mit mdb-export littera.mdb tabellenname den Inhalt einer Tabelle. Wenn man das ganze noch mit sed verknüpft kann man mit folgendem Befehl alle Tabellen in eine CSV-Datei exportieren:
$ mdb-tables littera.mdb | sed "s/ /\n/g" | while read in; do mdb-export littera.mdb "$in" > "$in".csv; done ``` Nun hat man alle Daten in einer Form, dass man sie weiterverarbeiten kann. Folgende Tabellen sind interessant. Die Spalte „Buchungsnummer“ dient dabei als ID in anderen Tabellen. * Verlag → Liste mit allen Verlagen und Ortsangabe * Schlagworte → Liste aller Schlagworte * Schlag_zuord → Zuordnung der Schlagworte zu einem Titel * Medienart → alle Medientypen * Interessenkreise → Liste der Interessenskreise * IntzuMed → Zuordnung Interessenkreise zu Titel * Systematik\_OG / Systematik\_UG → Ober- und Untergruppen der Systematik * Systematik_Zuordnung → Zuordnung der Systematik zu Titel * Sprache → Liste der verwendeten Sprachen * Reihe → Informationen über Reihen * Exemplar → Liste aller Exemplare * Titel → Liste aller Titel ### Vorbereiten der Daten Mit Hilfe eines Python-Skripts habe ich diese Tabellen ausgelesen und in einem großen Dictionary zusammengefasst, sodass ich zu jedem Titel alle nötigen Daten hatte (inkl. Exemplardaten). ``` #read publisher data with open('Verlag.csv') as exemplarfile: reader = csv.DictReader(exemplarfile) tmpItem = {} for row in reader: tmpItem = {} tmpItem["name"] = row["Verlag"] tmpItem["city"] = row["Ort"] publishers[row["Buchungsnummer"]] = tmpItem ``` Eine weitere Schwierigkeit war der Barcode. Erst nach einiger [Recherche][2] habe ich einen Hinweis auf die Zusammenstellung des Barcodes gefunden. Ein Beispiel: Barcode eines Exemplars: **1456000089443** Das Muster ist folgendes: Exemplarnummer + Nullen + Bibliotheksnummer + Länge der Exemplarnummer + Prüfziffer (EAN13). Im obigen Bespiel wäre als **1456** die Nummer unsere Exemplars, gefolgt von **Nullen**. **894** ist die Nummer der Bibliothek gefolgt von der **4**, da unsere Exemplarnummer 4stellig ist. **3** ist die Prüfnummer des Barcodes (die sich Über Division mit Rest berechnen lässt – einfach mal das weite Netz danach durchsuchen). ### MAB zu MARC21 LITTERA verwendet MAB als Format für alle Titel und Exemplare und Koha dagegen MARC21. Die Daten, die nun mit Hilfe des Python-Skripts vorbereitet sind, müssen nun noch in MARC21 „umgewandelt“ werden. Wie ich schon in Teil 1 erwähnte, ist MARC21 nicht gerade einsteigerfreundlich und relativ komplex. Es dauert etwas bis man die Struktur verstanden hat. Mir hat an dieser Stelle in Website „[Understanding MARC][3]“ geholfen. In MARC21 gibt es verschiedene Felder mit Unterfeldern, die dazu noch bis zu 2 Indikatoren haben. In Koha wird z.B. das Fled 952 für alle Exemplardaten verwendet. im Unterfeld „p“, also 952$p befindet sich z.B. der Barcode. Im Feld 245$a und 245$b werden der Titel und der Untertitel festgehalten usw. Eine genaue Auflistung in deutsch gibt es bei der [Deutschen Nationalbibliothek][4]. Mehr oder weniger zufällig bin ich auf [pymarc][5] gestoßen, eine Python-Bibliothek zum Bearbeiten von MARC21 Daten. Diese Bibliothek nimmt einem viel Arbeit ab. Ich habe also aus den vorbereiteten Daten die einzelen Einträge der MARC21-Felder erstellt und am Ende als MARC21XML exportiert. Hier ein Auszug aus dem Skript: ``` if "ISBN" in titles[recordID] and titles[recordID]["ISBN"] != "": record.add_field( Field( tag = '020', indicators = ['',''], subfields = [ 'a', titles[recordID]["ISBN"] ] ) ) ``` Die Felder 000 bis 008 sind besondere Felder in MARC21, deren Bedeutung ich noch nicht 100%ig verstanden habe. Auf jeden Fall ist der „Leader“ ein sehr wichtiges Feld, weil in ihm wichtige Daten über z.B. die Medienart festgehalten sind. Deshalb hier noch ein Auszug, wie ich den Leader konstrukiert habe (anhand des Medientyps): ``` l = list(record.leader) ``` l\[5] = ’n‘ l[6] = ‚a‘ l[7] = ‚m‘ l[9] = ‚a‘ l[17] = ‚7‘ l[18] = ‚a‘ if titles[recordID\]\[„type“\]\[„short“] in („BU“, „ZS“): l[6] = ‚a‘ l[7] = ‚m‘ if titles[recordID\]\[„type“\]\[„short“] in („CD“, „TC“, „HB“): l[6] = ‚j‘ if titles[recordID\]\[„type“\]\[„short“] in („KA“): l[6] = ‚e‘ if titles[recordID\]\[„type“\]\[„short“] in („VI“, „DV“, „DI“, „FI“, „OV“): l[6] = ‚g‘ if titles[recordID\]\[„type“\]\[„short“] in („CR“, „FD“): l[6] = ‚m‘ if titles[recordID\]\[„type“\][„short“] in („SP“, „SO“): l[6] = ‚o‘ record.leader = „“.join(l) Ein korrekter Leader ist wichtig, da ansonsten in Koha kein Medientyp bei der Suche oder in den Details angezeigt werden. Nun müssen die Daten noch von MARC21XML nach MARC21 umgewandelt werden. Koha kann zwar auch MARC21XML importieren, aber da hatte ich immer Probleme mit der Kodierung, was sich in Problemen mit Umlauten und Sonderzeichen gezeigt hat. Also habe ich mit Hilfe von [MarcEdit][6] die Daten vom einem Format in das nächste gebracht. Soweit so gut. Jetzt können die Daten in Koha importiert werden. Allerdings möchte ich gern, dass man bei einer Suche oder in der Detailansicht sieht, ob ein Buch bei Antolin verfügbar ist oder nicht. Antolin ist eine Leseplatform für Kinder, wo man zu einem gelesenen Buch ein Quiz machen kann und dafür Punkte bekommt. Ungefähr so soll es am Ende aussehen: Wie Antolin integriert werden kann und wie man die Ansicht der Ergebnisse anpassen kann, darüber werde ich im [dritten Teil][7] berichten. [1]: https://zefanjas.de/2017/07/24/umstieg-von-littera-zu-koha-teil-1/ [2]: http://www.ktp.at/mikrobib/doc/bc/BarEtiB.pdf [3]: http://www.loc.gov/marc/umb/ [4]: http://d-nb.info/996983511/34 [5]: https://github.com/edsu/pymarc [6]: http://marcedit.reeset.net/ [7]: https://zefanjas.de/2017/09/16/umstieg-von-littera-zu-koha-teil-3/