JSON-LD
| JSON-LD | |
|---|---|
| Dateiendung: | .jsonld |
| MIME-Type: | application/ld+json |
| Entwickelt von: | World Wide Web Consortium (W3C) |
| Aktuelle Version | 1.0 (16. Januar 2014) |
| Art: | konkrete Syntax von RDF |
| Container für: | Linked Data |
| Erweitert von: | JSON, RDF |
| Standard(s): | JSON-LD 1.0 JSON-LD 1.0 Processing Algorithms and API (W3C Recommendations) |
| json-ld.org | |
{
"@context": {
"dbpedia": "http://dbpedia.org/resource/",
"dbp-owl": "http://dbpedia.org/ontology/",
"geo": "http://www.w3.org/2003/01/geo/wgs84_pos#",
"bornOn": {
"@id": "dbp-owl:birthDate",
"@type": "http://www.w3.org/2001/XMLSchema#date"
},
"bornIn": "dbp-owl:birthPlace"
},
"@id": "dbpedia:Albert_Einstein",
"bornOn": "1879-03-14",
"bornIn": {
"geo:alt": "482",
"comment": "drop me"
}
}
|
{
"@context": {
"enti": "http://dbpedia.org/resource/",
"onto": "http://dbpedia.org/ontology/",
"Geburtsdatum": "onto:birthDate",
"Geburtsort": "onto:birthPlace",
"Ortshöhe": "http://www.w3.org/2003/01/geo/wgs84_pos#alt",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"JJJJ-MM-TT": "xsd:date",
"Typ": "@type"
},
"@graph": [
{
"@id": "_:b0",
"Ortshöhe": "482"
},
{
"@id": "enti:Albert_Einstein",
"Geburtsdatum": {
"Typ": "JJJJ-MM-TT",
"@value": "1879-03-14"
},
"Geburtsort": {
"@id": "_:b0"
}
}
]
}
|
[
{
"@id": "_:b0",
"http://www.w3.org/2003/01/geo/wgs84_pos#alt": [
{
"@value": "482"
}
]
},
{
"@id": "http://dbpedia.org/resource/Albert_Einstein",
"http://dbpedia.org/ontology/birthDate": [
{
"@type": "http://www.w3.org/2001/XMLSchema#date",
"@value": "1879-03-14"
}
],
"http://dbpedia.org/ontology/birthPlace": [
{
"@id": "_:b0"
}
]
}
]
| |
Durch das @graph-Element können sich hier mehrere Knoten-Objekte denselben Kontext teilen.
Unabhängig von der Form besagt der darin enthaltene Graph, wann Albert Einstein geboren wäre und auf welchem Höhenmeter (WGS84) sein Geburtsort läge. Oder in Tripel-Notation (N-Triples, siehe auch: Turtle):
<http://dbpedia.org/resource/Albert_Einstein> <http://dbpedia.org/ontology/birthDate> "1879-03-14"^^<http://www.w3.org/2001/XMLSchema#date> . <http://dbpedia.org/resource/Albert_Einstein> <http://dbpedia.org/ontology/birthPlace> _:b0 . _:b0 <http://www.w3.org/2003/01/geo/wgs84_pos#alt> "482" .
Hilfsverfahren
[Bearbeiten | Quelltext bearbeiten]Als interne Hilfsverfahren treten u. a. auf
- Kontextverarbeitung (Context Processing Algorithm): Kontexte können kombiniert und per IRI referenziert werden. Ergebnis dieser Operationen ist jeweils wieder ein Kontext (Akkumulation). Dabei müssen u. U. zyklische Bezüge abgewiesen werden.
- Erzeugung einer Term-Definition (Create Term Definition): Diese tritt immer auf, wenn eine Definition aus einem Kontext in den (aktiven) Ergebniskontext einfließt. Auch hierbei werden zirkelhafte Bezüge aufgedeckt und zurückgewiesen.
- Erzeugung einer Zugriffsstruktur (Node Map Generation), welche nach den Subjekten gruppiert und Knoten-Objekte mit gleicher @id verschmilzt (siehe Verflachen).
Bisher u. a. nicht erwähnt: IRI Expansion, Value Expansion, Inverse Context Creation, IRI Compaction, Term Selection, Value Compaction, Generate Blank Node Identifier.
Diese Verfahren sind jedoch nicht für das API (s. u.) empfohlen, wenngleich sie (in äquivalenter Form) kaum verzichtbarer Bestandteil einer Implementierung desselben sind.[30]
Bezug zu RDF
[Bearbeiten | Quelltext bearbeiten]Daneben ist die Serialisierung vom, sowie die Deserialisierung zum abstrakten RDF-Modell (benannte Mengen von Tripeln bzw. Graph-Mengen) definiert und damit indirekt die Wandlung zu bzw. von jeder (anderen) konkreten RDF-Syntax. Des Weiteren wird darüber die Verbindung zur Semantik von RDF[31] hergestellt. Dies beinhaltet u. a. die Korrespondenz der primitiven JSON-Typen und -Literale mit denjenigen von XML Schema und diejenige der JSON-LD-Listen mit denen von RDF-Schema. (Nicht erwähnt hierbei u. a.: Sprachkennzeichnung von Strings).
MIME-Typ-Parameter
[Bearbeiten | Quelltext bearbeiten]Der MIME-Typ von JSON-LD sieht einen optionalen Parameter „profile“ vor. Sein Wert (ein IRI aus dem JSON-LD-Namensraum[32]) korrespondiert mit den drei genannten Formen.
Beispiel eines MIME Types im HTTP-Accept-Header:
Accept: application/ld+json#compacted
Damit kann ggf. verhindert werden, dass Transformationen unnötig mehrfach ausgeführt werden bzw. in falscher Erwartung unterbleiben. Außerdem kann darüber der Ort der Verarbeitung ausgehandelt werden (beim Sender bzw. Empfänger).
API
[Bearbeiten | Quelltext bearbeiten]Schließlich wird die Programmierschnittstelle eines JSON-LD-Prozessors spezifiziert (JsonLdProcessor), jedoch nur nicht-normativ. Damit stünde ein einheitlicher Zugang zu den drei Transformations-Verfahren (Methoden: compact, expand, flatten) in Programmierumgebungen bereit, vorwiegend auch für das im Web-Umfeld verbreitete ECMAScript. Die Schnittstelle setzt auf der Promise-Abstraktion zur asynchronen Programmierung auf. Die Flatten- und Compact-Methoden aus dem API beinhalten Expansion (und IRI-Dereferenzierung).
Um seine Aufgabe zu erledigen, muss der Prozessor ggf. (rekursiv) externe Kontexte, die per IRI bzw. URL referenziert wurden, (von entfernter Seite, remote) aus dem Internet oder lokal aus einem Cache laden. Außerdem sollen meist die JSON-LD-Daten hinter IRIs geladen werden (Dereferenzierung). In diese Ladeprozedur kann über die definierte Schnittstelle eingegriffen werden (JsonLdOptions documentLoader).
In einer Umgebung, in der dieses API verfügbar ist (und anderes), würde das folgende CoffeeScript das Geburtsdatum von Albert Einstein laut DBpedia ausgeben (genauer: alle solchen verfügbaren, soweit kein Fehler auftritt).[33]
AlbertsIRI = "http://dbpedia.org/data/Albert_Einstein.jsonld"
# bzw. "http://dbpedia.org/resource/Albert_Einstein", siehe Anmerkung
dbpprop = "http://dbpedia.org/property/"
dbpprop$birthDate = dbpprop + "birthDate"
expanded = (new JsonLdProcessor).expand AlbertsIRI
expanded.then (subjects) ->
for subject in subjects
for object in subject[dbpprop$birthDate] ? []
console.log object['@value']
# Fehlerbehandlung weggelassen
Programmier-Schnittstellen zur Konvertierung zwischen JSON-LD und dem RDF-Modell sind zwar nicht Bestandteil des empfohlenen APIs. Der Entwicklungsprozess beim W3C hat aber auch dafür Beispiel-Implementierungen hervorgebracht (toRDF, fromRDF). Außerdem wandeln RDF-Frameworks bzw. -Programmbibliotheken auf dieser Grundlage zwischen ihrer jeweiligen RDF-Abstraktion und einer JSON-LD-Form. Siehe auch Abschnitt Programmbibliotheken und Werkzeuge.
Verarbeitung von JSON-LD
[Bearbeiten | Quelltext bearbeiten]Unabhängig von der Quelle eines JSON-LD-Textes: Dieselben Daten können als JSON-LD (in kompakter Form) interpretiert und vor der Verarbeitung expandiert oder nur als einfaches JSON geparst werden (wie vor einer Migration von JSON nach JSON-LD). Verschiedene Module können dies auch unterschiedlich handhaben.
Beispiel aus einer JavaScript-Umgebung (z. B. Webbrowser):
// JSON-Text in der Variablen data
// Modul A (ursprüngliche App ohne Bewusstsein für Linked Data)
var legacy = JSON.parse( data )
// Modul B (spätere Erweiterung fürs Semantische Web)
var advanced = (new JsonLdProcessor).expand( JSON.parse( data ) )
Einbettung in HTML
[Bearbeiten | Quelltext bearbeiten]Zur Einbettung von JSON-LD in HTML wird das Script-Element empfohlen:[3]
<script type="application/ld+json" id="json-ld-data">
{
"@context": ...
"@id": ...
"createdAt": ...
"author": ...
}
</script>
Dadurch kann eine Anwendung über das DOM darauf zugreifen, u. a. also auch ein JavaScript im Webbrowser:
// DOM
var data = document.getElementById( 'json-ld-data' ).textContent
// jQuery
var data = $( '#json-ld-data' ).text()
Mögliche Anwendungen dafür sind zunächst dieselben wie auch für RDFa, HTML Microdata u. a. Der Unterschied besteht hauptsächlich darin, wie die semantischen Daten technisch extrahiert werden. Die Bindung an HTML-Attribute und die Verzahnung mit dessen Elementstruktur entfällt hierbei. Nachteilig ist das hingegen in Umgebungen, die bisher allein mit (X)HTML-Werkzeugen auskamen (da sie nun auch JSON verarbeiten müssten).
Anwendungsbeispiele sind klassische Metadaten über das Dokument bis zu einer maschinenlesbaren Repräsentation des vollständigen Textinhalts (der parallel natürlichsprachlich formuliert für die Rezeption durch Menschen bestimmt ist). Dies könnte eine automatisch erstellte Auftragsbestätigung sein. Auch die nachträgliche Generierung oder Anreicherung eines solchen Inhalts abhängig von Vorgaben des Rezipienten wäre so noch möglich. Ebenso könnte ein persönlicher Assistent bzw. Software-Agent autonom darauf reagieren oder Aktionen anbieten. (Siehe auch: Abschnitt Anwendungen und Anwender)
Anforderung von JSON-LD
[Bearbeiten | Quelltext bearbeiten]Ein JSON-LD-Kontext oder Daten in diesem Format werden über HTTP vorzugsweise mit dem zugehörigen MIME-Typ angefordert. (Dabei kann es zu Verhandlungen über den Inhaltstyp und Weiterleitungen kommen (Statuscode 3xx, Location-Header).)
Probeweise Anforderung zum Beispiel mit cURL (in der Bash mit einer URL in der Variablen $URL):
curl -i -L -H "Accept: application/ld+json" "$URL"
Im positiven Fall ist die (letzte) Antwort vom entsprechenden Inhaltstyp und enthält verwertbares JSON-LD.
(Anmerkung zum MIME-Typ selbst: application/ld+json basiert (im Sinne von RFC 6838[34]) auf einem Structured Syntax (Name) Suffix „+json“, das in RFC 6839[35] registriert ist.)
Besonders im Umfeld von Linked Data ist bei Inhalt vom Typ application/json Vorsicht geboten, weil dieser in Wirklichkeit u. a. auch vom inkompatiblen Format RDF/JSON sein kann, siehe auch Abschnitt Vorgänger und Alternativen.
Dienstnehmer sollten gegenüber dem Erbringer des Dienstes (1) möglichst eine klare Präferenz für „ld+json“ zum Ausdruck bringen (ggf. per q-Parameter im Accept-Header) und (2) bei allen anderen „json“-Typen auf eine contextURL im Link-Header achten (siehe auch: Abschnitt Alternative Kontextualisierung). Ansonsten riskieren sie, sonstige JSON-Daten zu erhalten (die in der JSON-LD-Sicht zu einer leeren oder andersartig unerwarteten Tripelmenge expandieren), ohne dass dies (vom Standard-API) als Fehler signalisiert werden würde.
Für die reibungslose Kommunikation mit möglichst vielen Datenquellen kann daher eine benutzerdefinierte Ladeprozedur (custom document loader) erforderlich sein, siehe Abschnitt API.
Generell unproblematisch(er) sind URLs, welche einen eindeutigen Hinweis auf das gewünschte Format bereits enthalten (etwa durch die Endung „.jsonld“ oder durch einen entsprechenden Datentyp- bzw. Format-Parameter). Dieses Verfahren ist zum Bezug eines JSON-LD-Kontextes meist ausreichend. (Bei der Anforderung von Linked Data zu einer (per URL referenzierten) Entität widerspräche es jedoch Grundsätzen aus diesem Umfeld.[33] Beispielsweise müsste einer Dienstbeschreibung zur jeweiligen Quelle erst entnommen werden, wie diese URL zu bilden wäre. Generische bzw. anpassungsfähige Verfahren werden daher bevorzugt.)
Programmbibliotheken und Werkzeuge
[Bearbeiten | Quelltext bearbeiten]Implementierungen des empfohlenen APIs sowie zusätzlicher Funktionen zur Verarbeitung von JSON-LD gibt es bereits für mehrere Programmiersprachen (Stand Juni 2014).
Die folgenden gelten als konform zur Spezifikation, basierend auf den Test-Reports zur zugehörigen Testsammlung:[36][37]
- für JavaScript von Digital Bazaar, Inc. (Browser, Node.js, Kommandozeile, Web-App)
- für Python PyLD von Digital Bazaar, Inc.
- für PHP von Digital Bazaar, Inc., von Markus Lanthaler
- für Ruby innerhalb von Ruby RDF
- für Java von jsonld-java auf Github
- für C# innerhalb von NuGet
Wandlung zwischen JSON-LD und anderen Formaten:
- von RDFa: (u. a. auch nach JSON-LD) mittels RDFa 1.1 Distiller and Parser von Ivan Herman (seit November 2011)
- RDF Translator[38] (RDFLib-basiert)
- über ein Plugin innerhalb von RDFLib bei Github
- in Ruby als Erweiterung zu RDF.rb im Ruby RDF Project
Vorgänger und Alternativen
[Bearbeiten | Quelltext bearbeiten]Weder ist JSON-LD aus dem Nichts entstanden, noch ist die gewählte Struktur zur Repräsentation von Linked Data im Allgemeinen und der Serialisierung von RDF im Besonderen die einzig mögliche.
Veranschaulicht man die Serialisierungs-Struktur von JSON-LD bezüglich RDF-Tripeln S(ubjekt), P(rädikat), O(bjekt) folgendermaßen (flache Form)
[ { "@id": "S", "P": [ O ] } ]
dann stellt sich die von RDF/JSON so dar:[9][39]
{ "S": { "P": [ O ] } }
wobei für Objekte O per „type“ zwischen Literalen und Ressourcen unterschieden wird:
{ "type": "literal", "value": ..., "datatype": … }
{ "type": "uri", "value": … }
(„[ O ]“ symbolisiert hierbei die Gruppierung von Objekten mit gleichem Subjekt und Prädikat in einem JSON-Array.)
RDF/JSON (vereinzelt auch: Talis RDF/JSON) wurde vom W3C zugunsten von JSON-LD nicht weiter verfolgt.[40]
Auch anzutreffen ist das flache Tripel-Schema[9]
[ { "s": {"uri": S}, "p": "P", "o": O } ]
Fundamentale Konzepte sind über die Arbeit an RDFj[41] in LD-JSON eingeflossen, die teilweise aus dem Jahr 2004 stammt.[3]
Über ein Dutzend weitere Ansätze, RDF-Tripel in JSON abzubilden, listet allein das W3C schon 2011 in seinem Wiki auf.[42]
Alternativen im engeren Sinne wären (1) gültiges JSON und hätten (2) einen Bezug zu RDF. Serialisierungsformen von RDF bzw. Transportformen für Linked Data, die nicht nach JSON führen, werden hier nicht als Alternativen im engeren Sinne behandelt. (Siehe ggf. bei Linked Data, RDF.)
Zu den folgenden Formaten demonstriert die Empfehlung[3] anhand von Beispielen, dass JSON-LD die darin enthaltenen semantischen Daten ausdrücken könne:
Zu einigen davon gibt es zwar gesonderte JSON-Formen (die Überbleibsel des Quellformats enthalten). Als langfristige Alternative erscheinen sie so nur noch unter dem Aspekt der Kompatibilität.
Alternative: Microdata+JSON
[Bearbeiten | Quelltext bearbeiten]HTML Microdata vom W3C ist erklärtermaßen mit RDF kompatibel[43] und beinhaltet eine gesonderte Konvertierung nach JSON. Indirekt kann es daher als Alternative zu JSON-LD betrachtet werden. Die Verbindung mit einer Markup-Sprache ist jedoch gerade das, wovon JSON-LD vollkommen frei ist.
Schema:
{"items": [
{ "id": "S", "properties": { "P": [ O ] } }
] }
Alternative: SPARQL-Anfrage-Ergebnis
[Bearbeiten | Quelltext bearbeiten]Für das Ergebnis von SPARQL-Anfragen wurde eine JSON-Form normiert.[44] Geht es nur um die Verarbeitung solcher Ergebnisse, stellt dies eine (beschränkte) Alternative dar.
Das Ergebnis von SELECT-Anfragen sind Variablen-Bindungen, keine gewöhnlichen Tripelmengen. CONSTRUCT-Anfragen liefern hingegen Tripelmengen. Für CONSTRUCT-Anfragen bindet beispielsweise Virtuoso die Variablen „s“, „p“ und „o“ (Vergegenständlichung).[45] In keinem Fall entspricht das Muster dem von JSON-LD.
Allerdings können SPARQL-Endpunkte (wie die von Virtuoso) bei CONSTRUCT- und DESCRIBE-Anfragen die Tripelmenge (neben vielen anderen konkreten RDF-Syntaxen) auch schon in JSON-LD liefern. Eine Vergegenständlichung erübrigt sich hierbei.
Anwendungen und Anwender
[Bearbeiten | Quelltext bearbeiten]Zu einigen frühen Anwendern, welche die Übernahme von JSON-LD in Produkte oder Dienste bis Juni 2014 zumindest angekündigt haben:[46]
Bereits im Mai 2013 hat Google angekündigt, JSON-LD zusätzlich zu HTML Microdata in seinen Produkten zu unterstützen. Beispielsweise kann in HTML-E-Mails eingebettetes JSON-LD beim Eintreffen in der Mailbox extrahiert werden. Dem Empfänger werden die semantischen Daten so bei seiner personalisierten Suche verfügbar gemacht oder Eintragungen in den Terminkalender angeboten.[47]
Auch Produkte von Microsoft können JSON-LD aus E-Mails lesen, um dem Empfänger darüber Dienste eines persönlichen Assistenten abhängig von Zeit und Aufenthaltsort anzubieten.[48] Voraussetzung dafür ist, dass der Absender dazu (ebenso wie bei Google) das Vokabular von Schema.org verwendet.
DBpedia liefert (verlinkte) Daten, neben vielen anderen Formaten, auch in JSON-LD aus. Das dazu verwendete Virtuoso bietet in seiner Open Source Edition JSON-LD Serialisierung mindestens seit November 2011 an.[49]
Schema.org bekennt sich seit Juni 2013 zu JSON-LD[50] und gibt Beispiele parallel zu RDFa und Microdata auch in JSON-LD. Seit Mitte Juni 2014 wird außerdem ein JSON-LD-Kontext bereitgestellt.[51][52] Wenig später zog auch FOAF gleich[53] und stellt sogar die Ontology (RDF-Schema/OWL) direkt in JSON-LD zur Verfügung.
Die erste RDF-Version von WordNet[54] (vorgestellt im April 2014)[55] liefert neben anderen RDF-Formaten auch JSON-LD schon seit Beginn (mittels RDFLib).
Es ist zu erwarten, dass viele bestehende oder neue Angebote von Linked Data früher oder später auch in diesem Format erfolgen werden.
Im Bereich der Web-APIs
[Bearbeiten | Quelltext bearbeiten]JSON wurde bis zur Entwicklung von JSON-LD als Mittel zur allgemeinen Diensterbringung (über JSON-basierte Web-APIs) genutzt. Der Transport von RDF-Daten oder das Wissensmanagement im Semantic Web (über die RDF-Technologien) an sich war nicht seine Domäne.
Wesentlich an der Entwicklung von JSON-LD Beteiligte sahen (nach eigenem Bekunden) den Wunsch nach besseren Web-APIs als Motivation für die Schaffung von JSON-LD, nicht das Semantic Web.[10] Auf diesem Wege zu den JSON-basierten Web-Diensten (die sich durch die Nutzung der semantischen Technologien (mittels JSON-LD) fast zwangsläufig nahtlos in die „Linked Data Cloud“ integrieren[7]) würde das Semantische Web jedoch schließlich Wirklichkeit werden.
Naheliegend ist die semantische Anreicherung der Nutz- bzw. Inhaltsdaten durch die Verwendung wohlbekannter und maßgeschneiderter Vokabulare für den jeweiligen Gegenstandsbereich (also für Produkt- und Dokumentbeschreibungen, Preisangaben, Angebote, Aufträge, Bezahlarten, Termine, Akteure usw.). Darüber hinaus ist aber auch der Einsatz zur Dienst- und Schnittstellenbeschreibung (API/service description) bereits Gegenstand von Forschung und Entwicklung.
Spätestens seit April 2012 wird JSON-LD im Zusammenhang mit dem REST-Stil für hypermedia-getriebene[56] Webdienste (der nächsten Generation) diskutiert.[57]
In Hydra[58] (das seit Juni 2013 auch Gegenstand einer W3C Community Group ist) kommt JSON-LD auf folgenden Ebenen zum Einsatz: (1) in den Nachrichten (mittels des API-Vokabulars des jeweiligen Dienstes), (2) in der (semantischen) API-Beschreibung (mittels des Hydra-Vokabulars sowie anderer wohlbekannter) und (3) in der Beschreibung des Hydra-Schemas zur API-Beschreibung (mittels des Vokabulars von RDF-Schema). In dieser Konstellation würde JSON-LD an die Stelle des XML in Ansätzen wie WSDL (inklusive SAWSDL) und WADL bzw. des HTML+RDFa in SA-REST sowie an diejenige des Mikroformats in hRESTS und MicroWSMO treten. Zugleich modelliert es REST wie WADL und MicroWSMO.[7]
Seit April 2014 gibt es neben Hydra ein weiteres (für JSON-LD ausgelegtes) Vokabular,[59] welches Einstiegspunkte (EntryPoint, target) in Dienste bzw. Operationen (mit Ein- und Ausgabe-Parametern) beschreiben kann: schema.org v1.2 beinhaltet dazu (potentielle) Aktionen (Action, potentialAction) wie Anhören, Kaufen, Teilen, Kommentieren, Durchsuchen usw.[60] Wie in Hydra können Eingabe-Elemente sogar an die Parameter von URL-Templates (nach RFC 6570[61]) geknüpft werden. Diese Elemente (PropertyValueSpecification) orientieren sich am Input-Element von HTML5, womit die Umsetzung in entsprechende Bedienelemente für den Benutzer weitgehend erklärt ist. Auf diese Weise erhält das HTML-freie JSON (über JSON-LD) die Fähigkeiten eines interaktiven Hypermediums. Dienste wie Suchmaschinen können damit allein aus einer RDF-Graphdatenbank, Suchergebnisse unmittelbar mit (semantisch eingeordneten) Interaktionsangeboten (externer Anbieter) verbinden. Voraussetzung ist, wie bei Hydra, ein generischer Interpreter oder Client für die jeweilige Informations-Struktur, weil es im Gegensatz zu HTML sonst keine „Browser“ dafür gibt. Die Tripel in der Datenbank können freilich auch aus jedem anderen RDF-Serialisierungsformat stammen. Inserenten bzw. Websitebetreiber sind zwar auf RDF (und Schema.org) festgelegt, nicht jedoch unbedingt auf JSON-LD.
Ansätze auf der Grundlage von JSON-LD (und damit RDF) stehen neben solchen, die zunächst direkt auf JSON aufsetzen. Neuere Versionen der Activity Streams (und der zugehörigen Action Handlers)[62] sehen jedoch bereits eine Verarbeitung als JSON-LD vor, indem sie zumindest einen (nicht-normativen) JSON-LD-Kontext beinhalten.
Generell können Spezifikationen, die auf JSON-LD und Hypermedia setzen, spätere Erweiterungen in die Vokabularschicht auslagern und relativ generische Anwendungsprogramme zur Laufzeit mit jeweils aktuellen Informationen zum API versorgen (wie über neue Aktionen bzw. Operationen und zugehörige Parameter und Rückgabewerte). Eine schwerfällige Abstimmung im Vorfeld oder nach Erweiterungen (durch den Informationsaustausch „außerhalb des Kanals“) soll damit weitgehend der Vergangenheit angehören.
Siehe auch
[Bearbeiten | Quelltext bearbeiten]Weblinks
[Bearbeiten | Quelltext bearbeiten]- json-ld.org – Seite für Entwickler mit Browser-Tool („Playground“) (englisch)
- JsonLD Playground von Markus Lanthaler – Alternativer Spielplatz in PHP (englisch)
- Artikel mit dem Tag JSON-LD bei semanticweb.com (englisch)
Einzelnachweise und Anmerkungen
[Bearbeiten | Quelltext bearbeiten]- ↑ Manu Sporny: Linked JSON: RDF for the Masses. In: The Beautiful, Tormented Machine. Archiviert vom am 17. Juni 2014; abgerufen am 1. Juni 2014 (englisch).
- ↑ Ivan Herman: JSON-LD Has Been Published as a W3C Recommendation. Abgerufen am 7. Juni 2014 (englisch).
- 1 2 3 4 5 6 Manu Sporny, Gregg Kellogg, Markus Lanthaler, Editors: JSON-LD 1.0, A JSON-based Serialization for Linked Data, W3C Recommendation 16 January 2014. Abgerufen am 4. Juni 2014 (englisch).
- 1 2 Markus Lanthaler, Gregg Kellogg, Manu Sporny, Editors: JSON-LD 1.0 Processing Algorithms and API, W3C Recommendation 16 January 2014. Abgerufen am 4. Juni 2014 (englisch).
- ↑ Für praktisch jede Programmiersprache, die zur Webentwicklung benutzt wird, gibt es eine Konvention, JSON-Daten im Hauptspeicher zu verwalten.
- ↑ namentlich vom NoSQL-Typ, der JSON nativ unterstützt wie MongoDB und CouchDB, aber auch SQL-Datenbanken mit JSON-Unterstützung wie PostgreSQL u. a.
- 1 2 3 4 5 Markus Lanthaler: Third Generation Web APIs – Bridging the Gap between REST and Linked Data. Doctoral Dissertation, Institute of Information Systems and Computer Media, Graz University of Technology, Austria, 5. März 2014, Abschnitt 5.3, Seiten 108–141, über markus-lanthaler.com (PDF) SHA1 0ab17eed62aeb2f56e8f8b1ab95ac9820e36c87a, abgerufen am 8. Juni 2014
- ↑ Shane Becker: JSON-LD is an Unneeded Spec. Archiviert vom am 14. Juli 2014; abgerufen am 3. Juni 2014 (englisch).
- 1 2 3 Keith Alexander: RDF in JSON: A Specification for serialising RDF in JSON In: Proceedings of the 4th Workshop on Scripting for the Semantic Web, Tenerife, Spain, June 02, 2008, CEUR Workshop Proceedings, ISSN 1613-0073, CEUR-WS.org (PDF; 116 kB)
- 1 2 Manu Sporny: JSON-LD and Why I Hate the Semantic Web. In: The Beautiful, Tormented Machine. Archiviert vom am 29. Mai 2014; abgerufen am 6. Juni 2014 (englisch).
- ↑ Manu Sporny: JSON-LD is the Bee’s Knees. In: The Beautiful, Tormented Machine. Archiviert vom am 18. Juni 2014; abgerufen am 4. Juni 2014 (englisch).
- ↑ Es ist allerdings zulässig, die von einem Knoten ausgehenden Kanten auf beliebig viele JSON-Objekte (mit gleicher „@id“) zu verteilen („Knoten-Objekte“). Diese werden dann durch die empfohlenen Algorithmen zu einem Objekt verschmolzen. Hierbei handelt es sich jedoch nicht um eine bevorzugte Form bzw. Zielform von JSON-LD.
- ↑ Ebenso für Mengen von Graphen, die flach als 4-Tupel (Quads) repräsentiert werden würden: Gruppierung nach dem Namen der Menge.
- ↑ What’s New in RDF 1.1 w3.org
- ↑ P. C. Bryan, K. Zyp: JSON Reference. Entwurf. In: Internet Engineering Task Force (IETF). 16. September 2012, abgerufen am 8. August 2025 (englisch).
- 1 2 Richard Cyganiak, David Wood, Markus Lanthaler: RDF 1.1 Concepts and Abstract Syntax – W3C Recommendation 25 February 2014. In: W3C Recommendation. Abgerufen am 11. Juni 2014 (englisch).
- ↑ json-schema.org
- ↑ Beispielsweise verwendet das Popolo Project JSON Schema und JSON-LD-Kontexte parallel, um für eine einheitliche und validierbare JSON-Form zu sorgen.
- ↑ M. Kelly: JSON Hypertext Application Language. In: Internet Engineering Task Force (IETF) Draft
- ↑ RFC: – The application/json Media Type for JavaScript Object Notation (JSON). Juli 2006 (englisch).
- ↑ RFC: – The application/json Media Type for JavaScript Object Notation (JSON). Juli 2006 (englisch).
- ↑ RFC: – Internationalized Resource Identifiers (IRIs). Januar 2005 (englisch).
- ↑ RFC: – Tags for Identifying Languages. September 2009 – Standard: [BCP47] (englisch). alias BCP47
- ↑ auch: Schlüssel, Schlüsselwerte oder Eigenschaften genannt
- ↑ Dieses Konstrukt ist verwandt mit Namensraum-Präfixen bzw. -IRIs in anderen konkreten Serialisierungen von RDF, sowie mit CURIEs (compact URI expressions aus RDFa) und QNames aus XML.
- ↑ Siehe auch Anmerkung zum schema.org-Kontext
- ↑ JSON-LD-Namensraum. w3.org
- ↑ deren Name beispielsweise kein IRI oder Schlüsselwort wie @id oder @type ist und auch zu keinem expandiert
- ↑ abhängig davon, ob mehr als ein RDF-Graph zu erwarten ist; Listen würden die Tiefe zusätzlich um maximal eins erhöhen, weil sie nicht geschachtelt werden dürfen.
- ↑ Die Indexierung nach den „@id“s der Subjekte ist beispielsweise nicht vorgesehen, weil sich dies mit ein paar Zeilen Programmcode bei Bedarf leicht realisieren lässt. Des Weiteren haben Anwendungen auch Bedarf zur Indexierung nach komplexeren Kriterien.
- ↑ Patrick J. Hayes, Peter F. Patel-Schneider: RDF 1.1 Semantics – W3C Recommendation 25 February 2014. In: W3C Recommendation. Abgerufen am 11. Juni 2014 (englisch).
- ↑ JSON-LD-Namensraum
- 1 2
Die alternative, format-neutrale AlbertsIRI aus dem Kommentar zum API-Beispiel ist eigentlich vorzuziehen, stellt jedoch wegen Content Negotiation und HTTP-Redirects höhere Anforderungen an den eingebauten oder benutzerdefinierten documentLoader bzw. an das Zusammenspiel mit der DBpedia. Siehe auch:
Chris Bizer, Richard Cyganiak, Tom Heath: How to Publish Linked Data on the Web. Archiviert vom am 19. April 2021; abgerufen am 6. Juni 2014 (englisch). und
Leo Sauermann, Richard Cyganiak (eds.): Cool URIs for the Semantic Web. In: W3C Interest Group Note. Abgerufen am 11. Juni 2014 (englisch). (Work in progress), sowie
Tom Heath and Christian Bizer (2011) Linked Data: Evolving the Web into a Global Data Space (1st edition). Synthesis Lectures on the Semantic Web: Theory and Technology, 1:1, 1-136. Morgan & Claypool. Per Access Option Free HTML Version, abgerufen am 11. Juni 2014, Chapter 2.3 Making URIs Defererenceable (Schreibfehler im Original) - ↑ RFC: – Media Type Specifications and Registration Procedures. Januar 2013 (englisch).
- ↑ RFC: – Additional Media Type Structured Syntax Suffixes. Januar 2013 (englisch).
- ↑ womit jedoch noch nichts für die Eignung in Produktivsystemen ausgesagt ist
- ↑ Die Empfehlung räumt ein: Selbst die erfolgreiche Absolvierung aller Tests gewährleistet nicht die vollständige Konformität.
- ↑ Alex Stolz, Bene Rodriguez-Castro, Martin Hepp: RDF Translator: A RESTful Multi-Format Data Converter for the Semantic Web, Technical Report TR-2013-1, E-Business and Web Science Research Group, Universität der Bundeswehr München, 2013, arxiv:1312.4704
- ↑ RDF 1.1 JSON Alternate Serialization (RDF/JSON). W3C Working Group, Note 7. November 2013
- ↑ David Wood: The State of RDF and JSON. 13. September 2011. In: Semantic Web Activity News
- ↑ Mark Birbeck (u. a.): Rdfj. In: backplanejs – A JavaScript library that provides cross-browser XForms, RDFa, and SMIL support. Abgerufen am 9. Juni 2014 (englisch).
- ↑ JSON+RDF. In: w3.org. Abgerufen am 9. Juni 2014 (englisch).
- ↑ w3.org
- ↑ SPARQL 1.1 Query Results JSON Format
- ↑ siehe auch: TriplesInJson w3.org
- ↑ Auswahl ohne Anspruch auf Vollständigkeit; json-ld.org führt eine Liste dazu unter Github.
- ↑ Jennifer Zaino: Gmail, Meet JSON-LD. In: semanticweb.com. 17. Mai 2013, archiviert vom am 14. Juli 2014; abgerufen am 9. Juni 2014 (englisch).
- ↑ Sending flight information to Microsoft Cortana with contextual awareness
- ↑ Virtuoso Open-Source Wiki: Virtuoso Open Source Edition News (2011)
- ↑ Schema.org and JSON-LD. In: blog.schema.org. 3. Juni 2013, archiviert vom am 8. Juni 2013; abgerufen am 8. August 2025 (englisch).
- ↑ lists.w3.org
- ↑ Damit werden auch (schon länger im Umlauf befindliche) Beispiele generell funktionsfähig, die schema.org als @context referenzieren. Dies war vorher nur in Umgebungen der Fall, welche diese URL intern mit einem passenden Kontext verbanden.
- ↑ gmane.org ( vom 14. Juli 2014 im Internet Archive)
- ↑ wordnet-rdf.princeton.edu
- ↑ htmltalk.us ( vom 14. Juli 2014 im Internet Archive)
- ↑ Beim hypermedia-getriebenen Ansatz (mit JSON-LD) reicht es (ähnlich wie bei der menschlichen Interaktion mit einer Webseite), einen Einstiegspunkt (entry point) in den Dienst zu finden. Alle weiteren Links und (Selbst-)Beschreibungen dazu sind maschinenlesbar über JSON-LD-Kontexte miteinander verknüpft: Literale und IRIs für Ressourcen in einer Antwort sind verknüpft mit Operationen, die darauf angewendet werden können. Deren Anwendung kann wieder zu solch einer Antwort führen, usf. (Sowohl Entwickler als auch flexible Software-Agenten könnten einen Dienst so schrittweise und standardisiert erkunden, um einen Weg zu finden, ihr eigentliches Ziels zu erreichen.)
- ↑ Markus Lanthaler, Christian Gütl: On Using JSON-LD to Create Evolvable RESTful Services. (PDF) In: Proceedings of the Third International Workshop on RESTful Design. 2012, S. 25–32, abgerufen am 21. Juni 2014 (englisch, SHA1 ba69b6c33792344fb189903792ec955af4aa0a98).
- ↑ www.hydra-cg.com
- ↑ Jason Douglas et al.: Announcing Schema.org Actions. In: blog.schema.org. 16. April 2014, archiviert vom am 17. April 2014; abgerufen am 8. August 2025 (englisch).
- ↑ w3.org (PDF; 1,2 MB) w3.org
- ↑ RFC: – URI Template. März 2012 (englisch).
- ↑ activitystrea.ms tools.ietf.org