JSON-LD in Lobid

Fabian Steeg, Linked Open Data, hbz NRW

hbz, Köln, 2016-08-18

Diese Präsentation:
http://hbz.github.io/slides/lobid-jsonld

Lobid

Linked-Data-Dienst des hbz: Web-APIs für Titel- und Normdaten

Verschiedene Anwendungen nutzen die Lobid-APIs:
Nordrhein-Westfälische Bibliographie, Organisationsverzeichnis, Edoweb, Publisso

APIs liefern, Anwendungen nutzen: JSON-LD

JSON-LD in der Lobid-API

JSON


{
  "name": "Hochschulbibliothekszentrum des Landes Nordrhein-Westfalen",
  "isil": "DE-605",
  "fundertype": {
    "id": "http://purl.org/lobid/fundertype#n02",
    "label": "Land",
    "label_en": "Federal State"
  }
}
					

JSON-Objekte sind auf Attribut-Wert-Paare abbildbar
(je nach Sprache z.B. als Map, Dictionary, Hash)

JSON for Linking Data

Attribute per Kontext mit eindeutigen URIs assoziieren


{	
  "@context": {
    "name": "http://schema.org/name",
    "isil": "http://purl.org/lobid/lv#isil"
  },
  "name": "Hochschulbibliothekszentrum des Landes Nordrhein-Westfalen",
  "isil": "DE-605"
}
					

Kontext kann als externes Dokument referenziert werden:


{	
  "@context": "http://beta.lobid.org/organisations/context.jsonld",
  "name": "Hochschulbibliothekszentrum des Landes Nordrhein-Westfalen",
  "isil": "DE-605"
}
					

Warum JSON-LD für die Lobid-API?

JSON für Web-Entwickler vertrautes Format

JSON in Elasticsearch indexierbar

JSON-LD RDF-kompatibel

JSON-LD
produzieren und konsumieren

Zwei Sichtweisen auf JSON-LD:

JSON-LD als JSON mit erweitertem Anwendungsfall: Linking Data
→ produzieren und konsumieren mit JSON-Tools

JSON-LD als eine von vielen RDF-Serialisierungen
→ produzieren und konsumieren über RDF-Modell

Produzieren: RDF vs. JSON

Sichtweisen haben Auswirkungen darauf, wie das JSON-LD aussieht

Transformation zu N-Triples, JSON-LD erzeugen über jsonld-java:
http://lobid.org/organisation?id=DE-605&format=full

Transformation zu JSON, JSON-LD entsteht allein durch Kontext:
http://beta.lobid.org/organisations/DE-605?format=json

Produzieren: RDF & JSON

JSON & RDF: keine diskreten Sichtweisen, sondern ein Kontinuum

Transformation zu N-Triples, JSON-LD erzeugen über jsonld-java:
http://lobid.org/resource?id=HT002189125&format=full

Transformation zu N-Triples, JSON aus RDF-Modell erzeugen:
http://lobid.org/resources/HT002189125

Warum nicht komplett aus RDF generiertes JSON?

Einfachere Verarbeitung durch API-User

Direkt address holen, weiterverarbeiten

{
  "location": {...},
  "address": {...}
}

Jeweils @id holen, Wert prüfen, wenn address: weiterverarbeiten

"@graph": [
  {"@id": "location", ... },
  {"@id": "address", ...}
]

Direkte Nutzung der Struktur in Elasticsearch

Query gegen prefLabel.en direkt in Elasticsearch query string
(und API-Anfragen, dadurch Query-Möglichkeiten transparent)

prefLabel: {
 "de": "Land",
 "en": "Federal State"
}

So nicht möglich bei generierter Struktur

prefLabel: [
  {@language: "de", @value: "Land"},
  {@language: "en", @value: "Federal State"}
]

JSON-LD ist nicht gleich JSON-LD

Links

Lobid API 1.x http://lobid.org/api
Lobid-Organisations 2.0 API http://beta.lobid.org/organisations/api
Issue mit Beispielen für Lobid-Resources 2.0 https://github.com/hbz/lobid-resources/issues/79

Blog-Post zu den Problemen mit generiertem JSON-LD http://fsteeg.com/notes/one-issue-with-json-ld-that-seems-not-so-pragmatic