Skip to content
Snippets Groups Projects

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:

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

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.