Skip to content
Snippets Groups Projects
Commit 6a917479 authored by beyer's avatar beyer
Browse files

Probe-Commit

parent 3c5572c2
No related branches found
No related tags found
No related merge requests found
# 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](http://sru.k10plus.de/vd17?version=2.0&operation=searchRetrieve&query=pica.bbg=%28Aa*%20or%20Af*%29&maximumRecords=500&startRecord=1&recordSchema=picaxml)
Die Daten sind zunächst im Pica3-Format, das in der [Erfassungsrichtlinie von BSZ und GBV](https://swbtools.bsz-bw.de/cgi-bin/k10plushelp.pl?cmd=index&katalog=VD17) dokumentiert ist. Die Daten werden vom GBV als Public Domain zur Verfügung gestellt, s. hierzu das [WikiK10plus](https://wiki.k10plus.de/display/K10PLUS/Open+Data). 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](https://swbtools.bsz-bw.de/cgi-bin/help.pl?cmd=kat&val=0500&regelwerk=RDA&verbund=GBV) |
| 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
```json
{
"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:
```bash
sudo git clone https://github.com/hbeyer/pylib
```
In dem dabei angelegten Verzeichnis `pylib` kann dann folgendes Skript mit Python 3 ausgeführt werden:
```python
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](https://stackedit.io/).
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment