Offene Infrastruktur für bibliothekarische Daten

Linked Open Data, JSON & OpenRefine in der Praxis

Adrian Pohl & Fabian Steeg

Offene Infrastruktur, Hochschulbibliothekszentrum NRW (hbz)


WWW, 2020-10-08
Zentrum für Bibliotheks- und Informationswissenschaftliche Weiterbildung, TH Köln (ZBIW)

Diese Präsentation:
http://slides.lobid.org/2020-zbiw/ (PDF)
Creative Commons License

Seminar-Etikette

Fragen sind stets willkommen

Hilf anderen, wo du kannst

Sei offen für unterschiedliche Fachkenntnisse & Erfahrungen

Sei freundlich

Agenda

1. Offene Infrastruktur
2. Linked Data & JSON-LD
3. OpenRefine Reconciliation

Grober Zeitplan

1. Offene Infrastrukturlobid-Dienste und Nutzungsbeispiele10:00–10:30
GND, lobid-gnd, Rechercheoberfläche10:30–11:00
2. Linked Data & JSON-LDRDF, Linked Data11:00–11:30
JSON, JSON-LD, LOUD11:30–12:00
Daten und Abfragemöglichkeiten GND12:00–12:30
Pause
Daten und Abfragemöglichkeiten Verbundkatalog13:30–14:00
3. OpenRefine ReconciliationGrundlagen von OpenRefine und Reconciliation14:00–14:30
Verbesserung des Matching auf GND-Einträge14:30–15:00
Datenanreicherung auf Basis der Matches15:00–15:30

Teil 1:
Offene Infrastruktur

lobidlobid-Dienste und Nutzungsbeispiele10:00–10:30
GNDGND, lobid-gnd, Rechercheoberfläche10:30–11:00

Hochschulbibliothekszentrum des Landes Nordrhein-Westfalen, seit 1973

Dienstleistungs- und Entwicklungseinrichtung für digitale Services in Hochschulbibliotheken

Einige Arbeitsbereiche: Verbundkatalog, Suchportal DigiBib, Fernleihe, Konsortiale Erwerbung

hbz-Gruppe Offene Infrastruktur

Neue Gruppe seit September 2019

Entstanden aus der 3-köpfigen Stabstelle Linked Open Data

Arbeitsschwerpunkt & Hauptprodukt ist lobid

lobid steht für Linking Open Bibliographic Data

Seit fast zehn Jahren die zentrale Komponente der offenen Infrastruktur im hbz

Stellt intuitive, web-basierte Rechercheoberflächen und Schnittstellen bereit

lobid-Dienste

lobid-resources: Daten des hbz-Verbundkatalogs

lobid-organisations: Daten des deutschsprachigen Sigelverzeichnisses und DBS-Stammdaten

lobid-gnd: Gemeinsame Normdatei

lobid-resources

Dokumentation der lobid-resources-API:
https://lobid.org/resources/api

lobid-organisations

Dokumentation der lobid-organisations-API:
https://lobid.org/organisations/api

lobid-gnd

Dokumentation der lobid-gnd-API:
https://lobid.org/gnd/api

lobid – ein zentraler Knoten bibliothekarischer Dateninfrastruktur

lobid: Nutzungsbeispiele

Verbundbibliotheken auf hbz-Website

Basiert auf lobid-Organisationsdaten

VZG-Standortverzeichnis

Basiert auf lobid-Organisationsdaten

Edoweb und Fachrepositorium Lebenswisschenschaften (FRL)

Enge Integration der lobid-Verbunddaten und des lobid-Datenmodells

In Publisso auch GND-ID-Lookup via lobid

GND-Lookup im Fachrepositorium Lebenswissenschaften

NWBib

Webanwendung, die nahezu vollständig auf lobid-Daten basiert

Nutzt das NWBib-Subset in den lobid-Verbunddaten

Informationen zu besitzenden Bibliotheken aus lobid-Organisationsdaten

Themenvorschläge auf Basis von lobid-gnd

NWBib-Suchergebnisliste

Anfrage gegen das NWBib-Subset in lobid-Verbunddaten

Informationen zu besitzenden Bibliotheken (Name, URL, Standort) werden aus lobid geladen

Bibliothekskatalog des Juristischen Seminars der ULB Bonn

Basiert auf täglich aktualisierten lobid-Daten

