Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
JSON-LD                       Linked Data for Web Apps                           Gregg Kellogg                         gre...
Introducing JSON-LD                                                                        @graph                       @c...
Self-describing Messages          •      Give objects types              {                                                ...
Self-describing Messages          •      Give objects types     {                                            "@context": {...
Self-describing Messages          •      Give objects types      {                                             "@context":...
Self-describing Messages          •      Give objects types       {                                              "@context...
RDF Mapping          {              "@context": {                "schema":     "http://schema.org/",                "schem...
History                       •   2010 – Started as a way to project from the RDFa API                           •   Devel...
History                       • 2011 – W3C Community Group launched                        • Broad Participation          ...
History                       • 2012 – RDF WG abandons other JSON                         serialization efforts (RDF/JSON)...
Language PrinciplesTuesday, July 10, 12
• Make full use of JSON syntactic                                         {                                             "@...
• Make full use of JSON syntactic                                         {                                             "@...
• Make full use of JSON syntactic                                               {                                         ...
•      Define terms to use short               {                                                           "@id": "http://g...
•      Define terms to use short               {                                                           "@id": "http://g...
•      Define terms to use short               {                                                           "@id": "http://g...
•                                           {                Define referenced subject       "@context": "http://json-ld.or...
•                                           {                Define referenced subject       "@context": "http://json-ld.or...
•      Add @type to values.        {                                                "@context": "http://json-ld.org/contex...
•      Add property @type and    {                                               "@context": {                 @language d...
• More features defined in the syntax                            specification*:                          • @set, @list, Com...
Retrofit existing APIs                       GET /foaf.json HTTP/1.1                       Host: greggkellogg.net          ...
The “LD” in JSON-LD          •      IRIs are first-class                http://greggkellogg.net/foaf                 citize...
The “LD” in JSON-LD            •    IRIs are first-class                                         http://greggkellogg.net/fo...
JSON-LD API                       • compact – use minimal representation                         using a supplied @context...
More Information                       json-ld.org         JavaScript                                              Ruby   ...
Upcoming SlideShare
Loading in …5
×

JSON-LD: Linked Data for Web Apps

3,596 views

Published on

Published in: Technology, Design
  • Be the first to comment

JSON-LD: Linked Data for Web Apps

  1. 1. JSON-LD Linked Data for Web Apps Gregg Kellogg gregg@greggkellogg.net @gkelloggTuesday, July 10, 12
  2. 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. 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. 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. 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 defined 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. 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 defined 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. 7. RDF Mapping { "@context": { "schema": "http://schema.org/", "schema:knows": {"@type": "@id"}, "schema:image": {"@type": "@id"}, "schema:url": {"@type": "@id"} } } { @prefix schema: <http://schema.org/> . "@context": "http://example.com/context.jsonld", [ a schema:Person; "@type": "schema:Person", schema:image "schema:image": <http://localhost:9393/examples/schema.org/janedoe.jpg >; "http://localhost:9393/examples/schema.org/janedoe.jpg", schema:knows "schema:knows": [ <http://www.xyz.edu/students/alicejones.html>, "http://www.xyz.edu/students/alicejones.html", <http://www.xyz.edu/students/bobsmith.html>; "http://www.xyz.edu/students/bobsmith.html" schema:name “Jane Doe”; ], schema:url <http://www.janedoe.com> "schema:name": "Jane Doe", ]. "schema:url": "http://www.janedoe.com" }Tuesday, July 10, 12
  8. 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. 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. 10. 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 FPWDTuesday, July 10, 12
  11. 11. Language PrinciplesTuesday, July 10, 12
  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 defines a subject "name": "Gregg Kellogg", "knows": "http://www.markus-lanthaler.com/" definition }Tuesday, July 10, 12
  13. 13. • Make full use of JSON syntactic { "@context": "http://json-ld.org/contexts/person", representations "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", • Object defines a subject "name": "Gregg Kellogg", "knows": "http://www.markus-lanthaler.com/" definition } • Also used for subject reference and value { "@id": "http://greggkellogg.net/foaf#me" } representationsTuesday, July 10, 12
  14. 14. • Make full use of JSON syntactic { "@context": "http://json-ld.org/contexts/person", representations "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", • Object defines a subject "name": "Gregg Kellogg", "knows": "http://www.markus-lanthaler.com/" definition } • 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. 15. • Define 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. 16. • Define 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. 17. • Define 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. 18. • { Define referenced subject "@context": "http://json-ld.org/contexts/person", definition 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 identifies an object with @id in the same document, or references anexternal document (Linked Data).
  19. 19. • { Define referenced subject "@context": "http://json-ld.org/contexts/person", definition 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", "honorificSuffix": {"@value": "M.S.", "@language": "en"}, "knows": { "@id": "http://www.markus-lanthaler.com/", "@type": "Person", "name": "Markus Lanthaler", "honorificSuffix": {"@value": "Dipl.Ing.", "@language": "de"}, "knows" "http://greggkellogg.net/foaf#me" } }Tuesday, July 10, 12Subject reference identifies an object with @id in the same document, or references anexternal document (Linked Data).
  20. 20. • Add @type to values. { "@context": "http://json-ld.org/contexts/person", "@id": "http://greggkellogg.net/foaf#me", • Link to externally defined "@type": "Person", "name": "Gregg Kellogg", resources. "birthDate": {"@value": "1957-02-27", "@type": "xsd:date"}, "honorificSuffix": {"@value": "M.S.", "@language": "en"}, "knows": "http://www.markus-lanthaler.com/" }Tuesday, July 10, 12
  21. 21. • Add property @type and { "@context": { @language definitions to "schema": "http://schema.org/", context "Person": "schema:Person", "name": "schema:name", "birthDate”: { "@id": "schema: birthDate","@type": "xsd:date" }, "honorificSuffix”: { "@id": "schema:honorificSuffix","@language": "en" }, "knows”: {"@id": "schema:knows","@type": "@id"} }, "@id": "http://greggkellogg.net/foaf#me", "@type": "Person", "name": "Gregg Kellogg", "birthDate": "1957-02-27", "honorificSuffix": "M.S.", "knows": "http://www.markus-lanthaler.com/" }Tuesday, July 10, 12
  22. 22. • 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-syntaxTuesday, July 10, 12
  23. 23. 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, 12Normal JSON can be made JSON-LD by adding an external context through an HTTP linkrelation.
  24. 24. The “LD” in JSON-LD • IRIs are first-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. 25. The “LD” in JSON-LD • IRIs are first-class http://greggkellogg.net/foaf citizens { "@context": "http://json-ld.org/contexts/person", • Object definitions 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. 26. 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/toRDFTuesday, July 10, 12
  27. 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

×