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
Es werden alle gedruckten Monographien oder Teile eines mehrteiligen Werks über die SRU-Schnittstelle des VD 17 heruntergeladen. URL für das erste 500er-Set:
Die Daten sind zunächst im 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 unten.
Dokumentation des Zielformats
Felder für bibliographische Einheiten
Feld | Typ | Inhalt |
---|---|---|
ppn | String | ID in der Datenbank |
vdn | String | VD17-Nummer ohne Vorsatz "VD17" |
recType | String | Code für Bibliographische Gattung und Status s. Dokumentation |
catRule | String | Regelwerk bei der Katalogisierung, entweder "rak" oder "rda" |
date | String | Datierung als Jahreszahl |
lang | String | Sprachcodes nach ISO 639-2, getrennt durch ";" |
title | String | Titel einschließlich Untertitel |
resp | String | Verantwortlichkeitsangabe |
format | String | Bibliographisches Format |
pages | String | Kollationsvermerk |
normPages | Integer | Zahl der Seiten, errechnet aus pages. Bei komplexeren Angaben sind Abweichungen möglich |
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 |
shelfmark | String | Signatur |
epn | String | ID des Lokalsatzes |
provenances | String | Provenienzinformationen, mehrere Angaben verkettet mit ";" |
Beispieldatensatz
{
"ppn":"005339006",
"vdn":"VD17 3:653535K",
"permalink":"https://kxp.k10plus.de/DB=1.28/CMD?ACT=SRCHA&IKT=8079&TRM=%273:653535K%27",
"recType":"Monographie",
"catRule":"rak",
"date":"1686",
"lang":"lat",
"title":"De Privilegiis Iuribusque Singularibus Personarum Illustrium",
"resp":"Sub Praesidio Dn. Gabrielis Schwederi ... in Illustri Eberhardina ... Publice disputabit Christoph Dietrich Bose/ Eq. Misn. ... Ad Diem 26. Octobr.",
"format":"4°",
"pages":"120 S",
"normPages":"120",
"digi":"http://nbn-resolving.de/urn:nbn:de:gbv:3:1-538406",
"gat":"Dissertation:jur.",
"persons":[
{
"persName":"Schweder, Gabriel",
"role":"creator",
"gnd":"117396427",
"dateBirth":"1648",
"dateDeath":"1735"
},
{
"persName":"Bose, Christoph Dietrich",
"role":"creator",
"gnd":"102781982",
"dateBirth":"1664",
"dateDeath":"1741"
}
],
"publishers":[
{
"persName":"Reis, Anna Maria",
"role":"publisher",
"gnd":"1037531310"
}
],
"places":[
{
"placeName":"Tübingen",
"relation":"Erscheinungsort"
}
],
"copies":[
{
"place":"Halle (Saale)",
"bib":"Universitäts- und Landesbibliothek Sachsen-Anhalt",
"isil":"0003",
"shelfmark":"Tübingen, Diss., 1686-87 (8)"
}
]
}
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 = f"{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 recordlist as rl
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 = rl.RecordList(content)
fn = f"vd17-{str(setn).zfill(3)}"
recl.to_json(target_folder + fn)
content = []
setn += 1
count = 0
if content != []:
recl = rl.RecordList(content)
fn = f"vd17-{str(setn).zfill(3)}"
recl.to_json(target_folder + fn)
Written with StackEdit.