Discovery-Index der UB Dortmund

Titeldaten zu den Beständen der UB & einiger umliegender Bibliotheken
werden täglich von lobid geholt, transformiert und in den Index geladen

Virtuelle Deutsche Landesbibliographie

Seit April 2018 ist nwbib.de in die VDL integriert

Kalliope

Anzeige von externen Links (z.B. Wikipedia) aus lobid-gnd auf Personenseiten

Abgleich und Anreicherung lokaler Archivdaten mit der GND

Unter Nutzung von OpenRefine und der entsprechenden lobid Reconciliation API

Infoboxen zu Personen aus der GND

Außerdem Nutzung der lobid Reconciliation API zum
Mappen großer Mengen von Personendaten auf die GND

Beispiel: lobid-gnd

Rechercheoberfläche & LOD-API für die GND

Die Gemeinsame Normdatei (GND)

Normdatei für Bibliotheken im deutschsprachigen Raum

Datensätze für Personen, Körperschaften, Konferenzen & Veranstaltungen, Geografika, Schlagwörter, Werke

Für die formale Erfassung einer Ressource und für die inhaltliche Erschließung

In den letzten Jahren wird die GND vermehrt auch von Archiven, Museen und Wissenschaftler*innen genutzt

Die GND-Kooperative

Verantwortlich für die GND ist die GND-Kooperative

Die GND-Kooperative besteht hauptsächlich aus den deutschsprachigen Bibliotheksverbünden, den angeschlossenen Bibliotheken sowie der Deutschen Nationalbibliothek (DNB) als technischer Hoster

GND als LOD von der DNB

Die DNB publiziert die GND unter anderem als Linked Open Data (LOD) unter https://data.dnb.de/opendata/

Zusätzliche Anreicherungen, z.B. Links in EntityFacts

Diese Daten bilden die Grundlage für lobid-gnd

Die Oberfläche

Auto Suggest

Ergebnisliste

Einzeltreffer

Beziehungsgraph

Übung

Probiert die auf den vorigen Folien beschriebene Oberfläche von lobid-gnd aus (die Screenshots verlinken auf die entsprechenden Seiten)

Teil 2:
Linked Data & JSON-LD

StandardsRDF, Linked Data11:00–11:30
APIsJSON, JSON-LD, LOUD11:30–12:00
lobid-gndDaten und Abfragemöglichkeiten GND12:00–12:30
lobid-resourcesDaten und Abfragemöglichkeiten Verbundkatalog13:30–14:00

Übung

Verschicke einen Link zum Buch "With Reference to Reference" von Catherine Elgin

1: OPAC -> http://okeanos-www.hbz-nrw.de/F

2: lobid-resources -> https://lobid.org/resources

Ziele

Überführung traditioneller bibl. Praktiken in das Web

Sichtbarkeit und Auffindbarkeit im Web erreichen

Nachnutzbarkeit ermöglichen

Synergieeffekte durch Verlinkung mit anderen Daten

Verbesserung der Recherchemöglichkeiten

Quelle: Pohl, Adrian / Ostrowski, Felix (2010): 'Linked Data' - und warum wir uns im hbz-Verbund damit beschäftigen." B.I.T. Online 13(3): S. 259-268. Preprint: http://www.hbz- nrw.de/dokumentencenter/produkte/lod/aktuell/pohl_ostrowski_2010_linked-data.pdf

Linked Data: Best Practices

  1. Nutze URIs als Namen für Dinge
  2. Nutze HTTP-URIs, so dass Menschen sie aufrufen können
  3. Wenn jemand einen URI aufruft, biete nützliche Informationen an unter Nutzung der Standards (RDF, SPARQL)
  4. Nimm Links zu anderen URIs auf, so dass weitere Dinge entdeckt werden können.

Tim Berners-Lee (2006ff): Linked Data – Design Issues

RDF & The Semantic Web
– cutting edge seit 1999

Linked Data

Ultimately, RDF and the Semantic Web are of no interest to Web developers. They also have a really negative public perception problem. We should stop talking about them. Let’s shift the focus to be on Linked Data, explaining the problems that Web developers face today, and concrete, demonstrable solutions to those problems.

– Manu Sporny, damals Vorsitzender der RDFa Working Group beim W3C, der JSON-LD Community Group & Mitglied weiterer Semantic-Web-Gruppen, beim Schreiben an der JSON-LD-Spezifikation
Sporny (2012)

