Skip to content
Snippets Groups Projects
user avatar
beyer authored
d2bcd372
History
Name Last commit Last update
json
README.md

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:

http://sru.k10plus.de/vd17?version=2.0&operation=searchRetrieve&query=pica.bbg=(Aa* or Af*)&maximumRecords=500&startRecord=1&recordSchema=picaxml

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.