VD17-Dump
Dump der bibliographischen Metadaten aus dem VD 17. Die Daten werden über die SRU-Schnittstelle in PICA-XML geharvestet und in ein nutzerfreundliches JSON-Format umgerechnet.
Allgemeines
Grundlage sind die Daten für Monographien oder Teile eines mehrteiligen Werks, die über die SRU-Schnittstelle des VD 17 in PICA-XML heruntergeladen werden können.
Beispiel für das erste 500er-Set:
Das Datenmodell entspricht dem Pica3-Format, das in der Erfassungsrichtlinie von BSZ und GBV dokumentiert ist. Die Daten werden vom GBV als Public Domain zur Verfügung gestellt, s. hierzu das WikiK10plus. Auch die hier im JSON-Format angebotenen Daten können ohne urheberrechtliche Beschränkungen frei nachgenutzt werden.
Die Konversion erfolgt mit einem eigens entwickelten Python-Modul, dazu Näheres unter "Quellcode".
Dokumentation des Zielformats
Felder für bibliographische Einheiten
Feld | Typ | Inhalt |
---|---|---|
ppn | String | ID in der Datenbank |
vdn | String | VD17-Nummer |
bbg | String | Code für Bibliographische Gattung und Status s. Dokumentation |
recType | String | Bibliographische Gattung: "Monographie", "Teilband" oder "Teilband mit eigenem Titel", errechnet aus bbg |
catRule | String | Bei der Katalogisierung angewandtes Regelwerk, entweder "rak" oder "rda" |
date | String | Datierung als Jahreszahl |
lang | String | Sprachcodes nach ISO 639-2, getrennt durch ";" |
langOrig | String | Sprachcodes der Originalsprache bei Übersetzungen |
title | String | Titel einschließlich Untertitel |
resp | String | Verantwortlichkeitsangabe |
format | String | Bibliographisches Format |
pages | String | Kollationsvermerk |
normPages | Integer | Normalisierte Seitenangabe. Der Algorithmus berücksichtigt Seiten- und Blattangaben, von-bis-Angaben, Ausdrücke mit "i.e." oder "das heißt" und römische Zahlen. S. die Funktion get_norm_p() unter https://github.com/hbeyer/pylib/blob/main/lib/pica.py |
digi | String | URLs von Digitalisaten, mehrere getrennt durch ";" |
gat | String | Gattungsbegriffe der AAD, getrennt durch ";" |
persons | Array | Personen, die als VerfasserInnen, BeiträgerInnen oder sonstige Personen erwähnt sind |
publishers | Array | DruckerInnen und/oder VerlegerInnen |
places | Array | Erscheinungsorte |
copies | Array | Exemplare |
Unterfelder persons
Feld | Typ | Inhalt |
---|---|---|
persName | String | Name, in der Form "Vorname, Nachname" |
role | String | Beziehungskennzeichnung nach RDA (VerfasserIn etc.) oder DC (creator, contributor) |
gnd | String | GND-Nummer |
dateBirth | String | Geburtsdatum |
dateDeath | String | Sterbedatum |
Unterfelder publishers
Ist strukturiert wie persons, Feld role hat den Wert "publisher"
Unterfelder places
Feld | Typ | Inhalt |
---|---|---|
placeName | String | Ortsname |
relation | String | Beziehungskennzeichnung: "Erscheinungsort", "Herstellungsort", "Enstehungsort" oder "Vertriebsort" |
Unterfelder copies
Feld | Typ | Inhalt |
---|---|---|
place | String | Bibliotheksort |
bib | String | Bibliothek |
isil | String | ISIL der Bibliothek, s. ISIL-Datei |
eln | String | ELN (interne Kennnummer) der Bibliothek |
shelfmark | String | Signatur |
epn | String | ID des Lokalsatzes |
provenances | String | Provenienzinformationen, mehrere Angaben verkettet mit ";" |
Beispieldatensatz
{
"ppn":"005973309",
"vdn":"VD17 3:693602L",
"permalink":"https://kxp.k10plus.de/DB=1.28/CMD?ACT=SRCHA&IKT=8079&TRM=%273:693602L%27",
"bbg":"Aau",
"recType":"Monographie",
"catRule":"rak",
"date":"1686",
"lang":"ger",
"title":"Theologische Send-Schreiben Von dem rechten Kirchen-gehen/ An Magr: G. S. einen Hoff-Prediger.. Darinnen auß wahrem Grunde und Verstand der Heyl: Schrifft/ wie auch nach der fürnehmsten alten und neuen Theologen ihren Zeugnissen/ kurtzlich dargethan und erwiesen wird/ wie weit/ und wie weit nicht/ das Kirchen-gehen einem Gott-suchenden Menschen nützlich und nöthig sey ; Darbey noch ein Brieff/ in welchem zu sehen/ was der rechte Adel seye",
"resp":"Auffgesetzet von numehro Weyland Abraham von Franckenberg ... nebenst einem Verzeicnus seiner Schrifften.",
"format":"8°",
"pages":"[6] Bl., 95 S",
"normPages":"107",
"digi":"http://nbn-resolving.de/urn:nbn:de:gbv:3:1-538155",
"gat":"Brief;Legende",
"persons":[
{
"persName":"Frankenberg, Abraham",
"role":"creator",
"gnd":"118855050",
"dateBirth":"1593",
"dateDeath":"1652"
}
],
"publishers":[
{
"persName":"Balthasar, Wilhelm",
"role":"publisher",
"gnd":"1037612523"
},
{
"persName":"Balthasar, Jacob",
"role":"publisher",
"gnd":"1037541766"
}
],
"places":[
{
"placeName":"Amsterdam",
"relation":"Erscheinungsort"
}
],
"copies":[
{
"place":"Halle (Saale)",
"bib":"Universitäts- und Landesbibliothek Sachsen-Anhalt",
"isil":"DE-3",
"eln":"0003",
"shelfmark":"S Tsch D0845"
}
]
}
Quellcode
Der Dump kann mit Python neu erzeugt werden. Hierfür muss zunächst der Quellcode aus dem Repositorium https://github.com/hbeyer/pylib geladen werden. Beispiel für Linux:
sudo git clone https://github.com/hbeyer/pylib
In dem dabei angelegten Verzeichnis pylib
können dann Skripte mit Python 3 ausgeführt werden.
Herunterladen der PICA-XML-Dateien:
import logging
from lib import sru
logging.basicConfig(level=logging.INFO)
# Ordner muss existieren
source_folder = "{Ordner zum Download der PICA-XML-Dateien}"
req = sru.Request_VD17()
num = req.prepare("pica.bbg=(Aa* or Af* or Av*)")
logging.info(f"Anzahl Datensätze: {req.numFound}")
req.download(source_folder)
Generieren der JSON-Serialisierung:
import logging
from lib import pica
from lib import isil
from lib import xmlreader as xr
logging.basicConfig(level=logging.INFO)
# Festlegen der Ordner und der Größe der zu generierenden JSON-Dateien
source_folder = "{Ordner mit den PICAXML-Dateien}/"
target_folder = "{Ordner zum Speichern der JSON-Dateien}/"
size = 1000
reader = xr.DownloadReader(source_folder, "record", "info:srw/schema/5/picaXML-v1.0")
content = []
fnn = []
setn = 1
count = 0
for node in reader:
content.append(pica.RecordVD17(node))
count += 1
if count >= size:
recl = pica.RecordList(content)
fn = f"vd17-{str(setn).zfill(3)}"
recl.to_json(target_folder + fn)
content = []
setn += 1
count = 0
if content != []:
recl = pica.RecordList(content)
fn = f"vd17-{str(setn).zfill(3)}"
recl.to_json(target_folder + fn)
Written with StackEdit.