Linked Open Data

Wissen ist offen, wenn jedeR darauf frei zugreifen, es nutzen, verändern und teilen kann – eingeschränkt höchstens durch Maßnahmen, die Ursprung und Offenheit des Wissens bewahren.

http://opendefinition.org/od/2.1/de/

Linked Open Usable Data

Quelle: Rob Sanderson auf Twitter
Siehe auch Rob Sanderson's Europeanatech 2018 Keynote (Slides, Aufzeichnung)

"Using data"?

Daten werden mit existierender Software bearbeitet (ausgewertet, ergänzt, integriert etc.)

Entwicklung neuer Software zur Interaktion mit Daten

LOUD: Orientierung auf Bedürfnisse und Konventionen rund um Software (Entwicklung, Standards, etc.)

Nützliche Daten: Zielgruppe kennen & eigene Angebote auf sie ausrichten

Hauptzielgruppe: Entwickler*innen oder Nutzer*innen von Software für Datenzugriff und -manipulation

APIs

Application Programming Interfaces (Programmierschnittstellen)

Software baut auf APIs auf

APIs machen Softwareentwicklung handhabbar
(für 1st- und 2nd-Party-Software)

APIs ermöglichen Nutzung und Integration
von 3rd-Party-Software

Zum Bsp. lobid-Formate und -Anwendungen

APIs entkoppeln Anwendungen von Datenquellen, Formaten und Systemen. Sie ermöglichen so modulare, zukunftsfähige Applikationen

Und wie APIs bereitstellen?

JSON über HTTP

Der Web-API-Standard seit Jahren, siehe z.B. Target (2017)

The Rise and Rise of JSON

Quellen: Google Trends, Web Data Commons, W3Techs

JSON

Ein einfaches Key-Value-Format für strukturierte Daten

Key ist immer ein String

Value ist String, Number, Boolean, Array oder Object

{ "foo": "bar" }

Quelle: RFC 8259

Beispiel: GET
https://lobid.org/organisations/DE-1a


