JSON-LD
Linked Data for Web Apps
Gregg Kellogg [email protected]
@gkellogg
Tuesday, July 10, 12
Introducing JSON-LD
JSON-based syntax to express linked data
@context
@id
@type
@value
@language
@graph
@list
@set
Tuesday, July 10, 12
JSON-LD brings a standard representation for expressing entity-value relationships using a
few standard keywords and a consistent organizational structure for JSON Objects.
•Objects represent entities, with keys acting as properties.
•Properties always expand to full IRIs.
•Arrays express a set of values associated with a property, unordered by default.
•Order expressed in @context or as an expanded value representation.
•Values are Object, string or native, with standard XSD representations for native types.
•Expanded form allows for more datatype and language variations.
Self-describing Messages
•
Give objects types
(@type)
{
"@context": {
"schema": "http://schema.org/",
"Person": "schema:Person",
"knows": {"@id": "schema:knows", "@type": "@id"},
"name": "schema:name",
"image": {"@id": "schema:image", "@type": "@id"},
"url": {"@id": "schema:url", "@type": "@id"}
}
}
{
"@context": "http://example.com/context.jsonld",
"@type": "Person",
"image": "http://localhost:9393/examples/schema.org/janedoe.jpg",
"knows": [
"http://www.xyz.edu/students/alicejones.html",
"http://www.xyz.edu/students/bobsmith.html"
],
"name": "Jane Doe",
"url": "http://www.janedoe.com"
}
Tuesday, July 10, 12
The @type key gives an object with one or more types, described with an IRI.
The @context provides a way to express IRIs as simple terms, and allows values to be typed.
History
•
2010 – Started as a way to project from the RDFa API
•
Developers want solutions to work within HTML
applications
•
Desire for JSON-idiomatic way of representing RDF
(Linked Data)
•
Adapt existing JSON APIs to Linked Data
Tuesday, July 10, 12
History
•2011 – W3C Community Group launched
•Broad Participation
•Separation of Syntax from API
•Proposed to W3C RDF 1.1 Working
Group
Tuesday, July 10, 12
History
•2012 – RDF WG abandons other JSON
serialization efforts (RDF/JSON)
•JSON-LD accepted as official work item
•Community Group drafts final report
•RDF WG to publish JSON-LD (Syntax
and API) as FPWD
Tuesday, July 10, 12
Language Principles
Tuesday, July 10, 12
{
"@context": "http://json-ld.org/contexts/person",
"@id": "http://greggkellogg.net/foaf#me",
"@type": "Person",
"name": "Gregg Kellogg",
"knows": "http://www.markus-lanthaler.com/"
}
•
Make full use of JSON syntactic
representations
•
Object defines a subject
definition
Tuesday, July 10, 12
{
"@context": "http://json-ld.org/contexts/person",
"@id": "http://greggkellogg.net/foaf#me",
"@type": "Person",
"name": "Gregg Kellogg",
"knows": "http://www.markus-lanthaler.com/"
}
•
Make full use of JSON syntactic
representations
•
Object defines a subject
definition
{ "@id": "http://greggkellogg.net/foaf#me" }
•
Also used for subject
reference and value
representations
Tuesday, July 10, 12
{
"@context": "http://json-ld.org/contexts/person",
"@id": "http://greggkellogg.net/foaf#me",
"@type": "Person",
"name": "Gregg Kellogg",
"knows": "http://www.markus-lanthaler.com/"
}
•
Make full use of JSON syntactic
representations
•
Object defines a subject
definition
{ "@id": "http://greggkellogg.net/foaf#me" }
•
Also used for subject
reference and value
representations
•
Arrays describe sets of unordered
values
•
Single values can skip array
{
"@type": "Recipe",
"name": "Mom's World Famous Banana Bread",
"ingredients": [
"3 or 4 ripe bananas, smashed",
"1 egg",
"3/4 cup of sugar"
],
"nutrition": [{
"@type": ["NutritionInformation"],
"calories": ["240 calories"],
"fatContent": ["9 grams fat"]
}]
}
Tuesday, July 10, 12
•More features defined in the syntax
specification*:
•@set, @list, Compact IRIs, Unlabeled
Nodes
•Embedded @context definitions
•Named Graphs
* http://json-ld.org/spec/latest/json-ld-syntax
Tuesday, July 10, 12
Retrofit existing APIs
GET /foaf.json HTTP/1.1
Host: greggkellogg.net
Accept: application/json,*/*;q=0.1
====================================
HTTP/1.0 200 OK
...
Content-Type: application/json
Link: <http://json-ld.org/contexts/person>; rel="describedby"; type="application/ld+json"
{
"name": "Gregg Kellogg",
"homepage": "http://greggkellogg.net/",
"depiction": "http://twitter.com/account/profile_image/gkellogg"
}
Tuesday, July 10, 12
Normal JSON can be made JSON-LD by adding an external context through an HTTP link
relation.
JSON-LD API
•compact – use minimal representation
using a supplied @context
•expand – expand to full form, removing
embedded @context definitions
•frame – query for JSON-LD
•fromRDF/toRDF
Tuesday, July 10, 12
More Information
json-ld.org
w3c
JavaScript
Ruby
Python
Java
C++
PHP
Gregg Kellogg
@gkellogg [email protected]
http://greggkellogg.net/
Tuesday, July 10, 12