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 einem Python-Skript 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
kann dann folgendes Skript mit Python 3 ausgeführt werden:
import logging
import zipfile
import os
from lib import sru
from lib import isil
from lib import recordlist as rl
from lib import xmlreader as xr
from lib import pica
logging.basicConfig(level=logging.INFO)
# Anpassen der Pfade erforderlich, die Ordner müssen bereits existieren
source_folder = f"{Ordner zum Download der PICAXML-Dateien}"
target_folder = f"{Ordner zum Anlegen der JSON-Dateien}"
# Download der PICA-XML-Dateien (sollte nur einmal ausgeführt werden, da zeitaufwändig)
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")
# Auslesen der PICA-XML-Dateien
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 >= 1000:
recl = rl.RecordList(content)
fn = f"vd17-{str(setn).zfill(3)}"
recl.to_json(target_folder + fn)
fnn.append(fn + ".json")
content = []
setn += 1
count = 0
if content != []:
recl = rl.RecordList(content)
fn = f"vd17-{str(setn).zfill(3)}"
recl.to_json(target_folder + fn)
fnn.append(fn + ".json")
Written with StackEdit.