JSON-LD: Linked Data for Web Apps

Download JSON-LD: Linked Data for Web Apps

Post on 30-Apr-2015

2.838 views

Category:

Technology

0 download

DESCRIPTION

 

TRANSCRIPT

1. JSON-LD Linked Data for Web Apps Gregg Kellogg gregg@greggkellogg.net @gkelloggTuesday, July 10, 12 2. Introducing JSON-LD @graph @context @id JSON-based syntax to express linked data @language @value @list @type @setTuesday, July 10, 12JSON-LD brings a standard representation for expressing entity-value relationships using afew 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. 3. Self-describing Messages Give objects types { "@context": { (@type) "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, 12The @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. 4. Self-describing Messages Give objects types { "@context": { (@type) "schema": "http://schema.org/", "Person": "schema:Person", "knows": {"@id": "schema:knows", "@type": "@id"}, Associate properties "name": "schema:name", "image": {"@id": "schema:image", "@type": "@id"}, with IRIs "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 5. Self-describing Messages Give objects types { "@context": { (@type) "schema": "http://schema.org/", "Person": "schema:Person", "knows": {"@id": "schema:knows", "@type": "@id"}, Associate properties "name": "schema:name", "image": {"@id": "schema:image", "@type": "@id"}, with IRIs "url": {"@id": "schema:url", "@type": "@id"} } } Use terms dened in a referenced context { "@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 6. Self-describing Messages Give objects types { "@context": { (@type) "schema": "http://schema.org/", "Person": "schema:Person", "knows": {"@id": "schema:knows", "@type": "@id"}, Associate properties "name": "schema:name", "image": {"@id": "schema:image", "@type": "@id"}, with IRIs "url": {"@id": "schema:url", "@type": "@id"} } } Use terms dened in a referenced context { "@context": "http://example.com/context.jsonld", "@type": "Person", Specify property types "image": "http://localhost:9393/examples/schema.org/janedoe.jpg", "knows": [ "http://www.xyz.edu/students/alicejones.html", in context "http://www.xyz.edu/students/bobsmith.html" ], "name": "Jane Doe", "url": "http://www.janedoe.com" }Tuesday, July 10, 12 7. RDF Mapping { "@context": { "schema": "http://schema.org/", "schema:knows": {"@type": "@id"}, "schema:image": {"@type": "@id"}, "schema:url": {"@type": "@id"} } } { @prex schema: . "@context": "http://example.com/context.jsonld", [ a schema:Person; "@type": "schema:Person", schema:image "schema:image": ; "http://localhost:9393/examples/schema.org/janedoe.jpg", schema:knows "schema:knows": [ , "http://www.xyz.edu/students/alicejones.html", ; "http://www.xyz.edu/students/bobsmith.html" schema:name Jane Doe; ], schema:url "schema:name": "Jane Doe", ]. "schema:url": "http://www.janedoe.com" }Tuesday, July 10, 12 8. 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 DataTuesday, July 10, 12 9. History 2011 W3C Community Group launched Broad Participation Separation of Syntax from API Proposed to W3C RDF 1.1 Working GroupTuesday, July 10, 12 10. History 2012 RDF WG abandons other JSON serialization efforts (RDF/JSON) JSON-LD accepted as ofcial work item Community Group drafts nal report RDF WG to publish JSON-LD (Syntax and API) as FPWDTuesday, July 10, 12 11. Language PrinciplesTuesday, July 10, 12 12. Make full use of JSON syntactic { "@context": "http://json-ld.org/contexts/person", representations "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", Object denes a subject "name": "Gregg Kellogg", "knows": "http://www.markus-lanthaler.com/" denition }Tuesday, July 10, 12 13. Make full use of JSON syntactic { "@context": "http://json-ld.org/contexts/person", representations "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", Object denes a subject "name": "Gregg Kellogg", "knows": "http://www.markus-lanthaler.com/" denition } Also used for subject reference and value { "@id": "http://greggkellogg.net/foaf#me" } representationsTuesday, July 10, 12 14. Make full use of JSON syntactic { "@context": "http://json-ld.org/contexts/person", representations "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", Object denes a subject "name": "Gregg Kellogg", "knows": "http://www.markus-lanthaler.com/" denition } Also used for subject reference and value { "@id": "http://greggkellogg.net/foaf#me" } representations { "@type": "Recipe", "name": "Moms World Famous Banana Bread", "ingredients": [ Arrays describe sets of unordered values "3 or 4 ripe bananas, smashed", "1 egg", "3/4 cup of sugar" ], Single values can skip array "nutrition": [{ "@type": ["NutritionInformation"], "calories": ["240 calories"], "fatContent": ["9 grams fat"] }] }Tuesday, July 10, 12 15. Dene terms to use short { "@id": "http://greggkellogg.net/foaf#me", property names "@type": "http://schema.org/Person", "http://schema.org/name": "Gregg Kellogg", Convenient for JavaScript . "http://schema.org/knows": { "@id": "http://www.markus-lanthaler.com/" notation } } { "@context": { "Person": "http://schema.org/Person", "name": "http://schema.org/name", "knows: "http://schema.org/knows" }, "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", "name": "Gregg Kellogg", "knows": {"@id": "http://www.markus-lanthaler.com/"} }Tuesday, July 10, 12 16. Dene terms to use short { "@id": "http://greggkellogg.net/foaf#me", property names "@type": "http://schema.org/Person", "http://schema.org/name": "Gregg Kellogg", Convenient for JavaScript . "http://schema.org/knows": { "@id": "http://www.markus-lanthaler.com/" notation } } Add @type coercions to use simple string value. { "@context": { "schema": "http://schema.org/", "Person": "schema:Person", "name": "schema:name", "knows: { "@id": "schema:knows", "@type": "@id" }, "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", "name": "Gregg Kellogg", "knows": "http://www.markus-lanthaler.com/" }Tuesday, July 10, 12 17. Dene terms to use short { "@id": "http://greggkellogg.net/foaf#me", property names "@type": "http://schema.org/Person", "http://schema.org/name": "Gregg Kellogg", Convenient for JavaScript . "http://schema.org/knows": { "@id": "http://www.markus-lanthaler.com/" notation } } Add @type coercions to use simple string value. { "@context": { "schema": "http://schema.org/", "Person": "schema:Person", Use external @context. "name": "schema:name", "knows: { "@id": "schema:knows", "@type": "@id" } } { "@context": "http://json-ld.org/contexts/person", "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", "name": "Gregg Kellogg", "knows": "http://www.markus-lanthaler.com/" }Tuesday, July 10, 12 18. { Dene referenced subject "@context": "http://json-ld.org/contexts/person", denition with chaining "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", "name": "Gregg Kellogg", "knows": { "@id": "http://www.markus-lanthaler.com/", "@type": "Person", "name": "Markus Lanthaler", "knows" "http://greggkellogg.net/foaf#me" } }Tuesday, July 10, 12Subject reference identies an object with @id in the same document, or references anexternal document (Linked Data). 19. { Dene referenced subject "@context": "http://json-ld.org/contexts/person", denition with chaining "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", "name": "Gregg Kellogg", "knows": { "@id": "http://www.markus-lanthaler.com/", "@type": "Person", "name": "Markus Lanthaler", "knows" "http://greggkellogg.net/foaf#me" } } { "@context": "http://json-ld.org/contexts/person", "@id": "http://greggkellogg.net/foaf#me", Add @language to values. "@type": "Person", "name": "Gregg Kellogg", "honoricSufx": {"@value": "M.S.", "@language": "en"}, "knows": { "@id": "http://www.markus-lanthaler.com/", "@type": "Person", "name": "Markus Lanthaler", "honoricSufx": {"@value": "Dipl.Ing.", "@language": "de"}, "knows" "http://greggkellogg.net/foaf#me" } }Tuesday, July 10, 12Subject reference identies an object with @id in the same document, or references anexternal document (Linked Data). 20. Add @type to values. { "@context": "http://json-ld.org/contexts/person", "@id": "http://greggkellogg.net/foaf#me", Link to externally dened "@type": "Person", "name": "Gregg Kellogg", resources. "birthDate": {"@value": "1957-02-27", "@type": "xsd:date"}, "honoricSufx": {"@value": "M.S.", "@language": "en"}, "knows": "http://www.markus-lanthaler.com/" }Tuesday, July 10, 12 21. Add property @type and { "@context": { @language denitions to "schema": "http://schema.org/", context "Person": "schema:Person", "name": "schema:name", "birthDate: { "@id": "schema: birthDate","@type": "xsd:date" }, "honoricSufx: { "@id": "schema:honoricSufx","@language": "en" }, "knows: {"@id": "schema:knows","@type": "@id"} }, "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", "name": "Gregg Kellogg", "birthDate": "1957-02-27", "honoricSufx": "M.S.", "knows": "http://www.markus-lanthaler.com/" }Tuesday, July 10, 12 22. More features dened in the syntax specication*: @set, @list, Compact IRIs, Unlabeled Nodes Embedded @context denitions Named Graphs * http://json-ld.org/spec/latest/json-ld-syntaxTuesday, July 10, 12 23. Retrot 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: ; rel="describedby"; type="application/ld+json" { "name": "Gregg Kellogg", "homepage": "http://greggkellogg.net/", "depiction": "http://twitter.com/account/prole_image/gkellogg" }Tuesday, July 10, 12Normal JSON can be made JSON-LD by adding an external context through an HTTP linkrelation. 24. The LD in JSON-LD IRIs are rst-class http://greggkellogg.net/foaf citizens { "@context": "http://json-ld.org/contexts/person", "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", "name": "Gregg Kellogg", "knows": "http://www.markus-lanthaler.com/" } http://www.markus-lanthaler.com { "@context": "http://json-ld.org/contexts/person", "@id": "http://www.markus-lanthaler.com/", "@type": "Person", "name": "Markus Lanthaler", "knows" "http://greggkellogg.net/foaf#me" }Tuesday, July 10, 12 25. The LD in JSON-LD IRIs are rst-class http://greggkellogg.net/foaf citizens { "@context": "http://json-ld.org/contexts/person", Object denitions may "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", be referenced or "name": "Gregg Kellogg", "knows": "http://www.markus-lanthaler.com/" embedded } http://www.markus-lanthaler.com { { "@context": "http://json-ld.org/contexts/person", "@context": "http://json-ld.org/contexts/person", "@id": "http://www.markus-lanthaler.com/", "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", "@type": "Person", "name": "Markus Lanthaler", "name": "Gregg Kellogg", "knows" "http://greggkellogg.net/foaf#me" "knows": { } "@id": "http://www.markus-lanthaler.com/", "@type": "Person", "name": "Markus Lanthaler", "knows" "http://greggkellogg.net/foaf#me" } }Tuesday, July 10, 12 26. JSON-LD API compact use minimal representation using a supplied @context expand expand to full form, removing embedded @context denitions frame query for JSON-LD fromRDF/toRDFTuesday, July 10, 12 27. More Information json-ld.org JavaScript Ruby w3c Python PHP Java Gregg Kellogg C++ gregg@greggkellogg.net http://greggkellogg.net/ @gkelloggTuesday, July 10, 12