{
  "linkedTo" : {
    "id" : "http://lobid.org/organisations/DE-601#!",
    "label" : "Verbundzentrale des GBV (VZG)"
  },
  "rs" : "110000000000",
  "address" : {
    "addressLocality" : "Berlin",
    "type" : "PostalAddress",
    "addressCountry" : "DE",
    "postalCode" : "10772"
  }
  ...
				

cURL

Kommandozeilen-Tool zum Datentransfer mit URLs

https://curl.haxx.se/download.html

https://www.mycompiler.io/new/bash

$ curl --help

Übung: cURL

cURL

$ curl "https://lobid.org/organisations/DE-1a"
									
Copy
/Paste

# Kopieren und im Terminal einfügen (s. Hinweise unten)
$ curl "https://lobid.org/organisations/DE-1a"
									
History

$ ↑ # Auf die Kommandozeilen-History zugreifen
$ curl "https://lobid.org/organisations/DE-1a"
									

(Für Copy/Paste in GUI: CTRL+c bzw. CTRL+v.
Im Terminal: SHIFT+CTRL+c bzw. SHIFT+CTRL+v. )

Antwort


$ curl https://lobid.org/organisations/DE-1a
{
  "linkedTo" : {
    "id" : "http://lobid.org/organisations/DE-601#!",
    "label" : "Verbundzentrale des GBV (VZG)"
  },
  "rs" : "110000000000",
  "address" : {
    "addressLocality" : "Berlin",
    "type" : "PostalAddress",
    "addressCountry" : "DE",
    "postalCode" : "10772"
  },
...
				

Ausgabe ist lang, oft wollen wir nur bestimmte Werte

JavaScript Object Notation (JSON)


var options = {
  url: 'https://lobid.org/organisations/DE-1a'
};

request(options, function (error, response, body) {
  var doc = JSON.parse(body);
  console.log('postal code:', doc.address.postalCode) // <--
});
				

> postal code: 10772
				

jq

Ein flexibles Kommandozeilen-Tool zur JSON-Verarbeitung

https://stedolan.github.io/jq/

https://jqplay.org/

$ jq --help

Übung: JSON mit jq (1)


$ curl "https://lobid.org/organisations/DE-1a" \
| jq .name # filter: .name
				

Übung: JSON mit jq (2)

Kosten-
träger

$ curl "https://lobid.org/organisations/DE-1a" | jq <???> # dt. Bezeichner für den Kostenträger
								
Modifikations-
datum

$ curl "https://lobid.org/organisations/DE-1a" | jq <???> # Datum der letzten Modifikation
								

Übung: JSON mit jq (3)

Kosten-
träger

$ curl "https://lobid.org/organisations/DE-1a" | jq .fundertype.label.de
								
Modifikations-
datum

$ curl "https://lobid.org/organisations/DE-1a" | jq .mainEntityOfPage.dateModified
								

JSON + Linked Data = JSON-LD

JSON-LD

"designed to be usable directly as JSON, with no knowledge of RDF" – Es ist richtiges JSON!

"also designed to be usable as RDF"

https://www.w3.org/TR/json-ld/

JSON

$ curl -H "Accept: application/json" https://api.github.com/users/acka47

{
  "login": "acka47",
  "avatar_url": "https://avatars2.githubusercontent.com/u/160292?v=4",
  "url": "https://api.github.com/users/acka47",
  "type": "User",
  "name": "Adrian",
  "company": "hbz",
  "location": "Cologne, Germany",
  "bio": "Metadata, RDF, vocabularies. Working at @hbz. "
}
				

JSON + @context + @id = JSON-LD


{
  "@context": "http://schema.org/",
  "@id": "https://github.com/users/acka47",
  "login": "acka47",
  "avatar_url": "https://avatars2.githubusercontent.com/u/160292?v=4",
  "url": "https://api.github.com/users/acka47",
  "type": "User",
  "name": "Adrian",
  "company": "hbz",
  "location": "Cologne, Germany",
  "bio": "Metadata, RDF, vocabularies. Working at @hbz. "
}
				

Entwicklung der lobid-Technologie

2010-2013: Alpha-Betrieb mit RDF & SPARQL

2013-2017: lobid v1.x mit JSON-LD aber noch nicht sehr intuitiv nutzbar (JSON-LD als RDF-Serialisierung)

seit 2017: richtig LOUDe lobid v2 plus OpenRefine-Schnittstellen

Von LOD zu LOUD – Erfahrungen aus zehn Jahren Linked-Open-Data-Entwicklung am hbz

Beispiel: lobid-gnd

a. Die Daten

JSON-LD-Link

 
 
 

JSON(-LD)

b. Web-API

Abfragemöglichkeiten

JSON-LD-Daten in Elasticsearch-Index

Elasticsearch bzw. Lucene Suchsyntax

Für Einzeltreffer: RDF per Content Negotiation

API für Auto Suggest

API für Bulk Downloads

OpenRefine Reconciliation | API

Übung: Suchsyntax

Übung: Suchsyntax

Feldsuche

??? # <field>:<term>
								
Boolsche Suche

??? # AND, OR
								
Trunkierung

??? # Trunkieren mit *
								
Intervalle

??? # <feld>:[* TO <???>]
								
Existenz

??? # _exists_:<field>
								

Elasticsearch 'query string' Dokumentation

Suchsyntax: Lösungen

Feldsuche

abbreviatedNameForTheCorporateBody:zbiw
								
Boolsche Suche

Kunst AND (Kultur OR Wissenschaft)
								
Trunkierung

professionOrOccupation.label:Politiker*
								
Intervalle

dateOfBirth:[* TO 1500]
								
Existenz

_exists_:dateOfBirth
								

Elasticsearch 'query string' Dokumentation

Alles kombinierbar

Personen, die während der NS-Zeit in Köln geboren wurden

Übung

Suche nach allen Personen in der GND, die in Köln geboren wurden und in Düsseldorf gestorben sind

lobid-gnd: Formulierung komplexer Suchanfragen

Übung: Lösung

Suche nach allen Personen in der GND, die in Köln geboren wurden und in Düsseldorf gestorben sind

Pause

Beispiel: lobid-resources

a. Die Oberfläche

b. Die Daten

Datenherkunft & -generierung

Tägl. Bezug der XML-Daten über den Aleph-Publishing-Mechanismus

Konversion nach N-Triples mit Metafacture (Morph)

Dabei finden verschiedene Normalisierungsarbeiten statt

Labels für verlinkte Ressourcen ergänzen

Et voilà: Linked Open Usable Data (LOUD)

Verbesserung der Daten: Beispiele

MARC-Relator-Codes werden aus RAK-Nebeneintragungen generiert (Morph für Personennebeneintragungen)

Normalisierung von Jahresangaben

Mapping von Informationen aus 050, 057, 058, 334, 652a, 9--, 400/403 etc. auf eine Liste von Publikations- und Medientypen (Morph)

c. Web-API

Abfragemöglichkeiten

JSON-LD-Daten in Elasticsearch-Index

Elasticsearch bzw. Lucene Suchsyntax

Abfrage nach gelöschten Titeln (ab 2018-04-04)

API für Auto Suggest

API für Bulk Downloads

Beispielabfragen

Ermitteln eines hbz-Titels anhand der OCLC-Nummer

oclcNumber:601339369

RDA-Titel seit 2010


title:rda AND
publication.startDate:[2010 TO *]
				

Online-Medien mit Bestand


medium.id:
"http://rdaregistry.info/termList/ RDACarrierType/1018"
AND _exists_:hasItem
				

ZDB-Titel, die mit einer NWBib-Systematik erschlossen sind, aber nicht der NWBib zugerechnet werden und von der ULB Bonn erstellt wurden


subject.source.id:
  ("https://nwbib.de/subjects" OR
   "https://nwbib.de/spatial")
AND inCollection.id:
  "http://lobid.org/resources/HT014846970#!"
AND NOT inCollection.id:
  "http://lobid.org/resources/HT014176012#!"
AND describedBy.sourceOrganization.id:
  "http://lobid.org/organisations/DE-5#!"
				

Deletions Endpoint: Vom 14. bis 23.2.2019 gelöschte Titel


describedBy.deleted:[20190214 TO 2019023]
				

Kibana-Visualisierungen

http://kibana.lobid.org/app/kibana#/visualize
(zugriffsbeschränkt)

Balkendiagramm: Häufigkeit von Berufsangaben in der GND

Balkendiagramm: Häufigkeit von sameAs-Links in lobid-GND

Kuchendiagramm: Bestand nach Einrichtung in lobid-resources

Balkendiagramm: Publikationsdatum in lobid-resources>

Tagcloud: Top 150 GND-Schlagwörter in lobid-resources

Teil 3:
OpenRefine Reconciliation

GrundlagenGrundlagen von OpenRefine und Reconciliation14:00–14:30
MatchingVerbesserung des Matching auf GND-Einträge14:30–15:00
ExtensionDatenanreicherung auf Basis der Matches15:00–15:30

OpenRefine

"A powerful tool for working with messy data"

"cleaning it; transforming it from one format into another; and extending it with web services and external data"

Oberfläche wie Tabellenkalkulation

Läuft im Browser, lokal oder gehostet

OpenRefine

https://openrefine.org/download.html

https://openrefine.labs.lobid.org

Reconciliation mit OpenRefine

Matchen eigener Daten (z.B. Liste von Namen aus Texten) auf GND-Ressourcen in OpenRefine

Übernahme von Daten aus spezifischen Feldern der gematchten GND-Einträge mittels Data Extension API

Grundlegendes Vorgehen

Übung


name;beruf;ort
J. Weizenbaum;Informatiker;Berlin
Twain, Mark;Schriftsteller;
Kumar, Lalit;;
Jemand;;
				

https://lobid.org/gnd/reconcile
				

(Daten und URL per CTRL+C in die Zwischenablage kopieren)

Daten erweitern

Übung


id,name
1,Haddaway
2,Johannes Geßner
3,Judith Kuckart
4,Rosa Luxemburg
5,Albert Einstein
6,Hazel Brugger
7,Anne Cuneo
8,Vitus Huonder
				

Reconcile, Berufe und Wirkungsorte ergänzen

Ergebnisse verbessern

Übung

Properties zur Verbessung der Matches

Auf Basis von konreten Anfragen durch Nutzer

1. Beispiel: Lebensdaten

2. Beispiel: Beruf & Parteizugehörigkeit

http://blog.lobid.org/2019/09/30/openrefine-examples.html

https://lobid.org/gnd/reconcile

Weiterführende Informationen –
Rund um lobid und Linked Data

Weiterführende Informationen – Nutzung von lobid-gnd