JSON-LD
                       Linked Data for Web Apps



                           Gregg Kellogg
                         gregg@greggkellogg.net
                               @gkellogg
Tuesday, July 10, 12
Introducing JSON-LD
                                                                        @graph
                       @context
                                               @id

                        JSON-based syntax to express linked data

                                                                      @language
                            @value

                                                        @list
            @type                    @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              {
                                                     "@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, 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.
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
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
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
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
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
• 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
• 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




Tuesday, July 10, 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                      }

         •      Also used for subject
                reference and value            { "@id": "http://greggkellogg.net/foaf#me" }
                representations
                                               {
                                                   "@type": "Recipe",
                                                   "name": "Mom's 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
•      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
•      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
•      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
•
                                           {
                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, 12

Subject reference identifies an object with @id in the same document, or references an
external document (Linked Data).
•
                                           {
                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, 12

Subject reference identifies an object with @id in the same document, or references an
external document (Linked Data).
•      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
•      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
• 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.
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
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
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         JavaScript
                                              Ruby
                              w3c              Python
                                                 PHP
                                                    Java
                Gregg Kellogg                          C++
                gregg@greggkellogg.net
                http://greggkellogg.net/
                @gkellogg



Tuesday, July 10, 12

JSON-LD: Linked Data for Web Apps

  • 1.
    JSON-LD Linked Data for Web Apps Gregg Kellogg gregg@greggkellogg.net @gkellogg Tuesday, July 10, 12
  • 2.
    Introducing JSON-LD @graph @context @id JSON-based syntax to express linked data @language @value @list @type @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.
  • 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, 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.
  • 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 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.
    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.
    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.
    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
  • 9.
    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
  • 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 FPWD Tuesday, July 10, 12
  • 11.
  • 12.
    • Make fulluse 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.
    • Make fulluse 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 Tuesday, July 10, 12
  • 14.
    • Make fulluse 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": "Mom's 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.
    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.
    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.
    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.
    { 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, 12 Subject reference identifies an object with @id in the same document, or references an external document (Linked Data).
  • 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, 12 Subject reference identifies an object with @id in the same document, or references an external document (Linked Data).
  • 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.
    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.
    • More featuresdefined 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
  • 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, 12 Normal JSON can be made JSON-LD by adding an external context through an HTTP link relation.
  • 24.
    The “LD” inJSON-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.
    The “LD” inJSON-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.
    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
  • 27.
    More Information json-ld.org JavaScript Ruby w3c Python PHP Java Gregg Kellogg C++ gregg@greggkellogg.net http://greggkellogg.net/ @gkellogg Tuesday, July 10, 12