--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/spec/ED/json-ld-api/20120830/diff-20120712.html Thu Aug 30 16:50:04 2012 +0200
@@ -0,0 +1,20433 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
+<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml" typeof="bibo:Document">
+<head>
+<title>JSON-LD API 1.0</title>
+<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+
+<!--
+ === NOTA BENE ===
+ For the three scripts below, if your spec resides on dev.w3 you can check them
+ out in the same tree and use relative links so that they'll work offline,
+ -->
+
+
+
+<style type="text/css">
+.diff { font-weight:bold; color:#0a3; }
+</style>
+<style>/*****************************************************************
+ * ReSpec 3 CSS
+ * Robin Berjon - http://berjon.com/
+ *****************************************************************/
+
+/* --- INLINES --- */
+em.rfc2119 {
+ text-transform: lowercase;
+ font-variant: small-caps;
+ font-style: normal;
+ color: #900;
+}
+
+h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
+h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
+ border: none;
+}
+
+dfn {
+ font-weight: bold;
+}
+
+a.internalDFN {
+ color: inherit;
+ border-bottom: 1px solid #99c;
+ text-decoration: none;
+}
+
+a.externalDFN {
+ color: inherit;
+ border-bottom: 1px dotted #ccc;
+ text-decoration: none;
+}
+
+a.bibref {
+ text-decoration: none;
+}
+
+cite .bibref {
+ font-style: normal;
+}
+
+code {
+ color: #ff4500;
+}
+
+
+/* --- --- */
+ol.algorithm { counter-reset:numsection; list-style-type: none; }
+ol.algorithm li { margin: 0.5em 0; }
+ol.algorithm li:before { font-weight: bold; counter-increment: numsection; content: counters(numsection, ".") ") "; }
+
+/* --- TOC --- */
+.toc a, .tof a {
+ text-decoration: none;
+}
+
+a .secno, a .figno {
+ color: #000;
+}
+
+ul.tof, ol.tof {
+ list-style: none outside none;
+}
+
+.caption {
+ margin-top: 0.5em;
+ font-style: italic;
+}
+
+/* --- TABLE --- */
+table.simple {
+ border-spacing: 0;
+ border-collapse: collapse;
+ border-bottom: 3px solid #005a9c;
+}
+
+.simple th {
+ background: #005a9c;
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+}
+
+.simple th[scope="row"] {
+ background: inherit;
+ color: inherit;
+ border-top: 1px solid #ddd;
+}
+
+.simple td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+}
+
+.simple tr:nth-child(even) {
+ background: #f0f6ff;
+}
+
+/* --- DL --- */
+.section dd > p:first-child {
+ margin-top: 0;
+}
+
+.section dd > p:last-child {
+ margin-bottom: 0;
+}
+
+.section dd {
+ margin-bottom: 1em;
+}
+
+.section dl.attrs dd, .section dl.eldef dd {
+ margin-bottom: 0;
+}
+</style><style>/* --- EXAMPLES --- */
+div.example-title {
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.example-title span {
+ text-transform: uppercase;
+}
+aside.example, div.example, div.illegal-example {
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+div.illegal-example { color: red }
+div.illegal-example p { color: black }
+aside.example, div.example {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+ border-color: #e0cb52;
+ background: #fcfaee;
+}
+
+aside.example div.example {
+ border-left-width: .1em;
+ border-color: #999;
+ background: #fff;
+}
+aside.example div.example div.example-title {
+ color: #999;
+}
+</style><style>/* --- ISSUES/NOTES --- */
+div.issue-title, div.note-title {
+ padding-right: 1em;
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.issue-title { color: #e05252; }
+div.note-title { color: #52e052; }
+div.issue-title span, div.note-title span {
+ text-transform: uppercase;
+}
+div.note, div.issue {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.note > p:first-child, .issue > p:first-child { margin-top: 0 }
+.issue, .note {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+}
+div.issue, div.note {
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+span.note, span.issue { padding: .1em .5em .15em; }
+
+.issue {
+ border-color: #e05252;
+ background: #fbe9e9;
+}
+.note {
+ border-color: #52e052;
+ background: #e9fbe9;
+}
+
+
+</style><style>/* --- WEB IDL --- */
+pre.idl {
+ border-top: 1px solid #90b8de;
+ border-bottom: 1px solid #90b8de;
+ padding: 1em;
+ line-height: 120%;
+}
+
+pre.idl::before {
+ content: "WebIDL";
+ display: block;
+ width: 150px;
+ background: #90b8de;
+ color: #fff;
+ font-family: initial;
+ padding: 3px;
+ font-weight: bold;
+ margin: -1em 0 1em -1em;
+}
+
+.idlType {
+ color: #ff4500;
+ font-weight: bold;
+ text-decoration: none;
+}
+
+/*.idlModule*/
+/*.idlModuleID*/
+/*.idlInterface*/
+.idlInterfaceID, .idlDictionaryID, .idlCallbackID, .idlEnumID {
+ font-weight: bold;
+ color: #005a9c;
+}
+
+.idlSuperclass {
+ font-style: italic;
+ color: #005a9c;
+}
+
+/*.idlAttribute*/
+.idlAttrType, .idlFieldType, .idlMemberType {
+ color: #005a9c;
+}
+.idlAttrName, .idlFieldName, .idlMemberName {
+ color: #ff4500;
+}
+.idlAttrName a, .idlFieldName a, .idlMemberName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlMethod*/
+.idlMethType, .idlCallbackType {
+ color: #005a9c;
+}
+.idlMethName {
+ color: #ff4500;
+}
+.idlMethName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlParam*/
+.idlParamType {
+ color: #005a9c;
+}
+.idlParamName {
+ font-style: italic;
+}
+
+.extAttr {
+ color: #666;
+}
+
+/*.idlConst*/
+.idlConstType {
+ color: #005a9c;
+}
+.idlConstName {
+ color: #ff4500;
+}
+.idlConstName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlException*/
+.idlExceptionID {
+ font-weight: bold;
+ color: #c00;
+}
+
+.idlTypedefID, .idlTypedefType {
+ color: #005a9c;
+}
+
+.idlRaises, .idlRaises a.idlType, .idlRaises a.idlType code, .excName a, .excName a code {
+ color: #c00;
+ font-weight: normal;
+}
+
+.excName a {
+ font-family: monospace;
+}
+
+.idlRaises a.idlType, .excName a.idlType {
+ border-bottom: 1px dotted #c00;
+}
+
+.excGetSetTrue, .excGetSetFalse, .prmNullTrue, .prmNullFalse, .prmOptTrue, .prmOptFalse {
+ width: 45px;
+ text-align: center;
+}
+.excGetSetTrue, .prmNullTrue, .prmOptTrue { color: #0c0; }
+.excGetSetFalse, .prmNullFalse, .prmOptFalse { color: #c00; }
+
+.idlImplements a {
+ font-weight: bold;
+}
+
+dl.attributes, dl.methods, dl.constants, dl.fields, dl.dictionary-members {
+ margin-left: 2em;
+}
+
+.attributes dt, .methods dt, .constants dt, .fields dt, .dictionary-members dt {
+ font-weight: normal;
+}
+
+.attributes dt code, .methods dt code, .constants dt code, .fields dt code, .dictionary-members dt code {
+ font-weight: bold;
+ color: #000;
+ font-family: monospace;
+}
+
+.attributes dt code, .fields dt code, .dictionary-members dt code {
+ background: #ffffd2;
+}
+
+.attributes dt .idlAttrType code, .fields dt .idlFieldType code, .dictionary-members dt .idlMemberType code {
+ color: #005a9c;
+ background: transparent;
+ font-family: inherit;
+ font-weight: normal;
+ font-style: italic;
+}
+
+.methods dt code {
+ background: #d9e6f8;
+}
+
+.constants dt code {
+ background: #ddffd2;
+}
+
+.attributes dd, .methods dd, .constants dd, .fields dd, .dictionary-members dd {
+ margin-bottom: 1em;
+}
+
+table.parameters, table.exceptions {
+ border-spacing: 0;
+ border-collapse: collapse;
+ margin: 0.5em 0;
+ width: 100%;
+}
+table.parameters { border-bottom: 1px solid #90b8de; }
+table.exceptions { border-bottom: 1px solid #deb890; }
+
+.parameters th, .exceptions th {
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+ font-family: initial;
+ font-weight: normal;
+ text-shadow: #666 1px 1px 0;
+}
+.parameters th { background: #90b8de; }
+.exceptions th { background: #deb890; }
+
+.parameters td, .exceptions td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+ vertical-align: top;
+}
+
+.parameters tr:first-child td, .exceptions tr:first-child td {
+ border-top: none;
+}
+
+.parameters td.prmName, .exceptions td.excName, .exceptions td.excCodeName {
+ width: 100px;
+}
+
+.parameters td.prmType {
+ width: 120px;
+}
+
+table.exceptions table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ width: 100%;
+}
+</style><link rel="stylesheet" href="http://www.w3.org/StyleSheets/TR/W3C-ED" />
+<!--[if lt IE 9]><script src='undefined://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]-->
+<style type='text/css'>
+.diff-old-a {
+ font-size: smaller;
+ color: red;
+}
+
+.diff-new { background-color: yellow; }
+.diff-chg { background-color: lime; }
+.diff-new:before,
+.diff-new:after
+ { content: "\2191" }
+.diff-chg:before, .diff-chg:after
+ { content: "\2195" }
+.diff-old { text-decoration: line-through; background-color: #FBB; }
+.diff-old:before,
+.diff-old:after
+ { content: "\2193" }
+:focus { border: thin red solid}
+</style>
+</head>
+
+<body><div class="head">
+<p>
+<a href="http://www.w3.org/">
+<img width="72" height="48" alt="W3C" src="http://www.w3.org/Icons/w3c_home" />
+</a>
+</p>
+<h1 id="title" class="title">
+JSON-LD
+API
+1.0
+</h1>
+<h2 id="subtitle">
+An
+Application
+Programming
+Interface
+for
+the
+JSON-LD
+Syntax
+</h2>
+<h2 id="w3c-editor-s-draft-30-august-2012">
+<abbr title="World Wide Web Consortium">
+W3C
+<del class="diff-old">Working
+</del>
+</abbr>
+<ins class="diff-chg">Editor's
+</ins>
+Draft
+<del class="diff-old">12
+July
+</del>
+<ins class="diff-chg">30
+August
+</ins>
+2012
+</h2>
+<dl>
+<dt>
+This
+version:
+</dt>
+<dd>
+<del class="diff-old">http://www.w3.org/TR/2012/WD-json-ld-api-20120712/
+</del>
+<a href="http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/ED/json-ld-api/20120830/index.html">
+<ins class="diff-chg">http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/ED/json-ld-api/20120830/index.html
+</ins>
+</a>
+</dd>
+<dt>
+Latest
+published
+version:
+</dt>
+<dd>
+<a href="http://www.w3.org/TR/json-ld-api/">
+http://www.w3.org/TR/json-ld-api/
+</a>
+</dd>
+<dt>
+Latest
+editor's
+draft:
+</dt>
+<dd>
+<a href="http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/latest/json-ld-api/index.html">
+http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/latest/json-ld-api/index.html
+</a>
+</dd>
+<dt>
+Editors:
+</dt>
+<dd inlist="" rel="bibo:editor">
+<span typeof="foaf:Person">
+<a href="http://manu.sporny.org/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">
+Manu
+Sporny
+</a>,
+<a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">
+Digital
+Bazaar
+</a>
+</span>
+</dd>
+<dd inlist="" rel="bibo:editor">
+<span typeof="foaf:Person">
+<a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">
+Gregg
+Kellogg
+</a>,
+<a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">
+Kellogg
+Associates
+</a>
+</span>
+</dd>
+<del class="diff-old">Dave
+Longley
+,
+Digital
+Bazaar
+</del>
+<dd inlist="" rel="bibo:editor">
+<span typeof="foaf:Person">
+<a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">
+Markus
+Lanthaler
+</a>,
+<a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">
+Graz
+University
+of
+Technology
+</a>
+</span>
+</dd>
+<dt>
+Authors:
+</dt>
+<dd rel="dcterms:contributor">
+<span typeof="foaf:Person">
+<a href="http://digitalbazaar.com/" content="Dave Longley" property="foaf:name" rel="foaf:homepage">
+Dave
+Longley
+</a>,
+<a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">
+Digital
+Bazaar
+</a>
+</span>
+</dd>
+<dd rel="dcterms:contributor">
+<span typeof="foaf:Person">
+<a href="http://digitalbazaar.com/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">
+Manu
+Sporny
+</a>,
+<a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">
+Digital
+Bazaar
+</a>
+</span>
+</dd>
+<dd rel="dcterms:contributor">
+<span typeof="foaf:Person">
+<a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">
+Gregg
+Kellogg
+</a>,
+<a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">
+Kellogg
+Associates
+</a>
+</span>
+</dd>
+<dd rel="dcterms:contributor">
+<span typeof="foaf:Person">
+<a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">
+Markus
+Lanthaler
+</a>,
+<a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">
+Graz
+University
+of
+Technology
+</a>
+</span>
+</dd>
+</dl>
+<p>
+This
+document
+is
+also
+available
+in
+this
+non-normative
+format:
+<a href="diff-20120712.html">
+diff
+to
+previous
+version
+</a>
+</p>
+<p class="copyright">
+<a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+Copyright
+</a>
+©
+2010-2012
+<a href="http://www.w3.org/">
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+</a>
+<sup>
+®
+</sup>
+(
+<a href="http://www.csail.mit.edu/">
+<abbr title="Massachusetts Institute of Technology">
+MIT
+</abbr>
+</a>,
+<a href="http://www.ercim.eu/">
+<abbr title="European Research Consortium for Informatics and Mathematics">
+ERCIM
+</abbr>
+</a>,
+<a href="http://www.keio.ac.jp/">
+Keio
+</a>
+),
+All
+Rights
+Reserved.
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+<a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">
+liability
+</a>,
+<a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">
+trademark
+</a>
+and
+<a href="http://www.w3.org/Consortium/Legal/copyright-documents">
+document
+use
+</a>
+rules
+apply.
+</p>
+<hr />
+</div>
+<section id="abstract" class="introductory">
+<h2>
+Abstract
+</h2>
+<p>
+JSON
+[
+<cite>
+<a class="bibref" href="#bib-RFC4627">
+RFC4627
+</a>
+</cite>
+]
+has
+proven
+to
+be
+a
+highly
+useful
+object
+serialization
+and
+messaging
+format.
+JSON-LD
+[
+<cite>
+<a class="bibref" href="#bib-JSON-LD">
+JSON-LD
+</a>
+</cite>
+]
+harmonizes
+the
+representation
+of
+Linked
+Data
+in
+JSON
+by
+outlining
+a
+common
+JSON
+representation
+format
+for
+expressing
+directed
+graphs;
+mixing
+both
+Linked
+Data
+and
+non-Linked
+Data
+in
+a
+single
+document.
+This
+document
+outlines
+an
+Application
+Programming
+Interface
+and
+a
+set
+of
+algorithms
+for
+programmatically
+transforming
+JSON-LD
+documents
+in
+order
+to
+make
+them
+easier
+to
+work
+with
+in
+programming
+environments
+like
+JavaScript,
+Python,
+and
+Ruby.
+</p>
+</section>
+<section class="introductory" id="sotd">
+<h2>
+Status
+of
+This
+Document
+</h2>
+<p>
+<em>
+This
+section
+describes
+the
+status
+of
+this
+document
+at
+the
+time
+of
+its
+publication.
+Other
+documents
+may
+supersede
+this
+document.
+A
+list
+of
+current
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+publications
+and
+the
+latest
+revision
+of
+this
+technical
+report
+can
+be
+found
+in
+the
+<a href="http://www.w3.org/TR/">
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+technical
+reports
+index
+</a>
+at
+http://www.w3.org/TR/.
+</em>
+</p>
+<p>
+This
+document
+has
+been
+under
+development
+for
+over
+18
+months
+in
+the
+JSON
+for
+Linking
+Data
+Community
+Group.
+The
+document
+has
+recently
+been
+transferred
+to
+the
+RDF
+Working
+Group
+for
+review,
+improvement,
+and
+publication
+along
+the
+Recommendation
+track.
+<del class="diff-old">While
+this
+is
+a
+First
+Public
+Working
+Draft
+publication,
+the
+</del>
+<ins class="diff-chg">The
+</ins>
+specification
+has
+undergone
+significant
+development,
+review,
+and
+changes
+during
+the
+course
+of
+the
+last
+18
+<del class="diff-old">months
+and
+is
+more
+mature
+than
+the
+First
+Public
+Working
+Draft
+status
+implies.
+</del>
+<ins class="diff-chg">months.
+</ins>
+</p>
+<p>
+There
+are
+currently
+<a href="http://json-ld.org/#impl">
+five
+interoperable
+implementations
+</a>
+of
+this
+specification.
+There
+is
+a
+<a href="https://github.com/json-ld/json-ld.org/tree/master/test-suite">
+fairly
+complete
+test
+suite
+</a>
+and
+a
+<a href="http://json-ld.org/playground/">
+live
+JSON-LD
+editor
+</a>
+that
+is
+capable
+of
+demonstrating
+the
+features
+described
+in
+this
+document.
+While
+development
+on
+implementations,
+the
+test
+suite
+and
+the
+live
+editor
+will
+continue,
+they
+are
+believed
+to
+be
+mature
+enough
+to
+be
+integrated
+into
+a
+non-production
+system
+at
+this
+point
+in
+time
+with
+the
+expectation
+that
+they
+could
+be
+used
+in
+a
+production
+system
+within
+the
+next
+year.
+</p>
+<div class="issue">
+<div class="issue-title">
+<span>
+Issue
+<del class="diff-old">1
+</del>
+</span>
+</div>
+<p class="">
+It
+is
+important
+for
+readers
+to
+understand
+that
+the
+scope
+of
+this
+document
+is
+currently
+under
+debate
+and
+new
+features
+may
+be
+added
+to
+the
+specification.
+Existing
+features
+may
+be
+modified
+heavily
+or
+removed
+entirely
+from
+the
+specification
+upon
+further
+review
+and
+feedback
+from
+the
+broader
+community.
+This
+is
+a
+work
+in
+progress
+and
+publication
+as
+a
+First
+Public
+Working
+Draft
+does
+not
+require
+that
+all
+Working
+Group
+members
+agree
+on
+the
+content
+of
+the
+document.
+</p>
+</div>
+<p>
+This
+document
+was
+published
+by
+the
+<a href="http://www.w3.org/2011/rdf-wg/">
+RDF
+Working
+Group
+</a>
+as
+<del class="diff-old">a
+First
+Public
+Working
+</del>
+<ins class="diff-chg">an
+Editor's
+</ins>
+Draft.
+<del class="diff-old">This
+document
+is
+intended
+to
+become
+a
+W3C
+Recommendation.
+</del>
+If
+you
+wish
+to
+make
+comments
+regarding
+this
+document,
+please
+send
+them
+to
+<a href="mailto:public-rdf-comments@w3.org">
+public-rdf-comments@w3.org
+</a>
+(
+<a href="mailto:public-rdf-comments-request@w3.org?subject=subscribe">
+subscribe
+</a>,
+<a href="http://lists.w3.org/Archives/Public/public-rdf-comments/">
+archives
+</a>
+).
+All
+feedback
+is
+welcome.
+</p>
+<p>
+Publication
+as
+<del class="diff-old">a
+Working
+</del>
+<ins class="diff-chg">an
+Editor's
+</ins>
+Draft
+does
+not
+imply
+endorsement
+by
+the
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+Membership.
+This
+is
+a
+draft
+document
+and
+may
+be
+updated,
+replaced
+or
+obsoleted
+by
+other
+documents
+at
+any
+time.
+It
+is
+inappropriate
+to
+cite
+this
+document
+as
+other
+than
+work
+in
+progress.
+</p>
+<p>
+This
+document
+was
+produced
+by
+a
+group
+operating
+under
+the
+<a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">
+5
+February
+2004
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+Patent
+Policy
+</a>.
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+maintains
+a
+<a rel="disclosure" href="http://www.w3.org/2004/01/pp-impl/46168/status">
+public
+list
+of
+any
+patent
+disclosures
+</a>
+made
+in
+connection
+with
+the
+deliverables
+of
+the
+group;
+that
+page
+also
+includes
+instructions
+for
+disclosing
+a
+patent.
+An
+individual
+who
+has
+actual
+knowledge
+of
+a
+patent
+which
+the
+individual
+believes
+contains
+<a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">
+Essential
+Claim(s)
+</a>
+must
+disclose
+the
+information
+in
+accordance
+with
+<a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">
+section
+6
+of
+the
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+Patent
+Policy
+</a>.
+</p>
+</section>
+<section id="toc">
+<h2 class="introductory">
+Table
+of
+Contents
+</h2>
+<ul class="toc">
+<li class="tocline">
+<a href="#preface" class="tocxref">
+<span class="secno">
+1.
+</span>
+Preface
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#contributing" class="tocxref">
+<span class="secno">
+1.1
+</span>
+Contributing
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#introduction" class="tocxref">
+<span class="secno">
+2.
+</span>
+Introduction
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#expansion" class="tocxref">
+<span class="secno">
+2.1
+</span>
+Expansion
+</a>
+</li>
+<li class="tocline">
+<a href="#compaction" class="tocxref">
+<span class="secno">
+2.2
+</span>
+Compaction
+</a>
+</li>
+<li class="tocline">
+<a href="#conversion-to-and-from-rdf" class="tocxref">
+<span class="secno">
+2.3
+</span>
+Conversion
+to
+and
+from
+RDF
+</a>
+</li>
+<li class="tocline">
+<a href="#framing-and-normalization" class="tocxref">
+<span class="secno">
+2.4
+</span>
+Framing
+and
+Normalization
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#the-application-programming-interface" class="tocxref">
+<span class="secno">
+3.
+</span>
+The
+Application
+Programming
+Interface
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#general-terminology" class="tocxref">
+<span class="secno">
+3.1
+</span>
+General
+Terminology
+</a>
+</li>
+<li class="tocline">
+<a href="#jsonldprocessor" class="tocxref">
+<span class="secno">
+3.2
+</span>
+JsonLdProcessor
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#methods" class="tocxref">
+<span class="secno">
+3.2.1
+</span>
+Methods
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#callbacks" class="tocxref">
+<span class="secno">
+3.3
+</span>
+Callbacks
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#jsonldcallback" class="tocxref">
+<span class="secno">
+3.3.1
+</span>
+JsonLdCallback
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#methods-1" class="tocxref">
+<span class="secno">
+3.3.1.1
+</span>
+Methods
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#quadcallback" class="tocxref">
+<span class="secno">
+3.3.2
+</span>
+QuadCallback
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#methods-2" class="tocxref">
+<span class="secno">
+3.3.2.1
+</span>
+Methods
+</a>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#data-structures" class="tocxref">
+<span class="secno">
+3.4
+</span>
+Data
+Structures
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#iri" class="tocxref">
+<span class="secno">
+3.4.1
+</span>
+<del class="diff-old">URL
+</del>
+<abbr title="Internationalized Resource Identifier">
+<ins class="diff-chg">IRI
+</ins></abbr>
+</a>
+</li>
+<li class="tocline">
+<a href="#jsonldoptions" class="tocxref">
+<span class="secno">
+3.4.2
+</span>
+JsonLdOptions
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#dictionary-jsonldoptions-members" class="tocxref">
+<span class="secno">
+<ins class="diff-new">3.4.2.1
+</ins></span><ins class="diff-new">
+Dictionary
+</ins><span class="formerLink"><code><ins class="diff-new">
+JsonLdOptions
+</ins></code></span><ins class="diff-new">
+Members
+</ins></a></li></ul>
+</li>
+<li class="tocline">
+<a href="#quad" class="tocxref">
+<span class="secno">
+3.4.3
+</span>
+Quad
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#attributes" class="tocxref">
+<span class="secno">
+3.4.3.1
+</span>
+Attributes
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#node" class="tocxref">
+<span class="secno">
+3.4.4
+</span>
+Node
+</a>
+</li>
+<li class="tocline">
+<a href="#iri-1" class="tocxref">
+<span class="secno">
+3.4.5
+</span>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#attributes-1" class="tocxref">
+<span class="secno">
+3.4.5.1
+</span>
+Attributes
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#blank-node" class="tocxref">
+<span class="secno">
+3.4.6
+</span>
+Blank
+Node
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#attributes-2" class="tocxref">
+<span class="secno">
+3.4.6.1
+</span>
+Attributes
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#literal" class="tocxref">
+<span class="secno">
+3.4.7
+</span>
+Literal
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#attributes-3" class="tocxref">
+<span class="secno">
+3.4.7.1
+</span>
+Attributes
+</a>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#algorithms" class="tocxref">
+<span class="secno">
+4.
+</span>
+Algorithms
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#algorithm-terms" class="tocxref">
+<span class="secno">
+4.1
+</span>
+Algorithm
+Terms
+</a>
+</li>
+<li class="tocline">
+<a href="#context-processing" class="tocxref">
+<span class="secno">
+4.2
+</span>
+Context
+Processing
+</a>
+</li>
+<li class="tocline">
+<a href="#iri-expansion" class="tocxref">
+<span class="secno">
+4.3
+</span>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+</a>
+</li>
+<li class="tocline">
+<a href="#iri-compaction" class="tocxref">
+<span class="secno">
+4.4
+</span>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#iri-compaction-algorithm" class="tocxref">
+<span class="secno">
+4.4.1
+</span>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+Algorithm
+</a>
+</li>
+<li class="tocline">
+<a href="#term-rank-algorithm" class="tocxref">
+<span class="secno">
+4.4.2
+</span>
+Term
+Rank
+Algorithm
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#value-expansion" class="tocxref">
+<span class="secno">
+4.5
+</span>
+Value
+Expansion
+</a>
+</li>
+<li class="tocline">
+<a href="#value-compaction" class="tocxref">
+<span class="secno">
+4.6
+</span>
+Value
+Compaction
+</a>
+</li>
+<li class="tocline">
+<a href="#expansion-1" class="tocxref">
+<span class="secno">
+4.7
+</span>
+Expansion
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#expansion-algorithm" class="tocxref">
+<span class="secno">
+4.7.1
+</span>
+Expansion
+Algorithm
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#compaction-1" class="tocxref">
+<span class="secno">
+4.8
+</span>
+Compaction
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#compaction-algorithm" class="tocxref">
+<span class="secno">
+4.8.1
+</span>
+Compaction
+Algorithm
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#flattening" class="tocxref">
+<span class="secno">
+4.9
+</span>
+<ins class="diff-new">Flattening
+</ins></a><ul class="toc"><li class="tocline"><a href="#flattening-algorithm" class="tocxref"><span class="secno"><ins class="diff-new">
+4.9.1
+</ins></span><ins class="diff-new">
+Flattening
+Algorithm
+</ins></a></li><li class="tocline"><a href="#node-map-generation" class="tocxref"><span class="secno"><ins class="diff-new">
+4.9.2
+</ins></span><ins class="diff-new">
+Node
+Map
+Generation
+</ins></a></li><li class="tocline"><a href="#generate-blank-node-identifier" class="tocxref"><span class="secno"><ins class="diff-new">
+4.9.3
+</ins></span><ins class="diff-new">
+Generate
+Blank
+Node
+Identifier
+</ins></a></li></ul></li><li class="tocline"><a href="#rdf-conversion" class="tocxref"><span class="secno"><ins class="diff-new">
+4.10
+</ins></span>
+RDF
+Conversion
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#overview" class="tocxref">
+<span class="secno">
+<del class="diff-old">4.9.1
+</del>
+<ins class="diff-chg">4.10.1
+</ins>
+</span>
+Overview
+</a>
+</li>
+<li class="tocline">
+<a href="#parsing-examples" class="tocxref">
+<span class="secno">
+<del class="diff-old">4.9.2
+</del>
+<ins class="diff-chg">4.10.2
+</ins>
+</span>
+Parsing
+Examples
+</a>
+</li>
+<li class="tocline">
+<a href="#convert-to-rdf-algorithm" class="tocxref">
+<span class="secno">
+<del class="diff-old">4.9.3
+</del>
+<ins class="diff-chg">4.10.3
+</ins>
+</span>
+Convert
+to
+RDF
+Algorithm
+</a>
+</li>
+<li class="tocline">
+<a href="#list-conversion" class="tocxref">
+<span class="secno">
+<del class="diff-old">4.9.4
+</del>
+<ins class="diff-chg">4.10.4
+</ins>
+</span>
+List
+Conversion
+</a>
+</li>
+<li class="tocline">
+<a href="#convert-from-rdf-algorithm" class="tocxref">
+<span class="secno">
+<del class="diff-old">4.9.5
+</del>
+<ins class="diff-chg">4.10.5
+</ins>
+</span>
+Convert
+from
+RDF
+Algorithm
+</a>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#data-round-tripping" class="tocxref">
+<span class="secno">
+5.
+</span>
+Data
+Round
+Tripping
+</a>
+</li>
+<li class="tocline">
+<del class="diff-old">A.
+Initial
+Context
+</del>
+<a href="#acknowledgements" class="tocxref">
+<span class="secno">
+<del class="diff-old">B.
+</del>
+<ins class="diff-chg">A.
+</ins>
+</span>
+Acknowledgements
+</a>
+</li>
+<li class="tocline">
+<a href="#references" class="tocxref">
+<span class="secno">
+<del class="diff-old">C.
+</del>
+<ins class="diff-chg">B.
+</ins>
+</span>
+References
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#normative-references" class="tocxref">
+<span class="secno">
+<del class="diff-old">C.1
+</del>
+<ins class="diff-chg">B.1
+</ins>
+</span>
+Normative
+references
+</a>
+</li>
+<li class="tocline">
+<a href="#informative-references" class="tocxref">
+<span class="secno">
+<del class="diff-old">C.2
+</del>
+<ins class="diff-chg">B.2
+</ins>
+</span>
+Informative
+references
+</a>
+</li>
+</ul>
+</li>
+</ul>
+</section>
+<section id="preface">
+<h2>
+<span class="secno">
+1.
+</span>
+Preface
+</h2>
+<p>
+This
+document
+is
+a
+detailed
+specification
+for
+an
+Application
+Programming
+Interface
+for
+the
+JSON-LD
+Syntax.
+The
+document
+is
+primarily
+intended
+for
+the
+following
+audiences:
+</p>
+<ul>
+<li>
+Web
+authors
+and
+developers
+that
+want
+a
+very
+detailed
+view
+of
+how
+a
+JSON-LD
+processor
+and
+the
+API
+operates.
+</li>
+<li>
+Software
+developers
+that
+want
+to
+implement
+processors
+and
+APIs
+for
+JSON-LD.
+</li>
+</ul>
+<p>
+To
+understand
+the
+basics
+in
+this
+specification
+you
+must
+first
+be
+familiar
+with
+JSON,
+which
+is
+detailed
+in
+[
+<cite>
+<a class="bibref" href="#bib-RFC4627">
+RFC4627
+</a>
+</cite>
+].
+You
+must
+also
+understand
+the
+JSON-LD
+Syntax
+[
+<cite>
+<a class="bibref" href="#bib-JSON-LD">
+JSON-LD
+</a>
+</cite>
+],
+which
+is
+the
+base
+syntax
+used
+by
+all
+of
+the
+algorithms
+in
+this
+document.
+To
+understand
+the
+API
+and
+how
+it
+is
+intended
+to
+operate
+in
+a
+programming
+environment,
+it
+is
+useful
+to
+have
+working
+knowledge
+of
+the
+JavaScript
+programming
+language
+[
+<cite>
+<a class="bibref" href="#bib-ECMA-262">
+ECMA-262
+</a>
+</cite>
+]
+and
+WebIDL
+[
+<cite>
+<a class="bibref" href="#bib-WEBIDL">
+WEBIDL
+</a>
+</cite>
+].
+To
+understand
+how
+JSON-LD
+maps
+to
+RDF,
+it
+is
+helpful
+to
+be
+familiar
+with
+the
+basic
+RDF
+concepts
+[
+<cite>
+<a class="bibref" href="#bib-RDF-CONCEPTS">
+RDF-CONCEPTS
+</a>
+</cite>
+].
+</p>
+<section id="contributing">
+<h3>
+<span class="secno">
+1.1
+</span>
+Contributing
+</h3>
+<p>
+There
+are
+a
+number
+of
+ways
+that
+one
+may
+participate
+in
+the
+development
+of
+this
+specification:
+</p>
+<ul>
+<li>
+If
+you
+want
+to
+make
+sure
+that
+your
+feedback
+is
+formally
+addressed
+by
+the
+RDF
+Working
+Group,
+you
+should
+send
+it
+to
+public-rdf-comments:
+<a href="http://lists.w3.org/Archives/Public/public-rdf-comments/">
+public-rdf-comments@w3.org
+</a>
+</li>
+<li>
+Ad-hoc
+technical
+discussion
+primarily
+occurs
+on
+the
+public
+community
+mailing
+list:
+<a href="http://lists.w3.org/Archives/Public/public-linked-json/">
+public-linked-json@w3.org
+</a>
+</li>
+<li>
+<a href="http://json-ld.org/minutes/">
+Public
+JSON-LD
+Community
+Group
+teleconferences
+</a>
+are
+held
+on
+Tuesdays
+at
+1500UTC
+every
+week.
+</li>
+<li>
+RDF
+Working
+Group
+teleconferences
+are
+held
+on
+Wednesdays
+at
+1500UTC
+every
+week.
+Participation
+is
+limited
+to
+RDF
+Working
+Group
+members.
+</li>
+<li>
+Specification
+bugs
+and
+issues
+should
+be
+reported
+in
+the
+<a href="https://github.com/json-ld/json-ld.org/issues">
+issue
+tracker
+</a>
+if
+you
+do
+not
+want
+to
+send
+an
+e-mail
+to
+the
+public-rdf-comments
+mailing
+list.
+</li>
+<li>
+<a href="https://github.com/json-ld/json-ld.org/tree/master/spec">
+Source
+code
+</a>
+for
+the
+specification
+can
+be
+found
+on
+Github.
+</li>
+<li>
+The
+<a href="http://webchat.freenode.net/?channels=json-ld">
+#json-ld
+</a>
+IRC
+channel
+is
+available
+for
+real-time
+discussion
+on
+irc.freenode.net.
+</li>
+</ul>
+</section>
+</section>
+<section id="introduction">
+<h2>
+<span class="secno">
+2.
+</span>
+Introduction
+</h2>
+<p>
+The
+JSON-LD
+Syntax
+specification
+[
+<cite>
+<a class="bibref" href="#bib-JSON-LD">
+JSON-LD
+</a>
+</cite>
+]
+outlines
+a
+language
+that
+may
+be
+used
+to
+express
+Linked
+Data
+in
+JSON.
+Often,
+it
+is
+useful
+to
+be
+able
+to
+transform
+JSON-LD
+documents
+so
+that
+they
+may
+be
+easily
+processed
+in
+a
+programming
+environment
+like
+JavaScript,
+Python
+or
+Ruby.
+</p>
+<p>
+There
+are
+three
+major
+types
+of
+transformation
+that
+are
+discussed
+in
+this
+document;
+compaction,
+expansion,
+and
+RDF
+conversion.
+</p>
+<section id="expansion">
+<h3>
+<span class="secno">
+2.1
+</span>
+Expansion
+</h3>
+<p>
+Software
+algorithms
+are
+easiest
+to
+write
+when
+the
+data
+that
+they
+are
+processing
+have
+a
+regular
+form.
+Since
+information
+can
+be
+represented
+by
+JSON-LD
+in
+a
+variety
+of
+different
+ways,
+transforming
+all
+of
+these
+methods
+into
+a
+uniform
+structure
+allows
+the
+developer
+to
+simplify
+their
+processing
+code.
+For
+example,
+note
+that
+the
+following
+input
+uses
+only
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+and
+is
+fairly
+compact:
+</p>
+ <div class="example"><div class="example-title"><span>Example 1</span></div><pre class="example">var input1 = {
+ "@context": "http://json-ld.org/contexts/person.jsonld"
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}
+</pre>
+</div>
+<p>
+The
+next
+input
+example
+uses
+one
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+to
+express
+a
+property,
+but
+leaves
+the
+rest
+of
+the
+information
+untouched.
+</p>
+ <div class="example"><div class="example-title"><span>Example 2</span></div><pre class="example">var input2 = {
+ "@context": "http://json-ld.org/contexts/person.jsonld"
+ "<span class="diff">http://xmlns.com/foaf/0.1/name</span>": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}
+</pre>
+</div>
+<p>
+While
+both
+inputs
+are
+valid
+JSON-LD,
+writing
+a
+program
+to
+handle
+every
+permutation
+of
+possible
+inputs
+can
+be
+difficult,
+especially
+when
+the
+incoming
+context
+could
+change
+as
+well.
+To
+ensure
+that
+the
+data
+can
+be
+given
+a
+more
+uniform
+structure,
+JSON-LD
+introduces
+the
+notion
+of
+expansion.
+<dfn title="expansion" id="dfn-expansion">
+Expansion
+</dfn>
+performs
+two
+important
+operations.
+The
+first
+is
+to
+expand
+all
+values
+that
+are
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+s
+to
+their
+fully
+expanded
+form.
+The
+second
+is
+to
+express
+all
+values
+in
+<dfn title="expanded_form" id="dfn-expanded_form">
+expanded
+form
+</dfn>.
+To
+transform
+both
+inputs
+above
+to
+the
+same
+representation,
+the
+developer
+could
+do
+the
+following:
+</p>
+ <div class="example"><div class="example-title"><span>Example 3</span></div><pre class="example">function expansionCallback(output) {
+ console.log(output);
+}
+// the second parameter is 'null' because the developer does not wish to
+// inject another context value
+jsonld.expand(input1, null, expansionCallback);
+jsonld.expand(input2,
+null,
+expansionCallback);
+</pre>
+</div>
+<p>
+The
+output
+for
+both
+calls
+above
+will
+be:
+</p>
+ <div class="example"><div class="example-title"><span>Example 4</span></div><pre class="example">[{
+ "http://xmlns.com/foaf/0.1/name": [{
+ "@value": "Manu Sporny"
+ }],
+ "http://xmlns.com/foaf/0.1/homepage": [{
+ "@id": "http://manu.sporny.org/"
+ }]
+}]
+</pre>
+</div>
+<p>
+Note
+that
+in
+the
+example
+above;
+all
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+definitions
+have
+been
+removed,
+all
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+and
+prefixes
+have
+been
+expanded
+to
+full
+IRIs,
+and
+all
+<a class="tref internalDFN" title="literal" href="#dfn-literal">
+literal
+</a>
+s
+are
+expressed
+in
+<a class="tref internalDFN" title="expanded_form" href="#dfn-expanded_form">
+expanded
+form
+</a>.
+While
+the
+output
+is
+more
+difficult
+for
+a
+human
+to
+read,
+it
+is
+easier
+for
+a
+software
+program
+to
+process
+because
+of
+its
+very
+regular
+structure.
+</p>
+</section>
+<section id="compaction">
+<h3>
+<span class="secno">
+2.2
+</span>
+Compaction
+</h3>
+<p>
+While
+expansion
+expands
+a
+given
+input
+as
+much
+as
+possible,
+compaction
+performs
+the
+opposite
+operation
+-
+expressing
+a
+given
+input
+as
+succinctly
+as
+possible.
+While
+expansion
+is
+meant
+to
+produce
+something
+that
+is
+easy
+to
+process
+by
+software
+programs,
+compaction
+is
+meant
+to
+produce
+something
+that
+is
+easy
+to
+<del class="diff-old">ready
+</del>
+<ins class="diff-chg">read
+</ins>
+by
+software
+developers.
+Compaction
+uses
+a
+developer-supplied
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+to
+compresses
+all
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+s
+to
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+or
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">
+prefix
+</a>
+es,
+and
+compacts
+all
+<a class="tref internalDFN" title="literal" href="#dfn-literal">
+literal
+</a>
+s
+expressed
+in
+<a class="tref internalDFN" title="expanded_form" href="#dfn-expanded_form">
+expanded
+form
+</a>
+as
+much
+as
+possible.
+</p>
+<p>
+The
+following
+example
+expresses
+input
+that
+has
+already
+been
+fully
+expanded:
+</p>
+ <div class="example"><div class="example-title"><span>Example 5</span></div><pre class="example">var expandedInput = [{
+ "http://xmlns.com/foaf/0.1/name": [{
+ "@value": "Manu Sporny"
+ }],
+ "http://xmlns.com/foaf/0.1/homepage": [{
+ "@id": "http://manu.sporny.org/"
+ }]
+}]
+</pre>
+</div>
+<p>
+A
+developer
+that
+wants
+to
+transform
+the
+data
+above
+into
+a
+more
+human-readable
+form,
+could
+do
+the
+following
+using
+the
+JSON-LD
+API:
+</p>
+ <div class="example"><div class="example-title"><span>Example 6</span></div><pre class="example">function compactionCallback(output) {
+ console.log(output);
+}
+jsonld.compact(expandedInput,
+"http://json-ld.org/contexts/person.jsonld",
+compactionCallback);
+</pre>
+</div>
+<p>
+The
+following
+would
+be
+the
+result
+of
+the
+call
+above:
+</p>
+ <div class="example"><div class="example-title"><span>Example 7</span></div><pre class="example">{
+ "@context": "http://json-ld.org/contexts/person.jsonld"
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}
+</pre>
+</div>
+<p>
+Note
+that
+all
+of
+the
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+have
+been
+compressed
+and
+the
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+has
+been
+injected
+into
+the
+output.
+While
+compacted
+output
+is
+most
+useful
+to
+humans,
+it
+can
+also
+be
+carefully
+used
+to
+generate
+structures
+that
+are
+easy
+to
+use
+for
+developers
+to
+program
+against
+as
+well.
+</p>
+</section>
+<section id="conversion-to-and-from-rdf">
+<h3>
+<span class="secno">
+2.3
+</span>
+Conversion
+to
+and
+from
+RDF
+</h3>
+<p>
+JSON-LD
+can
+be
+used
+to
+losslessly
+express
+the
+RDF
+data
+model
+as
+described
+in
+the
+RDF
+Concepts
+document
+[
+<cite>
+<a class="bibref" href="#bib-RDF-CONCEPTS">
+RDF-CONCEPTS
+</a>
+</cite>
+].
+This
+ensures
+that
+data
+can
+be
+round-tripped
+from
+any
+RDF
+syntax,
+like
+N-Triples
+or
+TURTLE,
+without
+any
+loss
+in
+the
+fidelity
+of
+the
+data.
+Assume
+the
+following
+RDF
+input
+in
+N-Triples
+format:
+</p>
+ <div class="example"><div class="example-title"><span>Example 8</span></div><pre class="example">var data = "
+<http://manu.sporny.org/about/#manu> <http://xmlns.com/foaf/0.1/name> \"Manu Sporny\" .\n
+<http://manu.sporny.org/about/#manu>
+<http://xmlns.com/foaf/0.1/homepage>
+<http://manu.sporny.org/>
+.";
+</pre>
+</div>
+<p>
+A
+developer
+can
+use
+the
+JSON-LD
+API
+to
+transform
+the
+markup
+above
+into
+a
+JSON-LD
+document:
+</p>
+ <div class="example"><div class="example-title"><span>Example 9</span></div><pre class="example">function conversionCallback(result)
+{
+ console.log("JSON-LD Document: ", result);
+};
+jsonld.fromRDF(data,
+conversionCallback,
+{"format":
+"ntriples"});
+</pre>
+</div>
+<p>
+The
+following
+expanded
+output
+would
+be
+the
+result
+of
+the
+call
+above:
+</p>
+ <div class="example"><div class="example-title"><span>Example 10</span></div><pre class="example">[{
+ "@id": "http://manu.sporny.org/about/#manu",
+ "http://xmlns.com/foaf/0.1/name": [{
+ "@value": "Manu Sporny"
+ }],
+ "http://xmlns.com/foaf/0.1/homepage": [{
+ "@id": "http://manu.sporny.org/"
+ }]
+}]
+</pre>
+</div>
+<p>
+Note
+that
+the
+output
+above,
+could
+easily
+be
+compacted
+to
+produce
+the
+following
+using
+the
+technique
+outlined
+in
+the
+previous
+section:
+</p>
+ <div class="example"><div class="example-title"><span>Example 11</span></div><pre class="example">{
+ "@context": "http://json-ld.org/contexts/person.jsonld",
+ "@id": "http://manu.sporny.org/about/#manu",
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}
+</pre>
+</div>
+<p>
+Transforming
+the
+<del class="diff-old">object
+</del>
+<ins class="diff-chg">node
+</ins>
+above
+back
+to
+RDF
+is
+as
+simple
+as
+calling
+the
+<code>
+toRDF()
+</code>
+method:
+</p>
+ <div class="example"><div class="example-title"><span>Example 12</span></div><pre class="example">var jsonldDocument = ...; // assign the JSON-LD document here
+function rdfCallback(quads)
+{
+ console.log("RDF Data: ", quads);
+};
+jsonld.toRDF(jsonldDocument,
+rdfCallback);
+</pre>
+</div>
+</section>
+<section id="framing-and-normalization">
+<h3>
+<span class="secno">
+2.4
+</span>
+Framing
+and
+Normalization
+</h3>
+<div class="issue">
+<div class="issue-title">
+<span>
+Issue
+<del class="diff-old">2
+</del>
+</span>
+</div>
+<p class="">
+There
+are
+currently
+two
+other
+API
+methods
+that
+are
+in
+active
+development
+and
+were
+not
+ready
+for
+publication
+at
+the
+time
+this
+document
+was
+published.
+Framing
+allows
+a
+developer
+to
+force
+a
+different
+layout
+for
+the
+data
+and
+effectively
+perform
+query-by-example
+on
+JSON-LD
+documents
+-
+this
+is
+most
+useful
+when
+a
+JSON-LD-based
+REST
+API
+does
+not
+know
+the
+exact
+form
+of
+the
+data
+it
+is
+getting
+in,
+but
+still
+wants
+to
+operate
+upon
+it
+if
+some
+bare
+essentials
+are
+found
+in
+the
+data.
+JSON-LD
+normalization
+allows
+JSON-LD
+documents
+to
+be
+deterministically
+serialized
+such
+that
+they
+can
+be
+digitally
+signed
+or
+be
+used
+to
+find
+the
+differences
+between
+two
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>
+s.
+It
+is
+expected
+that
+framing
+will
+be
+a
+part
+of
+the
+final
+API.
+It
+is
+expected
+that
+normalization
+will
+be
+an
+optional
+feature
+that
+JSON-LD
+processors
+may
+implement.
+</p>
+</div>
+</section>
+</section>
+<section id="the-application-programming-interface">
+<h2>
+<span class="secno">
+3.
+</span>
+The
+Application
+Programming
+Interface
+</h2>
+<p>
+This
+API
+provides
+a
+clean
+mechanism
+that
+enables
+developers
+to
+convert
+JSON-LD
+data
+into
+a
+a
+variety
+of
+output
+formats
+that
+are
+easier
+to
+work
+with
+in
+various
+programming
+languages.
+If
+a
+JSON-LD
+API
+is
+provided
+in
+a
+programming
+environment,
+the
+entirety
+of
+the
+following
+API
+<em class="rfc2119" title="must">
+must
+</em>
+be
+implemented.
+</p>
+<section id="general-terminology">
+<h3>
+<span class="secno">
+3.1
+</span>
+General
+Terminology
+</h3>
+<div class="issue">
+<div class="issue-title">
+<span>
+Issue
+<del class="diff-old">3
+</del>
+</span>
+</div>
+<p class="">
+The
+intent
+of
+the
+Working
+Group
+and
+the
+Editors
+of
+this
+specification
+is
+to
+eventually
+align
+terminology
+used
+in
+this
+document
+with
+the
+terminology
+used
+in
+the
+RDF
+Concepts
+document
+to
+the
+extent
+to
+which
+it
+makes
+sense
+to
+do
+so.
+In
+general,
+if
+there
+is
+an
+analogue
+to
+terminology
+used
+in
+this
+document
+in
+the
+RDF
+Concepts
+document,
+the
+preference
+is
+to
+use
+the
+terminology
+in
+the
+RDF
+Concepts
+document.
+</p>
+</div>
+<p>
+The
+following
+is
+an
+explanation
+of
+the
+general
+terminology
+used
+in
+this
+document:
+</p>
+<dl>
+<dt>
+<dfn title="json_object" id="dfn-json_object">
+JSON
+object
+</dfn>
+</dt>
+<dd>
+An
+object
+structure
+is
+represented
+as
+a
+pair
+of
+curly
+brackets
+surrounding
+zero
+or
+more
+name-value
+pairs.
+A
+name
+is
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>.
+A
+single
+colon
+comes
+after
+each
+name,
+separating
+the
+name
+from
+the
+value.
+A
+single
+comma
+separates
+a
+value
+from
+a
+following
+name.
+The
+names
+within
+an
+object
+<em class="rfc2119" title="should">
+should
+</em>
+be
+unique.
+</dd>
+<dt>
+<dfn title="array" id="dfn-array">
+array
+</dfn>
+</dt>
+<dd>
+An
+array
+is
+represented
+as
+square
+brackets
+surrounding
+zero
+or
+more
+values
+that
+are
+separated
+by
+commas.
+</dd>
+<dt>
+<dfn title="string" id="dfn-string">
+string
+</dfn>
+</dt>
+<dd>
+A
+string
+is
+a
+sequence
+of
+zero
+or
+more
+Unicode
+(UTF-8)
+characters,
+wrapped
+in
+double
+quotes,
+using
+backslash
+escapes
+(if
+necessary).
+A
+character
+is
+represented
+as
+a
+single
+character
+string.
+</dd>
+<dt>
+<dfn title="number" id="dfn-number">
+number
+</dfn>
+</dt>
+<dd>
+A
+number
+is
+similar
+to
+that
+used
+in
+most
+programming
+languages,
+except
+that
+the
+octal
+and
+hexadecimal
+formats
+are
+not
+used
+and
+that
+leading
+zeros
+are
+not
+allowed.
+</dd>
+<dt>
+<dfn title="true" id="dfn-true">
+true
+</dfn>
+and
+<dfn title="false" id="dfn-false">
+false
+</dfn>
+</dt>
+<dd>
+Values
+that
+are
+used
+to
+express
+one
+of
+two
+possible
+boolean
+states.
+</dd>
+<dt>
+<dfn title="null" id="dfn-null">
+null
+</dfn>
+</dt>
+<dd>
+<del class="diff-old">Unless
+otherwise
+specified,
+a
+JSON-LD
+processor
+must
+act
+as
+if
+a
+key-value
+pair
+in
+the
+body
+</del>
+<ins class="diff-chg">The
+use
+</ins>
+of
+<del class="diff-old">a
+JSON-LD
+document
+was
+never
+declared
+when
+</del>
+the
+<del class="diff-old">value
+equals
+</del>
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+<del class="diff-old">.
+If
+@value
+,
+@list
+,
+or
+@set
+</del>
+</a>
+<ins class="diff-chg">value
+within
+JSON-LD
+</ins>
+is
+<del class="diff-old">set
+</del>
+<ins class="diff-chg">used
+</ins>
+to
+<del class="diff-old">null
+in
+expanded
+form,
+then
+the
+entire
+</del>
+<ins class="diff-chg">ignore
+or
+reset
+values.
+</ins></dd><dt><dfn title="keyword" id="dfn-keyword"><ins class="diff-chg">
+keyword
+</ins></dfn></dt><dd><ins class="diff-chg">
+A
+</ins>
+JSON
+<del class="diff-old">object
+is
+ignored.
+If
+@context
+</del>
+<ins class="diff-chg">key
+that
+</ins>
+is
+<del class="diff-old">set
+</del>
+<ins class="diff-chg">specific
+</ins>
+to
+<del class="diff-old">null
+,
+</del>
+<ins class="diff-chg">JSON-LD,
+specified
+in
+</ins>
+the
+<del class="diff-old">active
+context
+</del>
+<ins class="diff-chg">JSON-LD
+Syntax
+specification
+[
+</ins><cite><a class="bibref" href="#bib-JSON-LD"><ins class="diff-chg">
+JSON-LD
+</ins>
+</a>
+<del class="diff-old">is
+reset
+and
+when
+used
+within
+a
+context
+,
+it
+removes
+any
+definition
+associated
+with
+</del>
+</cite>
+<ins class="diff-chg">]
+in
+</ins>
+the
+<del class="diff-old">key,
+unless
+otherwise
+specified.
+</del>
+<ins class="diff-chg">section
+titled
+</ins><cite><a href="../json-ld-syntax/#syntax-tokens-and-keywords"><ins class="diff-chg">
+Syntax
+Tokens
+and
+Keywords
+</ins></a></cite>.
+</dd>
+<dt>
+<del class="diff-old">subject
+definition
+</del>
+<dfn title="context" id="dfn-context">
+<ins class="diff-chg">context
+</ins>
+</dfn>
+</dt>
+<dd>
+A
+<del class="diff-old">JSON
+object
+used
+to
+represent
+</del>
+a
+<del class="diff-old">subject
+</del>
+<ins class="diff-chg">set
+of
+rules
+for
+interpreting
+a
+JSON-LD
+document
+as
+specified
+in
+</ins><cite><a href="../json-ld-syntax/#the-context"><ins class="diff-chg">
+The
+Context
+</ins>
+</a>
+<del class="diff-old">and
+one
+or
+more
+properties
+</del>
+</cite>
+of
+<del class="diff-old">that
+subject.
+A
+JSON
+object
+</del>
+<ins class="diff-chg">the
+[
+</ins><cite><a class="bibref" href="#bib-JSON-LD"><ins class="diff-chg">
+JSON-LD
+</ins>
+</a>
+<del class="diff-old">is
+a
+subject
+definition
+if
+it
+does
+not
+contain
+they
+keys
+@value
+,
+@list
+or
+@set
+and
+it
+has
+one
+or
+more
+keys
+other
+than
+@id
+.
+</del>
+</cite>
+<ins class="diff-chg">]
+specification.
+</ins>
+</dd>
+<dt>
+<del class="diff-old">subject
+reference
+</del>
+<dfn title="iri" id="dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+<ins class="diff-chg">IRI
+</ins></abbr>
+</dfn>
+</dt>
+<dd>
+<del class="diff-old">A
+JSON
+object
+</del>
+<ins class="diff-chg">An
+Internationalized
+Resource
+Identifier
+as
+described
+in
+[
+</ins><cite><a class="bibref" href="#bib-RFC3987"><ins class="diff-chg">
+RFC3987
+</ins>
+</a>
+<del class="diff-old">used
+to
+reference
+a
+subject
+having
+only
+the
+@id
+key.
+</del>
+</cite>
+<ins class="diff-chg">].
+</ins>
+</dd>
+<dt>
+<dfn title="linked_data" id="dfn-linked_data">
+Linked
+Data
+</dfn>
+</dt>
+<dd>
+A
+set
+of
+documents,
+each
+containing
+a
+representation
+of
+a
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>.
+</dd>
+<dt>
+<dfn title="linked_data_graph" id="dfn-linked_data_graph">
+linked
+data
+graph
+</dfn>
+or
+<dfn title="dataset" id="dfn-dataset">
+dataset
+</dfn>
+</dt>
+<dd>
+An
+unordered
+labeled
+directed
+graph,
+where
+<a class="tref internalDFN" title="node" href="#dfn-node">
+<del class="diff-old">node
+</del>
+<ins class="diff-chg">nodes
+</ins>
+</a>
+<del class="diff-old">s
+</del>
+are
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<ins class="diff-chg">IRIs
+</ins>
+</a>
+<del class="diff-old">s
+</del>
+or
+<del class="diff-old">object
+s,
+and
+edges
+are
+properties.
+node
+</del>
+<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">
+<ins class="diff-chg">Blank
+Nodes
+</ins></a>,<ins class="diff-chg">
+or
+other
+values.
+</ins>
+A
+<del class="diff-old">piece
+of
+information
+that
+is
+represented
+in
+a
+</del>
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+<del class="diff-old">.
+</del>
+</a>
+<ins class="diff-chg">is
+a
+generalized
+representation
+of
+a
+</ins><cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-graph"><ins class="diff-chg">
+RDF
+graph
+</ins></a></cite><ins class="diff-chg">
+as
+defined
+in
+[
+</ins><cite><a class="bibref" href="#bib-RDF-CONCEPTS"><ins class="diff-chg">
+RDF-CONCEPTS
+</ins></a></cite><ins class="diff-chg">
+].
+</ins>
+</dd>
+<dt>
+<dfn title="named_graph" id="dfn-named_graph">
+named
+graph
+</dfn>
+</dt>
+<dd>
+A
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>
+that
+<del class="diff-old">has
+one
+or
+more
+</del>
+<ins class="diff-chg">is
+identified
+by
+an
+</ins>
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<del class="diff-old">that
+are
+used
+to
+refer
+to
+it.
+</del>
+</a>.
+</dd>
+<dt>
+<dfn title="graph_name" id="dfn-graph_name">
+graph
+name
+</dfn>
+</dt>
+<dd>
+<del class="diff-old">An
+</del>
+<ins class="diff-chg">The
+</ins>
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+<del class="diff-old">that
+is
+a
+reference
+to
+</del>
+<ins class="diff-chg">identifying
+</ins>
+a
+<a class="tref internalDFN" title="named_graph" href="#dfn-named_graph">
+named
+graph
+</a>.
+</dd>
+<dt>
+<dfn title="default_graph" id="dfn-default_graph">
+default
+graph
+</dfn>
+</dt>
+<dd>
+When
+executing
+an
+algorithm,
+the
+graph
+where
+data
+should
+be
+placed
+if
+a
+<a class="tref internalDFN" title="named_graph" href="#dfn-named_graph">
+named
+graph
+</a>
+is
+not
+specified.
+</dd>
+<dt>
+<del class="diff-old">subject
+</del>
+<dfn title="node" id="dfn-node">
+<ins class="diff-chg">node
+</ins>
+</dfn>
+</dt>
+<dd>
+<del class="diff-old">Any
+node
+</del>
+<ins class="diff-chg">A
+piece
+of
+information
+that
+is
+represented
+</ins>
+in
+a
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+<del class="diff-old">with
+at
+least
+one
+outgoing
+edge.
+</del>
+</a>.
+</dd>
+<dt>
+<dfn title="node_definition" id="dfn-node_definition">
+<ins class="diff-chg">node
+definition
+</ins></dfn>
+<del class="diff-old">IRI
+</del>
+</dt>
+<dd>
+<ins class="diff-chg">A
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><ins class="diff-chg">
+used
+to
+represent
+a
+</ins><a class="tref internalDFN" title="node" href="#dfn-node"><ins class="diff-chg">
+node
+</ins></a><ins class="diff-chg">
+and
+one
+or
+more
+properties
+of
+that
+node.
+A
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><ins class="diff-chg">
+is
+a
+node
+definition
+if
+it
+does
+not
+contain
+they
+keys
+</ins><code><ins class="diff-chg">
+@value
+</ins></code>,<code><ins class="diff-chg">
+@list
+</ins></code><ins class="diff-chg">
+or
+</ins><code><ins class="diff-chg">
+@set
+</ins></code><ins class="diff-chg">
+and
+it
+has
+one
+or
+more
+keys
+other
+than
+</ins><code><ins class="diff-chg">
+@id
+</ins></code>.</dd><dt>
+<dfn title="node_reference" id="dfn-node_reference">
+<ins class="diff-new">node
+reference
+</ins>
+</dfn>
+</dt>
+<dd>
+<del class="diff-old">An
+Internationalized
+Resource
+Identifier
+as
+described
+in
+[
+RFC3987
+</del>
+<ins class="diff-chg">A
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins>
+</a>
+<del class="diff-old">]).
+</del>
+<ins class="diff-chg">used
+to
+reference
+a
+node
+having
+only
+the
+</ins><code><ins class="diff-chg">
+@id
+</ins></code><ins class="diff-chg">
+key.
+</ins>
+</dd>
+<dt>
+<del class="diff-old">object
+</del>
+<dfn title="blank_node" id="dfn-blank_node">
+<ins class="diff-chg">blank
+node
+</ins>
+</dfn>
+</dt>
+<dd>
+A
+<a class="tref internalDFN" title="node" href="#dfn-node">
+node
+</a>
+in
+<del class="diff-old">a
+</del>
+<ins class="diff-chg">the
+</ins>
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>
+<ins class="diff-new">that
+does
+not
+contain
+a
+de-referenceable
+identifier
+because
+it
+is
+either
+ephemeral
+in
+nature
+or
+does
+not
+contain
+information
+that
+needs
+to
+be
+linked
+to
+from
+outside
+of
+the
+linked
+data
+graph.
+A
+blank
+node
+is
+assigned
+an
+identifier
+starting
+</ins>
+with
+<del class="diff-old">at
+least
+one
+incoming
+edge.
+</del>
+<ins class="diff-chg">the
+prefix
+</ins><code><ins class="diff-chg">
+_:
+</ins></code>.
+</dd>
+<dt>
+<dfn title="property" id="dfn-property">
+property
+</dfn>
+</dt>
+<dd>
+<del class="diff-old">An
+edge
+</del>
+<ins class="diff-chg">The
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr></a><ins class="diff-chg">
+label
+</ins>
+of
+<del class="diff-old">the
+</del>
+<ins class="diff-chg">an
+edge
+in
+a
+</ins>
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>.
+</dd>
+<dt>
+<del class="diff-old">literal
+</del>
+<dfn title="subject" id="dfn-subject">
+<ins class="diff-chg">subject
+</ins>
+</dfn>
+</dt>
+<dd>
+<del class="diff-old">An
+</del>
+<ins class="diff-chg">A
+</ins><a class="tref internalDFN" title="node" href="#dfn-node"><ins class="diff-chg">
+node
+</ins></a><ins class="diff-chg">
+in
+a
+</ins><a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph"><ins class="diff-chg">
+linked
+data
+graph
+</ins></a><ins class="diff-chg">
+with
+at
+least
+one
+outgoing
+edge,
+related
+to
+an
+</ins>
+<a class="tref internalDFN" title="object" href="#dfn-object">
+object
+</a>
+<del class="diff-old">with
+</del>
+<ins class="diff-chg">node
+through
+</ins>
+a
+<del class="diff-old">label
+that
+is
+not
+an
+</del>
+<a class="tref internalDFN" title="property" href="#dfn-property">
+<ins class="diff-chg">property
+</ins></a>.</dd><dt>
+<del class="diff-old">IRI
+</del>
+<dfn title="object" id="dfn-object">
+<ins class="diff-chg">object
+</ins></dfn>
+<del class="diff-old">.
+</del>
+</dt>
+<dd>
+<ins class="diff-chg">A
+</ins><a class="tref internalDFN" title="node" href="#dfn-node"><ins class="diff-chg">
+node
+</ins></a><ins class="diff-chg">
+in
+a
+</ins><a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph"><ins class="diff-chg">
+linked
+data
+graph
+</ins></a><ins class="diff-chg">
+with
+at
+least
+one
+incoming
+edge.
+</ins>
+</dd>
+<dt>
+<dfn title="quad" id="dfn-quad">
+quad
+</dfn>
+</dt>
+<dd>
+A
+piece
+of
+information
+that
+contains
+four
+items;
+a
+<a class="tref internalDFN" title="subject" href="#dfn-subject">
+subject
+</a>,
+a
+<a class="tref internalDFN" title="property" href="#dfn-property">
+property
+</a>,
+<del class="diff-old">a
+</del>
+<ins class="diff-chg">an
+</ins>
+<a class="tref internalDFN" title="object" href="#dfn-object">
+object
+</a>,
+and
+a
+<a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">
+graph
+name
+</a>.
+</dd>
+<dt>
+<del class="diff-old">context
+</del>
+<dfn title="literal" id="dfn-literal">
+<ins class="diff-chg">literal
+</ins>
+</dfn>
+</dt>
+<dd>
+<del class="diff-old">A
+JSON
+</del>
+<ins class="diff-chg">An
+</ins><a class="tref internalDFN" title="object" href="#dfn-object">
+object
+</a>
+<del class="diff-old">that
+contains
+rules
+for
+interpreting
+</del>
+<ins class="diff-chg">expressed
+as
+</ins>
+a
+<del class="diff-old">JSON-LD
+document.
+keyword
+A
+JSON
+key
+that
+is
+specific
+to
+JSON-LD,
+specified
+in
+the
+JSON-LD
+Syntax
+specification
+[
+JSON-LD
+]
+</del>
+<ins class="diff-chg">value
+such
+as
+a
+string,
+number
+or
+</ins>
+in
+<del class="diff-old">the
+section
+titled
+Syntax
+Tokens
+and
+Keywords
+.
+</del>
+<ins class="diff-chg">expanded
+form.
+</ins>
+</dd>
+</dl>
+</section>
+<section id="jsonldprocessor">
+<h3>
+<span class="secno">
+3.2
+</span>
+JsonLdProcessor
+</h3>
+<p>
+The
+JSON-LD
+<del class="diff-old">Processor
+</del>
+<ins class="diff-chg">processor
+</ins>
+interface
+is
+the
+high-level
+programming
+structure
+that
+developers
+use
+to
+access
+the
+JSON-LD
+transformation
+methods.
+</p>
+<del class="diff-old"> ]
+</del>
+<div class="note">
+<div class="note-title">
+<span>
+<ins class="diff-chg">Note
+</ins></span></div><p class=""><ins class="diff-chg">
+The
+JSON-LD
+API
+signatures
+are
+the
+same
+across
+all
+programming
+languages.
+Due
+to
+the
+fact
+that
+asynchronous
+programming
+is
+uncommon
+in
+certain
+languages,
+developers
+</ins><em class="rfc2119" title="may"><ins class="diff-chg">
+may
+</ins></em><ins class="diff-chg">
+implement
+processor
+with
+a
+synchronous
+interface
+instead.
+In
+that
+case,
+the
+</ins><code><ins class="diff-chg">
+callback
+</ins></code><ins class="diff-chg">
+parameter
+</ins><em class="rfc2119" title="must not"><ins class="diff-chg">
+must
+not
+</ins></em><ins class="diff-chg">
+be
+included
+and
+the
+result
+</ins><em class="rfc2119" title="must"><ins class="diff-chg">
+must
+</ins></em><ins class="diff-chg">
+be
+returned
+as
+return
+value
+instead.
+</ins></p></div> <pre class="idl"><span id="idl-def-JsonLdProcessor" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">JsonLdProcessor</span> {
+<del class="diff-old">};
+</del>
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdProcessor-expand-void-object-or-object---or-IRI-input-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options">expand</a></span> (<span class="idlParam"><span class="idlParamType"><a>object or object[] or IRI</a></span> <span class="idlParamName">input</span></span>, <span class="idlParam"><span class="idlParamType"><a>object or IRI</a>?</span> <span class="idlParamName">context</span></span>, <span class="idlParam"><span class="idlParamType"><a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a></span> <span class="idlParamName">callback</span></span>, <span class="idlParam">optional <span class="idlParamType"><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a>?</span> <span class="idlParamName">options</span></span>);</span>
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdProcessor-compact-void-object-or-object---or-IRI-input-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options">compact</a></span> (<span class="idlParam"><span class="idlParamType"><a>object or object[] or IRI</a></span> <span class="idlParamName">input</span></span>, <span class="idlParam"><span class="idlParamType"><a>object or IRI</a></span> <span class="idlParamName">context</span></span>, <span class="idlParam"><span class="idlParamType"><a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a></span> <span class="idlParamName">callback</span></span>, <span class="idlParam">optional <span class="idlParamType"><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a>?</span> <span class="idlParamName">options</span></span>);</span>
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdProcessor-flatten-void-object-or-object---or-IRI-input-string-or-IRI-graph-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options">flatten</a></span> (<span class="idlParam"><span class="idlParamType"><a>object or object[] or IRI</a></span> <span class="idlParamName">input</span></span>, <span class="idlParam"><span class="idlParamType"><a>string or IRI</a></span> <span class="idlParamName">graph</span></span>, <span class="idlParam"><span class="idlParamType"><a>object or IRI</a>?</span> <span class="idlParamName">context</span></span>, <span class="idlParam"><span class="idlParamType"><a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a></span> <span class="idlParamName">callback</span></span>, <span class="idlParam">optional <span class="idlParamType"><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a>?</span> <span class="idlParamName">options</span></span>);</span>
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdProcessor-fromRDF-void-QuadArray-input-JsonLdCallback-callback-JsonLdOptions-options">fromRDF</a></span> (<span class="idlParam"><span class="idlParamType"><a href="#idl-def-Quad" class="idlType"><code>Quad</code></a>[]</span> <span class="idlParamName">input</span></span>, <span class="idlParam"><span class="idlParamType"><a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a></span> <span class="idlParamName">callback</span></span>, <span class="idlParam">optional <span class="idlParamType"><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a>?</span> <span class="idlParamName">options</span></span>);</span>
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdProcessor-toRDF-void-object-or-object---or-IRI-input-QuadCallback-callback-JsonLdOptions-options">toRDF</a></span> (<span class="idlParam"><span class="idlParamType"><a>object or object[] or IRI</a></span> <span class="idlParamName">input</span></span>, <span class="idlParam"><span class="idlParamType"><a href="#idl-def-QuadCallback" class="idlType"><code>QuadCallback</code></a></span> <span class="idlParamName">callback</span></span>, <span class="idlParam">optional <span class="idlParamType"><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a>?</span> <span class="idlParamName">options</span></span>);</span>
+<ins class="diff-chg">};
+</ins></span>
+</pre>
+<section id="methods">
+<h4>
+<span class="secno">
+3.2.1
+</span>
+Methods
+</h4>
+<dl class="methods">
+<dt id="widl-JsonLdProcessor-compact-void-object-or-object---or-IRI-input-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options">
+<code>
+compact
+</code>
+</dt>
+<dd>
+<a href="#compaction">
+Compacts
+</a>
+the
+given
+<code>
+input
+</code>
+using
+the
+<code>
+context
+</code>
+according
+to
+the
+steps
+in
+the
+<a href="#compaction-algorithm">
+Compaction
+Algorithm
+</a>.
+The
+<code>
+input
+</code>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+copied,
+compacted
+and
+returned
+if
+there
+are
+no
+errors.
+If
+the
+compaction
+fails,
+an
+appropriate
+exception
+<em class="rfc2119" title="must">
+must
+</em>
+be
+thrown.
+<dl title="InvalidContext" class="exception">
+<dt>
+<ins class="diff-new">INVALID_SYNTAX
+</ins></dt><dd><ins class="diff-new">
+A
+general
+syntax
+error
+was
+detected
+in
+the
+</ins><code><ins class="diff-new">
+@context
+</ins></code>.<ins class="diff-new">
+For
+example,
+if
+a
+</ins><code><ins class="diff-new">
+@type
+</ins></code><ins class="diff-new">
+key
+maps
+to
+anything
+other
+than
+</ins><code><ins class="diff-new">
+@id
+</ins></code><ins class="diff-new">
+or
+an
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-new">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a>,<ins class="diff-new">
+this
+exception
+would
+be
+raised.
+</ins></dd><dt><ins class="diff-new">
+LOAD_ERROR
+</ins></dt><dd><ins class="diff-new">
+There
+was
+a
+problem
+encountered
+loading
+a
+remote
+context.
+</ins></dd></dl><dl title="ProcessingError" class="exception"><dt><ins class="diff-new">
+LOSSY_COMPACTION
+</ins></dt><dd><ins class="diff-new">
+The
+compaction
+would
+lead
+to
+a
+loss
+of
+information,
+such
+as
+a
+</ins><code><ins class="diff-new">
+@language
+</ins></code><ins class="diff-new">
+value.
+</ins></dd><dt><ins class="diff-new">
+CONFLICTING_DATATYPES
+</ins></dt><dd><ins class="diff-new">
+The
+target
+datatype
+specified
+in
+the
+coercion
+rule
+and
+the
+datatype
+for
+the
+typed
+literal
+do
+not
+match.
+</ins></dd><dt><ins class="diff-new">
+LIST_OF_LISTS_DETECTED
+</ins></dt><dd><ins class="diff-new">
+A
+list
+of
+lists
+was
+detected.
+This
+is
+not
+supported
+in
+this
+version
+of
+JSON-LD.
+</ins></dd></dl>
+<table class="parameters">
+<tr>
+<th>
+Parameter
+</th>
+<th>
+Type
+</th>
+<th>
+Nullable
+</th>
+<th>
+Optional
+</th>
+<th>
+Description
+</th>
+</tr>
+<tr>
+<td class="prmName">
+input
+</td>
+<td class="prmType">
+<code>
+<a>
+object
+or
+object[]
+or
+<del class="diff-old">URL
+</del>
+<ins class="diff-chg">IRI
+</ins>
+</a>
+</code>
+</td>
+<td class="prmNullFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmOptFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmDesc">
+The
+JSON-LD
+object
+or
+array
+of
+JSON-LD
+objects
+to
+perform
+the
+compaction
+upon
+or
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+referencing
+the
+JSON-LD
+document
+to
+compact.
+</td>
+</tr>
+<tr>
+<td class="prmName">
+context
+</td>
+<td class="prmType">
+<code>
+<a>
+object
+or
+<del class="diff-old">URL
+</del>
+<ins class="diff-chg">IRI
+</ins>
+</a>
+</code>
+</td>
+<td class="prmNullFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmOptFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmDesc">
+The
+context
+to
+use
+when
+compacting
+the
+<code>
+input
+</code>
+;
+either
+in
+the
+form
+of
+an
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+or
+as
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+</td>
+</tr>
+<tr>
+<td class="prmName">
+callback
+</td>
+<td class="prmType">
+<code>
+<a href="#idl-def-JsonLdCallback" class="idlType">
+<code>
+JsonLdCallback
+</code>
+</a>
+</code>
+</td>
+<td class="prmNullFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmOptFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmDesc">
+A
+callback
+that
+is
+called
+when
+processing
+is
+complete
+on
+the
+given
+<code>
+input
+</code>.
+</td>
+</tr>
+<tr>
+<td class="prmName">
+options
+</td>
+<td class="prmType">
+<code>
+<a href="#idl-def-JsonLdOptions" class="idlType">
+<code>
+JsonLdOptions
+</code>
+</a>
+</code>
+</td>
+<del class="diff-old">✘
+</del>
+<td class="prmNullTrue">
+<ins class="diff-chg">✔
+</ins>
+</td>
+<td class="prmOptTrue">
+<del class="diff-old">✔
+</del>
+<ins class="diff-chg">✔
+</ins>
+</td>
+<td class="prmDesc">
+A
+set
+of
+options
+that
+<em class="rfc2119" title="may">
+may
+</em>
+affect
+the
+expansion
+algorithm
+such
+as,
+e.g.,
+the
+input
+document's
+base
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+This
+also
+includes
+<code>
+optimize
+</code>,
+which
+if
+set
+will
+cause
+processor-specific
+optimization.
+</td>
+</tr>
+</table>
+<div>
+<em>
+Return
+type:
+</em>
+<code>
+<a>
+void
+</a>
+</code>
+</div>
+</dd>
+<dt id="widl-JsonLdProcessor-expand-void-object-or-object---or-IRI-input-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options">
+<code>
+expand
+</code>
+</dt>
+<dd>
+<a href="#expansion">
+Expands
+</a>
+the
+given
+<code>
+input
+</code>
+according
+to
+the
+steps
+in
+the
+<a href="#expansion-algorithm">
+Expansion
+Algorithm
+</a>.
+The
+<code>
+input
+</code>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+copied,
+expanded
+and
+returned
+if
+there
+are
+no
+errors.
+If
+the
+expansion
+fails,
+an
+appropriate
+exception
+<em class="rfc2119" title="must">
+must
+</em>
+be
+thrown.
+<dl title="InvalidContext" class="exception">
+<dt>
+<ins class="diff-new">INVALID_SYNTAX
+</ins></dt><dd><ins class="diff-new">
+A
+general
+syntax
+error
+was
+detected
+in
+the
+</ins><code><ins class="diff-new">
+@context
+</ins></code>.<ins class="diff-new">
+For
+example,
+if
+a
+</ins><code><ins class="diff-new">
+@type
+</ins></code><ins class="diff-new">
+key
+maps
+to
+anything
+other
+than
+</ins><code><ins class="diff-new">
+@id
+</ins></code><ins class="diff-new">
+or
+an
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-new">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a>,<ins class="diff-new">
+this
+exception
+would
+be
+raised.
+</ins></dd><dt><ins class="diff-new">
+LOAD_ERROR
+</ins></dt><dd><ins class="diff-new">
+There
+was
+a
+problem
+encountered
+loading
+a
+remote
+context.
+</ins></dd></dl><dl title="ProcessingError" class="exception"><dt><ins class="diff-new">
+LIST_OF_LISTS_DETECTED
+</ins></dt><dd><ins class="diff-new">
+A
+list
+of
+lists
+was
+detected.
+This
+is
+not
+supported
+in
+this
+version
+of
+JSON-LD.
+</ins></dd></dl>
+<table class="parameters">
+<tr>
+<th>
+Parameter
+</th>
+<th>
+Type
+</th>
+<th>
+Nullable
+</th>
+<th>
+Optional
+</th>
+<th>
+Description
+</th>
+</tr>
+<tr>
+<td class="prmName">
+input
+</td>
+<td class="prmType">
+<code>
+<a>
+object
+or
+object[]
+or
+<del class="diff-old">URL
+</del>
+<ins class="diff-chg">IRI
+</ins>
+</a>
+</code>
+</td>
+<td class="prmNullFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmOptFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmDesc">
+The
+JSON-LD
+object
+or
+array
+of
+JSON-LD
+objects
+to
+perform
+the
+expansion
+upon
+or
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+referencing
+the
+JSON-LD
+document
+to
+expand.
+</td>
+</tr>
+<tr>
+<td class="prmName">
+context
+</td>
+<td class="prmType">
+<code>
+<a>
+object
+or
+<del class="diff-old">URL
+</del>
+<ins class="diff-chg">IRI
+</ins>
+</a>
+</code>
+</td>
+<td class="prmNullTrue">
+<del class="diff-old">✔
+</del>
+<ins class="diff-chg">✔
+</ins>
+</td>
+<td class="prmOptFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmDesc">
+An
+optional
+external
+context
+to
+use
+additionally
+to
+the
+context
+embedded
+in
+<code>
+input
+</code>
+when
+expanding
+the
+<code>
+input
+</code>.
+</td>
+</tr>
+<tr>
+<td class="prmName">
+callback
+</td>
+<td class="prmType">
+<code>
+<a href="#idl-def-JsonLdCallback" class="idlType">
+<code>
+JsonLdCallback
+</code>
+</a>
+</code>
+</td>
+<td class="prmNullFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmOptFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmDesc">
+A
+callback
+that
+is
+called
+when
+processing
+is
+complete
+on
+the
+given
+<code>
+input
+</code>.
+</td>
+</tr>
+<tr>
+<td class="prmName">
+options
+</td>
+<td class="prmType">
+<code>
+<a href="#idl-def-JsonLdOptions" class="idlType">
+<code>
+JsonLdOptions
+</code>
+</a>
+</code>
+</td>
+<td class="prmNullTrue">
+<ins class="diff-new">✔
+</ins></td><td class="prmOptTrue"><ins class="diff-new">
+✔
+</ins></td><td class="prmDesc"><ins class="diff-new">
+A
+set
+of
+options
+that
+</ins><em class="rfc2119" title="may"><ins class="diff-new">
+may
+</ins></em><ins class="diff-new">
+affect
+the
+expansion
+algorithm
+such
+as,
+e.g.,
+the
+input
+document's
+base
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a>.</td></tr></table><div><em><ins class="diff-new">
+Return
+type:
+</ins></em><code><a><ins class="diff-new">
+void
+</ins></a></code></div></dd><dt id="widl-JsonLdProcessor-flatten-void-object-or-object---or-IRI-input-string-or-IRI-graph-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options"><code><ins class="diff-new">
+flatten
+</ins></code></dt><dd><a href="#flattening"><ins class="diff-new">
+Flattens
+</ins></a><ins class="diff-new">
+the
+given
+</ins><code><ins class="diff-new">
+input
+</ins></code><ins class="diff-new">
+according
+to
+the
+steps
+in
+the
+</ins><a href="#flattening-algorithm"><ins class="diff-new">
+Flattening
+Algorithm
+</ins></a>.<ins class="diff-new">
+The
+</ins><code><ins class="diff-new">
+input
+</ins></code><em class="rfc2119" title="must"><ins class="diff-new">
+must
+</ins></em><ins class="diff-new">
+be
+flattened
+and
+returned
+if
+there
+are
+no
+errors.
+If
+the
+flattening
+fails,
+an
+appropriate
+exception
+</ins><em class="rfc2119" title="must"><ins class="diff-new">
+must
+</ins></em><ins class="diff-new">
+be
+thrown.
+</ins><div class="issue"><div class="issue-title"><span><ins class="diff-new">
+Issue
+</ins></span></div><p class=""><ins class="diff-new">
+It
+is
+still
+being
+discussed
+if
+the
+flatten()
+method
+should
+be
+added
+or
+not.
+See
+</ins><a href="https://github.com/json-ld/json-ld.org/issues/109"><ins class="diff-new">
+ISSUE-109
+</ins></a>.</p></div><table class="parameters"><tr><th><ins class="diff-new">
+Parameter
+</ins></th><th><ins class="diff-new">
+Type
+</ins></th><th><ins class="diff-new">
+Nullable
+</ins></th><th><ins class="diff-new">
+Optional
+</ins></th><th><ins class="diff-new">
+Description
+</ins></th></tr><tr><td class="prmName"><ins class="diff-new">
+input
+</ins></td><td class="prmType"><code><a><ins class="diff-new">
+object
+or
+object[]
+or
+IRI
+</ins></a></code></td>
+<td class="prmNullFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins></td><td class="prmOptFalse"><ins class="diff-chg">
+✘
+</ins></td><td class="prmDesc"><ins class="diff-chg">
+The
+JSON-LD
+object
+or
+array
+of
+JSON-LD
+objects
+to
+flatten
+or
+an
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr></a><ins class="diff-chg">
+referencing
+the
+JSON-LD
+document
+to
+flatten.
+</ins></td></tr><tr><td class="prmName"><ins class="diff-chg">
+graph
+</ins></td><td class="prmType"><code><a><ins class="diff-chg">
+string
+or
+IRI
+</ins></a></code></td><td class="prmNullFalse"><ins class="diff-chg">
+✘
+</ins></td><td class="prmOptFalse"><ins class="diff-chg">
+✘
+</ins></td><td class="prmDesc"><ins class="diff-chg">
+The
+graph
+in
+the
+document
+that
+should
+be
+flattened.
+To
+return
+the
+default
+graph
+</ins><code><ins class="diff-chg">
+@default
+</ins></code><ins class="diff-chg">
+has
+to
+be
+passed,
+for
+the
+merged
+graph
+</ins><code><ins class="diff-chg">
+@merged
+</ins></code><ins class="diff-chg">
+and
+for
+any
+other
+graph
+the
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr></a><ins class="diff-chg">
+identifying
+the
+graph
+has
+to
+be
+passed.
+The
+default
+value
+is
+</ins><code><ins class="diff-chg">
+@merged
+</ins></code>.</td></tr><tr><td class="prmName"><ins class="diff-chg">
+context
+</ins></td><td class="prmType"><code><a><ins class="diff-chg">
+object
+or
+IRI
+</ins></a></code></td><td class="prmNullTrue"><ins class="diff-chg">
+✔
+</ins></td><td class="prmOptFalse"><ins class="diff-chg">
+✘
+</ins></td><td class="prmDesc"><ins class="diff-chg">
+An
+optional
+external
+context
+to
+use
+additionally
+to
+the
+context
+embedded
+in
+</ins><code><ins class="diff-chg">
+input
+</ins></code><ins class="diff-chg">
+when
+expanding
+the
+</ins><code><ins class="diff-chg">
+input
+</ins></code>.</td></tr><tr><td class="prmName"><ins class="diff-chg">
+callback
+</ins></td><td class="prmType"><code><a href="#idl-def-JsonLdCallback" class="idlType"><code><ins class="diff-chg">
+JsonLdCallback
+</ins></code></a></code></td><td class="prmNullFalse"><ins class="diff-chg">
+✘
+</ins></td><td class="prmOptFalse"><ins class="diff-chg">
+✘
+</ins></td><td class="prmDesc"><ins class="diff-chg">
+A
+callback
+that
+is
+called
+when
+processing
+is
+complete
+on
+the
+given
+</ins><code><ins class="diff-chg">
+input
+</ins></code>.</td></tr><tr><td class="prmName"><ins class="diff-chg">
+options
+</ins></td><td class="prmType"><code><a href="#idl-def-JsonLdOptions" class="idlType"><code><ins class="diff-chg">
+JsonLdOptions
+</ins></code></a></code></td><td class="prmNullTrue"><ins class="diff-chg">
+✔
+</ins>
+</td>
+<td class="prmOptTrue">
+<del class="diff-old">✔
+</del>
+<ins class="diff-chg">✔
+</ins>
+</td>
+<td class="prmDesc">
+A
+set
+of
+options
+that
+<em class="rfc2119" title="may">
+may
+</em>
+affect
+the
+expansion
+algorithm
+such
+as,
+e.g.,
+the
+input
+document's
+base
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+</td>
+</tr>
+</table>
+<div>
+<em>
+Return
+type:
+</em>
+<code>
+<a>
+void
+</a>
+</code>
+</div>
+</dd>
+<dt id="widl-JsonLdProcessor-fromRDF-void-QuadArray-input-JsonLdCallback-callback-JsonLdOptions-options">
+<code>
+fromRDF
+</code>
+</dt>
+<dd>
+Creates
+a
+JSON-LD
+document
+given
+an
+set
+of
+<a class="datatype idlType" title="Quad" href="#idl-def-Quad">
+<code>
+Quads
+</code>
+</a>.
+<table class="parameters">
+<tr>
+<th>
+Parameter
+</th>
+<th>
+Type
+</th>
+<th>
+Nullable
+</th>
+<th>
+Optional
+</th>
+<th>
+Description
+</th>
+</tr>
+<tr>
+<td class="prmName">
+input
+</td>
+<td class="prmType">
+<code>
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>
+[]
+</code>
+</td>
+<td class="prmNullFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmOptFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmDesc">
+A
+<a class="tref internalDFN" title="dataset" href="#dfn-dataset">
+dataset
+</a>
+represented
+as
+an
+array
+of
+<a class="datatype idlType" title="Quad" href="#idl-def-Quad">
+<code>
+Quads
+</code>
+</a>.
+</td>
+</tr>
+<tr>
+<td class="prmName">
+callback
+</td>
+<td class="prmType">
+<code>
+<a href="#idl-def-JsonLdCallback" class="idlType">
+<code>
+JsonLdCallback
+</code>
+</a>
+</code>
+</td>
+<td class="prmNullFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmOptFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmDesc">
+A
+callback
+that
+is
+called
+when
+processing
+is
+complete
+on
+the
+given
+<code>
+input
+</code>.
+</td>
+</tr>
+<tr>
+<td class="prmName">
+options
+</td>
+<td class="prmType">
+<code>
+<a href="#idl-def-JsonLdOptions" class="idlType">
+<code>
+JsonLdOptions
+</code>
+</a>
+</code>
+</td>
+<del class="diff-old">✘
+</del>
+<td class="prmNullTrue">
+<ins class="diff-chg">✔
+</ins>
+</td>
+<td class="prmOptTrue">
+<del class="diff-old">✔
+</del>
+<ins class="diff-chg">✔
+</ins>
+</td>
+<td class="prmDesc">
+A
+set
+of
+options
+that
+will
+affect
+the
+algorithm.
+This
+includes
+<code>
+notType
+</code>,
+which
+if
+set
+to
+<a class="tref internalDFN" title="true" href="#dfn-true">
+true
+</a>
+causes
+the
+resulting
+document
+to
+use
+<code>
+rdf:type
+</code>
+as
+a
+property,
+instead
+of
+<code>
+@type
+</code>.
+</td>
+</tr>
+</table>
+<div>
+<em>
+Return
+type:
+</em>
+<code>
+<a>
+void
+</a>
+</code>
+</div>
+</dd>
+<dt id="widl-JsonLdProcessor-toRDF-void-object-or-object---or-IRI-input-QuadCallback-callback-JsonLdOptions-options">
+<code>
+toRDF
+</code>
+</dt>
+<dd>
+Processes
+the
+<code>
+input
+</code>
+according
+to
+the
+<a href="#convert-to-rdf-algorithm">
+Convert
+to
+RDF
+Algorithm
+</a>,
+calling
+the
+provided
+<code>
+callback
+</code>
+for
+each
+<a class="datatype idlType" title="Quad" href="#idl-def-Quad">
+<code>
+Quad
+</code>
+</a>
+generated.
+<dl title="InvalidContext" class="exception">
+<dt>
+<ins class="diff-new">INVALID_SYNTAX
+</ins></dt><dd><ins class="diff-new">
+A
+general
+syntax
+error
+was
+detected
+in
+the
+</ins><code><ins class="diff-new">
+@context
+</ins></code>.<ins class="diff-new">
+For
+example,
+if
+a
+</ins><code><ins class="diff-new">
+@type
+</ins></code><ins class="diff-new">
+key
+maps
+to
+anything
+other
+than
+</ins><code><ins class="diff-new">
+@id
+</ins></code><ins class="diff-new">
+or
+an
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-new">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a>,<ins class="diff-new">
+this
+exception
+would
+be
+raised.
+</ins></dd><dt><ins class="diff-new">
+LOAD_ERROR
+</ins></dt><dd><ins class="diff-new">
+There
+was
+a
+problem
+encountered
+loading
+a
+remote
+context.
+</ins></dd></dl><dl title="ProcessingError" class="exception"><dt><ins class="diff-new">
+LIST_OF_LISTS_DETECTED
+</ins></dt><dd><ins class="diff-new">
+A
+list
+of
+lists
+was
+detected.
+This
+is
+not
+supported
+in
+this
+version
+of
+JSON-LD.
+</ins></dd></dl>
+<table class="parameters">
+<tr>
+<th>
+Parameter
+</th>
+<th>
+Type
+</th>
+<th>
+Nullable
+</th>
+<th>
+Optional
+</th>
+<th>
+Description
+</th>
+</tr>
+<tr>
+<td class="prmName">
+input
+</td>
+<td class="prmType">
+<code>
+<a>
+object
+or
+object[]
+or
+<del class="diff-old">URL
+</del>
+<ins class="diff-chg">IRI
+</ins>
+</a>
+</code>
+</td>
+<td class="prmNullFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmOptFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmDesc">
+The
+JSON-LD
+object
+or
+array
+of
+JSON-LD
+objects
+to
+convert
+to
+RDF
+or
+a
+<a href="#idl-def-IRI" class="idlType">
+<code>
+<del class="diff-old">URL
+</del>
+<ins class="diff-chg">IRI
+</ins>
+</code>
+</a>
+referencing
+the
+JSON-LD
+document
+to
+convert
+to
+RDF.
+</td>
+</tr>
+<tr>
+<td class="prmName">
+callback
+</td>
+<td class="prmType">
+<code>
+<a href="#idl-def-QuadCallback" class="idlType">
+<code>
+QuadCallback
+</code>
+</a>
+</code>
+</td>
+<td class="prmNullFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmOptFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmDesc">
+A
+callback
+that
+is
+called
+when
+a
+<a class="datatype idlType" title="Quad" href="#idl-def-Quad">
+<code>
+Quad
+</code>
+</a>
+is
+created
+from
+processing
+the
+given
+<code>
+input
+</code>.
+</td>
+</tr>
+<tr>
+<td class="prmName">
+options
+</td>
+<td class="prmType">
+<code>
+<a href="#idl-def-JsonLdOptions" class="idlType">
+<code>
+JsonLdOptions
+</code>
+</a>
+</code>
+</td>
+<del class="diff-old">✘
+</del>
+<td class="prmNullTrue">
+<ins class="diff-chg">✔
+</ins>
+</td>
+<td class="prmOptTrue">
+<del class="diff-old">✔
+</del>
+<ins class="diff-chg">✔
+</ins>
+</td>
+<td class="prmDesc">
+A
+set
+of
+options
+that
+<em class="rfc2119" title="may">
+may
+</em>
+affect
+the
+conversion
+to
+RDF
+such
+as,
+e.g.,
+the
+input
+document's
+base
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+</td>
+</tr>
+</table>
+<div>
+<em>
+Return
+type:
+</em>
+<code>
+<a>
+void
+</a>
+</code>
+</div>
+</dd>
+</dl>
+</section>
+</section>
+<section id="callbacks">
+<h3>
+<span class="secno">
+3.3
+</span>
+Callbacks
+</h3>
+<section id="jsonldcallback">
+<h4>
+<span class="secno">
+3.3.1
+</span>
+JsonLdCallback
+</h4>
+<p>
+The
+<a href="#idl-def-JsonLdCallback" class="idlType">
+<code>
+JsonLdCallback
+</code>
+</a>
+is
+used
+to
+return
+a
+processed
+JSON-LD
+representation
+as
+the
+result
+of
+processing
+an
+API
+method.
+</p>
+<del class="diff-old"> ]
+</del>
+ <pre class="idl"><span id="idl-def-JsonLdCallback" class="idlInterface">[<span class="extAttr">NoInterfaceObject Callback</span>]
+interface <span class="idlInterfaceID">JsonLdCallback</span> {
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdCallback-jsonLd-void-object-or-objectArray-jsonld">jsonLd</a></span> (<span class="idlParam"><span class="idlParamType"><a>object or object</a>[]</span> <span class="idlParamName">jsonld</span></span>);</span>
+<del class="diff-old">};
+</del>
+<ins class="diff-chg">};
+</ins></span>
+</pre>
+<section id="methods-1">
+<h5>
+<span class="secno">
+3.3.1.1
+</span>
+Methods
+</h5>
+<dl class="methods">
+<dt id="widl-JsonLdCallback-jsonLd-void-object-or-objectArray-jsonld">
+<code>
+jsonLd
+</code>
+</dt>
+<dd>
+This
+callback
+is
+invoked
+when
+processing
+is
+complete.
+<table class="parameters">
+<tr>
+<th>
+Parameter
+</th>
+<th>
+Type
+</th>
+<th>
+Nullable
+</th>
+<th>
+Optional
+</th>
+<th>
+Description
+</th>
+</tr>
+<tr>
+<td class="prmName">
+jsonld
+</td>
+<td class="prmType">
+<code>
+<a>
+object
+or
+object
+</a>
+[]
+</code>
+</td>
+<td class="prmNullFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmOptFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmDesc">
+The
+processed
+JSON-LD
+document.
+</td>
+</tr>
+</table>
+<div>
+<em>
+Return
+type:
+</em>
+<code>
+<a>
+void
+</a>
+</code>
+</div>
+</dd>
+</dl>
+</section>
+</section>
+<section id="quadcallback">
+<h4>
+<span class="secno">
+3.3.2
+</span>
+QuadCallback
+</h4>
+<p>
+The
+<a href="#idl-def-QuadCallback" class="idlType">
+<code>
+QuadCallback
+</code>
+</a>
+is
+called
+whenever
+the
+processor
+generates
+a
+quad
+during
+the
+<code>
+quad()
+</code>
+call.
+</p>
+<del class="diff-old"> ]
+</del>
+ <pre class="idl"><span id="idl-def-QuadCallback" class="idlInterface">[<span class="extAttr">NoInterfaceObject Callback</span>]
+interface <span class="idlInterfaceID">QuadCallback</span> {
+<del class="diff-old">};
+</del>
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-QuadCallback-quad-void-Quad-quad">quad</a></span> (<span class="idlParam"><span class="idlParamType"><a href="#idl-def-Quad" class="idlType"><code>Quad</code></a></span> <span class="idlParamName">quad</span></span>);</span>
+<ins class="diff-chg">};
+</ins></span>
+</pre>
+<section id="methods-2">
+<h5>
+<span class="secno">
+3.3.2.1
+</span>
+Methods
+</h5>
+<dl class="methods">
+<dt id="widl-QuadCallback-quad-void-Quad-quad">
+<code>
+quad
+</code>
+</dt>
+<dd>
+This
+callback
+is
+invoked
+whenever
+a
+quad
+is
+generated
+by
+the
+processor.
+<table class="parameters">
+<tr>
+<th>
+Parameter
+</th>
+<th>
+Type
+</th>
+<th>
+Nullable
+</th>
+<th>
+Optional
+</th>
+<th>
+Description
+</th>
+</tr>
+<tr>
+<td class="prmName">
+quad
+</td>
+<td class="prmType">
+<code>
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>
+</code>
+</td>
+<td class="prmNullFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmOptFalse">
+<del class="diff-old">✘
+</del>
+<ins class="diff-chg">✘
+</ins>
+</td>
+<td class="prmDesc">
+The
+quad.
+</td>
+</tr>
+</table>
+<div>
+<em>
+Return
+type:
+</em>
+<code>
+<a>
+void
+</a>
+</code>
+</div>
+</dd>
+</dl>
+</section>
+</section>
+</section>
+<section id="data-structures">
+<h3>
+<span class="secno">
+3.4
+</span>
+Data
+Structures
+</h3>
+<p>
+This
+section
+describes
+datatype
+definitions
+used
+within
+the
+JSON-LD
+API.
+</p>
+<section id="iri">
+<h4>
+<span class="secno">
+3.4.1
+</span>
+<del class="diff-old">URL
+</del>
+<abbr title="Internationalized Resource Identifier">
+<ins class="diff-chg">IRI
+</ins></abbr>
+</h4>
+<p>
+The
+<a href="#idl-def-IRI" class="idlType">
+<code>
+<del class="diff-old">URL
+</del>
+<ins class="diff-chg">IRI
+</ins>
+</code>
+</a>
+datatype
+is
+a
+string
+representation
+of
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+</p>
+<pre class="idl">
+<span id="idl-def-IRI" class="idlTypedef">
+typedef
+<span class="idlTypedefType">
+<a>
+DOMString
+</a>
+</span>
+<span class="idlTypedefID">
+<del class="diff-old">URL
+</del>
+<ins class="diff-chg">IRI
+</ins>
+</span>
+;
+</span>
+</pre>
+<div class="idlTypedefDesc">
+This
+datatype
+indicates
+that
+the
+<del class="diff-old">IRI
+</del>
+<em>
+<ins class="diff-chg">string
+</ins></em>
+is
+interpreted
+as
+<del class="diff-old">a
+Universal
+</del>
+<ins class="diff-chg">an
+Internationalized
+</ins>
+Resource
+<del class="diff-old">Locator
+</del>
+<ins class="diff-chg">Identifier
+[
+</ins><cite><a class="bibref" href="#bib-RFC3987"><ins class="diff-chg">
+RFC3987
+</ins></a></cite><ins class="diff-chg">
+]
+</ins>
+identifying
+a
+document,
+which
+when
+parsed
+as
+JSON
+yields
+either
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+or
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+<del class="diff-old">.
+</del>
+</a>.
+</div>
+</section>
+<section id="jsonldoptions">
+<h4>
+<span class="secno">
+3.4.2
+</span>
+JsonLdOptions
+</h4>
+<p>
+The
+<a href="#idl-def-JsonLdOptions" class="idlType">
+<code>
+JsonLdOptions
+</code>
+</a>
+type
+is
+used
+to
+<del class="diff-old">convert
+a
+set
+of
+</del>
+<ins class="diff-chg">pass
+various
+</ins>
+options
+to
+<del class="diff-old">an
+interface
+method.
+</del>
+<ins class="diff-chg">the
+</ins><a href="#idl-def-JsonLdProcessor" class="idlType">
+<del class="diff-old">typedef
+</del>
+<code>
+<ins class="diff-chg">JsonLdProcessor
+</ins></code>
+<del class="diff-old">object
+</del>
+</a>
+<del class="diff-old">JsonLdOptions
+;
+</del>
+<ins class="diff-chg">methods.
+</ins></p> <pre class="idl"><span id="idl-def-JsonLdOptions" class="idlDictionary">dictionary <span class="idlDictionaryID">JsonLdOptions</span> {<span class="idlMember"> <span class="idlMemberType"><a href="#idl-def-IRI" class="idlType"><code>IRI</code></a>?</span> <span class="idlMemberName"><a href="#widl-JsonLdOptions-base">base</a></span>;</span><span class="idlMember"> <span class="idlMemberType"><a>boolean</a></span> <span class="idlMemberName"><a href="#widl-JsonLdOptions-compactArrays">compactArrays</a></span> = <span class="idlMemberValue">true</span>;</span><span class="idlMember"> <span class="idlMemberType"><a>boolean</a></span> <span class="idlMemberName"><a href="#widl-JsonLdOptions-optimize">optimize</a></span> = <span class="idlMemberValue">false</span>;</span><span class="idlMember"> <span class="idlMemberType"><a>boolean</a></span> <span class="idlMemberName"><a href="#widl-JsonLdOptions-useRdfType">useRdfType</a></span> = <span class="idlMemberValue">false</span>;</span><span class="idlMember"> <span class="idlMemberType"><a>boolean</a></span> <span class="idlMemberName"><a href="#widl-JsonLdOptions-useNativeTypes">useNativeTypes</a></span> = <span class="idlMemberValue">true</span>;</span><ins class="diff-chg">
+};
+</ins>
+</span>
+</pre>
+<section id="dictionary-jsonldoptions-members">
+<h5>
+<span class="secno">
+<ins class="diff-chg">3.4.2.1
+</ins></span><ins class="diff-chg">
+Dictionary
+</ins><a class="idlType" href="#idl-def-JsonLdOptions">
+<code>
+<del class="diff-old">URL
+</del>
+<ins class="diff-chg">JsonLdOptions
+</ins>
+</code>
+</a>
+<ins class="diff-new">Members
+</ins></h5><dl class="dictionary-members"><dt id="widl-JsonLdOptions-base"><code>
+base
+</code>
+<ins class="diff-new">of
+type
+</ins><span class="idlMemberType"><a href="#idl-def-IRI" class="idlType"><code><ins class="diff-new">
+IRI
+</ins></code></a></span>,<ins class="diff-new">
+nullable
+</ins>
+</dt>
+<dd>
+The
+Base
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+to
+use
+when
+expanding
+the
+document.
+This
+overrides
+the
+value
+of
+<em>
+input
+</em>
+if
+it
+is
+a
+<a href="#idl-def-IRI" class="idlType">
+<code>
+<del class="diff-old">URL
+</del>
+<ins class="diff-chg">IRI
+</ins>
+</code>
+</a>.
+<ins class="diff-chg">If
+not
+specified
+and
+</ins><em><ins class="diff-chg">
+input
+</ins></em><ins class="diff-chg">
+is
+not
+an
+</ins><a href="#idl-def-IRI" class="idlType"><code><ins class="diff-chg">
+IRI
+</ins></code></a>,<ins class="diff-chg">
+the
+base
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr><ins class="diff-chg">
+defaults
+to
+the
+current
+document
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr><ins class="diff-chg">
+if
+in
+a
+browser
+context,
+</ins>
+or
+<ins class="diff-new">the
+empty
+string
+</ins>
+if
+<del class="diff-old">it
+</del>
+<ins class="diff-chg">there
+</ins>
+is
+<del class="diff-old">a
+</del>
+<ins class="diff-chg">no
+document
+context.
+</ins></dd><dt id="widl-JsonLdOptions-compactArrays">
+<code>
+<del class="diff-old">object
+</del>
+<ins class="diff-chg">compactArrays
+</ins>
+</code>
+<del class="diff-old">or
+</del>
+<ins class="diff-chg">of
+type
+</ins><span class="idlMemberType"><a><ins class="diff-chg">
+boolean
+</ins></a></span>,<ins class="diff-chg">
+defaulting
+to
+</ins>
+<code>
+<del class="diff-old">object[]
+.
+</del>
+<ins class="diff-chg">true
+</ins></code></dt><dd><ins class="diff-chg">
+If
+set
+to
+</ins><code><ins class="diff-chg">
+true
+</ins></code>,<ins class="diff-chg">
+the
+JSON-LD
+processor
+replaces
+arrays
+with
+just
+one
+element
+with
+that
+element
+during
+compaction.
+If
+set
+to
+</ins><code><ins class="diff-chg">
+false
+</ins></code>,<ins class="diff-chg">
+all
+arrays
+will
+remain
+arrays
+even
+if
+they
+have
+just
+one
+element.
+</ins>
+</dd>
+<del class="diff-old">boolean
+</del>
+<dt id="widl-JsonLdOptions-optimize">
+<code>
+optimize
+</code>
+<ins class="diff-new">of
+type
+</ins><span class="idlMemberType"><a><ins class="diff-new">
+boolean
+</ins></a></span>,<ins class="diff-new">
+defaulting
+to
+</ins><code><ins class="diff-new">
+false
+</ins></code>
+</dt>
+<dd>
+If
+set
+to
+<code>
+true
+</code>,
+the
+JSON-LD
+processor
+is
+allowed
+to
+optimize
+the
+output
+of
+the
+<a href="#compaction-algorithm">
+Compaction
+Algorithm
+</a>
+to
+produce
+even
+compacter
+representations.
+The
+algorithm
+for
+compaction
+optimization
+is
+beyond
+the
+scope
+of
+this
+specification
+and
+thus
+not
+defined.
+Consequently,
+different
+implementations
+<em class="rfc2119" title="may">
+may
+</em>
+implement
+different
+optimization
+algorithms.
+</dd>
+<dt id="widl-JsonLdOptions-useNativeTypes">
+<code>
+<ins class="diff-chg">useNativeTypes
+</ins></code><ins class="diff-chg">
+of
+type
+</ins><span class="idlMemberType"><a>
+boolean
+<del class="diff-old">noType
+</del>
+</a>
+</span>,
+<ins class="diff-chg">defaulting
+to
+</ins><code><ins class="diff-chg">
+true
+</ins></code>
+</dt>
+<dd>
+If
+set
+to
+<code>
+true
+</code>,
+the
+JSON-LD
+processor
+will
+<del class="diff-old">not
+use
+</del>
+<ins class="diff-chg">try
+to
+convert
+datatyped
+literals
+to
+JSON
+native
+types
+instead
+of
+using
+</ins>
+the
+<ins class="diff-new">expanded
+object
+form
+when
+</ins><a href="#convert-from-rdf-algorithm"><ins class="diff-new">
+converting
+from
+RDF
+</ins></a>.
+<code>
+<del class="diff-old">@type
+</del>
+<ins class="diff-chg">xsd:boolean
+</ins></code><ins class="diff-chg">
+values
+will
+be
+converted
+to
+</ins><a class="tref internalDFN" title="true" href="#dfn-true"><ins class="diff-chg">
+true
+</ins></a><ins class="diff-chg">
+or
+</ins><a class="tref internalDFN" title="false" href="#dfn-false"><ins class="diff-chg">
+false
+</ins></a>.<code><ins class="diff-chg">
+xsd:integer
+</ins>
+</code>
+<del class="diff-old">property
+when
+generating
+the
+output,
+</del>
+and
+<code>
+<ins class="diff-new">xsd:double
+</ins></code><ins class="diff-new">
+values
+will
+be
+converted
+to
+</ins><a class="tref internalDFN" title="number" href="#dfn-number"><ins class="diff-new">
+JSON
+numbers
+</ins></a>.</dd><dt id="widl-JsonLdOptions-useRdfType"><code><ins class="diff-new">
+useRdfType
+</ins></code><ins class="diff-new">
+of
+type
+</ins><span class="idlMemberType"><a><ins class="diff-new">
+boolean
+</ins></a></span>,<ins class="diff-new">
+defaulting
+to
+</ins><code><ins class="diff-new">
+false
+</ins></code></dt><dd><ins class="diff-new">
+If
+set
+to
+</ins><code><ins class="diff-new">
+true
+</ins></code>,<ins class="diff-new">
+the
+JSON-LD
+processor
+</ins>
+will
+use
+the
+expanded
+<code>
+rdf:type
+</code>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+as
+the
+property
+instead
+of
+<code>
+@type
+<del class="diff-old">.
+</del>
+</code>
+<ins class="diff-chg">when
+</ins><a href="#convert-from-rdf-algorithm"><ins class="diff-chg">
+converting
+from
+RDF
+</ins></a>.
+</dd>
+</dl>
+</section>
+</section>
+<p>
+The
+following
+data
+structures
+are
+used
+for
+representing
+data
+about
+RDF
+quads.
+They
+are
+used
+for
+normalization,
+<del class="diff-old">fromRDF
+,
+</del>
+and
+<del class="diff-old">from
+toRDF
+interfaces.
+</del>
+<a href="#rdf-conversion">
+<ins class="diff-chg">RDF
+conversion
+</ins></a>.
+</p>
+<section id="quad">
+<h4>
+<span class="secno">
+3.4.3
+</span>
+Quad
+</h4>
+<p>
+The
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>
+interface
+represents
+an
+RDF
+Quad.
+See
+[
+<cite>
+<a class="bibref" href="#bib-RDF-CONCEPTS">
+RDF-CONCEPTS
+</a>
+</cite>
+]
+definition
+for
+<cite>
+<a href="http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple">
+RDF
+triple
+</a>
+</cite>,
+which
+most
+closely
+aligns
+to
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>.
+</p>
+<del class="diff-old"> ]
+</del>
+ <pre class="idl"><span id="idl-def-Quad" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">Quad</span> {
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span> <span class="idlAttrName"><a href="#widl-Quad-subject">subject</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span> <span class="idlAttrName"><a href="#widl-Quad-property">property</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span> <span class="idlAttrName"><a href="#widl-Quad-object">object</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-Node" class="idlType"><code>Node</code></a>?</span> <span class="idlAttrName"><a href="#widl-Quad-graphName">graphName</a></span>;</span>
+<del class="diff-old">};
+</del>
+<ins class="diff-chg">};
+</ins></span>
+</pre>
+<section id="attributes">
+<h5>
+<span class="secno">
+3.4.3.1
+</span>
+Attributes
+</h5>
+<dl class="attributes">
+<dt id="widl-Quad-graphName">
+<code>
+graphName
+</code>
+of
+type
+<span class="idlAttrType">
+<a href="#idl-def-Node" class="idlType">
+<code>
+Node
+</code>
+</a>
+</span>,
+readonly,
+nullable
+</dt>
+<dd>
+If
+present,
+the
+name
+associated
+with
+the
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>
+identifying
+it
+as
+a
+member
+of
+a
+<a class="tref internalDFN" title="named_graph" href="#dfn-named_graph">
+named
+graph
+</a>.
+If
+it
+is
+missing,
+the
+quad
+is
+a
+member
+of
+the
+<a class="tref internalDFN" title="default_graph" href="#dfn-default_graph">
+default
+graph
+</a>.
+<div class="issue">
+<div class="issue-title">
+<a href="https://github.com/json-ld/json-ld.org/issues/125">
+<span>
+Issue
+<del class="diff-old">4
+</del>
+<ins class="diff-chg">125
+</ins>
+</span>
+</a>
+</div>
+<div class="">
+This
+element
+is
+at
+risk,
+and
+may
+be
+removed.
+</div>
+</div>
+</dd>
+<dt id="widl-Quad-object">
+<code>
+object
+</code>
+of
+type
+<span class="idlAttrType">
+<a href="#idl-def-Node" class="idlType">
+<code>
+Node
+</code>
+</a>
+</span>,
+readonly
+</dt>
+<dd>
+The
+<a class="tref internalDFN" title="object" href="#dfn-object">
+object
+</a>
+associated
+with
+the
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>.
+</dd>
+<dt id="widl-Quad-property">
+<code>
+<del class="diff-old">predicate
+</del>
+<ins class="diff-chg">property
+</ins>
+</code>
+of
+type
+<span class="idlAttrType">
+<a href="#idl-def-Node" class="idlType">
+<code>
+Node
+</code>
+</a>
+</span>,
+readonly
+</dt>
+<dd>
+The
+<del class="diff-old">predicate
+</del>
+<a class="tref internalDFN" title="property" href="#dfn-property">
+<ins class="diff-chg">property
+</ins></a>
+associated
+with
+the
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>.
+Within
+JSON-LD,
+an
+<dfn title="rdf_predicate" id="dfn-rdf_predicate">
+RDF
+predicate
+</dfn>
+is
+refered
+to
+as
+a
+<a class="tref internalDFN" title="property" href="#dfn-property">
+property
+</a>
+</dd>
+<dt id="widl-Quad-subject">
+<code>
+subject
+</code>
+of
+type
+<span class="idlAttrType">
+<a href="#idl-def-Node" class="idlType">
+<code>
+Node
+</code>
+</a>
+</span>,
+readonly
+</dt>
+<dd>
+The
+<a class="tref internalDFN" title="subject" href="#dfn-subject">
+subject
+</a>
+associated
+with
+the
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>.
+</dd>
+</dl>
+</section>
+</section>
+<section id="node">
+<h4>
+<span class="secno">
+3.4.4
+</span>
+Node
+</h4>
+<p>
+<a class="datatype idlType" title="Node" href="#idl-def-Node">
+<code>
+Node
+</code>
+</a>
+is
+the
+base
+class
+of
+<a class="datatype idlType" title="IRI" href="#idl-def-IRI">
+<code>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</code>
+</a>,
+<a class="datatype idlType" title="BlankNode" href="#idl-def-BlankNode">
+<code>
+BlankNode
+</code>
+</a>,
+and
+<a class="datatype idlType" title="Literal" href="#idl-def-Literal">
+<code>
+Literal
+</code>
+</a>.
+It
+is
+the
+IDL
+representation
+of
+a
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>
+<a class="tref internalDFN" title="node" href="#dfn-node">
+node
+</a>.
+</p>
+<del class="diff-old"> ]
+</del>
+ <pre class="idl"><span id="idl-def-Node" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">Node</span> {
+<del class="diff-old">};
+</del>
+<ins class="diff-chg">};
+</ins></span>
+</pre>
+</section>
+<section id="iri-1">
+<h4>
+<span class="secno">
+3.4.5
+</span>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</h4>
+<p>
+A
+<a class="tref internalDFN" title="node" href="#dfn-node">
+node
+</a>
+that
+is
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+</p>
+<del class="diff-old"> ]
+</del>
+ <pre class="idl"><span id="idl-def-IRI-1" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">IRI</span> : <span class="idlSuperclass"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span> {
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-IRI-value">value</a></span>;</span>
+<del class="diff-old">};
+</del>
+<ins class="diff-chg">};
+</ins></span>
+</pre>
+<section id="attributes-1">
+<h5>
+<span class="secno">
+3.4.5.1
+</span>
+Attributes
+</h5>
+<dl class="attributes">
+<dt id="widl-IRI-value">
+<code>
+value
+</code>
+of
+type
+<span class="idlAttrType">
+<a>
+DOMString
+</a>
+</span>,
+readonly
+</dt>
+<dd>
+The
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+identifier
+of
+the
+<a class="tref internalDFN" title="node" href="#dfn-node">
+node
+</a>
+as
+a
+[
+<cite>
+<a class="bibref" href="#bib-UNICODE">
+UNICODE
+</a>
+</cite>
+]
+string.
+</dd>
+</dl>
+</section>
+</section>
+<section id="blank-node">
+<h4>
+<span class="secno">
+3.4.6
+</span>
+Blank
+Node
+</h4>
+<p>
+A
+<a class="tref internalDFN" title="node" href="#dfn-node">
+node
+</a>
+in
+the
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>
+that
+does
+not
+contain
+a
+de-reference-able
+identifier
+because
+it
+is
+either
+ephemeral
+in
+nature
+or
+does
+not
+contain
+information
+that
+needs
+to
+be
+linked
+to
+from
+outside
+of
+the
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>.
+A
+blank
+node
+is
+assigned
+an
+identifier
+starting
+with
+the
+prefix
+<code>
+_:
+</code>
+and
+an
+implementation
+dependent,
+auto-generated
+suffix
+that
+is
+unique
+to
+all
+information
+associated
+with
+the
+particular
+blank
+node.
+</p>
+<del class="diff-old"> ]
+</del>
+ <pre class="idl"><span id="idl-def-BlankNode" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">BlankNode</span> : <span class="idlSuperclass"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span> {
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-BlankNode-identifier">identifier</a></span>;</span>
+<del class="diff-old">};
+</del>
+<ins class="diff-chg">};
+</ins></span>
+</pre>
+<section id="attributes-2">
+<h5>
+<span class="secno">
+3.4.6.1
+</span>
+Attributes
+</h5>
+<dl class="attributes">
+<dt id="widl-BlankNode-identifier">
+<code>
+identifier
+</code>
+of
+type
+<span class="idlAttrType">
+<a>
+DOMString
+</a>
+</span>,
+readonly
+</dt>
+<dd>
+The
+temporary
+identifier
+of
+the
+<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">
+blank
+node
+</a>.
+The
+<code>
+identifier
+</code>
+<em class="rfc2119" title="must not">
+must
+not
+</em>
+be
+relied
+upon
+in
+any
+way
+between
+two
+separate
+processing
+runs
+of
+the
+same
+document
+or
+with
+a
+different
+document.
+</dd>
+</dl>
+</section>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+Developers
+and
+authors
+must
+not
+assume
+that
+the
+value
+of
+a
+<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">
+blank
+node
+</a>
+will
+remain
+the
+same
+between
+two
+processing
+runs.
+<a href="#idl-def-BlankNode" class="idlType">
+<code>
+BlankNode
+</code>
+</a>
+values
+are
+only
+valid
+for
+the
+most
+recent
+processing
+run
+on
+the
+document.
+<a href="#idl-def-BlankNode" class="idlType">
+<code>
+BlankNode
+</code>
+</a>
+values
+will
+often
+be
+generated
+differently
+by
+different
+processors.
+</p>
+</div>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+Implementers
+<em class="rfc2119" title="must">
+must
+</em>
+ensure
+that
+<a href="#idl-def-BlankNode" class="idlType">
+<code>
+BlankNode
+</code>
+</a>
+values
+are
+unique
+within
+the
+current
+environment,
+two
+<a class="datatype idlType" title="BlankNode" href="#idl-def-BlankNode">
+<code>
+BlankNodes
+</code>
+</a>
+are
+considered
+equal
+if,
+and
+only
+if,
+their
+values
+are
+strictly
+equal.
+</p>
+</div>
+</section>
+<section id="literal">
+<h4>
+<span class="secno">
+3.4.7
+</span>
+Literal
+</h4>
+<p>
+Literals
+represent
+values
+such
+as
+numbers,
+dates
+and
+strings
+in
+RDF
+data.
+A
+<a class="datatype idlType" title="Literal" href="#idl-def-Literal">
+<code>
+Literal
+</code>
+</a>
+is
+comprised
+of
+three
+attributes:
+</p>
+<ul>
+<li>
+a
+lexical
+form
+of
+the
+<code>
+value
+</code>
+</li>
+<li>
+an
+optional
+<code>
+language
+</code>
+tag
+</li>
+<li>
+a
+<code>
+datatype
+</code>
+specified
+by
+an
+<a class="datatype idlType" title="IRI" href="#idl-def-IRI">
+<code>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</code>
+</a>
+</li>
+</ul>
+<p>
+Literals
+representing
+plain
+text
+in
+a
+natural
+language
+may
+have
+a
+<code>
+language
+</code>
+tag
+specified
+by
+a
+string
+token,
+as
+specified
+in
+[
+<cite>
+<a class="bibref" href="#bib-BCP47">
+BCP47
+</a>
+</cite>
+],
+normalized
+to
+lowercase
+(e.g.,
+<code>
+'en'
+</code>,
+<code>
+'fr'
+</code>,
+<code>
+'en-gb'
+</code>
+).
+They
+also
+have
+a
+datatype
+attribute
+such
+as
+<code>
+xsd:string
+</code>.
+If
+unspecified,
+the
+<code>
+datatype
+</code>
+defaults
+to
+<code>
+xsd:string
+</code>.
+</p>
+<p>
+Literals
+representing
+values
+with
+a
+specific
+datatype,
+such
+as
+the
+integer
+72,
+may
+have
+a
+<code>
+datatype
+</code>
+attribute
+specified
+in
+the
+form
+of
+a
+<a href="#idl-def-IRI" class="idlType">
+<code>
+IRI
+</code>
+</a>
+(e.g.,
+<code>
+xsd:integer
+</code>
+).
+</p>
+<p>
+See[
+<cite>
+<a class="bibref" href="#bib-RDF-CONCEPTS">
+RDF-CONCEPTS
+</a>
+</cite>
+]
+definition
+for
+<cite>
+<a href="http://www.w3.org/TR/rdf11-concepts/#dfn-literal">
+literal
+</a>
+</cite>.
+</p>
+<del class="diff-old"> ]
+</del>
+ <pre class="idl"><span id="idl-def-Literal" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">Literal</span> : <span class="idlSuperclass"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span> {
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-Literal-value">value</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>DOMString</a>?</span> <span class="idlAttrName"><a href="#widl-Literal-language">language</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-IRI" class="idlType"><code>IRI</code></a>?</span> <span class="idlAttrName"><a href="#widl-Literal-datatype">datatype</a></span>;</span>
+<del class="diff-old">};
+</del>
+<ins class="diff-chg">};
+</ins></span>
+</pre>
+<section id="attributes-3">
+<h5>
+<span class="secno">
+3.4.7.1
+</span>
+Attributes
+</h5>
+<dl class="attributes">
+<dt id="widl-Literal-datatype">
+<code>
+datatype
+</code>
+of
+type
+<span class="idlAttrType">
+<a href="#idl-def-IRI" class="idlType">
+<code>
+IRI
+</code>
+</a>
+</span>,
+readonly,
+nullable
+</dt>
+<dd>
+An
+optional
+datatype
+identified
+by
+a
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>.
+</dd>
+<dt id="widl-Literal-language">
+<code>
+language
+</code>
+of
+type
+<span class="idlAttrType">
+<a>
+DOMString
+</a>
+</span>,
+readonly,
+nullable
+</dt>
+<dd>
+An
+optional
+language
+tag
+as
+defined
+in
+[
+<cite>
+<a class="bibref" href="#bib-BCP47">
+BCP47
+</a>
+</cite>
+],
+normalized
+to
+lowercase.
+</dd>
+<dt id="widl-Literal-value">
+<code>
+value
+</code>
+of
+type
+<span class="idlAttrType">
+<a>
+DOMString
+</a>
+</span>,
+readonly
+</dt>
+<dd>
+The
+lexical
+form
+of
+the
+Literal's
+value.
+</dd>
+</dl>
+</section>
+</section>
+</section>
+</section>
+<section id="algorithms">
+<h2>
+<span class="secno">
+4.
+</span>
+Algorithms
+</h2>
+<p>
+All
+algorithms
+described
+in
+this
+section
+are
+intended
+to
+operate
+on
+language-native
+data
+structures.
+That
+is,
+the
+serialization
+to
+a
+text-based
+JSON
+document
+isn't
+required
+as
+input
+or
+output
+to
+any
+of
+these
+algorithms
+and
+language-native
+data
+structures
+<em class="rfc2119" title="must">
+must
+</em>
+be
+used
+where
+applicable.
+</p>
+<section id="algorithm-terms">
+<h3>
+<span class="secno">
+4.1
+</span>
+Algorithm
+Terms
+</h3>
+<dl>
+<dt>
+<del class="diff-old">initial
+context
+a
+context
+that
+is
+specified
+to
+the
+algorithm
+before
+processing
+begins.
+The
+contents
+of
+the
+initial
+context
+is
+defined
+in
+Appendix
+A
+.
+</del>
+<dfn title="active_subject" id="dfn-active_subject">
+active
+subject
+</dfn>
+</dt>
+<dd>
+the
+currently
+active
+subject
+that
+the
+processor
+should
+use
+when
+processing.
+</dd>
+<dt>
+<dfn title="active_property" id="dfn-active_property">
+active
+property
+</dfn>
+</dt>
+<dd>
+the
+currently
+active
+property
+that
+the
+processor
+should
+use
+when
+processing.
+The
+active
+property
+is
+represented
+in
+the
+original
+lexical
+form,
+which
+is
+used
+for
+finding
+coercion
+mappings
+in
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>.
+</dd>
+<dt>
+<dfn title="active_object" id="dfn-active_object">
+active
+object
+</dfn>
+</dt>
+<dd>
+the
+currently
+active
+object
+that
+the
+processor
+should
+use
+when
+processing.
+</dd>
+<dt>
+<dfn title="active_context" id="dfn-active_context">
+active
+context
+</dfn>
+</dt>
+<dd>
+a
+context
+that
+is
+used
+to
+resolve
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+while
+the
+processing
+algorithm
+is
+running.
+The
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+is
+the
+context
+contained
+within
+the
+<a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">
+processor
+state
+</a>.
+</dd>
+<dt>
+<dfn title="compact_iri" id="dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</dfn>
+</dt>
+<dd>
+a
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+is
+has
+the
+form
+of
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">
+prefix
+</a>
+and
+<em>
+suffix
+</em>
+and
+is
+used
+as
+a
+way
+of
+expressing
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+without
+needing
+to
+define
+separate
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+definitions
+for
+each
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+contained
+within
+a
+common
+vocabulary
+identified
+by
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">
+prefix
+</a>.
+</dd>
+<dt>
+<dfn title="local_context" id="dfn-local_context">
+local
+context
+</dfn>
+</dt>
+<dd>
+a
+context
+that
+is
+specified
+within
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>,
+specified
+via
+the
+<code>
+@context
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>.
+</dd>
+<dt>
+<dfn title="processor_state" id="dfn-processor_state">
+processor
+state
+</dfn>
+</dt>
+<dd>
+the
+<a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">
+processor
+state
+</a>,
+which
+includes
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>,
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>,
+and
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>.
+The
+<a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">
+processor
+state
+</a>
+is
+managed
+as
+a
+stack
+with
+elements
+from
+the
+previous
+<a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">
+processor
+state
+</a>
+copied
+into
+a
+new
+<a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">
+processor
+state
+</a>
+when
+entering
+a
+new
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>.
+</dd>
+<dt>
+<dfn title="json-ld_input" id="dfn-json-ld_input">
+JSON-LD
+input
+</dfn>
+</dt>
+<dd>
+The
+JSON-LD
+data
+structure
+that
+is
+provided
+as
+input
+to
+the
+algorithm.
+</dd>
+<dt>
+<dfn title="json-ld_output" id="dfn-json-ld_output">
+JSON-LD
+output
+</dfn>
+</dt>
+<dd>
+The
+JSON-LD
+data
+structure
+that
+is
+produced
+as
+output
+by
+the
+algorithm.
+</dd>
+<dt>
+<dfn title="term" id="dfn-term">
+term
+</dfn>
+</dt>
+<dd>
+A
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+is
+a
+short
+word
+defined
+in
+a
+context
+that
+<em class="rfc2119" title="may">
+may
+</em>
+be
+expanded
+to
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+</dd>
+<dt>
+<dfn title="prefix" id="dfn-prefix">
+prefix
+</dfn>
+</dt>
+<dd>
+A
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">
+prefix
+</a>
+is
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+that
+expands
+to
+a
+vocabulary
+base
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>.
+It
+is
+typically
+used
+along
+with
+a
+<em>
+suffix
+</em>
+to
+form
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+to
+create
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+within
+a
+vocabulary.
+</dd>
+<dt>
+<dfn title="language-tagged_string" id="dfn-language-tagged_string">
+language-tagged
+<del class="diff-old">literal
+</del>
+<ins class="diff-chg">string
+</ins>
+</dfn>
+</dt>
+<dd>
+A
+<a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">
+language-tagged
+<del class="diff-old">literal
+</del>
+<ins class="diff-chg">string
+</ins>
+</a>
+is
+a
+<a class="tref internalDFN" title="literal" href="#dfn-literal">
+literal
+</a>
+without
+a
+datatype,
+including
+a
+language.
+See
+<cite>
+<del class="diff-old">literal
+</del>
+<a href="http://www.w3.org/TR/rdf11-concepts/#dfn-language-tagged-string">
+<ins class="diff-chg">languaged-tagged
+string
+</ins>
+</a>
+</cite>
+in
+[
+<cite>
+<a class="bibref" href="#bib-RDF-CONCEPTS">
+RDF-CONCEPTS
+</a>
+</cite>
+].
+</dd>
+<dt>
+<dfn title="typed_literal" id="dfn-typed_literal">
+typed
+literal
+</dfn>
+</dt>
+<dd>
+A
+<a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">
+typed
+literal
+</a>
+is
+a
+<a class="tref internalDFN" title="literal" href="#dfn-literal">
+literal
+</a>
+with
+an
+associated
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+which
+indicates
+the
+literal's
+datatype.
+See
+<cite>
+<del class="diff-old">language-tagged
+string
+</del>
+<a href="http://www.w3.org/TR/rdf11-concepts/#dfn-literal">
+<ins class="diff-chg">literal
+</ins>
+</a>
+</cite>
+in
+[
+<cite>
+<a class="bibref" href="#bib-RDF-CONCEPTS">
+RDF-CONCEPTS
+</a>
+</cite>
+].
+</dd>
+</dl>
+</section>
+<section id="context-processing">
+<h3 id="context">
+<span class="secno">
+4.2
+</span>
+Context
+Processing
+</h3>
+<p>
+Processing
+of
+JSON-LD
+data
+structure
+is
+managed
+recursively.
+During
+processing,
+each
+rule
+is
+applied
+using
+information
+provided
+by
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>.
+Processing
+begins
+by
+pushing
+a
+new
+<a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">
+processor
+state
+</a>
+onto
+the
+<a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">
+processor
+state
+</a>
+<del class="diff-old">stack
+and
+initializing
+the
+active
+context
+with
+the
+initial
+context
+.
+</del>
+<ins class="diff-chg">stack.
+</ins>
+If
+a
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>
+is
+encountered,
+information
+from
+the
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>
+is
+merged
+into
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>.
+</p>
+<p>
+The
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+is
+used
+for
+expanding
+properties
+and
+values
+of
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+(or
+elements
+of
+an
+array)
+using
+a
+<dfn title="term_mapping" id="dfn-term_mapping">
+term
+mapping
+</dfn>.
+It
+is
+also
+used
+to
+maintain
+<dfn title="coercion_mapping" id="dfn-coercion_mapping">
+coercion
+mapping
+</dfn>
+s
+from
+terms
+to
+datatypes,
+<dfn title="language_mapping" id="dfn-language_mapping">
+language
+mapping
+</dfn>
+s
+from
+terms
+to
+language
+codes,
+and
+<dfn title="list_mapping" id="dfn-list_mapping">
+list
+mapping
+</dfn>
+s
+and
+<dfn title="set_mapping" id="dfn-set_mapping">
+set
+mapping
+</dfn>
+s
+for
+terms.
+Processors
+<em class="rfc2119" title="must">
+must
+</em>
+use
+the
+lexical
+form
+of
+the
+property
+when
+creating
+a
+mapping,
+as
+lookup
+is
+performed
+on
+lexical
+forms,
+not
+expanded
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+representations.
+</p>
+<p>
+A
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>
+is
+identified
+within
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+having
+a
+<code>
+@context
+</code>
+property
+with
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>,
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+or
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+value.
+When
+processing
+a
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>,
+special
+processing
+rules
+apply:
+</p>
+<ol class="algorithm">
+<li>
+Create
+a
+new,
+empty
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>.
+</li>
+<li>
+Let
+<em>
+context
+</em>
+be
+the
+value
+of
+<code>
+@context
+</code>
+<ol class="algorithm">
+<li id="process-context">
+If
+<em>
+context
+</em>
+equals
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+<del class="diff-old">reset
+</del>
+<ins class="diff-chg">clear
+</ins>
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+<del class="diff-old">to
+the
+initial
+context
+</del>
+</a>.
+</li>
+<li>
+If
+<em>
+context
+</em>
+is
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>,
+process
+each
+element
+as
+<em>
+context
+</em>
+in
+order
+by
+starting
+at
+<a href="#process-context">
+Step
+2.1
+</a>.
+</li>
+<li>
+If
+<em>
+context
+</em>
+is
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>,
+it
+<em class="rfc2119" title="must">
+must
+</em>
+have
+a
+lexical
+form
+of
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+<ol class="algorithm">
+<li>
+Dereference
+<em>
+context
+</em>.
+</li>
+<li>
+If
+the
+resulting
+document
+is
+a
+JSON
+document,
+extract
+the
+top-level
+<code>
+@context
+</code>
+element
+using
+the
+JSON
+Pointer
+"/@context"
+as
+described
+in
+[
+<cite>
+<a class="bibref" href="#bib-JSON-POINTER">
+JSON-POINTER
+</a>
+</cite>
+].
+Set
+<em>
+context
+</em>
+to
+the
+extracted
+content
+and
+process
+it
+by
+starting
+at
+<a href="#process-context">
+Step
+2.1
+</a>.
+</li>
+</ol>
+</li>
+<li>
+If
+<em>
+context
+</em>
+is
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>,
+perform
+the
+following
+steps:
+<ol class="algorithm">
+<li>
+If
+<em>
+context
+</em>
+has
+a
+<code>
+@language
+</code>
+property,
+it
+<em class="rfc2119" title="must">
+must
+</em>
+have
+a
+value
+of
+a
+simple
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>
+<ins class="diff-new">with
+the
+lexical
+form
+described
+in
+[
+</ins><cite><a class="bibref" href="#bib-BCP47"><ins class="diff-new">
+BCP47
+</ins></a></cite><ins class="diff-new">
+],
+</ins>
+or
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>.
+Add
+the
+language
+to
+the
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>.
+</li>
+<li>
+<ins class="diff-new">If
+</ins><em><ins class="diff-new">
+value
+</ins></em><ins class="diff-new">
+has
+a
+</ins><code><ins class="diff-new">
+@vocab
+</ins></code><ins class="diff-new">
+key,
+it
+</ins><em class="rfc2119" title="must"><ins class="diff-new">
+must
+</ins></em><ins class="diff-new">
+have
+a
+value
+of
+a
+simple
+</ins><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-new">
+string
+</ins></a><ins class="diff-new">
+with
+the
+lexical
+form
+of
+an
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-new">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a>,<ins class="diff-new">
+or
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-new">
+null
+</ins></a>.<ins class="diff-new">
+Add
+the
+vocabulary
+mapping
+to
+the
+</ins><a class="tref internalDFN" title="local_context" href="#dfn-local_context"><ins class="diff-new">
+local
+context
+</ins></a>.</li>
+<li id="object-context">
+Otherwise,
+for
+each
+property
+in
+<em>
+context
+</em>
+perform
+the
+following
+steps:
+<ol class="algorithm">
+<li>
+If
+the
+property's
+value
+is
+a
+simple
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>,
+determine
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+mapping
+value
+by
+performing
+<a href="#iri-expansion">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+</a>
+on
+the
+associated
+value.
+If
+the
+result
+of
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+mapping
+is
+an
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+merge
+the
+property
+into
+the
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>
+<a class="tref internalDFN" title="term_mapping" href="#dfn-term_mapping">
+term
+mapping
+</a>,
+unless
+the
+property
+is
+a
+JSON-LD
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>,
+in
+which
+case
+throw
+an
+exception.
+</li>
+<li>
+Otherwise,
+if
+the
+property's
+value
+is
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>
+remove
+mapping,
+coercion,
+container
+and
+language
+information
+associated
+with
+property
+from
+the
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>.
+</li>
+<li>
+Otherwise,
+the
+<em>
+property
+</em>
+'s
+<em>
+value
+</em>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>.
+<ol class="algorithm">
+<li>
+If
+the
+<em>
+property
+</em>
+is
+a
+JSON-LD
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>
+and
+the
+value
+has
+<code>
+@id
+</code>,
+<code>
+@language
+</code>
+or
+<code>
+@type
+</code>
+properties,
+throw
+an
+exception.
+<div class="issue">
+<div class="issue-title">
+<span>
+Issue
+<del class="diff-old">5
+</del>
+</span>
+</div>
+<div class="">
+Undecided
+if
+<code>
+@type
+</code>
+or
+<code>
+@graph
+</code>
+can
+take
+a
+<code>
+@container
+</code>
+with
+<code>
+@set
+</code>.
+</div>
+</div>
+</li>
+<li>
+If
+the
+<em>
+property
+</em>
+has
+the
+form
+of
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>,
+its
+<em>
+value
+</em>
+<em class="rfc2119" title="must">
+must
+</em>
+have
+an
+<code>
+@id
+</code>
+property
+with
+a
+string
+value
+which
+<em class="rfc2119" title="must">
+must
+</em>
+have
+the
+form
+of
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>,
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+or
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+Determine
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+mapping
+by
+performing
+<a href="#iri-expansion">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+</a>
+on
+the
+associated
+value.
+If
+the
+result
+of
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+mapping
+is
+an
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+merge
+the
+<em>
+property
+</em>
+into
+the
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>
+<a class="tref internalDFN" title="term_mapping" href="#dfn-term_mapping">
+term
+mapping
+</a>.
+</li>
+<li>
+If
+the
+<em>
+property
+</em>
+has
+the
+form
+of
+of
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+or
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+the
+<em>
+value
+</em>
+<em class="rfc2119" title="may">
+may
+</em>
+have
+a
+<code>
+@id
+</code>
+property
+with
+a
+string
+value
+which
+<em class="rfc2119" title="must">
+must
+</em>
+have
+the
+form
+of
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>,
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+or
+absolute
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+Determine
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+mapping
+by
+performing
+<a href="#iri-expansion">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+</a>
+on
+the
+associated
+value.
+If
+the
+result
+of
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+mapping
+is
+an
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+merge
+the
+<em>
+property
+</em>
+into
+the
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>
+<a class="tref internalDFN" title="term_mapping" href="#dfn-term_mapping">
+term
+mapping
+</a>.
+</li>
+<li>
+If
+the
+<em>
+value
+</em>
+has
+a
+<code>
+@type
+</code>
+property,
+its
+value
+<em class="rfc2119" title="must">
+must
+</em>
+have
+the
+form
+of
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>,
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+or
+the
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>
+<code>
+@id
+</code>.
+Determine
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+by
+performing
+<a href="#iri-expansion">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+</a>
+on
+the
+associated
+value.
+If
+the
+result
+of
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+mapping
+is
+an
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+or
+<code>
+@id
+</code>,
+merge
+into
+the
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>
+<a class="tref internalDFN" title="coercion_mapping" href="#dfn-coercion_mapping">
+coercion
+mapping
+</a>
+using
+the
+lexical
+value
+of
+the
+<em>
+property
+</em>.
+</li>
+<li>
+If
+the
+<em>
+value
+</em>
+has
+a
+<code>
+@container
+</code>
+property,
+its
+value
+<em class="rfc2119" title="must">
+must
+</em>
+be
+<code>
+@list
+</code>
+or
+<code>
+@set
+</code>.
+Merge
+the
+<a class="tref internalDFN" title="list_mapping" href="#dfn-list_mapping">
+list
+mapping
+</a>
+or
+<a class="tref internalDFN" title="set_mapping" href="#dfn-set_mapping">
+set
+mapping
+</a>
+into
+the
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>
+using
+the
+lexical
+value
+of
+the
+<em>
+property
+</em>.
+</li>
+<li>
+If
+the
+<em>
+value
+</em>
+has
+a
+<code>
+@language
+</code>
+property
+but
+no
+<code>
+@type
+</code>
+property,
+the
+value
+of
+the
+<code>
+@language
+</code>
+property
+<em class="rfc2119" title="must">
+must
+</em>
+be
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>
+or
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>.
+Merge
+the
+<a class="tref internalDFN" title="language_mapping" href="#dfn-language_mapping">
+language
+mapping
+</a>
+into
+the
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>
+using
+the
+lexical
+value
+of
+the
+<em>
+property
+</em>.
+</li>
+</ol>
+</li>
+<li>
+Merge
+the
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>
+into
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>.
+</li>
+<li>
+Repeat
+<a href="#object-context">
+Step
+2.4.2
+</a>
+until
+no
+entries
+are
+added
+to
+the
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>.
+</li>
+</ol>
+</li>
+</ol>
+</li>
+</ol>
+</li>
+</ol>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+It
+can
+be
+difficult
+to
+distinguish
+between
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+and
+an
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+as
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+may
+seem
+to
+be
+a
+valid
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<em>
+scheme
+</em>.
+When
+performing
+repeated
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+expansion,
+a
+term
+used
+as
+a
+prefix
+may
+not
+have
+a
+valid
+mapping
+due
+to
+dependencies
+in
+resolving
+term
+definitions.
+By
+continuing
+<a href="#object-context">
+Step
+2.3.2
+</a>
+until
+no
+changes
+are
+made,
+mappings
+to
+IRIs
+created
+using
+an
+undefined
+term
+prefix
+will
+eventually
+<del class="diff-old">resolve
+</del>
+<ins class="diff-chg">expand
+</ins>
+to
+<ins class="diff-new">an
+</ins>
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+s.
+</p>
+</div>
+<div class="issue">
+<div class="issue-title">
+<a href="https://github.com/json-ld/json-ld.org/issues/43">
+<span>
+Issue
+<del class="diff-old">6
+</del>
+<ins class="diff-chg">43
+</ins>
+</span>
+</a>
+</div>
+<p class="">
+<a href="https://github.com/json-ld/json-ld.org/issues/43">
+Issue
+43
+</a>
+concerns
+performing
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+expansion
+in
+the
+key
+position
+of
+a
+context
+definition.
+</p>
+</div>
+</section>
+<section id="iri-expansion">
+<h3>
+<span class="secno">
+4.3
+</span>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+</h3>
+<p>
+Keys
+and
+some
+values
+are
+evaluated
+to
+produce
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+This
+section
+defines
+an
+algorithm
+for
+transforming
+a
+value
+representing
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+into
+an
+actual
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>.
+</p>
+<p>
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<del class="diff-old">IRI
+</del>
+<ins class="diff-chg">IRIs
+</ins>
+</a>
+<del class="diff-old">s
+</del>
+may
+be
+represented
+as
+an
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+<del class="diff-old">or
+</del>
+</a>,
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<del class="diff-old">.
+</del>
+</a>,
+<ins class="diff-chg">or
+as
+a
+value
+relative
+to
+</ins><code><ins class="diff-chg">
+@vocab
+</ins></code>.
+</p>
+<p>
+An
+<dfn title="absolute_iri" id="dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</dfn>
+is
+defined
+in
+[
+<cite>
+<a class="bibref" href="#bib-RFC3987">
+RFC3987
+</a>
+</cite>
+]
+containing
+a
+<em>
+scheme
+</em>
+along
+with
+<em>
+path
+</em>
+and
+optional
+<em>
+query
+</em>
+and
+fragment
+segments.
+A
+<dfn title="relative_iri" id="dfn-relative_iri">
+relative
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</dfn>
+is
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+that
+is
+relative
+some
+other
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+;
+in
+the
+case
+of
+JSON-LD
+this
+is
+the
+base
+location
+of
+the
+document.
+</p>
+<p>
+The
+algorithm
+for
+generating
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+is:
+</p>
+<ol class="algorithm">
+<li>
+If
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+contains
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+mapping
+for
+the
+value
+using
+a
+case-sensitive
+comparison,
+use
+the
+mapped
+value
+as
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>.
+</li>
+<li>
+Otherwise,
+split
+the
+value
+into
+a
+<em>
+prefix
+</em>
+and
+<em>
+suffix
+</em>
+from
+the
+first
+occurrence
+of
+':'.
+</li>
+<li>
+If
+the
+prefix
+is
+a
+'_'
+(underscore),
+the
+value
+represents
+a
+named
+<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">
+blank
+node
+</a>.
+</li>
+<li>
+If
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+contains
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+mapping
+for
+<em>
+prefix
+</em>
+using
+a
+case-sensitive
+comparison,
+and
+<em>
+suffix
+</em>
+does
+not
+does
+not
+begin
+with
+'//'
+(i.e.,
+it
+does
+not
+match
+a
+<em>
+hier-part
+</em>
+including
+<em>
+authority
+</em>
+(as
+defined
+in
+[
+<cite>
+<a class="bibref" href="#bib-RFC3986">
+RFC3986
+</a>
+</cite>
+]),
+generate
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+by
+prepending
+the
+mapped
+prefix
+to
+the
+(possibly
+empty)
+suffix
+using
+textual
+concatenation.
+Note
+that
+an
+empty
+suffix
+and
+no
+suffix
+(meaning
+the
+value
+contains
+no
+':'
+string
+at
+all)
+are
+treated
+equivalently.
+</li>
+<li>
+Otherwise,
+<del class="diff-old">use
+</del>
+<ins class="diff-chg">if
+</ins>
+the
+<del class="diff-old">value
+directly
+as
+an
+</del>
+<abbr title="Internationalized Resource Identifier">
+IRI
+<del class="diff-old">.
+Note
+Previous
+versions
+</del>
+</abbr>
+<ins class="diff-chg">being
+processed
+does
+not
+contain
+a
+colon
+and
+is
+a
+property,
+i.e.,
+a
+key
+in
+a
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a>,<ins class="diff-chg">
+or
+the
+value
+</ins>
+of
+<del class="diff-old">this
+specification
+used
+</del>
+<code>
+<del class="diff-old">@base
+</del>
+<ins class="diff-chg">@type
+</ins>
+</code>
+and
+<ins class="diff-new">the
+active
+context
+has
+a
+</ins>
+<code>
+@vocab
+</code>
+<ins class="diff-new">mapping,
+join
+the
+mapped
+value
+</ins>
+to
+<del class="diff-old">define
+</del>
+<ins class="diff-chg">the
+suffix
+using
+textual
+concatenation.
+</ins></li><li><ins class="diff-chg">
+Otherwise,
+if
+the
+</ins>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<del class="diff-old">prefixes
+used
+to
+resolve
+</del>
+<ins class="diff-chg">being
+processed
+does
+not
+contain
+a
+colon
+and
+is
+not
+a
+property,
+i.e.,
+not
+a
+key
+in
+a
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><ins class="diff-chg">
+treat
+it
+as
+a
+</ins>
+<a class="tref internalDFN" title="relative_iri" href="#dfn-relative_iri">
+relative
+<del class="diff-old">IRIs
+.
+It
+was
+determined
+that
+this
+added
+too
+much
+complexity,
+but
+</del>
+<abbr title="Internationalized Resource Identifier">
+<ins class="diff-chg">IRI
+</ins></abbr></a><ins class="diff-chg">
+and
+resolve
+it
+against
+</ins>
+the
+<del class="diff-old">issue
+can
+be
+re-examined
+</del>
+<ins class="diff-chg">base
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr><ins class="diff-chg">
+as
+per
+[
+</ins><cite><a class="bibref" href="#bib-RFC3986"><ins class="diff-chg">
+RFC3986
+</ins></a></cite><ins class="diff-chg">
+]
+using
+only
+the
+basic
+algorithm
+in
+section
+5.2.
+Neither
+</ins><em><ins class="diff-chg">
+Syntax-Based
+Normalization
+</ins></em><ins class="diff-chg">
+nor
+</ins><em><ins class="diff-chg">
+Scheme-Based
+Normalization
+</ins></em><ins class="diff-chg">
+(described
+in
+sections
+6.2.2
+and
+6.2.3
+of
+[
+</ins><cite><a class="bibref" href="#bib-RFC3986"><ins class="diff-chg">
+RFC3986
+</ins></a></cite><ins class="diff-chg">
+])
+are
+performed.
+Characters
+additionally
+allowed
+in
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr><ins class="diff-chg">
+references
+are
+treated
+</ins>
+in
+the
+<del class="diff-old">future
+based
+on
+community
+input.
+</del>
+<ins class="diff-chg">same
+way
+that
+unreserved
+characters
+are
+treated
+in
+URI
+references,
+per
+section
+6.5
+of
+[
+</ins><cite>
+<a class="bibref" href="#bib-RFC3987">
+<ins class="diff-chg">RFC3987
+</ins></a></cite><ins class="diff-chg">
+].
+</ins></li><li><ins class="diff-chg">
+Otherwise,
+use
+the
+value
+directly
+as
+an
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr>.</li></ol><p></p></section><section id="iri-compaction">
+<h3>
+<span class="secno">
+4.4
+</span>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+</h3>
+<p>
+Some
+keys
+and
+values
+are
+expressed
+using
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+s.
+This
+section
+defines
+an
+algorithm
+for
+transforming
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+(
+<em>
+iri
+</em>
+)
+to
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+or
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+using
+the
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+specified
+in
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+using
+an
+optional
+<em>
+value
+</em>.
+</p>
+<section id="iri-compaction-algorithm">
+<h4>
+<span class="secno">
+4.4.1
+</span>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+Algorithm
+</h4>
+<p>
+The
+algorithm
+for
+generating
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+is:
+</p>
+<ol class="algorithm">
+<li>
+Create
+an
+empty
+list
+of
+terms
+<em>
+terms
+</em>
+that
+will
+be
+populated
+with
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+that
+are
+ranked
+according
+to
+how
+closely
+they
+match
+<em>
+value
+</em>.
+Initialize
+<em>
+highest
+rank
+</em>
+to
+<code>
+0
+</code>,
+and
+set
+a
+flag
+<em>
+list
+container
+</em>
+to
+<code>
+false
+</code>.
+</li>
+<li>
+For
+each
+<em>
+term
+</em>
+in
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>:
+<ol class="algorithm">
+<li>
+If
+the
+<em>
+term
+</em>
+'s
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+is
+not
+a
+complete
+match
+against
+<em>
+iri
+</em>,
+continue
+to
+the
+next
+<em>
+term
+</em>.
+</li>
+<li>
+If
+<em>
+value
+</em>
+is
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+containing
+only
+the
+property
+<code>
+@list
+</code>:
+<ol class="algorithm">
+<li>
+If
+<em>
+term
+</em>
+has
+a
+<code>
+@container
+</code>
+set
+to
+<code>
+@set
+</code>,
+continue
+to
+the
+next
+<em>
+term
+</em>.
+</li>
+<li>
+If
+<em>
+list
+container
+</em>
+is
+<code>
+true
+</code>
+and
+<em>
+term
+</em>
+does
+not
+have
+a
+<code>
+container
+</code>
+set
+to
+<code>
+@list
+<del class="diff-old">,
+</del>
+</code>
+<ins class="diff-chg">and
+</ins><em><ins class="diff-chg">
+value
+</ins></em><ins class="diff-chg">
+is
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a>,
+continue
+to
+the
+next
+<em>
+term
+</em>.
+</li>
+</ol>
+</li>
+<li>
+Otherwise,
+if
+<em>
+term
+</em>
+has
+a
+<code>
+container
+</code>
+set
+to
+<code>
+@list
+</code>,
+continue
+to
+the
+next
+<em>
+term
+</em>.
+</li>
+<li>
+Set
+<em>
+rank
+</em>
+to
+the
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>
+of
+<em>
+value
+</em>
+by
+passing
+passing
+<em>
+term
+</em>,
+<em>
+value
+</em>,
+and
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+to
+the
+<a href="#term-rank-algorithm">
+Term
+Rank
+Algorithm
+</a>.
+</li>
+<li>
+If
+<em>
+rank
+</em>
+is
+greater
+than
+<code>
+0
+</code>:
+<ol class="algorithm">
+<li>
+If
+<em>
+term
+</em>
+has
+a
+<code>
+container
+</code>
+set
+to
+<code>
+@set
+</code>,
+then
+add
+<code>
+1
+</code>
+to
+<em>
+rank
+</em>.
+</li>
+<li>
+If
+<em>
+value
+</em>
+is
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+containing
+only
+the
+property
+<code>
+@list
+</code>
+and
+<em>
+list
+container
+</em>
+is
+<code>
+false
+</code>
+and
+<em>
+term
+</em>
+has
+a
+<code>
+container
+</code>
+set
+to
+<code>
+@list
+</code>,
+then
+set
+<em>
+list
+container
+</em>
+to
+<code>
+true
+</code>,
+clear
+<em>
+terms
+</em>,
+set
+<em>
+highest
+rank
+</em>
+to
+<em>
+rank
+</em>,
+and
+add
+<em>
+term
+</em>
+to
+<em>
+terms
+</em>.
+</li>
+<li>
+Otherwise,
+if
+<em>
+rank
+</em>
+is
+greater
+than
+or
+equal
+to
+<em>
+highest
+rank
+</em>:
+<ol class="algorithm">
+<li>
+If
+<em>
+rank
+</em>
+is
+greater
+than
+<em>
+highest
+rank
+</em>,
+clear
+<em>
+terms
+</em>
+and
+set
+<em>
+highest
+rank
+</em>
+to
+<em>
+rank
+</em>.
+</li>
+<li>
+Add
+<em>
+term
+</em>
+to
+<em>
+terms
+</em>.
+</li>
+</ol>
+</li>
+</ol>
+</li>
+</ol>
+</li>
+<li>
+If
+<em>
+terms
+</em>
+is
+empty,
+<ins class="diff-new">and
+the
+</ins><a class="tref internalDFN" title="active_context" href="#dfn-active_context"><ins class="diff-new">
+active
+context
+</ins></a><ins class="diff-new">
+has
+a
+</ins><code><ins class="diff-new">
+@vocab
+</ins></code><ins class="diff-new">
+which
+is
+a
+prefix
+of
+</ins><em><ins class="diff-new">
+iri
+</ins></em><ins class="diff-new">
+where
+the
+resulting
+</ins><a class="tref internalDFN" title="relative_iri" href="#dfn-relative_iri"><ins class="diff-new">
+relative
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a><ins class="diff-new">
+is
+not
+a
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-new">
+term
+</ins></a><ins class="diff-new">
+in
+the
+</ins><a class="tref internalDFN" title="active_context" href="#dfn-active_context"><ins class="diff-new">
+active
+context
+</ins></a>.<ins class="diff-new">
+The
+resulting
+</ins><a class="tref internalDFN" title="relative_iri" href="#dfn-relative_iri"><ins class="diff-new">
+relative
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a><ins class="diff-new">
+is
+the
+unmatched
+part
+of
+</ins><em><ins class="diff-new">
+iri
+</ins></em>.</li><li><ins class="diff-new">
+If
+</ins><em><ins class="diff-new">
+terms
+</ins></em><ins class="diff-new">
+is
+empty,
+</ins>
+add
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+representation
+of
+<em>
+iri
+</em>
+for
+each
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+in
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+which
+maps
+to
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+which
+is
+a
+prefix
+for
+<em>
+iri
+</em>
+where
+the
+resulting
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+is
+not
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+in
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>.
+The
+resulting
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+is
+the
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+associated
+with
+the
+partially
+matched
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+in
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+concatenated
+with
+a
+colon
+(:)
+character
+and
+the
+unmatched
+part
+of
+<em>
+iri
+</em>.
+</li>
+<li>
+If
+<em>
+terms
+</em>
+is
+empty,
+<ins class="diff-new">the
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a><ins class="diff-new">
+being
+processed
+is
+a
+property
+or
+the
+value
+of
+</ins><code><ins class="diff-new">
+@type
+</ins></code><ins class="diff-new">
+and
+</ins><code><ins class="diff-new">
+@vocab
+</ins></code><ins class="diff-new">
+is
+not
+null
+and
+matches
+the
+beginning
+of
+</ins><em><ins class="diff-new">
+iri
+</ins></em>,<ins class="diff-new">
+return
+the
+unmatched
+portion
+of
+</ins><em><ins class="diff-new">
+iri
+</ins></em>.<ins class="diff-new">
+Otherwise
+</ins>
+return
+<em>
+iri
+</em>.
+</li>
+<li>
+Otherwise,
+return
+the
+shortest
+and
+lexicographically
+least
+value
+in
+<em>
+terms
+</em>.
+</li>
+</ol>
+<p>
+</p>
+</section>
+<section id="term-rank-algorithm">
+<h4>
+<span class="secno">
+4.4.2
+</span>
+Term
+Rank
+Algorithm
+</h4>
+<p>
+When
+selecting
+among
+multiple
+possible
+terms
+for
+a
+given
+property,
+it
+may
+be
+that
+multiple
+<a class="tref internalDFN" title="term" href="#dfn-term">
+terms
+</a>
+are
+defined
+with
+the
+same
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+but
+differ
+in
+<code>
+@type
+</code>,
+<code>
+@container
+</code>
+or
+<code>
+@language
+</code>.
+The
+purpose
+of
+this
+algorithm
+is
+to
+take
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+and
+a
+value
+and
+give
+it
+a
+<dfn title="term_rank" id="dfn-term_rank">
+term
+rank
+</dfn>.
+The
+selection
+can
+then
+be
+based,
+partly,
+on
+the
+term
+having
+the
+highest
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>.
+</p>
+<p>
+Given
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+<em>
+term
+</em>,
+<em>
+value
+</em>,
+and
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+determine
+the
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>
+using
+the
+following
+steps:
+</p>
+<ol class="algorithm">
+<li>
+If
+<em>
+value
+</em>
+is
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>
+is
+<code>
+3
+</code>.
+</li>
+<li>
+Otherwise,
+if
+<em>
+value
+</em>
+is
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+containing
+only
+the
+property
+<code>
+@list
+</code>:
+<ol class="algorithm">
+<li>
+If
+the
+<code>
+@list
+</code>
+property
+is
+an
+empty
+array,
+if
+<em>
+term
+</em>
+has
+<code>
+@container
+</code>
+set
+to
+<code>
+@list
+</code>,
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>
+is
+<code>
+1
+</code>,
+otherwise
+<code>
+0
+</code>.
+</li>
+<li>
+Otherwise,
+return
+the
+sum
+of
+the
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>
+s
+for
+every
+entry
+in
+the
+list.
+</li>
+</ol>
+</li>
+<li>
+Otherwise,
+<em>
+value
+</em>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+a
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>,
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">
+<ins class="diff-chg">node
+</ins>
+reference
+</a>,
+or
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+having
+a
+<code>
+@value
+</code>.
+<ol class="algorithm">
+<li>
+If
+<em>
+value
+</em>
+has
+a
+<code>
+@value
+</code>
+property:
+<ol class="algorithm">
+<li>
+If
+<em>
+value
+</em>
+has
+a
+<code>
+@type
+</code>
+property
+matching
+a
+<code>
+@type
+</code>
+coercion
+for
+<em>
+term
+</em>,
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>
+is
+<code>
+3
+</code>,
+otherwise
+if
+<em>
+term
+</em>
+has
+no
+<code>
+@type
+</code>
+coercion
+and
+no
+<code>
+@language
+</code>,
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>
+is
+<code>
+1
+</code>,
+otherwise
+<code>
+0
+</code>.
+</li>
+<li>
+Otherwise,
+if
+<code>
+@value
+</code>
+is
+not
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>,
+if
+<em>
+term
+</em>
+has
+no
+<code>
+@type
+</code>
+or
+<code>
+@language
+</code>
+it
+is
+<code>
+2
+</code>,
+otherwise
+<code>
+1
+</code>.
+</li>
+<li>
+Otherwise,
+if
+<em>
+value
+</em>
+has
+no
+<code>
+@language
+</code>
+property,
+if
+<em>
+term
+</em>
+has
+<code>
+@language
+</code>
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+or
+<em>
+term
+</em>
+has
+no
+<code>
+@type
+</code>
+or
+<code>
+@language
+</code>
+and
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+has
+no
+<code>
+@language
+</code>,
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>
+is
+<code>
+3
+</code>,
+otherwise
+<code>
+0
+</code>.
+</li>
+<li>
+Otherwise,
+if
+<em>
+value
+</em>
+has
+a
+<code>
+@language
+</code>
+property
+matching
+a
+<code>
+@language
+</code>
+definition
+for
+<em>
+term
+</em>
+(or
+<em>
+term
+</em>
+has
+no
+<code>
+@type
+</code>
+or
+<code>
+@language
+</code>
+definition
+and
+<code>
+@language
+</code>
+in
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+matches
+the
+<em>
+value
+</em>
+<code>
+@language
+</code>
+),
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>
+is
+<code>
+3
+</code>,
+otherwise
+if
+<em>
+term
+</em>
+has
+no
+<code>
+@type
+</code>
+coercion
+and
+no
+<code>
+@language
+</code>,
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>
+is
+<code>
+1
+</code>,
+otherwise
+<code>
+0
+</code>.
+</li>
+</ol>
+</li>
+<li>
+Otherwise,
+if
+<em>
+term
+</em>
+has
+<code>
+@type
+</code>
+coerced
+to
+<code>
+@id
+</code>,
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>
+is
+<code>
+3
+</code>,
+otherwise
+if
+<em>
+term
+</em>
+has
+no
+<code>
+@type
+</code>
+coercion
+and
+no
+<code>
+@language
+</code>,
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>
+is
+<code>
+1
+</code>,
+otherwise
+<code>
+0
+</code>.
+</li>
+</ol>
+</li>
+<li>
+Return
+<a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">
+term
+rank
+</a>.
+</li>
+</ol>
+</section>
+</section>
+<section id="value-expansion">
+<h3>
+<span class="secno">
+4.5
+</span>
+Value
+Expansion
+</h3>
+<p>
+Some
+values
+in
+JSON-LD
+can
+be
+expressed
+in
+a
+compact
+form.
+These
+values
+are
+required
+to
+be
+expanded
+at
+times
+when
+processing
+JSON-LD
+documents.
+</p>
+<p>
+The
+algorithm
+for
+expanding
+a
+<em>
+value
+</em>
+takes
+an
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+and
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>.
+It
+is
+implemented
+as
+follows:
+</p>
+<ol class="algorithm">
+<li>
+If
+<em>
+value
+</em>
+is
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+the
+<em>
+value
+</em>
+is
+already
+expanded.
+</li>
+<li>
+If
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+is
+<code>
+@graph
+</code>
+or
+the
+target
+of
+an
+<code>
+@id
+</code>
+coercion,
+expand
+the
+value
+into
+an
+object
+with
+a
+key-value
+pair
+where
+the
+key
+is
+<code>
+@id
+</code>
+and
+the
+value
+is
+the
+expanded
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+according
+to
+the
+<a href="#iri-expansion">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+</a>
+rules.
+</li>
+<li>
+Otherwise,
+if
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+is
+not
+a
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>,
+then
+expand
+<em>
+value
+</em>
+into
+an
+object:
+<ol class="algorithm">
+<li>
+Set
+the
+first
+key-value
+pair
+to
+<code>
+@value
+</code>
+and
+the
+unexpanded
+<em>
+value
+</em>.
+</li>
+<li>
+If
+the
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+is
+the
+target
+of
+typed
+literal
+coercion,
+set
+the
+second
+key-value
+pair
+to
+<code>
+@type
+</code>
+and
+the
+associated
+coercion
+datatype
+expanded
+according
+to
+the
+<a href="#iri-expansion">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+</a>
+rules.
+</li>
+<li>
+Otherwise,
+if
+the
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+is
+the
+target
+of
+language
+tagging,
+set
+the
+second
+key-value
+pair
+to
+<code>
+@language
+</code>
+and
+value
+of
+the
+language
+tagging
+from
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>.
+</li>
+</ol>
+</li>
+<li>
+Otherwise,
+<em>
+value
+</em>
+is
+already
+expanded.
+</li>
+</ol>
+</section>
+<section id="value-compaction">
+<h3>
+<span class="secno">
+4.6
+</span>
+Value
+Compaction
+</h3>
+<p>
+Some
+values,
+such
+as
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+IRIs
+</a>
+and
+<a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">
+typed
+literals
+</a>,
+may
+be
+expressed
+in
+an
+expanded
+form
+<ins class="diff-new">(
+</ins><dfn title="expanded_value" id="dfn-expanded_value"><ins class="diff-new">
+expanded
+value
+</ins></dfn><ins class="diff-new">
+)
+</ins>
+in
+JSON-LD.
+These
+values
+are
+required
+to
+be
+compacted
+at
+times
+when
+processing
+JSON-LD
+documents.
+</p>
+<p>
+The
+algorithm
+for
+compacting
+an
+expanded
+value
+<em>
+value
+</em>
+takes
+an
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+and
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>.
+It
+is
+implemented
+as
+follows:
+</p>
+<ol class="algorithm">
+<li>
+If
+<em>
+value
+</em>
+only
+has
+one
+property
+and
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+has
+no
+default
+language,
+then
+the
+compacted
+value
+is
+the
+value
+of
+<code>
+@value
+</code>.
+</li>
+<li>
+Otherwise,
+if
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+is
+<code>
+@graph
+</code>,
+the
+compacted
+value
+is
+the
+value
+associated
+with
+the
+<code>
+@id
+</code>
+key,
+processed
+according
+to
+the
+<a href="#iri-compaction">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+</a>
+steps.
+</li>
+<li>
+Otherwise,
+if
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+contains
+a
+coercion
+target
+for
+the
+key
+that
+matches
+the
+expression
+of
+the
+value,
+compact
+the
+value
+using
+the
+following
+steps:
+<ol class="algorithm">
+<li>
+If
+the
+coercion
+target
+is
+an
+<code>
+@id
+</code>,
+the
+compacted
+value
+is
+the
+value
+associated
+with
+the
+<code>
+@id
+</code>
+key,
+processed
+according
+to
+the
+<a href="#iri-compaction">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+</a>
+steps.
+</li>
+<li>
+If
+the
+coercion
+target
+is
+a
+<a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">
+typed
+literal
+</a>,
+the
+compacted
+value
+is
+the
+value
+associated
+with
+the
+<code>
+@value
+</code>
+key.
+</li>
+</ol>
+</li>
+<li>
+Otherwise,
+if
+<em>
+value
+</em>
+contains
+an
+<code>
+@id
+</code>
+key,
+the
+compacted
+value
+is
+<em>
+value
+</em>
+with
+the
+value
+of
+<code>
+@id
+</code>
+processed
+according
+to
+the
+<a href="#iri-compaction">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+</a>
+steps.
+</li>
+<li>
+Otherwise,
+if
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+contains
+a
+<code>
+@language
+</code>,
+which
+matches
+the
+<code>
+@language
+</code>
+of
+the
+value,
+or
+the
+value
+has
+only
+a
+<code>
+@value
+</code>
+key,
+the
+compacted
+value
+is
+the
+value
+associated
+with
+the
+<code>
+@value
+</code>
+key.
+</li>
+<li>
+Otherwise,
+if
+the
+value
+contains
+a
+<code>
+@type
+</code>
+key,
+the
+compacted
+value
+is
+<em>
+value
+</em>
+with
+the
+<code>
+@type
+</code>
+value
+processed
+according
+to
+the
+<a href="#iri-compaction">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+</a>
+steps.
+</li>
+<li>
+Otherwise,
+the
+value
+is
+not
+modified.
+</li>
+</ol>
+</section>
+<section id="expansion-1">
+<h3>
+<span class="secno">
+4.7
+</span>
+Expansion
+</h3>
+<p>
+Expansion
+is
+the
+process
+of
+taking
+a
+JSON-LD
+document
+and
+applying
+a
+context
+such
+that
+all
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>,
+datatypes,
+and
+literal
+values
+are
+expanded
+so
+that
+the
+context
+is
+no
+longer
+necessary.
+JSON-LD
+document
+expansion
+is
+typically
+used
+as
+a
+part
+of
+other
+JSON-LD
+API
+methods.
+</p>
+<p>
+For
+example,
+assume
+the
+following
+JSON-LD
+input
+document:
+</p>
+<div class="example"><div class="example-title"><span>Example 13</span></div><pre class="example">{
+ "@context":
+ {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "homepage": {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type", "@id"
+ }
+ },
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}
+</pre>
+</div>
+<p>
+Running
+the
+JSON-LD
+Expansion
+algorithm
+against
+the
+JSON-LD
+input
+document
+provided
+above
+would
+result
+in
+the
+following
+output:
+</p>
+<div class="example"><div class="example-title"><span>Example 14</span></div><pre class="example">{
+ "http://xmlns.com/foaf/0.1/name": "Manu Sporny",
+ "http://xmlns.com/foaf/0.1/homepage": {
+ "@id": "http://manu.sporny.org/"
+ }
+}
+</pre>
+</div>
+<section id="expansion-algorithm">
+<h4>
+<span class="secno">
+4.7.1
+</span>
+Expansion
+Algorithm
+</h4>
+<p>
+The
+algorithm
+takes
+three
+input
+variables:
+an
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>,
+an
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>,
+and
+an
+<em>
+element
+</em>
+to
+be
+expanded.
+To
+begin,
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+is
+set
+to
+the
+result
+of
+performing,
+<a href="#context-processing">
+Context
+Processing
+</a>
+on
+the
+passed
+<em>
+context
+</em>,
+or
+<del class="diff-old">to
+the
+initial
+context
+</del>
+<ins class="diff-chg">empty
+</ins>
+if
+<em>
+context
+</em>
+is
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+is
+set
+to
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+and
+<em>
+element
+</em>
+is
+set
+to
+the
+<a class="tref internalDFN" title="json-ld_input" href="#dfn-json-ld_input">
+JSON-LD
+input
+</a>.
+</p>
+<ol class="algorithm">
+<li>
+If
+<em>
+element
+</em>
+is
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>,
+process
+each
+entry
+in
+<em>
+element
+</em>
+recursively
+using
+this
+algorithm,
+passing
+copies
+of
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+and
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>.
+If
+has
+a
+<code>
+@container
+</code>
+set
+to
+<code>
+@list
+</code>
+and
+any
+entry
+in
+<em>
+element
+</em>
+is
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>,
+or
+is
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+containing
+a
+<code>
+@list
+</code>
+property,
+throw
+an
+exception,
+as
+lists
+of
+lists
+are
+not
+allowed.
+If
+the
+expanded
+entry
+is
+null,
+drop
+it.
+If
+it's
+an
+array,
+merge
+its
+entries
+with
+<em>
+element
+</em>
+'s
+entries.
+</li>
+<li>
+Otherwise,
+if
+<em>
+element
+</em>
+is
+an
+object
+<ol class="algorithm">
+<li>
+If
+<em>
+element
+</em>
+has
+a
+<code>
+@context
+</code>
+property,
+update
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+according
+to
+the
+steps
+outlined
+in
+<a href="#context-processing">
+Context
+Processing
+</a>
+and
+remove
+the
+<code>
+@context
+</code>
+property.
+</li>
+<li>
+Then,
+proceed
+and
+process
+each
+<em>
+property
+</em>
+and
+<em>
+value
+</em>
+in
+<em>
+element
+</em>
+as
+follows:
+<ol class="algorithm">
+<li>
+Remove
+<em>
+property
+</em>
+from
+<em>
+element
+</em>,
+expand
+<em>
+property
+</em>
+according
+to
+the
+steps
+outlined
+in
+<a href="#iri-expansion">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+</a>.
+Set
+the
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+to
+the
+original
+un-expanded
+<em>
+property
+</em>
+if
+<em>
+property
+</em>
+is
+not
+a
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>.
+</li>
+<li>
+If
+<em>
+property
+</em>
+does
+not
+expand
+to
+a
+keyword
+or
+an
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+(i.e.,
+it
+doesn't
+contain
+a
+colon),
+continue
+with
+the
+next
+property
+from
+<em>
+element
+</em>.
+</li>
+<li>
+If
+<em>
+value
+</em>
+is
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>
+and
+<em>
+property
+</em>
+is
+not
+<code>
+@value
+</code>,
+continue
+with
+the
+next
+property
+from
+<em>
+element
+</em>.
+</li>
+<li>
+If
+the
+<em>
+property
+</em>
+is
+<code>
+@id
+</code>
+the
+<em>
+value
+</em>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>.
+Expand
+the
+<em>
+value
+</em>
+according
+to
+<a href="#iri-expansion">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+</a>.
+</li>
+<li>
+Otherwise,
+if
+the
+<em>
+property
+</em>
+is
+<code>
+@type
+</code>:
+<ol class="algorithm">
+<li>
+If
+<em>
+value
+</em>
+is
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>,
+expand
+according
+to
+<a href="#iri-expansion">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+</a>.
+</li>
+<li>
+Otherwise,
+if
+<em>
+value
+</em>
+is
+a
+<del class="diff-old">subject
+reference
+,
+the
+expanded
+value
+is
+the
+result
+of
+performing
+IRI
+Expansion
+on
+the
+value
+of
+@id
+.
+Otherwise,
+if
+value
+is
+a
+</del>
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+Object
+</a>,
+it
+must
+be
+empty
+(used
+for
+<cite>
+<a href="../json-ld-framing/#framing">
+Framing
+</a>
+</cite>
+).
+</li>
+<li>
+Otherwise,
+if
+<em>
+value
+</em>
+is
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>,
+all
+elements
+must
+be
+<del class="diff-old">either
+a
+</del>
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>
+<del class="diff-old">or
+subject
+reference
+.
+</del>
+<ins class="diff-chg">s.
+</ins>
+Expand
+<em>
+value
+</em>
+for
+each
+of
+its
+entries
+<del class="diff-old">using
+the
+previous
+three
+steps.
+</del>
+<ins class="diff-chg">according
+to
+</ins><a href="#iri-expansion"><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr><ins class="diff-chg">
+Expansion
+</ins></a>.
+</li>
+</ol>
+</li>
+<li>
+Otherwise,
+if
+the
+<em>
+property
+</em>
+is
+<code>
+@value
+</code>
+or
+<code>
+@language
+</code>
+the
+<em>
+value
+</em>
+<em class="rfc2119" title="must not">
+must
+not
+</em>
+be
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+or
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>.
+</li>
+<li>
+Otherwise,
+if
+the
+<em>
+property
+</em>
+is
+<code>
+@list
+</code>
+or
+<code>
+@set
+</code>
+expand
+<em>
+value
+</em>
+recursively
+using
+this
+algorithm,
+passing
+copies
+of
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+and
+<em>
+active
+property
+</em>.
+If
+the
+expanded
+<em>
+value
+</em>
+is
+not
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>,
+convert
+it
+to
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>.
+If
+<em>
+property
+</em>
+is
+<code>
+@list
+</code>
+and
+any
+entry
+in
+<em>
+value
+</em>
+is
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+containing
+an
+<code>
+@list
+</code>
+property,
+throw
+an
+exception,
+as
+lists
+of
+lists
+are
+not
+supported.
+</li>
+<li>
+Otherwise,
+expand
+<em>
+value
+</em>
+recursively
+using
+this
+algorithm,
+passing
+copies
+of
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+and
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>.
+</li>
+<li>
+If
+<em>
+property
+</em>
+is
+not
+a
+keyword
+and
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+has
+a
+<code>
+@container
+</code>
+<code>
+@list
+</code>
+and
+the
+expanded
+<em>
+value
+</em>
+is
+not
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+convert
+<em>
+value
+</em>
+to
+an
+<a class="tref internalDFN" title="object" href="#dfn-object">
+object
+</a>
+with
+an
+<code>
+@list
+</code>
+property
+whose
+value
+is
+set
+to
+<em>
+value
+</em>
+(unless
+<em>
+value
+</em>
+is
+already
+in
+that
+form).
+</li>
+<li>
+Convert
+<em>
+value
+</em>
+to
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+form
+unless
+<em>
+value
+</em>
+is
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>
+or
+<em>
+property
+</em>
+is
+<code>
+@id
+</code>,
+<code>
+@type
+</code>,
+<code>
+@value
+</code>,
+or
+<code>
+@language
+</code>.
+</li>
+<li>
+If
+<em>
+value
+</em>
+is
+not
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+either
+merge
+<em>
+value
+</em>
+into
+an
+existing
+<em>
+property
+</em>
+property
+of
+<em>
+element
+</em>
+or
+create
+a
+new
+<em>
+property
+</em>
+property
+with
+<em>
+value
+</em>
+as
+value.
+</li>
+</ol>
+</li>
+<li>
+If
+the
+processed
+<em>
+element
+</em>
+has
+an
+<code>
+@value
+</code>
+property
+<ol class="algorithm">
+<li>
+<em>
+element
+</em>
+<em class="rfc2119" title="must not">
+must
+not
+</em>
+have
+more
+than
+one
+other
+property,
+which
+can
+either
+be
+<code>
+@language
+</code>
+or
+<code>
+@type
+</code>
+with
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>
+value.
+</li>
+<li>
+if
+the
+value
+of
+<code>
+@value
+</code>
+equals
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+replace
+<em>
+element
+</em>
+with
+the
+value
+of
+<code>
+@value
+</code>.
+</li>
+</ol>
+</li>
+<li>
+Otherwise,
+if
+<em>
+element
+</em>
+has
+an
+<code>
+@type
+</code>
+property
+and
+its
+value
+is
+not
+in
+the
+form
+of
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>,
+convert
+it
+to
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>.
+</li>
+<li>
+If
+<em>
+element
+</em>
+has
+an
+<code>
+@set
+</code>
+or
+<code>
+@list
+</code>
+property,
+it
+<em class="rfc2119" title="must">
+must
+</em>
+be
+the
+only
+property.
+Set
+<em>
+element
+</em>
+to
+the
+value
+of
+<code>
+@set
+</code>
+;
+leave
+<code>
+@list
+</code>
+untouched.
+</li>
+<li>
+If
+<em>
+element
+</em>
+has
+just
+a
+<code>
+@language
+</code>
+property,
+set
+<em>
+element
+</em>
+to
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>.
+</li>
+</ol>
+</li>
+<li>
+Otherwise,
+expand
+<em>
+element
+</em>
+according
+to
+the
+<a href="#value-expansion">
+Value
+Expansion
+</a>
+rules,
+passing
+copies
+of
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+and
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>.
+</li>
+</ol>
+<p>
+If,
+after
+the
+algorithm
+outlined
+above
+is
+run,
+the
+resulting
+<em>
+element
+</em>
+is
+an
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+with
+just
+a
+<code>
+@graph
+</code>
+property,
+<em>
+element
+</em>
+is
+set
+to
+the
+value
+of
+<code>
+@graph
+</code>
+'s
+value.
+Finally,
+if
+<em>
+element
+</em>
+is
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>,
+it
+is
+wrapped
+into
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>.
+</p>
+</section>
+</section>
+<section id="compaction-1">
+<h3>
+<span class="secno">
+4.8
+</span>
+Compaction
+</h3>
+<p>
+Compaction
+is
+the
+process
+of
+taking
+a
+JSON-LD
+document
+and
+applying
+a
+context
+such
+that
+the
+most
+compact
+form
+of
+the
+document
+is
+generated.
+JSON
+is
+typically
+expressed
+in
+a
+very
+compact,
+key-value
+format.
+That
+is,
+full
+IRIs
+are
+rarely
+used
+as
+keys.
+At
+times,
+a
+JSON-LD
+document
+may
+be
+received
+that
+is
+not
+in
+its
+most
+compact
+form.
+JSON-LD,
+via
+the
+API,
+provides
+a
+way
+to
+compact
+a
+JSON-LD
+document.
+</p>
+<p>
+For
+example,
+assume
+the
+following
+JSON-LD
+input
+document:
+</p>
+<div class="example"><div class="example-title"><span>Example 15</span></div><pre class="example">{
+ "http://xmlns.com/foaf/0.1/name": "Manu Sporny",
+ "http://xmlns.com/foaf/0.1/homepage": {
+ "@id": "http://manu.sporny.org/"
+ }
+}
+</pre>
+</div>
+<p>
+Additionally,
+assume
+the
+following
+developer-supplied
+JSON-LD
+context:
+</p>
+<div class="example"><div class="example-title"><span>Example 16</span></div><pre class="example">{
+ "@context": {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "homepage": {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ }
+}
+</pre>
+</div>
+<p>
+Running
+the
+JSON-LD
+Compaction
+algorithm
+given
+the
+context
+supplied
+above
+against
+the
+JSON-LD
+input
+document
+provided
+above
+would
+result
+in
+the
+following
+output:
+</p>
+<div class="example"><div class="example-title"><span>Example 17</span></div><pre class="example">{
+ "@context": {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "homepage": {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ },
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}
+</pre>
+</div>
+<p>
+The
+compaction
+algorithm
+also
+enables
+the
+developer
+to
+map
+any
+expanded
+format
+into
+an
+application-specific
+compacted
+format.
+While
+the
+context
+provided
+above
+mapped
+<code>
+http://xmlns.com/foaf/0.1/name
+</code>
+to
+<strong>
+name
+</strong>,
+it
+could
+have
+also
+mapped
+it
+to
+any
+arbitrary
+string
+provided
+by
+the
+developer.
+</p>
+<section id="compaction-algorithm">
+<h4>
+<span class="secno">
+4.8.1
+</span>
+Compaction
+Algorithm
+</h4>
+<p>
+The
+algorithm
+takes
+three
+input
+variables:
+an
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>,
+an
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>,
+and
+an
+<em>
+element
+</em>
+to
+be
+compacted.
+To
+begin,
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+is
+set
+to
+the
+result
+of
+performing
+<a href="#context-processing">
+Context
+Processing
+</a>
+on
+the
+passed
+<em>
+context
+</em>,
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+is
+set
+to
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+and
+<em>
+element
+</em>
+is
+set
+to
+the
+result
+of
+performing
+the
+<a href="#expansion-algorithm">
+Expansion
+Algorithm
+</a>
+on
+the
+<a class="tref internalDFN" title="json-ld_input" href="#dfn-json-ld_input">
+JSON-LD
+input
+</a>.
+This
+removes
+any
+existing
+context
+to
+allow
+the
+given
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+to
+be
+cleanly
+applied.
+</p>
+<ol class="algorithm">
+<li>
+If
+<em>
+element
+</em>
+is
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>,
+process
+each
+entry
+in
+<em>
+element
+</em>
+recursively
+using
+this
+algorithm,
+passing
+a
+copy
+of
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+and
+the
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>.
+If
+<em>
+element
+</em>
+has
+a
+single
+<del class="diff-old">item,
+</del>
+<ins class="diff-chg">item
+and
+the
+</ins><code class="idlMemberName"><a href="#widl-JsonLdOptions-compactArrays"><ins class="diff-chg">
+compactArrays
+</ins></a></code><ins class="diff-chg">
+option
+is
+set
+to
+</ins><code><ins class="diff-chg">
+true
+</ins></code>,
+the
+compacted
+value
+is
+that
+item;
+otherwise
+the
+compacted
+value
+is
+<em>
+element
+</em>.
+</li>
+<li>
+Otherwise,
+if
+<em>
+element
+</em>
+is
+an
+object:
+<ol class="algorithm">
+<li>
+If
+<em>
+element
+</em>
+has
+an
+<code>
+@value
+</code>
+property
+or
+element
+is
+a
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">
+<ins class="diff-chg">node
+</ins>
+reference
+</a>,
+return
+the
+result
+of
+performing
+<a href="#value-compaction">
+Value
+Compaction
+</a>
+on
+<em>
+element
+</em>
+using
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>.
+</li>
+<li>
+Otherwise,
+if
+the
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+has
+a
+<code>
+@container
+</code>
+mapping
+to
+<code>
+@list
+</code>
+and
+<em>
+element
+</em>
+has
+a
+corresponding
+<code>
+@list
+</code>
+property,
+recursively
+compact
+that
+property's
+value
+passing
+a
+copy
+of
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+and
+the
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+ensuring
+that
+the
+result
+is
+an
+array
+<del class="diff-old">and
+removing
+</del>
+<ins class="diff-chg">with
+all
+</ins>
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>
+<del class="diff-old">values.
+Return
+either
+the
+result
+as
+an
+array,
+as
+an
+object
+with
+</del>
+<ins class="diff-chg">values
+removed.
+If
+there
+already
+exists
+</ins>
+a
+<del class="diff-old">key
+</del>
+<ins class="diff-chg">value
+for
+</ins><a class="tref internalDFN" title="active_property" href="#dfn-active_property"><ins class="diff-chg">
+active
+property
+</ins></a><ins class="diff-chg">
+in
+</ins><em><ins class="diff-chg">
+element
+</ins></em><ins class="diff-chg">
+and
+the
+full
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr>
+of
+<em>
+<ins class="diff-new">property
+</ins></em><ins class="diff-new">
+is
+also
+coerced
+to
+</ins>
+<code>
+@list
+<del class="diff-old">(or
+appropriate
+alias
+from
+</del>
+</code>,
+<ins class="diff-chg">throw
+an
+exception.
+Otherwise
+store
+the
+resulting
+array
+as
+value
+of
+</ins><a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+<del class="diff-old">context
+</del>
+<ins class="diff-chg">property
+</ins>
+</a>
+<del class="diff-old">).
+</del>
+<ins class="diff-chg">if
+empty
+or
+</ins><em><ins class="diff-chg">
+property
+</ins></em><ins class="diff-chg">
+otherwise.
+</ins>
+</li>
+<li>
+Otherwise,
+construct
+<em>
+output
+</em>
+as
+a
+new
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+used
+for
+returning
+the
+result
+of
+compacting
+<em>
+element
+</em>.
+For
+each
+<em>
+property
+</em>
+and
+<em>
+value
+</em>
+in
+<em>
+element:
+</em>
+<ol class="algorithm">
+<li>
+If
+<em>
+property
+</em>
+is
+<code>
+@id
+</code>
+or
+<code>
+@type
+</code>
+<ol class="algorithm">
+<li>
+Set
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+to
+the
+result
+of
+performing
+<a href="#iri-compaction">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+</a>
+on
+<em>
+property
+</em>.
+</li>
+<li>
+If
+<em>
+value
+</em>
+is
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>,
+the
+compacted
+<em>
+value
+</em>
+is
+the
+result
+of
+performing
+<a href="#iri-compaction">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+</a>
+on
+<em>
+value
+</em>.
+</li>
+<li>
+Otherwise,
+<em>
+value
+</em>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>.
+Perform
+<a href="#iri-compaction">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+</a>
+on
+every
+entry
+of
+<em>
+value
+</em>.
+If
+<em>
+value
+</em>
+contains
+just
+one
+<del class="diff-old">entry,
+</del>
+<ins class="diff-chg">entry
+and
+the
+</ins><code class="idlMemberName"><a href="#widl-JsonLdOptions-compactArrays"><ins class="diff-chg">
+compactArrays
+</ins></a></code><ins class="diff-chg">
+option
+is
+set
+to
+</ins><code><ins class="diff-chg">
+true
+</ins></code>,
+<em>
+value
+</em>
+is
+set
+to
+that
+entry.
+</li>
+<li>
+Add
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+and
+the
+<del class="diff-old">expanded
+</del>
+<ins class="diff-chg">compacted
+</ins>
+<em>
+value
+</em>
+to
+<em>
+output
+</em>.
+</li>
+</ol>
+</li>
+<li>
+Otherwise,
+<em>
+value
+</em>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>.
+</li>
+<li>
+If
+<em>
+value
+</em>
+is
+empty:
+<ol class="algorithm">
+<li>
+Set
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+to
+the
+result
+of
+performing
+<a href="#iri-compaction">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+</a>
+on
+<em>
+property
+</em>.
+</li>
+<li>
+Create
+an
+entry
+in
+<em>
+output
+</em>
+for
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+and
+<em>
+value
+</em>.
+</li>
+</ol>
+</li>
+<li>
+For
+each
+<em>
+item
+</em>
+in
+<em>
+value
+</em>:
+<ol class="algorithm">
+<li>
+Set
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+to
+the
+result
+of
+performing
+<a href="#iri-compaction">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Compaction
+</a>
+for
+<em>
+property
+</em>
+and
+<em>
+item
+</em>
+using
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>.
+</li>
+<li>
+Compact
+<em>
+item
+</em>
+by
+recursively
+performing
+this
+algorithm
+passing
+a
+copy
+of
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+and
+the
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>.
+</li>
+<li>
+If
+an
+entry
+already
+exists
+in
+<em>
+output
+</em>
+for
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>,
+convert
+it
+to
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+if
+necessary,
+and
+append
+the
+compacted
+<em>
+value
+</em>.
+</li>
+<li>
+Otherwise,
+if
+the
+compacted
+<em>
+value
+</em>
+is
+not
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+and
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+has
+a
+<code>
+@container
+</code>
+mapping
+to
+<code>
+@set
+<del class="diff-old">,
+create
+an
+entry
+in
+output
+for
+active
+property
+</del>
+</code>
+<ins class="diff-chg">or
+if
+the
+</ins><code class="idlMemberName"><a href="#widl-JsonLdOptions-compactArrays"><ins class="diff-chg">
+compactArrays
+</ins>
+</a>
+<del class="diff-old">and
+</del>
+</code>
+<ins class="diff-chg">option
+is
+set
+to
+</ins><code><ins class="diff-chg">
+false
+</ins></code>,<ins class="diff-chg">
+convert
+</ins>
+<em>
+value
+</em>
+<del class="diff-old">as
+</del>
+<ins class="diff-chg">to
+</ins>
+an
+<del class="diff-old">array
+.
+</del>
+<ins class="diff-chg">array.
+</ins>
+</li>
+<li>
+<del class="diff-old">Otherwise,
+create
+</del>
+<ins class="diff-chg">Create
+</ins>
+an
+entry
+in
+<em>
+output
+</em>
+for
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+and
+<em>
+value
+</em>.
+</li>
+</ol>
+</li>
+</ol>
+</li>
+</ol>
+</li>
+<li>
+Otherwise,
+return
+<em>
+element
+</em>
+as
+the
+compacted
+<em>
+element
+</em>.
+<div class="issue">
+<div class="issue-title">
+<span>
+Issue
+<del class="diff-old">7
+</del>
+</span>
+</div>
+<div class="">
+Perhaps
+this
+should
+also
+call
+<a href="#value-compaction">
+Value
+Compaction
+</a>
+on
+native
+types
+and
+strings,
+which
+could
+consolidate
+potential
+transformation
+in
+one
+place.
+</div>
+</div>
+</li>
+</ol>
+<p>
+If,
+after
+the
+algorithm
+outlined
+above
+is
+run,
+the
+resulting
+<em>
+element
+</em>
+is
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>,
+put
+<em>
+element
+</em>
+into
+the
+<code>
+@graph
+</code>
+property
+of
+a
+new
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+and
+then
+set
+<em>
+element
+</em>
+to
+that
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>.
+Finally,
+add
+a
+<code>
+@context
+</code>
+property
+to
+<em>
+element
+</em>
+and
+set
+it
+to
+the
+initially
+passed
+<em>
+context
+</em>.
+</p>
+</section>
+</section>
+<section id="flattening">
+<h3>
+<span class="secno">
+<ins class="diff-new">4.9
+</ins></span><ins class="diff-new">
+Flattening
+</ins></h3><p><ins class="diff-new">
+Flattening
+is
+the
+process
+of
+taking
+a
+JSON-LD
+document,
+</ins><a href="#expansion"><ins class="diff-new">
+expanding
+</ins></a><ins class="diff-new">
+it,
+labeling
+all
+unlabeled
+nodes
+with
+a
+</ins><a class="tref internalDFN" title="blank_node" href="#dfn-blank_node"><ins class="diff-new">
+blank
+node
+</ins></a><ins class="diff-new">
+identifier,
+and
+returning
+an
+array
+of
+the
+</ins><a class="tref internalDFN" title="node" href="#dfn-node"><ins class="diff-new">
+nodes
+</ins></a><ins class="diff-new">
+defined
+in
+the
+document.
+</ins></p><div class="issue"><div class="issue-title"><span><ins class="diff-new">
+Issue
+</ins></span></div><p class=""><ins class="diff-new">
+It
+is
+still
+being
+discussed
+if
+the
+flatten()
+method
+should
+be
+added
+or
+not.
+See
+</ins><a href="https://github.com/json-ld/json-ld.org/issues/109"><ins class="diff-new">
+ISSUE-109
+</ins></a>.</p>
+</div>
+<p>
+<ins class="diff-new">For
+example,
+assume
+the
+following
+JSON-LD
+input
+document:
+</ins></p><div class="example"><div class="example-title"><span>Example 18</span></div><pre class="example">{<ins class="diff-new">
+ "@context": {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "knows": "http://xmlns.com/foaf/0.1/knows"
+ },
+ "@id": "http://example.com/markus",
+ "name": "Markus Lanthaler",
+ "knows": {
+ "name": "Manu Sporny"
+ }
+}
+</ins></pre>
+</div>
+<p>
+<ins class="diff-chg">Running
+the
+JSON-LD
+Flattening
+algorithm
+for
+the
+merged
+graph
+(
+</ins><code><ins class="diff-chg">
+@merged
+</ins></code><ins class="diff-chg">
+)
+against
+the
+JSON-LD
+input
+document
+provided
+above
+would
+result
+in
+the
+following
+output:
+</ins></p><div class="example"><div class="example-title"><span>Example 19</span></div><pre class="example">[<ins class="diff-chg">
+ {
+ "@id": "http://example.com/markus",
+ "http://xmlns.com/foaf/0.1/knows": [ { "@id": "_:t0" } ],
+ "http://xmlns.com/foaf/0.1/name": [ { "@value": "Markus Lanthaler" } ]
+ },
+ {
+ "@id": "_:t0",
+ "http://xmlns.com/foaf/0.1/name": [ { "@value": "Manu Sporny" } ]
+ }
+]
+</ins></pre></div><section id="flattening-algorithm"><h4><span class="secno"><ins class="diff-chg">
+4.9.1
+</ins></span><ins class="diff-chg">
+Flattening
+Algorithm
+</ins></h4><p><ins class="diff-chg">
+The
+algorithm
+takes
+two
+input
+variables,
+an
+</ins><em><ins class="diff-chg">
+element
+</ins></em><ins class="diff-chg">
+to
+flatten
+and
+the
+</ins><em><ins class="diff-chg">
+graph
+</ins></em><ins class="diff-chg">
+for
+which
+the
+</ins><a class="tref internalDFN" title="node" href="#dfn-node"><ins class="diff-chg">
+node
+</ins></a><ins class="diff-chg">
+definitions
+should
+be
+returned.
+If
+</ins><em><ins class="diff-chg">
+graph
+</ins></em><ins class="diff-chg">
+is
+not
+set,
+it
+will
+default
+to
+</ins><code><ins class="diff-chg">
+@merged
+</ins></code><ins class="diff-chg">
+which
+represents
+the
+result
+of
+merging
+all
+graphs
+including
+the
+default
+graph
+(
+</ins><code><ins class="diff-chg">
+@default
+</ins></code><ins class="diff-chg">
+).
+</ins></p><ol class="algorithm"><li><ins class="diff-chg">
+Expand
+</ins><em><ins class="diff-chg">
+element
+</ins></em><ins class="diff-chg">
+according
+the
+</ins><a href="#expansion-algorithm"><ins class="diff-chg">
+Expansion
+Algorithm
+</ins></a>.</li><li><ins class="diff-chg">
+Generate
+a
+</ins><em><ins class="diff-chg">
+nodeMap
+</ins></em><ins class="diff-chg">
+according
+the
+</ins><a href="#node-map-generation"><ins class="diff-chg">
+Node
+Map
+Generation
+Algorithm
+</ins></a>.</li><li><ins class="diff-chg">
+Initialize
+an
+empty
+array
+</ins><em><ins class="diff-chg">
+result
+</ins></em>.</li><li><ins class="diff-chg">
+If
+</ins><em><ins class="diff-chg">
+nodeMap
+</ins></em><ins class="diff-chg">
+has
+no
+property
+</ins><em><ins class="diff-chg">
+graph
+</ins></em>,<ins class="diff-chg">
+return
+</ins><em><ins class="diff-chg">
+result
+</ins></em>,<ins class="diff-chg">
+otherwise
+set
+</ins><em><ins class="diff-chg">
+definitions
+</ins></em><ins class="diff-chg">
+to
+its
+value.
+</ins></li><li><ins class="diff-chg">
+Foreach
+</ins><em><ins class="diff-chg">
+property
+</ins></em><ins class="diff-chg">
+and
+</ins><em><ins class="diff-chg">
+value
+</ins></em><ins class="diff-chg">
+of
+of
+</ins><em><ins class="diff-chg">
+definitions
+</ins></em>:<ol class="algorithm"><li><ins class="diff-chg">
+Add
+</ins><em><ins class="diff-chg">
+value
+</ins></em><ins class="diff-chg">
+to
+</ins><em><ins class="diff-chg">
+result
+</ins></em>.</li></ol></li><li><ins class="diff-chg">
+Return
+</ins><em><ins class="diff-chg">
+result
+</ins></em>.</li></ol></section><section id="node-map-generation"><h4><span class="secno"><ins class="diff-chg">
+4.9.2
+</ins></span><ins class="diff-chg">
+Node
+Map
+Generation
+</ins></h4><p><ins class="diff-chg">
+The
+Node
+Map
+Generation
+algorithm
+takes
+as
+input
+an
+expanded
+JSON-LD
+document
+and
+results
+in
+a
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><em><ins class="diff-chg">
+nodeMap
+</ins></em><ins class="diff-chg">
+holding
+a
+flat
+representation
+of
+the
+graphs
+and
+</ins><a class="tref internalDFN" title="node" href="#dfn-node"><ins class="diff-chg">
+nodes
+</ins></a><ins class="diff-chg">
+represented
+in
+the
+document.
+All
+</ins><a class="tref internalDFN" title="node" href="#dfn-node"><ins class="diff-chg">
+nodes
+</ins></a><ins class="diff-chg">
+that
+are
+not
+uniquely
+identified
+by
+an
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr><ins class="diff-chg">
+get
+assigned
+a
+(new)
+</ins><a class="tref internalDFN" title="blank_node" href="#dfn-blank_node"><ins class="diff-chg">
+blank
+node
+</ins></a><ins class="diff-chg">
+identifier.
+The
+resulting
+</ins><em><ins class="diff-chg">
+nodeMap
+</ins></em><ins class="diff-chg">
+document
+will
+have
+a
+property
+for
+every
+graph
+in
+the
+document
+whose
+value
+is
+another
+object
+with
+a
+property
+for
+every
+</ins><a class="tref internalDFN" title="node" href="#dfn-node"><ins class="diff-chg">
+node
+</ins></a><ins class="diff-chg">
+represented
+in
+the
+document.
+While
+the
+default
+graph
+is
+stored
+under
+the
+</ins><code><ins class="diff-chg">
+@default
+</ins></code><ins class="diff-chg">
+property
+and
+the
+merged
+graph
+under
+the
+</ins><code><ins class="diff-chg">
+@merged
+</ins></code><ins class="diff-chg">
+property,
+all
+other
+graphs
+are
+stored
+under
+their
+respective
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><ins class="diff-chg">
+IRIs
+</ins></a>.</p><p><ins class="diff-chg">
+The
+algorithm
+takes
+as
+input
+the
+expanded
+JSON-LD
+document
+as
+</ins><em><ins class="diff-chg">
+element
+</ins></em>,<ins class="diff-chg">
+the
+initially
+empty
+</ins><em><ins class="diff-chg">
+nodeMap
+</ins></em>,<code><ins class="diff-chg">
+@default
+</ins></code><ins class="diff-chg">
+as
+</ins><em><ins class="diff-chg">
+graph
+</ins></em>,<ins class="diff-chg">
+and
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a><ins class="diff-chg">
+as
+</ins><em><ins class="diff-chg">
+list
+</ins></em>.</p><ol class="algorithm"><li><ins class="diff-chg">
+If
+</ins><em><ins class="diff-chg">
+element
+</ins></em><ins class="diff-chg">
+is
+an
+array,
+process
+each
+entry
+in
+</ins><em><ins class="diff-chg">
+element
+</ins></em><ins class="diff-chg">
+recursively,
+using
+this
+algorithm
+and
+return.
+</ins></li><li><ins class="diff-chg">
+If
+</ins><em><ins class="diff-chg">
+element
+</ins></em><ins class="diff-chg">
+is
+not
+a
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><ins class="diff-chg">
+or
+if
+it
+has
+a
+</ins><code><ins class="diff-chg">
+@value
+</ins></code><ins class="diff-chg">
+property,
+then
+if
+</ins><em><ins class="diff-chg">
+list
+</ins></em><ins class="diff-chg">
+is
+not
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a>,<ins class="diff-chg">
+append
+</ins><em><ins class="diff-chg">
+element
+</ins></em><ins class="diff-chg">
+to
+</ins><em><ins class="diff-chg">
+list
+</ins></em><ins class="diff-chg">
+and
+return.
+</ins></li><li><ins class="diff-chg">
+If
+the
+</ins><code><ins class="diff-chg">
+@id
+</ins></code><ins class="diff-chg">
+property
+exists
+and
+is
+an
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr></a>,<ins class="diff-chg">
+set
+</ins><em><ins class="diff-chg">
+id
+</ins></em><ins class="diff-chg">
+to
+its
+value,
+otherwise
+set
+it
+to
+a
+</ins><a class="tref internalDFN" title="blank_node" href="#dfn-blank_node"><ins class="diff-chg">
+blank
+node
+</ins></a><ins class="diff-chg">
+identifier
+created
+by
+the
+</ins><a href="#generate-blank-node-identifier"><ins class="diff-chg">
+Generate
+Blank
+Node
+Identifier
+</ins></a><ins class="diff-chg">
+algorithm.
+</ins></li><li><ins class="diff-chg">
+If
+</ins><em><ins class="diff-chg">
+list
+</ins></em><ins class="diff-chg">
+is
+not
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a>,<ins class="diff-chg">
+append
+a
+new
+</ins><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference"><ins class="diff-chg">
+node
+reference
+</ins></a><ins class="diff-chg">
+to
+</ins><em><ins class="diff-chg">
+list
+</ins></em><ins class="diff-chg">
+using
+</ins><em><ins class="diff-chg">
+id
+</ins></em><ins class="diff-chg">
+at
+the
+value
+for
+</ins><code><ins class="diff-chg">
+@id
+</ins></code>.</li><li><ins class="diff-chg">
+Let
+</ins><em><ins class="diff-chg">
+nodes
+</ins></em><ins class="diff-chg">
+be
+the
+value
+in
+</ins><em><ins class="diff-chg">
+nodeMap
+</ins></em><ins class="diff-chg">
+where
+the
+key
+is
+</ins><em><ins class="diff-chg">
+graph
+</ins></em><ins class="diff-chg">
+;
+if
+no
+such
+value
+exists,
+insert
+a
+new
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><ins class="diff-chg">
+for
+the
+key
+</ins><em><ins class="diff-chg">
+graph
+</ins></em>.<ins class="diff-chg">
+If
+</ins><em><ins class="diff-chg">
+id
+</ins></em><ins class="diff-chg">
+is
+not
+in
+</ins><em><ins class="diff-chg">
+nodes
+</ins></em>,<ins class="diff-chg">
+create
+a
+new
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><em><ins class="diff-chg">
+node
+</ins></em><ins class="diff-chg">
+with
+</ins><em><ins class="diff-chg">
+id
+</ins></em><ins class="diff-chg">
+as
+the
+value
+for
+</ins><code><ins class="diff-chg">
+@id
+</ins></code>.<ins class="diff-chg">
+Let
+</ins><em><ins class="diff-chg">
+node
+</ins></em><ins class="diff-chg">
+be
+the
+value
+of
+</ins><em><ins class="diff-chg">
+id
+</ins></em><ins class="diff-chg">
+in
+</ins><em><ins class="diff-chg">
+nodes
+</ins></em>.</li><li><ins class="diff-chg">
+For
+each
+</ins><em><ins class="diff-chg">
+property
+</ins></em><ins class="diff-chg">
+that
+is
+not
+</ins><code><ins class="diff-chg">
+@id
+</ins></code><ins class="diff-chg">
+and
+each
+</ins><em><ins class="diff-chg">
+value
+</ins></em><ins class="diff-chg">
+in
+</ins><em><ins class="diff-chg">
+element
+</ins></em><ins class="diff-chg">
+ordered
+by
+</ins><em><ins class="diff-chg">
+property
+</ins></em>:<ol class="algorithm"><li><ins class="diff-chg">
+If
+</ins><em><ins class="diff-chg">
+property
+</ins></em><ins class="diff-chg">
+is
+</ins><code><ins class="diff-chg">
+@graph
+</ins></code>,<ins class="diff-chg">
+recursively
+call
+this
+algorithm
+passing
+</ins><em><ins class="diff-chg">
+value
+</ins></em><ins class="diff-chg">
+for
+</ins><em><ins class="diff-chg">
+element
+</ins></em>,<em><ins class="diff-chg">
+nodeMap
+</ins></em>,<a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a><ins class="diff-chg">
+for
+</ins><em><ins class="diff-chg">
+list
+</ins></em><ins class="diff-chg">
+and
+if
+</ins><em><ins class="diff-chg">
+graph
+</ins></em><ins class="diff-chg">
+is
+</ins><code><ins class="diff-chg">
+@merged
+</ins></code><ins class="diff-chg">
+use
+</ins><em><ins class="diff-chg">
+graph
+</ins></em>,<ins class="diff-chg">
+otherwise
+use
+</ins><em><ins class="diff-chg">
+id
+</ins></em><ins class="diff-chg">
+for
+</ins><em><ins class="diff-chg">
+graph
+</ins></em><ins class="diff-chg">
+and
+then
+continue.
+</ins></li><li><ins class="diff-chg">
+If
+</ins><em><ins class="diff-chg">
+property
+</ins></em><ins class="diff-chg">
+is
+not
+</ins><code><ins class="diff-chg">
+@type
+</ins></code><ins class="diff-chg">
+and
+is
+a
+keyword,
+merge
+</ins><code><ins class="diff-chg">
+property
+</ins></code><ins class="diff-chg">
+and
+</ins><code><ins class="diff-chg">
+value
+</ins></code><ins class="diff-chg">
+into
+</ins><code><ins class="diff-chg">
+node
+</ins></code><ins class="diff-chg">
+and
+then
+continue.
+</ins></li><li><ins class="diff-chg">
+For
+each
+value
+</ins><em><ins class="diff-chg">
+v
+</ins></em><ins class="diff-chg">
+in
+the
+array
+</ins><em><ins class="diff-chg">
+value
+</ins></em>:<ol class="algorithm"><li><ins class="diff-chg">
+If
+</ins><em><ins class="diff-chg">
+v
+</ins></em><ins class="diff-chg">
+is
+a
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-chg">
+node
+definition
+</ins></a><ins class="diff-chg">
+or
+</ins><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference"><ins class="diff-chg">
+node
+reference
+</ins></a>:<ol class="algorithm"><li><ins class="diff-chg">
+If
+the
+property
+</ins><code><ins class="diff-chg">
+@id
+</ins></code><ins class="diff-chg">
+is
+not
+an
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr></a><ins class="diff-chg">
+or
+it
+does
+not
+exist,
+map
+</ins><em><ins class="diff-chg">
+v
+</ins></em><ins class="diff-chg">
+to
+a
+</ins><a href="#generate-blank-node-identifier"><ins class="diff-chg">
+new
+blank
+node
+identifier
+</ins></a><ins class="diff-chg">
+to
+avoid
+collisions.
+If
+one
+does
+not
+already
+exist,
+add
+a
+</ins><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference"><ins class="diff-chg">
+node
+reference
+</ins></a><ins class="diff-chg">
+for
+</ins><em><ins class="diff-chg">
+v
+</ins></em><ins class="diff-chg">
+into
+</ins><em><ins class="diff-chg">
+node
+</ins></em><ins class="diff-chg">
+for
+</ins><em><ins class="diff-chg">
+property
+</ins></em>.</li><li><ins class="diff-chg">
+Recursively
+call
+this
+algorithm
+passing
+</ins><em><ins class="diff-chg">
+v
+</ins></em><ins class="diff-chg">
+for
+</ins><em><ins class="diff-chg">
+value
+</ins></em>,<em><ins class="diff-chg">
+nodeMap
+</ins></em>,<em><ins class="diff-chg">
+graph
+</ins></em>,<ins class="diff-chg">
+and
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a><ins class="diff-chg">
+for
+</ins><em><ins class="diff-chg">
+list
+</ins></em>.</li></ol></li><li><ins class="diff-chg">
+Otherwise
+if
+</ins><em><ins class="diff-chg">
+v
+</ins></em><ins class="diff-chg">
+has
+the
+property
+</ins><code><ins class="diff-chg">
+@list
+</ins></code><ins class="diff-chg">
+then
+recursively
+call
+this
+algorithm
+with
+the
+value
+of
+</ins><code><ins class="diff-chg">
+@list
+</ins></code><ins class="diff-chg">
+as
+</ins><em><ins class="diff-chg">
+element
+</ins></em>,<em><ins class="diff-chg">
+nodeMap
+</ins></em>,<em><ins class="diff-chg">
+graph
+</ins></em>,<ins class="diff-chg">
+and
+a
+new
+array
+</ins><em><ins class="diff-chg">
+flattenedList
+</ins></em><ins class="diff-chg">
+as
+</ins><em><ins class="diff-chg">
+list
+</ins></em>.<ins class="diff-chg">
+Create
+a
+new
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><ins class="diff-chg">
+with
+the
+property
+</ins><code><ins class="diff-chg">
+@list
+</ins></code><ins class="diff-chg">
+set
+to
+</ins><em><ins class="diff-chg">
+flattenedList
+</ins></em><ins class="diff-chg">
+and
+add
+it
+to
+</ins><em><ins class="diff-chg">
+node
+</ins></em><ins class="diff-chg">
+for
+</ins><em><ins class="diff-chg">
+property
+</ins></em>.</li><li><ins class="diff-chg">
+Otherwise,
+if
+</ins><em><ins class="diff-chg">
+property
+</ins></em><ins class="diff-chg">
+is
+</ins><code><ins class="diff-chg">
+@type
+</ins></code><ins class="diff-chg">
+and
+</ins><em><ins class="diff-chg">
+v
+</ins></em><ins class="diff-chg">
+is
+not
+an
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr></a>,<ins class="diff-chg">
+generate
+a
+</ins><a href="#generate-blank-node-identifier"><ins class="diff-chg">
+new
+blank
+node
+identifier
+</ins></a><ins class="diff-chg">
+and
+add
+it
+to
+</ins><em><ins class="diff-chg">
+node
+</ins></em><ins class="diff-chg">
+for
+</ins><em><ins class="diff-chg">
+property
+</ins></em>.</li><li><ins class="diff-chg">
+Otherwise,
+add
+</ins><em><ins class="diff-chg">
+v
+</ins></em><ins class="diff-chg">
+to
+</ins><em><ins class="diff-chg">
+node
+</ins></em><ins class="diff-chg">
+for
+</ins><em><ins class="diff-chg">
+property
+</ins></em>.</li></ol></li></ol></li></ol><p><ins class="diff-chg">
+After
+the
+above
+outlined
+algorithm
+has
+been
+executed,
+the
+node
+map
+for
+all
+graphs
+including
+the
+default
+graph
+are
+contained
+in
+</ins><em><ins class="diff-chg">
+nodeMap
+</ins></em>.<ins class="diff-chg">
+To
+also
+create
+the
+node
+map
+for
+the
+merged
+graph,
+execute
+the
+algorithm
+again,
+but
+pass
+</ins><code><ins class="diff-chg">
+@merged
+</ins></code><ins class="diff-chg">
+for
+</ins><em><ins class="diff-chg">
+graph
+</ins></em>.</p></section><section id="generate-blank-node-identifier"><h4><span class="secno"><ins class="diff-chg">
+4.9.3
+</ins></span><ins class="diff-chg">
+Generate
+Blank
+Node
+Identifier
+</ins></h4><p><ins class="diff-chg">
+This
+algorithm
+is
+used
+by
+the
+</ins><a href="#node-map-generation"><ins class="diff-chg">
+Node
+Map
+Generation
+Algorithm
+</ins></a><ins class="diff-chg">
+to
+deterministically
+name
+</ins><a class="tref internalDFN" title="blank_node" href="#dfn-blank_node"><ins class="diff-chg">
+blank
+node
+</ins></a><ins class="diff-chg">
+identifiers.
+It
+uses
+a
+</ins><em><ins class="diff-chg">
+identifier
+map
+</ins></em><ins class="diff-chg">
+and
+</ins><em><ins class="diff-chg">
+prefix
+</ins></em><ins class="diff-chg">
+and
+takes
+a
+possibly
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a><ins class="diff-chg">
+identifier
+and
+returns
+a
+new
+identifier
+based
+on
+</ins><em><ins class="diff-chg">
+prefix
+</ins></em>.</p><p><ins class="diff-chg">
+The
+variable
+</ins><em><ins class="diff-chg">
+next
+identifier
+</ins></em><ins class="diff-chg">
+is
+initialized
+to
+</ins><em><ins class="diff-chg">
+prefix
+</ins></em><ins class="diff-chg">
+appended
+with
+</ins><code><ins class="diff-chg">
+0
+</ins></code>.<ins class="diff-chg">
+The
+default
+value
+of
+</ins><em><ins class="diff-chg">
+prefix
+</ins></em><ins class="diff-chg">
+is
+</ins><code><ins class="diff-chg">
+_:t
+</ins></code>.</p><ol class="algorithm"><li><ins class="diff-chg">
+If
+the
+old
+identifier
+is
+not
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a><ins class="diff-chg">
+and
+is
+in
+the
+</ins><em><ins class="diff-chg">
+identifier
+map
+</ins></em>,<ins class="diff-chg">
+return
+the
+mapped
+identifier.
+</ins></li><li><ins class="diff-chg">
+Otherwise,
+if
+the
+old
+identifier
+is
+not
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a>,<ins class="diff-chg">
+create
+a
+new
+entry
+in
+</ins><em><ins class="diff-chg">
+identifier
+map
+</ins></em><ins class="diff-chg">
+initialized
+to
+the
+current
+value
+of
+</ins><em><ins class="diff-chg">
+next
+identifier
+</ins></em>.<ins class="diff-chg">
+Increment
+</ins><em><ins class="diff-chg">
+next
+identifier
+</ins></em><ins class="diff-chg">
+by
+adding
+one
+to
+the
+integer
+suffix.
+Return
+the
+mapped
+identifier.
+</ins></li><li><ins class="diff-chg">
+Otherwise,
+increment
+</ins><em><ins class="diff-chg">
+next
+identifier
+</ins></em><ins class="diff-chg">
+by
+adding
+one
+to
+the
+integer
+suffix
+and
+return
+its
+original
+value.
+</ins></li></ol></section></section><section id="rdf-conversion">
+<h3>
+<span class="secno">
+<del class="diff-old">4.9
+</del>
+<ins class="diff-chg">4.10
+</ins>
+</span>
+RDF
+Conversion
+</h3>
+<p>
+A
+JSON-LD
+document
+<em class="rfc2119" title="may">
+may
+</em>
+be
+converted
+between
+other
+RDF-compatible
+document
+formats
+using
+the
+algorithms
+specified
+in
+this
+section.
+</p>
+<p>
+The
+JSON-LD
+Processing
+Model
+describes
+processing
+rules
+for
+extracting
+RDF
+from
+a
+JSON-LD
+document,
+and
+for
+transforming
+an
+array
+of
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>
+retrieved
+by
+processing
+another
+serialization
+format
+into
+JSON-LD.
+Note
+that
+many
+uses
+of
+JSON-LD
+may
+not
+require
+generation
+of
+RDF.
+</p>
+<p>
+The
+processing
+algorithms
+described
+in
+this
+section
+are
+provided
+in
+order
+to
+demonstrate
+how
+one
+might
+implement
+a
+JSON-LD
+to
+RDF
+processor.
+Conformant
+implementations
+are
+only
+required
+to
+produce
+the
+same
+type
+and
+number
+of
+quads
+during
+the
+output
+process
+and
+are
+not
+required
+to
+implement
+the
+algorithm
+exactly
+as
+described.
+</p>
+<section class="informative" id="overview">
+<h4>
+<span class="secno">
+<del class="diff-old">4.9.1
+</del>
+<ins class="diff-chg">4.10.1
+</ins>
+</span>
+Overview
+</h4>
+<p>
+<em>
+This
+section
+is
+non-normative.
+</em>
+</p>
+<p>
+JSON-LD
+is
+intended
+to
+have
+an
+easy
+to
+parse
+grammar
+that
+closely
+models
+existing
+practice
+in
+using
+JSON
+for
+describing
+object
+representations.
+This
+allows
+the
+use
+of
+existing
+libraries
+for
+parsing
+JSON.
+</p>
+<p>
+As
+with
+other
+grammars
+used
+for
+describing
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>,
+a
+key
+concept
+is
+that
+of
+a
+<a class="tref internalDFN" title="node" href="#dfn-node">
+node
+</a>
+in
+a
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>.
+Nodes
+may
+be
+of
+three
+basic
+types.
+The
+first
+is
+the
+<a class="datatype idlType" title="IRI" href="#idl-def-IRI">
+<code>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</code>
+</a>,
+which
+is
+used
+to
+refer
+to
+<a class="tref internalDFN" title="node" href="#dfn-node">
+node
+</a>
+s
+in
+other
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>
+s.
+The
+second
+is
+the
+<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">
+blank
+node
+</a>,
+which
+are
+nodes
+for
+which
+an
+external
+name
+does
+not
+exist,
+or
+is
+not
+known.
+The
+third
+is
+a
+<a class="tref internalDFN" title="literal" href="#dfn-literal">
+Literal
+</a>,
+which
+express
+values
+such
+as
+strings,
+dates
+and
+other
+information
+having
+a
+lexical
+form,
+possibly
+including
+an
+explicit
+language
+or
+datatype.
+</p>
+<p>
+Data
+described
+with
+JSON-LD
+may
+be
+considered
+to
+be
+a
+graph
+made
+up
+of
+<a class="tref internalDFN" title="subject" href="#dfn-subject">
+subject
+</a>
+and
+<a class="tref internalDFN" title="object" href="#dfn-object">
+object
+</a>
+<a class="tref internalDFN" title="node" href="#dfn-node">
+nodes
+</a>
+related
+via
+a
+<a class="tref internalDFN" title="property" href="#dfn-property">
+property
+</a>
+<a class="tref internalDFN" title="node" href="#dfn-node">
+node
+</a>.
+Specific
+implementations
+may
+also
+choose
+to
+operate
+on
+the
+document
+as
+a
+normal
+JSON
+description
+of
+objects
+having
+attributes.
+Both
+approaches
+are
+valid
+ways
+to
+interact
+with
+JSON-LD
+documents.
+</p>
+</section>
+<section class="informative" id="parsing-examples">
+<h4>
+<span class="secno">
+<del class="diff-old">4.9.2
+</del>
+<ins class="diff-chg">4.10.2
+</ins>
+</span>
+Parsing
+Examples
+</h4>
+<p>
+<em>
+This
+section
+is
+non-normative.
+</em>
+</p>
+<p>
+The
+following
+examples
+show
+simple
+transformations
+of
+JSON-LD
+documents
+to
+Turtle
+[
+<cite>
+<a class="bibref" href="#bib-TURTLE-TR">
+TURTLE-TR
+</a>
+</cite>
+].
+</p>
+<p>
+The
+first
+example
+uses
+a
+simple
+document
+containing
+a
+simple
+FOAF
+profile:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 20</span></div><pre class="example">{
+ "@context": {"foaf": "http://xmlns.com/foaf/0.1/"},
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": "foaf:Person",
+ "foaf:name": "Gregg Kellogg",
+ "foaf:knows": {
+ "@type": "foaf:Person",
+ "foaf:name": "Manu Sporny"
+ }
+}
+</pre>
+</div>
+<p>
+This
+translates
+fairly
+directly
+to
+a
+similar
+Turtle
+document:
+</p>
+<del class="diff-old">@prefix foaf: <http://xmlns.com/foaf/0.1/>.
+</del>
+<div class="example"><div class="example-title"><span>Example 21</span></div><pre class="example">@prefix foaf: <http://xmlns.com/foaf/0.1/>.
+<http://greggkellogg.net/foaf#me> a foaf:Person;
+ foaf:name "Gregg Kellogg";
+foaf:knows
+[
+a
+foaf:Person;
+foaf:name
+"Manu
+Sporny"].
+</pre>
+</div>
+<p>
+The
+actual
+parsing
+steps
+first
+require
+that
+the
+JSON-LD
+document
+be
+expanded,
+to
+eliminate
+the
+<code>
+@context
+</code>:
+</p>
+<del class="diff-old">[{
+</del>
+<div class="example"><div class="example-title"><span>Example 22</span></div><pre class="example">[{
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": ["http://xmlns.com/foaf/0.1/Person"],
+ "http://xmlns.com/foaf/0.1/name": [{"@value": "Gregg Kellogg"}],
+ "http://xmlns.com/foaf/0.1/knows": [{
+ "@type": ["http://xmlns.com/foaf/0.1/Person"],
+ "http://xmlns.com/foaf/0.1/name": [{"@value": "Manu Sporny"}]
+ }]
+}]
+</pre>
+</div>
+<p>
+The
+process
+of
+translating
+this
+to
+RDF
+then
+operates
+over
+each
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>
+to
+find
+a
+subject,
+each
+<a class="tref internalDFN" title="property" href="#dfn-property">
+property
+</a>
+to
+find
+an
+<a class="tref internalDFN" title="rdf_predicate" href="#dfn-rdf_predicate">
+RDF
+predicate
+<del class="diff-old">,
+</del>
+</a>,
+and
+each
+value
+of
+that
+property
+to
+find
+an
+<a class="tref internalDFN" title="object" href="#dfn-object">
+object
+</a>.
+In
+this
+case,
+each
+property
+has
+just
+a
+single
+object:
+<code>
+foaf:name
+</code>
+identifies
+a
+<a class="tref internalDFN" title="literal" href="#dfn-literal">
+literal
+</a>,
+and
+<code>
+foaf:knows
+</code>
+identifies
+a
+second
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>
+similar
+to
+Turtle's
+<code>
+blankNodePropertyList
+</code>.
+</p>
+<p>
+After
+expansion,
+JSON-LD
+<a class="tref internalDFN" title="number" href="#dfn-number">
+numbers
+</a>,
+<a class="tref internalDFN" title="true" href="#dfn-true">
+booleans
+</a>,
+<del class="diff-old">typed-
+and
+language-tagged-
+</del>
+<a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">
+<ins class="diff-chg">typed
+</ins>
+literals
+</a>,
+<a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">
+<ins class="diff-new">language-tagged-strings
+</ins></a>,
+and
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+IRIs
+</a>
+become
+explicit,
+and
+can
+be
+directly
+transformed
+into
+their
+RDF
+representations.
+</p>
+<del class="diff-old">[{
+</del>
+<div class="example"><div class="example-title"><span>Example 23</span></div><pre class="example">[{
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": ["http://xmlns.com/foaf/0.1/Person"],
+ "http://xmlns.com/foaf/0.1/name": [{"@value": "Gregg Kellogg"}],
+ <span class="diff">"http://xmlns.com/foaf/0.1/currentProject": [{"@id": "http://json-ld.org/"}],
+ "http://xmlns.com/foaf/0.1/birthday": [{
+ "@value": "1957-02-27",
+ "@type": "http://www.w3.org/2001/XMLSchema#date"
+ }],</span>
+ "http://xmlns.com/foaf/0.1/knows": [{
+ "@type": ["http://xmlns.com/foaf/0.1/Person"],
+ "http://xmlns.com/foaf/0.1/name": [{"@value": "Manu Sporny"}]
+ }]
+}]
+</pre>
+</div>
+<p>
+Translates
+to:
+</p>
+<del class="diff-old">@prefix foaf: <http://xmlns.com/foaf/0.1/>.
+</del>
+<div class="example"><div class="example-title"><span>Example 24</span></div><pre class="example">@prefix foaf: <http://xmlns.com/foaf/0.1/>.
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
+<http://greggkellogg.net/foaf#me> a foaf:Person;
+ foaf:name "Gregg Kellogg";
+ <span class="diff">foaf:currentProject <http://json-ld.org/>;
+ foaf:birthday "1957-02-27"^^xsd:date;</span>
+foaf:knows
+[
+a
+foaf:Person;
+foaf:name
+"Manu
+Sporny"].
+</pre>
+</div>
+</section>
+<section id="convert-to-rdf-algorithm">
+<h4>
+<span class="secno">
+<del class="diff-old">4.9.3
+</del>
+<ins class="diff-chg">4.10.3
+</ins>
+</span>
+Convert
+to
+RDF
+Algorithm
+</h4>
+<p>
+The
+algorithm
+below
+is
+designed
+for
+in-memory
+implementations
+with
+random
+access
+to
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+elements.
+</p>
+<p>
+A
+conforming
+JSON-LD
+processor
+implementing
+RDF
+conversion
+<em class="rfc2119" title="must">
+must
+</em>
+implement
+a
+processing
+algorithm
+that
+results
+in
+the
+same
+set
+of
+RDF
+<a class="tref internalDFN" title="quad" href="#dfn-quad">
+Quads
+</a>
+that
+the
+following
+algorithm
+generates:
+</p>
+<p>
+The
+algorithm
+takes
+five
+input
+variables:
+a
+<em>
+element
+</em>
+to
+be
+converted,
+an
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>,
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+and
+<a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">
+graph
+name
+</a>.
+To
+begin,
+the
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>,
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+and
+<a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">
+graph
+name
+</a>
+are
+set
+to
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+and
+<em>
+element
+</em>
+is
+set
+to
+the
+result
+of
+performing
+the
+<a href="#expansion-algorithm">
+Expansion
+Algorithm
+</a>
+on
+the
+<a class="tref internalDFN" title="json-ld_input" href="#dfn-json-ld_input">
+JSON-LD
+input
+</a>.
+This
+removes
+any
+existing
+context
+to
+allow
+the
+given
+context
+to
+be
+cleanly
+applied.
+</p>
+<ol class="algorithm">
+<li id="processing-step-associative">
+If
+<em>
+element
+</em>
+is
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>,
+perform
+the
+following
+steps:
+<ol class="algorithm">
+<li>
+Set
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+to
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>.
+</li>
+<li>
+If
+<em>
+element
+</em>
+has
+a
+<code>
+@value
+</code>
+property:
+<ol class="algorithm">
+<li>
+If
+the
+value
+of
+<code>
+@value
+</code>
+is
+a
+<a class="tref internalDFN" title="number" href="#dfn-number">
+number
+</a>,
+set
+the
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+to
+a
+<a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">
+typed
+literal
+</a>
+using
+a
+string
+representation
+of
+the
+value
+as
+defined
+in
+the
+section
+<a href="#data-round-tripping">
+Data
+Round
+Tripping
+</a>.
+Set
+datatype
+to
+the
+value
+of
+the
+<code>
+@type
+</code>
+property
+if
+it
+exists,
+otherwise
+either
+<code>
+xsd:integer
+</code>
+or
+<code>
+xsd:double
+</code>,
+depending
+on
+if
+the
+value
+contains
+a
+fractional
+and/or
+an
+exponential
+component.
+<div class="issue">
+<div class="issue-title">
+<a href="https://github.com/json-ld/json-ld.org/issues/150">
+<span>
+<ins class="diff-new">Issue
+150
+</ins></span></a></div><p class=""><ins class="diff-new">
+It
+is
+being
+</ins><a href="https://github.com/json-ld/json-ld.org/issues/150"><ins class="diff-new">
+discussed
+</ins></a><ins class="diff-new">
+if
+the
+automatic
+mapping
+of
+JSON-native
+types
+to
+the
+XSD
+type
+system
+should
+be
+configurable
+or
+not.
+</ins></p></div>
+</li>
+<li>
+Otherwise,
+if
+the
+value
+of
+<code>
+@value
+</code>
+is
+<strong>
+true
+</strong>
+or
+<strong>
+false
+</strong>,
+set
+the
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+to
+a
+<a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">
+typed
+literal
+</a>
+created
+from
+the
+string
+representation
+of
+the
+value.
+Set
+datatype
+to
+the
+value
+of
+the
+<code>
+@type
+</code>
+property
+if
+it
+exists,
+otherwise
+<code>
+xsd:boolean
+</code>.
+</li>
+<li>
+Otherwise,
+if
+<em>
+element
+</em>
+contains
+a
+<code>
+@type
+</code>
+property,
+set
+the
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+to
+a
+<a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">
+typed
+literal
+</a>.
+</li>
+<li>
+Otherwise,
+if
+<em>
+element
+</em>
+contains
+a
+<code>
+@language
+</code>
+property,
+set
+the
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+to
+a
+<a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">
+language-tagged
+<del class="diff-old">literal
+</del>
+<ins class="diff-chg">string
+</ins>
+</a>.
+</li>
+<li>
+Otherwise,
+set
+the
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+to
+a
+<a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">
+typed
+literal
+</a>
+using
+<code>
+xsd:string
+</code>
+as
+the
+datatype.
+</li>
+</ol>
+</li>
+<li>
+If
+<em>
+element
+</em>
+has
+a
+<code>
+@list
+</code>
+property
+the
+value
+<em class="rfc2119" title="must">
+must
+</em>
+be
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>.
+Process
+its
+value
+as
+a
+list
+as
+described
+in
+<a href="#list-conversion">
+List
+Conversion
+</a>
+using
+the
+return
+value
+as
+the
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+</li>
+<li>
+If
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+is
+not
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>:
+<ol class="algorithm">
+<li>
+If
+neither
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>
+nor
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+are
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+generate
+a
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>
+representing
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>,
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>,
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>,
+and
+<a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">
+graph
+name
+</a>.
+</li>
+<li>
+Return
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>.
+</li>
+</ol>
+</li>
+<li id="processing-step-subject">
+If
+<em>
+element
+</em>
+has
+a
+<code>
+@id
+</code>
+property,
+the
+value
+<em class="rfc2119" title="must">
+must
+</em>
+be
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>,
+set
+the
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>
+to
+the
+previously
+expanded
+value
+(either
+a
+<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">
+blank
+node
+</a>
+or
+an
+<a class="datatype idlType" title="IRI" href="#idl-def-IRI">
+<code>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</code>
+</a>
+).
+</li>
+<li>
+Otherwise,
+if
+<em>
+element
+</em>
+does
+not
+have
+a
+<code>
+@id
+</code>
+property,
+set
+the
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>
+to
+newly
+generated
+<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">
+blank
+node
+</a>.
+</li>
+<li>
+Process
+each
+<em>
+property
+</em>
+and
+<em>
+value
+</em>
+in
+<em>
+element
+</em>,
+ordered
+by
+<em>
+property
+</em>,
+as
+follows:
+<ol class="algorithm">
+<li>
+If
+<em>
+property
+</em>
+is
+<code>
+@type
+</code>,
+set
+the
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+to
+<code>
+rdf:type
+</code>.
+</li>
+<li>
+Otherwise,
+if
+<em>
+property
+</em>
+is
+<code>
+@graph
+</code>,
+process
+<em>
+value
+</em>
+algorithm
+recursively,
+using
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>
+as
+<a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">
+graph
+name
+</a>
+and
+null
+values
+for
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>
+and
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+and
+then
+proceed
+to
+next
+property.
+</li>
+<li>
+Otherwise,
+if
+<em>
+property
+</em>
+is
+a
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>,
+skip
+this
+step.
+</li>
+<li>
+Otherwise,
+set
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+to
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+value
+of
+<em>
+property
+</em>.
+</li>
+<li>
+Process
+<em>
+value
+</em>
+recursively
+using
+this
+algorithm,
+passing
+copies
+of
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>,
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+and
+<a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">
+graph
+name
+</a>.
+</li>
+</ol>
+</li>
+<li>
+Set
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+to
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>.
+</li>
+</ol>
+</li>
+<li>
+Otherwise,
+if
+<em>
+element
+</em>
+is
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>,
+process
+each
+value
+in
+the
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+as
+follows,
+process
+<em>
+element
+</em>
+recursively
+using
+this
+algorithm,
+using
+copies
+of
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>,
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>,
+and
+<a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">
+graph
+name
+</a>.
+</li>
+<li>
+Otherwise,
+if
+<em>
+element
+</em>
+is
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>,
+then
+the
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+must
+be
+<code>
+rdf:type
+</code>
+so
+set
+the
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+to
+an
+<a class="datatype idlType" title="IRI" href="#idl-def-IRI">
+<code>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</code>
+</a>.
+</li>
+<li>
+If
+any
+of
+these
+steps
+created
+an
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+and
+neither
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>
+nor
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+are
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+generate
+a
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>
+using
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>,
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>,
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+and
+<a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">
+graph
+name
+</a>.
+</li>
+<li>
+Return
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>.
+</li>
+</ol>
+</section>
+<section id="list-conversion">
+<h4>
+<span class="secno">
+<del class="diff-old">4.9.4
+</del>
+<ins class="diff-chg">4.10.4
+</ins>
+</span>
+List
+Conversion
+</h4>
+<p>
+List
+Conversion
+is
+the
+process
+of
+taking
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+of
+values
+and
+adding
+them
+to
+a
+newly
+created
+<cite>
+<a href="http://www.w3.org/TR/rdf-schema/#ch_collectionvocab">
+RDF
+Collection
+</a>
+</cite>
+(see
+[
+<cite>
+<a class="bibref" href="#bib-RDF-SCHEMA">
+RDF-SCHEMA
+</a>
+</cite>
+])
+by
+linking
+each
+element
+of
+the
+list
+using
+<code>
+rdf:first
+</code>
+and
+<code>
+rdf:next
+</code>,
+terminating
+the
+list
+with
+<code>
+rdf:nil
+</code>
+using
+the
+following
+sequence:
+</p>
+<p>
+The
+algorithm
+is
+invoked
+with
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+<em>
+array
+</em>,
+the
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+and
+returns
+a
+value
+to
+be
+used
+as
+an
+<a class="tref internalDFN" title="active_object" href="#dfn-active_object">
+active
+object
+</a>
+in
+the
+calling
+location.
+</p>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<div class="">
+This
+algorithm
+does
+not
+support
+lists
+containing
+lists.
+</div>
+</div>
+<ol class="algorithm">
+<li>
+If
+<em>
+array
+</em>
+is
+empty
+return
+<code>
+rdf:nil
+</code>.
+</li>
+<li>
+Otherwise,
+generate
+a
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>
+using
+using
+the
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>,
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>
+and
+a
+newly
+generated
+<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">
+blank
+node
+</a>
+identified
+as
+<em>
+first
+<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">
+blank
+node
+</a>
+</em>.
+</li>
+<li>
+For
+each
+element
+in
+<em>
+array
+</em>
+other
+than
+the
+last
+element:
+<ol class="algorithm">
+<li>
+Create
+a
+processor
+state
+using
+<em>
+first
+blank
+node
+</em>
+as
+the
+<a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">
+active
+subject
+</a>,
+and
+<code>
+rdf:first
+</code>
+as
+the
+<a class="tref internalDFN" title="active_property" href="#dfn-active_property">
+active
+property
+</a>.
+<ol class="algorithm">
+<li>
+Process
+the
+value
+starting
+at
+<a href="#processing-step-associative">
+Step
+1
+</a>.
+</li>
+<li>
+Proceed
+using
+the
+previous
+<a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">
+processor
+state
+</a>.
+</li>
+</ol>
+</li>
+<li>
+Unless
+this
+is
+the
+last
+element
+in
+<em>
+array
+</em>,
+generate
+a
+new
+<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">
+blank
+node
+</a>
+identified
+as
+<em>
+rest
+blank
+node
+</em>,
+otherwise
+use
+<code>
+rdf:nil
+</code>.
+</li>
+<li>
+Generate
+a
+new
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>
+using
+<em>
+first
+blank
+node
+</em>,
+<code>
+rdf:rest
+</code>
+and
+<em>
+rest
+blank
+node
+</em>.
+</li>
+<li>
+Set
+<em>
+first
+blank
+node
+</em>
+to
+<em>
+rest
+blank
+node
+</em>.
+</li>
+<li>
+Return
+<em>
+first
+blank
+node
+</em>.
+</li>
+</ol>
+</li>
+</ol>
+</section>
+<section id="convert-from-rdf-algorithm">
+<h4>
+<span class="secno">
+<del class="diff-old">4.9.5
+</del>
+<ins class="diff-chg">4.10.5
+</ins>
+</span>
+Convert
+from
+RDF
+Algorithm
+</h4>
+<p>
+In
+some
+cases,
+data
+exists
+natively
+in
+Triples
+or
+Quads
+form;
+for
+example,
+if
+the
+data
+was
+originally
+represented
+in
+an
+RDF
+graph
+or
+triple/quad
+store.
+This
+algorithm
+is
+designed
+to
+simply
+translate
+an
+array
+of
+<a class="datatype idlType" title="Quad" href="#idl-def-Quad">
+<code>
+Quads
+</code>
+</a>
+into
+a
+JSON-LD
+document.
+</p>
+<p>
+When
+expanding
+<a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">
+typed
+literal
+</a>
+values
+having
+a
+datatype
+of
+<code>
+xsd:string
+</code>,
+the
+<code>
+@type
+</code>
+<em class="rfc2119" title="must not">
+must
+not
+</em>
+be
+set
+to
+<code>
+xsd:string
+</code>
+and
+the
+resulting
+value
+<em class="rfc2119" title="must">
+must
+</em>
+have
+only
+a
+<code>
+@value
+</code>
+property.
+</p>
+<p>
+The
+conversion
+algorithm
+takes
+a
+single
+parameter
+<em>
+input
+</em>
+in
+the
+form
+of
+an
+array
+of
+<a href="#idl-def-Quad" class="idlType">
+<code>
+Quad
+</code>
+</a>
+representations.
+</p>
+<ol class="algorithm">
+<li id="new_graph">
+Construct
+<em>
+defaultGraph
+</em>
+as
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+containing
+<em>
+<del class="diff-old">subjects
+</del>
+<ins class="diff-chg">nodes
+</ins>
+</em>
+and
+<em>
+listMap
+</em>,
+each
+an
+empty
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>.
+</li>
+<li>
+Construct
+<em>
+graphs
+</em>
+as
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+containing
+<em>
+defaultGraph
+</em>
+identified
+by
+an
+empty
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>.
+</li>
+<li>
+For
+each
+quad
+in
+<em>
+input
+</em>:
+<ol class="algorithm">
+<li>
+Set
+<em>
+graph
+</em>
+to
+the
+entry
+in
+<em>
+graphs
+</em>
+identified
+by
+<em>
+name
+</em>,
+initializing
+it
+to
+a
+new
+entry
+using
+the
+mechanism
+described
+in
+<a href="#new_graph">
+Step
+1
+</a>.
+</li>
+<li>
+If
+<em>
+property
+</em>
+is
+<code>
+rdf:first
+</code>,
+use
+the
+entry
+in
+<em>
+graph.listMap
+</em>
+indexed
+by
+<em>
+subject
+</em>,
+initializing
+it
+to
+a
+new
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+if
+nesessary.
+Represent
+<em>
+object
+</em>
+in
+expanded
+form,
+as
+described
+in
+<a href="#value-expansion">
+Value
+Expansion
+</a>.
+Add
+the
+resulting
+<em>
+object
+representation
+</em>
+to
+the
+entry
+indexed
+by
+<em>
+first
+</em>,
+and
+skip
+to
+the
+next
+quad.
+</li>
+<li>
+If
+<em>
+property
+</em>
+is
+<code>
+rdf:rest
+</code>:
+<ol class="algorithm">
+<li>
+If
+<em>
+object
+</em>
+is
+a
+<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">
+blank
+node
+</a>,
+use
+the
+entry
+in
+<em>
+graph.listMap
+</em>
+indexed
+by
+<em>
+subject
+</em>,
+initializing
+it
+to
+a
+new
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+if
+necessary.
+Add
+the
+<em>
+nominalValue
+</em>
+of
+<em>
+object
+</em>
+to
+the
+entry
+indexed
+by
+<em>
+rest
+</em>.
+</li>
+<li>
+Skip
+to
+the
+next
+quad.
+</li>
+</ol>
+</li>
+<li>
+If
+<em>
+name
+</em>
+is
+not
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>,
+and
+<em>
+<del class="diff-old">defaultGraph.subjects
+</del>
+<ins class="diff-chg">defaultGraph.nodes
+</ins>
+</em>
+does
+not
+contain
+an
+entry
+for
+<em>
+name
+</em>,
+create
+a
+new
+entry
+for
+<em>
+name
+</em>
+from
+a
+new
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+with
+key/value
+pair
+of
+<code>
+@id
+</code>
+and
+a
+string
+representation
+of
+<em>
+name
+</em>.
+</li>
+<li>
+Set
+<em>
+value
+</em>
+as
+the
+entry
+from
+<em>
+<del class="diff-old">graph.subjects
+</del>
+<ins class="diff-chg">graph.nodes
+</ins>
+</em>
+for
+<em>
+subject
+</em>,
+initializing
+it
+to
+a
+new
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+with
+key/value
+pair
+of
+<code>
+@id
+</code>
+and
+a
+string
+representation
+of
+<em>
+subject
+</em>
+if
+necessary.
+</li>
+<li>
+If
+<em>
+property
+</em>
+is
+<code>
+rdf:type
+</code>
+and
+the
+<del class="diff-old">notType
+</del>
+<code class="idlMemberName">
+<a href="#widl-JsonLdOptions-useRdfType">
+<ins class="diff-chg">useRdfType
+</ins></a></code>
+option
+is
+<del class="diff-old">present
+and
+</del>
+not
+<del class="diff-old">true
+</del>
+<ins class="diff-chg">present
+or
+</ins><a class="tref internalDFN" title="false" href="#dfn-false"><ins class="diff-chg">
+false
+</ins>
+</a>:
+<ol class="algorithm">
+<li>
+Append
+the
+string
+representation
+of
+<em>
+object
+</em>
+to
+the
+array
+value
+for
+the
+key
+<code>
+@type
+</code>,
+creating
+an
+entry
+in
+<em>
+value
+</em>
+if
+necessary.
+</li>
+</ol>
+</li>
+<li>
+<ins class="diff-new">If
+</ins><em><ins class="diff-new">
+object
+</ins></em><ins class="diff-new">
+is
+a
+</ins><a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal"><ins class="diff-new">
+typed
+literal
+</ins></a><ins class="diff-new">
+and
+the
+</ins><code class="idlMemberName"><a href="#widl-JsonLdOptions-useNativeTypes"><ins class="diff-new">
+useNativeTypes
+</ins></a></code><ins class="diff-new">
+option
+is
+set
+to
+</ins><a class="tref internalDFN" title="true" href="#dfn-true"><ins class="diff-new">
+true
+</ins></a>:<ol class="algorithm"><li><ins class="diff-new">
+Generate
+a
+</ins><em><ins class="diff-new">
+converted
+value
+</ins></em>:<ol class="algorithm"><li><ins class="diff-new">
+If
+the
+literal's
+type
+is
+</ins><code><ins class="diff-new">
+xsd:boolean
+</ins></code>,<ins class="diff-new">
+the
+</ins><em><ins class="diff-new">
+converted
+value
+</ins></em><ins class="diff-new">
+is
+</ins><a class="tref internalDFN" title="true" href="#dfn-true"><ins class="diff-new">
+true
+</ins></a><ins class="diff-new">
+if
+the
+literal
+matches
+the
+value
+</ins><code><ins class="diff-new">
+true
+</ins></code><ins class="diff-new">
+or
+</ins><a class="tref internalDFN" title="false" href="#dfn-false"><ins class="diff-new">
+false
+</ins></a><ins class="diff-new">
+if
+the
+literal
+matches
+the
+value
+</ins><code><ins class="diff-new">
+false
+</ins></code>.</li><li><ins class="diff-new">
+If
+the
+literal's
+type
+is
+</ins><code><ins class="diff-new">
+xsd:integer
+</ins></code><ins class="diff-new">
+or
+</ins><code><ins class="diff-new">
+xsd:double
+</ins></code>,<ins class="diff-new">
+try
+to
+convert
+the
+literal
+to
+a
+JSON
+</ins><a class="tref internalDFN" title="number" href="#dfn-number"><ins class="diff-new">
+number
+</ins></a>.<ins class="diff-new">
+If
+the
+conversion
+is
+successful,
+store
+the
+result
+in
+</ins><em><ins class="diff-new">
+converted
+value
+</ins></em>,<ins class="diff-new">
+otherwise
+set
+</ins><em><ins class="diff-new">
+converted
+value
+</ins></em><ins class="diff-new">
+to
+</ins><em><ins class="diff-new">
+value
+</ins></em>.</li><li><ins class="diff-new">
+Otherwise,
+do
+not
+perform
+a
+conversion.
+Set
+the
+</ins><em><ins class="diff-new">
+converted
+value
+</ins></em><ins class="diff-new">
+to
+the
+</ins><em><ins class="diff-new">
+value
+</ins></em>.</li></ol></li><li><ins class="diff-new">
+Append
+the
+</ins><em><ins class="diff-new">
+converted
+value
+</ins></em><ins class="diff-new">
+to
+the
+array
+value
+for
+the
+key,
+creating
+an
+entry
+in
+</ins><em><ins class="diff-new">
+value
+</ins></em><ins class="diff-new">
+if
+necessary.
+</ins></li></ol></li><li>
+Otherwise,
+if
+<em>
+object
+</em>
+is
+<code>
+rdf:nil
+</code>:
+<ol class="algorithm">
+<li>
+Let
+<em>
+key
+</em>
+be
+the
+string
+representation
+of
+<em>
+property
+</em>.
+</li>
+<li>
+Append
+an
+empty
+<code>
+@list
+</code>
+representation
+to
+the
+array
+value
+for
+<em>
+key
+</em>,
+creating
+an
+entry
+in
+<em>
+value
+</em>
+if
+necessary.
+</li>
+</ol>
+</li>
+<li>
+Otherwise,
+<ol class="algorithm">
+<li>
+Let
+<em>
+key
+</em>
+be
+the
+string
+representation
+of
+<em>
+property
+</em>
+and
+let
+<em>
+object
+representation
+</em>
+be
+<em>
+object
+</em>
+represented
+in
+expanded
+form
+as
+described
+in
+<a href="#value-expansion">
+Value
+Expansion
+</a>.
+</li>
+<li>
+If
+<em>
+object
+</em>
+is
+a
+<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">
+blank
+node
+</a>,
+use
+the
+entry
+in
+<em>
+graph.listMap
+</em>
+indexed
+by
+<em>
+object
+</em>,
+initializing
+it
+to
+a
+new
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+if
+nesessary.
+Add
+an
+entry
+for
+<em>
+head
+</em>
+with
+<em>
+object
+representation
+</em>.
+</li>
+<li>
+Append
+<em>
+object
+representation
+</em>
+to
+the
+array
+value
+for
+<em>
+key
+</em>,
+creating
+an
+entry
+in
+<em>
+value
+</em>
+if
+necessary.
+</li>
+</ol>
+</li>
+</ol>
+</li>
+<li>
+For
+each
+<em>
+name
+</em>
+and
+<em>
+graph
+</em>
+in
+<em>
+graphs
+</em>:
+<ol class="algorithm">
+<li>
+For
+each
+<em>
+subject
+</em>
+and
+<em>
+entry
+</em>
+in
+<em>
+graph
+</em>
+where
+<em>
+entry
+</em>
+has
+both
+<em>
+head
+</em>
+and
+<em>
+first
+</em>
+keys:
+<ol class="algorithm">
+<li>
+Set
+<em>
+value
+</em>
+to
+the
+value
+of
+<em>
+head
+</em>
+in
+<em>
+entry
+</em>.
+</li>
+<li>
+Remove
+the
+entry
+for
+<code>
+@id
+</code>
+in
+<em>
+value
+</em>.
+</li>
+<li>
+Add
+an
+entry
+to
+<em>
+value
+</em>
+for
+<code>
+@list
+</code>
+initialized
+to
+a
+new
+array
+containing
+the
+value
+of
+<em>
+first
+</em>
+from
+<em>
+entry
+</em>.
+</li>
+<li>
+While
+<em>
+entry
+</em>
+has
+a
+key
+for
+<em>
+rest
+</em>:
+<ol class="algorithm">
+<li>
+Set
+<em>
+entry
+</em>
+to
+the
+value
+of
+<em>
+graph.listMap
+</em>
+for
+<em>
+entry.rest
+</em>.
+</li>
+<li>
+Add
+the
+value
+for
+<em>
+entry.first
+</em>
+to
+the
+list
+array.
+</li>
+</ol>
+</li>
+</ol>
+</li>
+</ol>
+</li>
+<li>
+Create
+<em>
+array
+</em>
+as
+an
+empty
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>.
+</li>
+<li>
+For
+each
+<em>
+subject
+</em>
+and
+<em>
+entry
+</em>
+in
+<em>
+<del class="diff-old">defaultGraph.subjects
+</del>
+<ins class="diff-chg">defaultGraph.nodes
+</ins>
+</em>
+ordered
+by
+<em>
+subject
+</em>:
+<ol class="algorithm">
+<li>
+Add
+<em>
+entry
+</em>
+to
+<em>
+array
+</em>.
+</li>
+<li>
+If
+<em>
+graphs
+</em>
+has
+an
+entry
+for
+<em>
+subject
+</em>,
+add
+a
+property
+<code>
+@graph
+</code>
+in
+<em>
+entry
+</em>
+containing
+the
+ordered
+entries
+from
+<em>
+<del class="diff-old">graphs[subject].subjects
+</del>
+<ins class="diff-chg">graphs[subject].nodes
+</ins>
+</em>.
+</li>
+</ol>
+</li>
+<li>
+Return
+<em>
+array
+</em>
+as
+the
+result.
+</li>
+</ol>
+</section>
+</section>
+</section>
+<section id="data-round-tripping">
+<h2>
+<span class="secno">
+5.
+</span>
+Data
+Round
+Tripping
+</h2>
+<p>
+When
+<del class="diff-old">coercing
+</del>
+<a href="#rdf-conversion">
+<ins class="diff-chg">converting
+JSON-LD
+to
+RDF
+</ins></a><ins class="diff-chg">
+JSON-native
+types
+such
+as
+</ins><em>
+numbers
+</em>
+<ins class="diff-new">and
+</ins><em><ins class="diff-new">
+booleans
+</ins></em><ins class="diff-new">
+are
+automatically
+coerced
+</ins>
+to
+<strong>
+xsd:integer
+<del class="diff-old">or
+</del>
+</strong>,
+<strong>
+xsd:double
+<del class="diff-old">as
+it,
+e.g.,
+happens
+during
+RDF
+Conversion
+,
+implementers
+</del>
+</strong>,
+<ins class="diff-chg">or
+</ins><strong><ins class="diff-chg">
+xsd:boolean
+</ins></strong>.<ins class="diff-chg">
+Implementers
+</ins>
+<em class="rfc2119" title="must">
+must
+</em>
+ensure
+that
+the
+result
+is
+a
+canonical
+lexical
+form
+in
+the
+form
+of
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>.
+A
+<dfn title="canonical_lexical_form" id="dfn-canonical_lexical_form">
+canonical
+lexical
+form
+</dfn>
+is
+a
+set
+of
+literals
+from
+among
+the
+valid
+set
+of
+literals
+for
+a
+datatype
+such
+that
+there
+is
+a
+one-to-one
+mapping
+between
+the
+canonical
+lexical
+form
+and
+a
+value
+in
+the
+value
+space
+as
+defined
+in
+[
+<cite>
+<a class="bibref" href="#bib-XMLSCHEMA11-2">
+XMLSCHEMA11-2
+</a>
+</cite>
+<del class="diff-old">]].
+</del>
+<ins class="diff-chg">].
+</ins>
+In
+other
+words,
+every
+value
+<em class="rfc2119" title="must">
+must
+</em>
+be
+converted
+to
+a
+deterministic
+string
+representation.
+</p>
+<p>
+The
+canonical
+lexical
+form
+of
+an
+<em>
+integer
+</em>,
+i.e.,
+a
+number
+without
+fractions
+or
+a
+number
+coerced
+to
+<strong>
+xsd:integer
+</strong>,
+is
+a
+finite-length
+sequence
+of
+decimal
+digits
+(
+<code>
+0-9
+</code>
+)
+with
+an
+optional
+leading
+minus
+sign;
+leading
+zeroes
+are
+prohibited.
+To
+convert
+the
+number
+in
+JavaScript,
+implementers
+can
+use
+the
+following
+snippet
+of
+code:
+</p>
+<div class="example">
+<div class="example-title">
+<span>
+Example
+<del class="diff-old">23
+</del>
+<ins class="diff-chg">25
+</ins>
+</span>
+</div>
+<pre class="example">
+(value).toFixed(0).toString()
+</pre>
+</div>
+<p>
+The
+canonical
+lexical
+form
+of
+a
+<em>
+double
+</em>,
+i.e.,
+a
+number
+with
+fractions
+or
+a
+number
+coerced
+to
+<strong>
+xsd:double
+</strong>,
+consists
+of
+a
+mantissa
+followed
+by
+the
+character
+"E",
+followed
+by
+an
+exponent.
+The
+mantissa
+<em class="rfc2119" title="must">
+must
+</em>
+be
+a
+decimal
+number.
+The
+exponent
+<em class="rfc2119" title="must">
+must
+</em>
+be
+an
+integer.
+Leading
+zeroes
+and
+a
+preceding
+plus
+sign
+(
+<code>
++
+</code>
+)
+are
+prohibited
+in
+the
+exponent.
+If
+the
+exponent
+is
+zero,
+it
+must
+be
+indicated
+by
+<code>
+E0
+</code>.
+For
+the
+mantissa,
+the
+preceding
+optional
+plus
+sign
+is
+prohibited
+and
+the
+decimal
+point
+is
+required.
+Leading
+and
+trailing
+zeroes
+are
+prohibited
+subject
+to
+the
+following:
+number
+representations
+must
+be
+normalized
+such
+that
+there
+is
+a
+single
+digit
+which
+is
+non-zero
+to
+the
+left
+of
+the
+decimal
+point
+and
+at
+least
+a
+single
+digit
+to
+the
+right
+of
+the
+decimal
+point
+unless
+the
+value
+being
+represented
+is
+zero.
+The
+canonical
+representation
+for
+zero
+is
+<code>
+0.0E0
+</code>.
+<strong>
+<ins class="diff-new">xsd:double
+</ins></strong><ins class="diff-new">
+'s
+value
+space
+is
+defined
+by
+the
+IEEE
+double-precision
+64-bit
+floating
+point
+type
+[
+</ins><cite><a class="bibref" href="#bib-IEEE-754-1985"><ins class="diff-new">
+IEEE-754-1985
+</ins></a></cite><ins class="diff-new">
+];
+in
+JSON-LD
+the
+mantissa
+is
+rounded
+to
+15
+digits
+after
+the
+decimal
+point.
+</ins></p><p>
+To
+convert
+the
+number
+in
+JavaScript,
+implementers
+can
+use
+the
+following
+snippet
+of
+code:
+</p>
+<div class="example">
+<div class="example-title">
+<span>
+Example
+<del class="diff-old">24
+</del>
+<ins class="diff-chg">26
+</ins>
+</span>
+</div>
+<pre class="example">
+<del class="diff-old">(value).toExponential().replace(/e\+?/,'E')
+</del>
+<ins class="diff-chg">(value).toExponential(15).replace(/(\d)0*e\+?/,'$1E')
+</ins>
+</pre>
+</div>
+<del class="diff-old">xsd:double
+'s
+value
+space
+is
+defined
+by
+the
+IEEE
+double-precision
+64-bit
+floating
+point
+type
+[
+IEEE-754-1985
+].
+</del>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+When
+data
+such
+as
+decimals
+need
+to
+be
+normalized,
+JSON-LD
+authors
+should
+not
+use
+values
+that
+are
+going
+to
+undergo
+automatic
+conversion.
+This
+is
+due
+to
+the
+lossy
+nature
+of
+<strong>
+xsd:double
+</strong>
+values.
+Authors
+should
+instead
+use
+the
+expanded
+object
+form
+to
+set
+the
+canonical
+lexical
+form
+directly.
+</p>
+</div>
+<del class="diff-old">Note
+</del>
+<p>
+<ins class="diff-chg">The
+canonical
+lexical
+form
+of
+the
+</ins><em><ins class="diff-chg">
+boolean
+</ins></em><ins class="diff-chg">
+values
+</ins><code><ins class="diff-chg">
+true
+</ins></code><ins class="diff-chg">
+and
+</ins><code><ins class="diff-chg">
+false
+</ins></code><ins class="diff-chg">
+are
+the
+strings
+</ins><strong><ins class="diff-chg">
+true
+</ins></strong><ins class="diff-chg">
+and
+</ins><strong><ins class="diff-chg">
+false
+</ins></strong>.</p><p>
+When
+JSON-native
+<del class="diff-old">datatypes,
+like
+</del>
+<a class="tref internalDFN" title="number" href="#dfn-number">
+number
+</a>
+s,
+are
+type
+coerced,
+lossless
+data
+round-tripping
+can
+not
+be
+<del class="diff-old">guaranted.
+Consider
+the
+following
+code
+example:
+</del>
+<ins class="diff-chg">guaranted
+as
+rounding
+errors
+might
+occur.
+Additionally,
+only
+literals
+typed
+as
+</ins><strong><ins class="diff-chg">
+xsd:integer
+</ins></strong>,<strong><ins class="diff-chg">
+xsd:double
+</ins></strong>,<ins class="diff-chg">
+and
+</ins><strong><ins class="diff-chg">
+xsd:boolean
+</ins></strong><ins class="diff-chg">
+are
+automatically
+converted
+back
+to
+their
+JSON-native
+counterparts
+in
+when
+</ins><a href="#rdf-conversion"><ins class="diff-chg">
+converting
+from
+RDF
+</ins></a>.
+</p>
+<div class="issue">
+<del class="diff-old">var myObj1 = {
+ "@context": {
+ "number": {
+ "@id": "http://example.com/vocab#number",
+
+ }
+ },
+ "number" :
+ };
+</del>
+<div class="issue-title">
+<del class="diff-old">// Convert the JSON-LD document to RDF; this converts 42 to a string
+var jsonldText = jsonld.toRDF(myObj1, myRdfTripleCollector);
+</del>
+<a href="https://github.com/json-ld/json-ld.org/issues/150">
+<del class="diff-old">// Convert the RDF triples back to a JavaScript object
+var
+myObj2
+=
+jsonld.fromRDF(myRdfTripleCollector.getTriples());
+</del>
+<span>
+<ins class="diff-chg">Issue
+150
+</ins></span></a>
+</div>
+<del class="diff-old">At
+this
+point,
+myObj1
+and
+myObj2
+will
+have
+different
+values
+for
+the
+"number"
+property.
+myObj1
+will
+have
+</del>
+<p class="">
+<ins class="diff-chg">It
+is
+being
+</ins><a href="https://github.com/json-ld/json-ld.org/issues/150"><ins class="diff-chg">
+discussed
+</ins></a><ins class="diff-chg">
+if
+</ins>
+the
+<del class="diff-old">number
+42
+,
+while
+myObj2
+have
+an
+object
+consisting
+</del>
+<ins class="diff-chg">automatic
+mapping
+</ins>
+of
+<del class="diff-old">@value
+set
+to
+the
+string
+"42"
+and
+@type
+set
+</del>
+<ins class="diff-chg">JSON-native
+types
+</ins>
+to
+the
+<del class="diff-old">expanded
+value
+of
+xsd:nonNegativeInteger
+.
+</del>
+<ins class="diff-chg">XSD
+type
+system
+should
+be
+configurable
+or
+not.
+</ins>
+</p>
+</div>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+Some
+JSON
+serializers,
+such
+as
+PHP's
+native
+implementation
+in
+some
+versions,
+backslash-escape
+the
+forward
+slash
+character.
+For
+example,
+the
+value
+<code>
+http://example.com/
+</code>
+would
+be
+serialized
+as
+<code>
+http:\/\/example.com\/
+</code>.
+This
+is
+problematic
+as
+other
+JSON
+parsers
+might
+not
+understand
+those
+escaping
+characters.
+There
+is
+no
+need
+to
+backslash-escape
+forward
+slashes
+in
+JSON-LD.
+To
+aid
+interoperability
+between
+JSON-LD
+processors,
+a
+JSON-LD
+serializer
+<em class="rfc2119" title="must not">
+must
+not
+</em>
+backslash-escape
+forward
+slashes.
+</p>
+</div>
+</section>
+<section class="appendix" id="acknowledgements">
+<h2>
+<span class="secno">
+A.
+</span>
+<del class="diff-old">Initial
+Context
+</del>
+<ins class="diff-chg">Acknowledgements
+</ins>
+</h2>
+<del class="diff-old">Issue
+8
+It
+is
+still
+being
+discussed
+whether
+JSON-LD
+has
+the
+notion
+</del>
+<p>
+<ins class="diff-chg">A
+large
+amount
+</ins>
+of
+<del class="diff-old">an
+initial
+context
+or
+not.
+If
+JSON-LD
+has
+an
+initial
+context,
+it
+must
+be
+specified
+external
+</del>
+<ins class="diff-chg">thanks
+goes
+out
+</ins>
+to
+the
+JSON-LD
+<del class="diff-old">Syntax
+specification
+at
+a
+well-known
+location.
+B.
+Acknowledgements
+</del>
+<ins class="diff-chg">Community
+Group
+participants
+who
+worked
+through
+many
+of
+the
+technical
+issues
+on
+the
+mailing
+list
+and
+the
+weekly
+telecons
+-
+of
+special
+mention
+are
+Niklas
+Lindström,
+François
+Daoust,
+and
+Zdenko
+'Denny'
+Vrandečić.
+</ins>
+The
+editors
+would
+like
+to
+thank
+Mark
+Birbeck,
+who
+provided
+a
+great
+deal
+of
+the
+initial
+push
+behind
+the
+JSON-LD
+work
+via
+his
+work
+on
+<del class="diff-old">RDFj,
+</del>
+<ins class="diff-chg">RDFj.
+The
+work
+of
+</ins>
+Dave
+Lehn
+and
+Mike
+Johnson
+<del class="diff-old">who
+reviewed,
+provided
+feedback,
+</del>
+<ins class="diff-chg">are
+appreciated
+for
+reviewing,
+</ins>
+and
+<del class="diff-old">performed
+</del>
+<ins class="diff-chg">performing
+</ins>
+several
+implementations
+of
+the
+<del class="diff-old">specification,
+and
+</del>
+<ins class="diff-chg">specification.
+</ins>
+Ian
+<del class="diff-old">Davis,
+who
+created
+</del>
+<ins class="diff-chg">Davis
+is
+thanked
+for
+this
+work
+on
+</ins>
+RDF/JSON.
+Thanks
+also
+to
+Nathan
+Rixham,
+Bradley
+P.
+Allen,
+Kingsley
+Idehen,
+Glenn
+McDonald,
+Alexandre
+Passant,
+Danny
+Ayers,
+Ted
+Thibodeau
+Jr.,
+Olivier
+Grisel,
+Josh
+Mandel,
+Eric
+Prud'hommeaux,
+David
+Wood,
+Guus
+Schreiber,
+Pat
+Hayes,
+Sandro
+Hawke,
+and
+Richard
+Cyganiak
+for
+their
+input
+on
+the
+specification.
+</p>
+</section>
+<section id="references" class="appendix">
+<h2>
+<span class="secno">
+<del class="diff-old">C.
+</del>
+<ins class="diff-chg">B.
+</ins>
+</span>
+References
+</h2>
+<section id="normative-references">
+<h3>
+<span class="secno">
+<del class="diff-old">C.1
+</del>
+<ins class="diff-chg">B.1
+</ins>
+</span>
+Normative
+references
+</h3>
+<dl class="bibliography">
+<dt id="bib-BCP47">
+[BCP47]
+</dt>
+<dd>
+A.
+Phillips;
+M.
+Davis.
+<a href="http://tools.ietf.org/html/bcp47">
+<cite>
+Tags
+for
+Identifying
+Languages
+</cite>
+</a>
+September
+2009.
+IETF
+Best
+Current
+Practice.
+URL:
+<a href="http://tools.ietf.org/html/bcp47">
+http://tools.ietf.org/html/bcp47
+</a>
+</dd>
+<dt id="bib-IEEE-754-1985">
+[IEEE-754-1985]
+</dt>
+<dd>
+IEEE.
+<cite>
+IEEE
+Standard
+for
+Binary
+Floating-Point
+Arithmetic.
+</cite>
+See
+<a href="http://standards.ieee.org/reading/ieee/std_public/description/busarch/754-1985_desc.html">
+http://standards.ieee.org/reading/ieee/std_public/description/busarch/754-1985_desc.html
+</a>
+</dd>
+<dt id="bib-JSON-LD">
+[JSON-LD]
+</dt>
+<dd>
+<cite>
+<a href="http://json-ld.org/spec/ED/json-ld-syntax/20120522/">
+The
+JSON-LD
+Syntax
+</a>
+</cite>
+Manu
+Sporny,
+Gregg
+Kellogg,
+Markus
+Lanthaler
+Editors.
+World
+Wide
+Web
+Consortium
+(work
+in
+progress).
+22
+May
+2012.
+Editor's
+Draft.
+This
+edition
+of
+the
+JSON-LD
+Syntax
+specification
+is
+http://json-ld.org/spec/ED/json-ld-syntax/20120522/.
+The
+<a href="http://json-ld.org/spec/latest/json-ld-syntax/">
+latest
+edition
+of
+the
+JSON-LD
+Syntax
+</a>
+is
+available
+at
+http://json-ld.org/spec/latest/json-ld-syntax/
+</dd>
+<dt id="bib-JSON-POINTER">
+[JSON-POINTER]
+</dt>
+<dd>
+<cite>
+<a href="http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-02">
+JSON
+Pointer
+</a>
+</cite>
+P.
+Bryan,
+Ed.
+IETF
+Draft.
+URL:
+<a href="http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-02">
+http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-02
+</a>
+</dd>
+<dt id="bib-RDF-CONCEPTS">
+[RDF-CONCEPTS]
+</dt>
+<dd>
+<cite>
+<a href="http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/">
+RDF
+1.1
+Concepts
+and
+Abstract
+Syntax
+</a>
+</cite>
+Richard
+Cyganiak,
+David
+Wood,
+Editors.
+World
+Wide
+Web
+Consortium
+(work
+in
+progress).
+30
+May
+2012.
+Editor's
+Draft.
+This
+edition
+of
+the
+JSON-LD
+Syntax
+specification
+is
+http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/.
+The
+<a href="http://www.w3.org/TR/rdf11-concepts/">
+latest
+edition
+of
+the
+JSON-LD
+Syntax
+</a>
+is
+available
+at
+http://www.w3.org/TR/rdf11-concepts/
+</dd>
+<dt id="bib-RDF-SCHEMA">
+[RDF-SCHEMA]
+</dt>
+<dd>
+Dan
+Brickley;
+Ramanathan
+V.
+Guha.
+<a href="http://www.w3.org/TR/2004/REC-rdf-schema-20040210">
+<cite>
+RDF
+Vocabulary
+Description
+Language
+1.0:
+RDF
+Schema.
+</cite>
+</a>
+10
+February
+2004.
+W3C
+Recommendation.
+URL:
+<a href="http://www.w3.org/TR/2004/REC-rdf-schema-20040210">
+http://www.w3.org/TR/2004/REC-rdf-schema-20040210
+</a>
+</dd>
+<dt id="bib-RFC3986">
+[RFC3986]
+</dt>
+<dd>
+T.
+Berners-Lee;
+R.
+Fielding;
+L.
+Masinter.
+<a href="http://www.ietf.org/rfc/rfc3986.txt">
+<cite>
+Uniform
+Resource
+Identifier
+(URI):
+Generic
+Syntax.
+</cite>
+</a>
+January
+2005.
+Internet
+RFC
+3986.
+URL:
+<a href="http://www.ietf.org/rfc/rfc3986.txt">
+http://www.ietf.org/rfc/rfc3986.txt
+</a>
+</dd>
+<dt id="bib-RFC3987">
+[RFC3987]
+</dt>
+<dd>
+M.
+Dürst;
+M.
+Suignard.
+<a href="http://www.ietf.org/rfc/rfc3987.txt">
+<cite>
+Internationalized
+Resource
+Identifiers
+(IRIs).
+</cite>
+</a>
+January
+2005.
+Internet
+RFC
+3987.
+URL:
+<a href="http://www.ietf.org/rfc/rfc3987.txt">
+http://www.ietf.org/rfc/rfc3987.txt
+</a>
+</dd>
+<dt id="bib-RFC4627">
+[RFC4627]
+</dt>
+<dd>
+D.
+Crockford.
+<a href="http://www.ietf.org/rfc/rfc4627.txt">
+<cite>
+The
+application/json
+Media
+Type
+for
+JavaScript
+Object
+<del class="diff-old">Notation
+(JSON)
+July
+2006.
+Internet
+RFC
+4627.
+URL:
+http://www.ietf.org/rfc/rfc4627.txt
+[WEBIDL]
+Web
+IDL
+Cameron
+McCormack,
+Editor.
+World
+Wide
+Web
+Consortium.
+19
+April
+2012.
+Candidate
+Recommendataion.
+This
+edition
+of
+Web
+IDL
+is
+http://www.w3.org/TR/2012/CR-WebIDL-20120419/.
+The
+latest
+edition
+of
+Web
+IDL
+is
+available
+at
+http://dev.w3.org/2006/webapi/WebIDL/
+[XMLSCHEMA11-2]
+Henry
+S.
+Thompson;
+et
+al.
+W3C
+XML
+Schema
+Definition
+Language
+(XSD)
+1.1
+Part
+2:
+Datatypes.
+5
+April
+2012.
+W3C
+Recommendation
+URL:
+http://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/
+C.2
+Informative
+references
+[ECMA-262]
+ECMAScript
+Language
+Specification.
+December
+1999.
+URL:
+http://www.ecma-international.org/publications/standards/Ecma-262.htm
+[TURTLE-TR]
+Eric
+Prud'hommeaux,
+Gavin
+Carothers.
+Turtle:
+Terse
+RDF
+Triple
+Language.
+09
+August
+2011.
+W3C
+Working
+Dr
+</del>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/spec/ED/json-ld-api/20120830/index.html Thu Aug 30 16:50:04 2012 +0200
@@ -0,0 +1,2665 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
+<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml" typeof="bibo:Document">
+<head>
+<title>JSON-LD API 1.0</title>
+<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+
+<!--
+ === NOTA BENE ===
+ For the three scripts below, if your spec resides on dev.w3 you can check them
+ out in the same tree and use relative links so that they'll work offline,
+ -->
+
+
+
+<style type="text/css">
+.diff { font-weight:bold; color:#0a3; }
+</style>
+<style>/*****************************************************************
+ * ReSpec 3 CSS
+ * Robin Berjon - http://berjon.com/
+ *****************************************************************/
+
+/* --- INLINES --- */
+em.rfc2119 {
+ text-transform: lowercase;
+ font-variant: small-caps;
+ font-style: normal;
+ color: #900;
+}
+
+h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
+h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
+ border: none;
+}
+
+dfn {
+ font-weight: bold;
+}
+
+a.internalDFN {
+ color: inherit;
+ border-bottom: 1px solid #99c;
+ text-decoration: none;
+}
+
+a.externalDFN {
+ color: inherit;
+ border-bottom: 1px dotted #ccc;
+ text-decoration: none;
+}
+
+a.bibref {
+ text-decoration: none;
+}
+
+cite .bibref {
+ font-style: normal;
+}
+
+code {
+ color: #ff4500;
+}
+
+
+/* --- --- */
+ol.algorithm { counter-reset:numsection; list-style-type: none; }
+ol.algorithm li { margin: 0.5em 0; }
+ol.algorithm li:before { font-weight: bold; counter-increment: numsection; content: counters(numsection, ".") ") "; }
+
+/* --- TOC --- */
+.toc a, .tof a {
+ text-decoration: none;
+}
+
+a .secno, a .figno {
+ color: #000;
+}
+
+ul.tof, ol.tof {
+ list-style: none outside none;
+}
+
+.caption {
+ margin-top: 0.5em;
+ font-style: italic;
+}
+
+/* --- TABLE --- */
+table.simple {
+ border-spacing: 0;
+ border-collapse: collapse;
+ border-bottom: 3px solid #005a9c;
+}
+
+.simple th {
+ background: #005a9c;
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+}
+
+.simple th[scope="row"] {
+ background: inherit;
+ color: inherit;
+ border-top: 1px solid #ddd;
+}
+
+.simple td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+}
+
+.simple tr:nth-child(even) {
+ background: #f0f6ff;
+}
+
+/* --- DL --- */
+.section dd > p:first-child {
+ margin-top: 0;
+}
+
+.section dd > p:last-child {
+ margin-bottom: 0;
+}
+
+.section dd {
+ margin-bottom: 1em;
+}
+
+.section dl.attrs dd, .section dl.eldef dd {
+ margin-bottom: 0;
+}
+</style><style>/* --- EXAMPLES --- */
+div.example-title {
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.example-title span {
+ text-transform: uppercase;
+}
+aside.example, div.example, div.illegal-example {
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+div.illegal-example { color: red }
+div.illegal-example p { color: black }
+aside.example, div.example {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+ border-color: #e0cb52;
+ background: #fcfaee;
+}
+
+aside.example div.example {
+ border-left-width: .1em;
+ border-color: #999;
+ background: #fff;
+}
+aside.example div.example div.example-title {
+ color: #999;
+}
+</style><style>/* --- ISSUES/NOTES --- */
+div.issue-title, div.note-title {
+ padding-right: 1em;
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.issue-title { color: #e05252; }
+div.note-title { color: #52e052; }
+div.issue-title span, div.note-title span {
+ text-transform: uppercase;
+}
+div.note, div.issue {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.note > p:first-child, .issue > p:first-child { margin-top: 0 }
+.issue, .note {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+}
+div.issue, div.note {
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+span.note, span.issue { padding: .1em .5em .15em; }
+
+.issue {
+ border-color: #e05252;
+ background: #fbe9e9;
+}
+.note {
+ border-color: #52e052;
+ background: #e9fbe9;
+}
+
+
+</style><style>/* --- WEB IDL --- */
+pre.idl {
+ border-top: 1px solid #90b8de;
+ border-bottom: 1px solid #90b8de;
+ padding: 1em;
+ line-height: 120%;
+}
+
+pre.idl::before {
+ content: "WebIDL";
+ display: block;
+ width: 150px;
+ background: #90b8de;
+ color: #fff;
+ font-family: initial;
+ padding: 3px;
+ font-weight: bold;
+ margin: -1em 0 1em -1em;
+}
+
+.idlType {
+ color: #ff4500;
+ font-weight: bold;
+ text-decoration: none;
+}
+
+/*.idlModule*/
+/*.idlModuleID*/
+/*.idlInterface*/
+.idlInterfaceID, .idlDictionaryID, .idlCallbackID, .idlEnumID {
+ font-weight: bold;
+ color: #005a9c;
+}
+
+.idlSuperclass {
+ font-style: italic;
+ color: #005a9c;
+}
+
+/*.idlAttribute*/
+.idlAttrType, .idlFieldType, .idlMemberType {
+ color: #005a9c;
+}
+.idlAttrName, .idlFieldName, .idlMemberName {
+ color: #ff4500;
+}
+.idlAttrName a, .idlFieldName a, .idlMemberName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlMethod*/
+.idlMethType, .idlCallbackType {
+ color: #005a9c;
+}
+.idlMethName {
+ color: #ff4500;
+}
+.idlMethName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlParam*/
+.idlParamType {
+ color: #005a9c;
+}
+.idlParamName {
+ font-style: italic;
+}
+
+.extAttr {
+ color: #666;
+}
+
+/*.idlConst*/
+.idlConstType {
+ color: #005a9c;
+}
+.idlConstName {
+ color: #ff4500;
+}
+.idlConstName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlException*/
+.idlExceptionID {
+ font-weight: bold;
+ color: #c00;
+}
+
+.idlTypedefID, .idlTypedefType {
+ color: #005a9c;
+}
+
+.idlRaises, .idlRaises a.idlType, .idlRaises a.idlType code, .excName a, .excName a code {
+ color: #c00;
+ font-weight: normal;
+}
+
+.excName a {
+ font-family: monospace;
+}
+
+.idlRaises a.idlType, .excName a.idlType {
+ border-bottom: 1px dotted #c00;
+}
+
+.excGetSetTrue, .excGetSetFalse, .prmNullTrue, .prmNullFalse, .prmOptTrue, .prmOptFalse {
+ width: 45px;
+ text-align: center;
+}
+.excGetSetTrue, .prmNullTrue, .prmOptTrue { color: #0c0; }
+.excGetSetFalse, .prmNullFalse, .prmOptFalse { color: #c00; }
+
+.idlImplements a {
+ font-weight: bold;
+}
+
+dl.attributes, dl.methods, dl.constants, dl.fields, dl.dictionary-members {
+ margin-left: 2em;
+}
+
+.attributes dt, .methods dt, .constants dt, .fields dt, .dictionary-members dt {
+ font-weight: normal;
+}
+
+.attributes dt code, .methods dt code, .constants dt code, .fields dt code, .dictionary-members dt code {
+ font-weight: bold;
+ color: #000;
+ font-family: monospace;
+}
+
+.attributes dt code, .fields dt code, .dictionary-members dt code {
+ background: #ffffd2;
+}
+
+.attributes dt .idlAttrType code, .fields dt .idlFieldType code, .dictionary-members dt .idlMemberType code {
+ color: #005a9c;
+ background: transparent;
+ font-family: inherit;
+ font-weight: normal;
+ font-style: italic;
+}
+
+.methods dt code {
+ background: #d9e6f8;
+}
+
+.constants dt code {
+ background: #ddffd2;
+}
+
+.attributes dd, .methods dd, .constants dd, .fields dd, .dictionary-members dd {
+ margin-bottom: 1em;
+}
+
+table.parameters, table.exceptions {
+ border-spacing: 0;
+ border-collapse: collapse;
+ margin: 0.5em 0;
+ width: 100%;
+}
+table.parameters { border-bottom: 1px solid #90b8de; }
+table.exceptions { border-bottom: 1px solid #deb890; }
+
+.parameters th, .exceptions th {
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+ font-family: initial;
+ font-weight: normal;
+ text-shadow: #666 1px 1px 0;
+}
+.parameters th { background: #90b8de; }
+.exceptions th { background: #deb890; }
+
+.parameters td, .exceptions td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+ vertical-align: top;
+}
+
+.parameters tr:first-child td, .exceptions tr:first-child td {
+ border-top: none;
+}
+
+.parameters td.prmName, .exceptions td.excName, .exceptions td.excCodeName {
+ width: 100px;
+}
+
+.parameters td.prmType {
+ width: 120px;
+}
+
+table.exceptions table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ width: 100%;
+}
+</style><link rel="stylesheet" href="http://www.w3.org/StyleSheets/TR/W3C-ED" />
+<!--[if lt IE 9]><script src='undefined://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]-->
+</head>
+
+<body><div class="head">
+ <p>
+
+ <a href="http://www.w3.org/"><img width="72" height="48" alt="W3C" src="http://www.w3.org/Icons/w3c_home" /></a>
+
+ </p>
+ <h1 id="title" class="title">JSON-LD API 1.0</h1>
+
+ <h2 id="subtitle">An Application Programming Interface for the JSON-LD Syntax</h2>
+
+ <h2 id="w3c-editor-s-draft-30-august-2012"><abbr title="World Wide Web Consortium">W3C</abbr> Editor's Draft 30 August 2012</h2>
+ <dl>
+
+ <dt>This version:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/ED/json-ld-api/20120830/index.html">http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/ED/json-ld-api/20120830/index.html</a></dd>
+ <dt>Latest published version:</dt>
+ <dd><a href="http://www.w3.org/TR/json-ld-api/">http://www.w3.org/TR/json-ld-api/</a></dd>
+
+
+ <dt>Latest editor's draft:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/latest/json-ld-api/index.html">http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/latest/json-ld-api/index.html</a></dd>
+
+
+
+
+
+
+
+
+ <dt>Editors:</dt>
+ <dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://manu.sporny.org/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">Manu Sporny</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
+</dd>
+<dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">Gregg Kellogg</a>, <a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">Kellogg Associates</a></span>
+</dd>
+<dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">Markus Lanthaler</a>, <a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">Graz University of Technology</a></span>
+</dd>
+
+
+ <dt>Authors:</dt>
+ <dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://digitalbazaar.com/" content="Dave Longley" property="foaf:name" rel="foaf:homepage">Dave Longley</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
+</dd>
+<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://digitalbazaar.com/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">Manu Sporny</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
+</dd>
+<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">Gregg Kellogg</a>, <a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">Kellogg Associates</a></span>
+</dd>
+<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">Markus Lanthaler</a>, <a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">Graz University of Technology</a></span>
+</dd>
+
+
+ </dl>
+
+
+ <p>
+
+ This document is also available in this non-normative format:
+
+ <a href="diff-20120712.html">diff to previous version</a>
+ </p>
+
+
+
+
+ <p class="copyright">
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> ©
+ 2010-2012
+
+ <a href="http://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>,
+ <a href="http://www.ercim.eu/"><abbr title="European Research Consortium for Informatics and Mathematics">ERCIM</abbr></a>,
+ <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved.
+ <abbr title="World Wide Web Consortium">W3C</abbr> <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and
+ <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.
+ </p>
+
+
+ <hr />
+</div>
+<section id="abstract" class="introductory"><h2>Abstract</h2>
+<p>
+JSON [<cite><a class="bibref" href="#bib-RFC4627">RFC4627</a></cite>] has proven to be a highly useful object serialization and
+messaging format. JSON-LD [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>] harmonizes the representation of
+Linked Data in JSON by outlining a common JSON representation format for
+expressing directed graphs; mixing both Linked Data and non-Linked Data in
+a single document. This document outlines an Application Programming
+Interface and a set of algorithms for programmatically transforming
+JSON-LD documents in order to make them easier to work with in programming
+environments like JavaScript, Python, and Ruby.
+</p>
+</section><section class="introductory" id="sotd"><h2>Status of This Document</h2>
+
+
+
+ <p>
+ <em>This section describes the status of this document at the time of its publication. Other
+ documents may supersede this document. A list of current <abbr title="World Wide Web Consortium">W3C</abbr> publications and the latest revision
+ of this technical report can be found in the <a href="http://www.w3.org/TR/"><abbr title="World Wide Web Consortium">W3C</abbr> technical reports
+ index</a> at http://www.w3.org/TR/.</em>
+ </p>
+
+<p>This document has been under development for over 18 months in the
+JSON for Linking Data Community Group. The document has recently been
+transferred to the RDF Working Group for review, improvement, and publication
+along the Recommendation track. The specification has undergone significant
+development, review, and changes during the course of the last 18 months.
+</p>
+<p>
+There are currently
+<a href="http://json-ld.org/#impl">five interoperable implementations</a>
+of this specification. There is
+a <a href="https://github.com/json-ld/json-ld.org/tree/master/test-suite">fairly complete test suite</a>
+and a
+<a href="http://json-ld.org/playground/">live JSON-LD editor</a>
+that is capable of demonstrating the features described in
+this document. While development on implementations, the test suite
+and the live editor will continue, they are believed to be mature enough
+to be integrated into a non-production system at this point in time with
+the expectation that they could be used in a production system within the
+next year.
+</p>
+<div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">
+It is important for readers to understand that the scope of this document is
+currently under debate and new features may be added to the specification.
+Existing features may be modified heavily or removed entirely from the
+specification upon further review and feedback from the broader community.
+This is a work in progress and publication as a First Public Working Draft
+does not require that all Working Group members agree on the content of the
+document.
+</p></div>
+
+ <p>
+ This document was published by the <a href="http://www.w3.org/2011/rdf-wg/">RDF Working Group</a> as an Editor's Draft.
+
+ If you wish to make comments regarding this document, please send them to
+ <a href="mailto:public-rdf-comments@w3.org">public-rdf-comments@w3.org</a>
+ (<a href="mailto:public-rdf-comments-request@w3.org?subject=subscribe">subscribe</a>,
+ <a href="http://lists.w3.org/Archives/Public/public-rdf-comments/">archives</a>).
+
+
+ All feedback is welcome.
+ </p>
+
+ <p>
+ Publication as an Editor's Draft does not imply endorsement by the <abbr title="World Wide Web Consortium">W3C</abbr> Membership.
+ This is a draft document and may be updated, replaced or obsoleted by other documents at
+ any time. It is inappropriate to cite this document as other than work in progress.
+ </p>
+
+
+ <p>
+
+ This document was produced by a group operating under the
+ <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.
+
+
+
+
+ <abbr title="World Wide Web Consortium">W3C</abbr> maintains a <a rel="disclosure" href="http://www.w3.org/2004/01/pp-impl/46168/status">public list of any patent disclosures</a>
+
+ made in connection with the deliverables of the group; that page also includes instructions for
+ disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains
+ <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the
+ information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section
+ 6 of the <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.
+
+
+ </p>
+
+
+
+
+</section><section id="toc"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#preface" class="tocxref"><span class="secno">1. </span>Preface</a><ul class="toc"><li class="tocline"><a href="#contributing" class="tocxref"><span class="secno">1.1 </span>Contributing</a></li></ul></li><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">2. </span>Introduction</a><ul class="toc"><li class="tocline"><a href="#expansion" class="tocxref"><span class="secno">2.1 </span>Expansion</a></li><li class="tocline"><a href="#compaction" class="tocxref"><span class="secno">2.2 </span>Compaction</a></li><li class="tocline"><a href="#conversion-to-and-from-rdf" class="tocxref"><span class="secno">2.3 </span>Conversion to and from RDF</a></li><li class="tocline"><a href="#framing-and-normalization" class="tocxref"><span class="secno">2.4 </span>Framing and Normalization</a></li></ul></li><li class="tocline"><a href="#the-application-programming-interface" class="tocxref"><span class="secno">3. </span>The Application Programming Interface</a><ul class="toc"><li class="tocline"><a href="#general-terminology" class="tocxref"><span class="secno">3.1 </span>General Terminology</a></li><li class="tocline"><a href="#jsonldprocessor" class="tocxref"><span class="secno">3.2 </span>JsonLdProcessor</a><ul class="toc"><li class="tocline"><a href="#methods" class="tocxref"><span class="secno">3.2.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#callbacks" class="tocxref"><span class="secno">3.3 </span>Callbacks</a><ul class="toc"><li class="tocline"><a href="#jsonldcallback" class="tocxref"><span class="secno">3.3.1 </span>JsonLdCallback</a><ul class="toc"><li class="tocline"><a href="#methods-1" class="tocxref"><span class="secno">3.3.1.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#quadcallback" class="tocxref"><span class="secno">3.3.2 </span>QuadCallback</a><ul class="toc"><li class="tocline"><a href="#methods-2" class="tocxref"><span class="secno">3.3.2.1 </span>Methods</a></li></ul></li></ul></li><li class="tocline"><a href="#data-structures" class="tocxref"><span class="secno">3.4 </span>Data Structures</a><ul class="toc"><li class="tocline"><a href="#iri" class="tocxref"><span class="secno">3.4.1 </span><abbr title="Internationalized Resource Identifier">IRI</abbr></a></li><li class="tocline"><a href="#jsonldoptions" class="tocxref"><span class="secno">3.4.2 </span>JsonLdOptions</a><ul class="toc"><li class="tocline"><a href="#dictionary-jsonldoptions-members" class="tocxref"><span class="secno">3.4.2.1 </span>Dictionary <span class="formerLink"><code>JsonLdOptions</code></span> Members</a></li></ul></li><li class="tocline"><a href="#quad" class="tocxref"><span class="secno">3.4.3 </span>Quad</a><ul class="toc"><li class="tocline"><a href="#attributes" class="tocxref"><span class="secno">3.4.3.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#node" class="tocxref"><span class="secno">3.4.4 </span>Node</a></li><li class="tocline"><a href="#iri-1" class="tocxref"><span class="secno">3.4.5 </span><abbr title="Internationalized Resource Identifier">IRI</abbr></a><ul class="toc"><li class="tocline"><a href="#attributes-1" class="tocxref"><span class="secno">3.4.5.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#blank-node" class="tocxref"><span class="secno">3.4.6 </span>Blank Node</a><ul class="toc"><li class="tocline"><a href="#attributes-2" class="tocxref"><span class="secno">3.4.6.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#literal" class="tocxref"><span class="secno">3.4.7 </span>Literal</a><ul class="toc"><li class="tocline"><a href="#attributes-3" class="tocxref"><span class="secno">3.4.7.1 </span>Attributes</a></li></ul></li></ul></li></ul></li><li class="tocline"><a href="#algorithms" class="tocxref"><span class="secno">4. </span>Algorithms</a><ul class="toc"><li class="tocline"><a href="#algorithm-terms" class="tocxref"><span class="secno">4.1 </span>Algorithm Terms</a></li><li class="tocline"><a href="#context-processing" class="tocxref"><span class="secno">4.2 </span>Context Processing</a></li><li class="tocline"><a href="#iri-expansion" class="tocxref"><span class="secno">4.3 </span><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion</a></li><li class="tocline"><a href="#iri-compaction" class="tocxref"><span class="secno">4.4 </span><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction</a><ul class="toc"><li class="tocline"><a href="#iri-compaction-algorithm" class="tocxref"><span class="secno">4.4.1 </span><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction Algorithm</a></li><li class="tocline"><a href="#term-rank-algorithm" class="tocxref"><span class="secno">4.4.2 </span>Term Rank Algorithm</a></li></ul></li><li class="tocline"><a href="#value-expansion" class="tocxref"><span class="secno">4.5 </span>Value Expansion</a></li><li class="tocline"><a href="#value-compaction" class="tocxref"><span class="secno">4.6 </span>Value Compaction</a></li><li class="tocline"><a href="#expansion-1" class="tocxref"><span class="secno">4.7 </span>Expansion</a><ul class="toc"><li class="tocline"><a href="#expansion-algorithm" class="tocxref"><span class="secno">4.7.1 </span>Expansion Algorithm</a></li></ul></li><li class="tocline"><a href="#compaction-1" class="tocxref"><span class="secno">4.8 </span>Compaction</a><ul class="toc"><li class="tocline"><a href="#compaction-algorithm" class="tocxref"><span class="secno">4.8.1 </span>Compaction Algorithm</a></li></ul></li><li class="tocline"><a href="#flattening" class="tocxref"><span class="secno">4.9 </span>Flattening</a><ul class="toc"><li class="tocline"><a href="#flattening-algorithm" class="tocxref"><span class="secno">4.9.1 </span>Flattening Algorithm</a></li><li class="tocline"><a href="#node-map-generation" class="tocxref"><span class="secno">4.9.2 </span>Node Map Generation</a></li><li class="tocline"><a href="#generate-blank-node-identifier" class="tocxref"><span class="secno">4.9.3 </span>Generate Blank Node Identifier</a></li></ul></li><li class="tocline"><a href="#rdf-conversion" class="tocxref"><span class="secno">4.10 </span>RDF Conversion</a><ul class="toc"><li class="tocline"><a href="#overview" class="tocxref"><span class="secno">4.10.1 </span>Overview</a></li><li class="tocline"><a href="#parsing-examples" class="tocxref"><span class="secno">4.10.2 </span>Parsing Examples</a></li><li class="tocline"><a href="#convert-to-rdf-algorithm" class="tocxref"><span class="secno">4.10.3 </span>Convert to RDF Algorithm</a></li><li class="tocline"><a href="#list-conversion" class="tocxref"><span class="secno">4.10.4 </span>List Conversion</a></li><li class="tocline"><a href="#convert-from-rdf-algorithm" class="tocxref"><span class="secno">4.10.5 </span>Convert from RDF Algorithm</a></li></ul></li></ul></li><li class="tocline"><a href="#data-round-tripping" class="tocxref"><span class="secno">5. </span>Data Round Tripping</a></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">A. </span>Acknowledgements</a></li><li class="tocline"><a href="#references" class="tocxref"><span class="secno">B. </span>References</a><ul class="toc"><li class="tocline"><a href="#normative-references" class="tocxref"><span class="secno">B.1 </span>Normative references</a></li><li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">B.2 </span>Informative references</a></li></ul></li></ul></section>
+
+
+
+<section id="preface">
+
+<!--OddPage-->
+<h2><span class="secno">1. </span>Preface</h2>
+
+<p>
+This document is a detailed specification for an Application Programming
+Interface for the JSON-LD Syntax. The document is primarily intended for
+the following audiences:
+</p>
+
+<ul>
+ <li>Web authors and developers that want a very detailed view of how
+ a JSON-LD processor and the API operates.</li>
+ <li>Software developers that want to implement processors and APIs for
+ JSON-LD.</li>
+</ul>
+
+<p>
+To understand the basics in this specification you must first be familiar with
+JSON, which is detailed in [<cite><a class="bibref" href="#bib-RFC4627">RFC4627</a></cite>]. You must also understand the
+JSON-LD Syntax [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>], which is the base syntax used by all of the
+algorithms in this document. To understand the API and how it is
+intended to operate in a programming environment, it is useful to have working
+knowledge of the JavaScript programming language [<cite><a class="bibref" href="#bib-ECMA-262">ECMA-262</a></cite>] and
+WebIDL [<cite><a class="bibref" href="#bib-WEBIDL">WEBIDL</a></cite>]. To understand how JSON-LD maps to RDF, it is helpful to be
+familiar with the basic RDF concepts [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].</p>
+
+<section id="contributing">
+ <h3><span class="secno">1.1 </span>Contributing</h3>
+
+ <p>There are a number of ways that one may participate in the development of
+ this specification:</p>
+
+ <ul>
+ <li>If you want to make sure that your feedback is formally addressed by
+ the RDF Working Group, you should send it to public-rdf-comments:
+ <a href="http://lists.w3.org/Archives/Public/public-rdf-comments/">public-rdf-comments@w3.org</a></li>
+
+ <li>Ad-hoc technical discussion primarily occurs on the public community mailing list:
+ <a href="http://lists.w3.org/Archives/Public/public-linked-json/">public-linked-json@w3.org</a></li>
+
+ <li><a href="http://json-ld.org/minutes/">Public JSON-LD Community Group teleconferences</a>
+ are held on Tuesdays at 1500UTC every week.</li>
+
+ <li>RDF Working Group teleconferences are held on Wednesdays at 1500UTC
+ every week. Participation is limited to RDF Working Group members.</li>
+
+ <li>Specification bugs and issues should be reported in the
+ <a href="https://github.com/json-ld/json-ld.org/issues">issue tracker</a>
+ if you do not want to send an e-mail to the public-rdf-comments mailing
+ list.</li>
+
+ <li><a href="https://github.com/json-ld/json-ld.org/tree/master/spec">Source code</a>
+ for the specification can be found on Github.</li>
+
+ <li>The <a href="http://webchat.freenode.net/?channels=json-ld">#json-ld</a>
+ IRC channel is available for real-time discussion on irc.freenode.net.</li>
+ </ul>
+
+</section>
+
+</section>
+
+<section id="introduction">
+
+<!--OddPage-->
+<h2><span class="secno">2. </span>Introduction</h2>
+
+<p>
+The JSON-LD Syntax specification [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>] outlines a language that may be
+used to express Linked Data in JSON. Often, it is useful to be able to
+transform JSON-LD documents so that they may be easily processed in
+a programming environment like JavaScript, Python or Ruby.
+</p>
+
+<p>
+There are three major types of transformation that are discussed in this
+document; compaction, expansion, and RDF conversion.
+</p>
+
+<section id="expansion">
+ <h3><span class="secno">2.1 </span>Expansion</h3>
+ <p>
+Software algorithms are easiest to write when the data that they are processing
+have a regular form. Since information can be represented by JSON-LD in a
+variety of different ways, transforming all of these methods into a uniform
+structure allows the developer to simplify their processing code. For example,
+note that the following input uses only <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s and is fairly
+compact:
+ </p>
+
+ <div class="example"><div class="example-title"><span>Example 1</span></div><pre class="example">var input1 = {
+ "@context": "http://json-ld.org/contexts/person.jsonld"
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}</pre></div>
+
+ <p>
+The next input example uses one <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> to express a property, but
+leaves the rest of the information untouched.
+ </p>
+
+ <div class="example"><div class="example-title"><span>Example 2</span></div><pre class="example">var input2 = {
+ "@context": "http://json-ld.org/contexts/person.jsonld"
+ "<span class="diff">http://xmlns.com/foaf/0.1/name</span>": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}</pre></div>
+
+ <p>
+While both inputs are valid JSON-LD, writing a program to handle every
+permutation of possible inputs can be difficult, especially when the incoming
+context could change as well. To ensure that the data can be given a more
+uniform structure, JSON-LD introduces the notion of expansion.
+<dfn title="expansion" id="dfn-expansion">Expansion</dfn> performs two important operations. The first is to
+expand all values that are <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s to their fully expanded form.
+The second is to express all values in <dfn title="expanded_form" id="dfn-expanded_form">expanded form</dfn>. To
+transform both inputs above to the same representation, the developer could
+do the following:
+ </p>
+
+ <div class="example"><div class="example-title"><span>Example 3</span></div><pre class="example">function expansionCallback(output) {
+ console.log(output);
+}
+
+// the second parameter is 'null' because the developer does not wish to
+// inject another context value
+jsonld.expand(input1, null, expansionCallback);
+jsonld.expand(input2, null, expansionCallback);</pre></div>
+
+ <p>
+The output for both calls above will be:
+ </p>
+
+ <div class="example"><div class="example-title"><span>Example 4</span></div><pre class="example">[{
+ "http://xmlns.com/foaf/0.1/name": [{
+ "@value": "Manu Sporny"
+ }],
+ "http://xmlns.com/foaf/0.1/homepage": [{
+ "@id": "http://manu.sporny.org/"
+ }]
+}]</pre></div>
+
+ <p>
+Note that in the example above; all <a class="tref internalDFN" title="context" href="#dfn-context">context</a> definitions have
+been removed, all <a class="tref internalDFN" title="term" href="#dfn-term">term</a> and prefixes have been expanded to full
+IRIs, and all <a class="tref internalDFN" title="literal" href="#dfn-literal">literal</a>s are expressed in <a class="tref internalDFN" title="expanded_form" href="#dfn-expanded_form">expanded form</a>.
+While the output is more difficult for a human to read, it is easier for a
+software program to process because of its very regular structure.
+ </p>
+</section>
+
+<section id="compaction">
+ <h3><span class="secno">2.2 </span>Compaction</h3>
+ <p>
+While expansion expands a given input as much as possible, compaction performs
+the opposite operation - expressing a given input as succinctly as possible.
+While expansion is meant to produce something that is easy to process by
+software programs, compaction is meant to produce something that is easy to
+read by software developers. Compaction uses a developer-supplied
+<a class="tref internalDFN" title="context" href="#dfn-context">context</a> to compresses all <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s to <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s
+or <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a>es, and compacts all <a class="tref internalDFN" title="literal" href="#dfn-literal">literal</a>s expressed
+in <a class="tref internalDFN" title="expanded_form" href="#dfn-expanded_form">expanded form</a> as much as possible.
+ </p>
+
+ <p>
+The following example expresses input that has already been fully expanded:
+ </p>
+
+ <div class="example"><div class="example-title"><span>Example 5</span></div><pre class="example">var expandedInput = [{
+ "http://xmlns.com/foaf/0.1/name": [{
+ "@value": "Manu Sporny"
+ }],
+ "http://xmlns.com/foaf/0.1/homepage": [{
+ "@id": "http://manu.sporny.org/"
+ }]
+}]</pre></div>
+
+ <p>
+A developer that wants to transform the data above into a more human-readable
+form, could do the following using the JSON-LD API:
+ </p>
+
+ <div class="example"><div class="example-title"><span>Example 6</span></div><pre class="example">function compactionCallback(output) {
+ console.log(output);
+}
+
+jsonld.compact(expandedInput, "http://json-ld.org/contexts/person.jsonld", compactionCallback);</pre></div>
+
+ <p>
+The following would be the result of the call above:
+ </p>
+
+ <div class="example"><div class="example-title"><span>Example 7</span></div><pre class="example">{
+ "@context": "http://json-ld.org/contexts/person.jsonld"
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}</pre></div>
+
+ <p>
+Note that all of the <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s have been compressed and
+the <a class="tref internalDFN" title="context" href="#dfn-context">context</a> has been injected into the output. While compacted
+output is most useful to humans, it can also be carefully used to generate
+structures that are easy to use for developers to program against as well.
+ </p>
+
+</section>
+
+<section id="conversion-to-and-from-rdf">
+ <h3><span class="secno">2.3 </span>Conversion to and from RDF</h3>
+ <p>
+JSON-LD can be used to losslessly express the RDF data model as described in
+the RDF Concepts document [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>]. This ensures that
+data can be round-tripped from any RDF syntax, like N-Triples or TURTLE,
+without any loss in the fidelity of the data. Assume the following RDF input
+in N-Triples format:
+ </p>
+
+ <div class="example"><div class="example-title"><span>Example 8</span></div><pre class="example">var data = "
+<http://manu.sporny.org/about/#manu> <http://xmlns.com/foaf/0.1/name> \"Manu Sporny\" .\n
+<http://manu.sporny.org/about/#manu> <http://xmlns.com/foaf/0.1/homepage> <http://manu.sporny.org/> .";</pre></div>
+
+ <p>
+A developer can use the JSON-LD API to transform the markup above into a
+JSON-LD document:
+ </p>
+
+ <div class="example"><div class="example-title"><span>Example 9</span></div><pre class="example">function conversionCallback(result)
+{
+ console.log("JSON-LD Document: ", result);
+};
+
+jsonld.fromRDF(data, conversionCallback, {"format": "ntriples"});</pre></div>
+
+ <p>
+The following expanded output would be the result of the call above:
+ </p>
+
+ <div class="example"><div class="example-title"><span>Example 10</span></div><pre class="example">[{
+ "@id": "http://manu.sporny.org/about/#manu",
+ "http://xmlns.com/foaf/0.1/name": [{
+ "@value": "Manu Sporny"
+ }],
+ "http://xmlns.com/foaf/0.1/homepage": [{
+ "@id": "http://manu.sporny.org/"
+ }]
+}]</pre></div>
+
+ <p>
+Note that the output above, could easily be compacted to produce the following
+using the technique outlined in the previous section:
+ </p>
+
+ <div class="example"><div class="example-title"><span>Example 11</span></div><pre class="example">{
+ "@context": "http://json-ld.org/contexts/person.jsonld",
+ "@id": "http://manu.sporny.org/about/#manu",
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}</pre></div>
+
+ <p>
+Transforming the node above back to RDF is as simple as calling the
+<code>toRDF()</code> method:
+ </p>
+
+ <div class="example"><div class="example-title"><span>Example 12</span></div><pre class="example">var jsonldDocument = ...; // assign the JSON-LD document here
+
+function rdfCallback(quads)
+{
+ console.log("RDF Data: ", quads);
+};
+
+jsonld.toRDF(jsonldDocument, rdfCallback);</pre></div>
+
+</section>
+
+<section id="framing-and-normalization">
+ <h3><span class="secno">2.4 </span>Framing and Normalization</h3>
+ <div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">
+There are currently two other API methods that are in active development and
+were not ready for publication at the time this document was published.
+Framing allows a developer to force a different layout for the data and
+effectively perform query-by-example on JSON-LD documents - this is most
+useful when a JSON-LD-based REST API does not know the exact form of the data
+it is getting in, but still wants to operate upon it if some bare essentials
+are found in the data. JSON-LD normalization allows JSON-LD documents to be
+deterministically serialized such that they can be digitally signed or be
+used to find the differences between two <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>s.
+It is expected that framing will be a part of the final API. It is expected
+that normalization will be an optional feature that JSON-LD processors may
+implement.
+ </p></div>
+</section>
+
+</section>
+
+<section id="the-application-programming-interface">
+
+<!--OddPage-->
+<h2><span class="secno">3. </span>The Application Programming Interface</h2>
+
+ <p>This API provides a clean mechanism that enables developers to convert
+ JSON-LD data into a a variety of output formats that are easier to work
+ with in various programming languages. If a JSON-LD API is provided in
+ a programming environment, the entirety of the following API <em class="rfc2119" title="must">must</em> be
+ implemented.
+ </p>
+
+<section id="general-terminology">
+ <h3><span class="secno">3.1 </span>General Terminology</h3>
+
+ <div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">The intent of the Working Group and the Editors of this
+ specification is to eventually align terminology used in this document
+ with the terminology used in the RDF Concepts document to the extent to
+ which it makes sense to do so. In general, if there is an analogue to
+ terminology used in this document in the RDF Concepts document, the
+ preference is to use the terminology in the RDF Concepts document.
+ </p></div>
+
+ <p>The following is an explanation of the general terminology used in this
+ document:</p>
+
+ <dl>
+ <dt><dfn title="json_object" id="dfn-json_object">JSON object</dfn></dt>
+ <dd>An object structure is represented as a pair of curly brackets surrounding zero or
+ more name-value pairs. A name is a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>. A single colon comes after
+ each name, separating the name from the value. A single comma separates a value
+ from a following name. The names within an object <em class="rfc2119" title="should">should</em> be unique.</dd>
+ <dt><dfn title="array" id="dfn-array">array</dfn></dt>
+ <dd>An array is represented as square brackets surrounding zero or more
+ values that are separated by commas.</dd>
+ <dt><dfn title="string" id="dfn-string">string</dfn></dt>
+ <dd>A string is a sequence of zero or more Unicode (UTF-8) characters,
+ wrapped in double quotes, using backslash escapes (if necessary). A
+ character is represented as a single character string.</dd>
+ <dt><dfn title="number" id="dfn-number">number</dfn></dt>
+ <dd>A number is similar to that used in most programming languages, except
+ that the octal and hexadecimal formats are not used and that leading
+ zeros are not allowed.</dd>
+ <dt><dfn title="true" id="dfn-true">true</dfn> and <dfn title="false" id="dfn-false">false</dfn></dt>
+ <dd>Values that are used to express one of two possible boolean states.</dd>
+ <dt><dfn title="null" id="dfn-null">null</dfn></dt>
+ <dd>The use of the <a class="tref internalDFN" title="null" href="#dfn-null">null</a> value within JSON-LD is used to ignore or reset values.</dd>
+ <dt><dfn title="keyword" id="dfn-keyword">keyword</dfn></dt>
+ <dd>A JSON key that is specific to JSON-LD, specified in the JSON-LD Syntax specification [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>]
+ in the section titled <cite><a href="../json-ld-syntax/#syntax-tokens-and-keywords">Syntax Tokens and Keywords</a></cite>.</dd>
+ <dt><dfn title="context" id="dfn-context">context</dfn></dt>
+ <dd>A a set of rules for interpreting a JSON-LD document as specified in
+ <cite><a href="../json-ld-syntax/#the-context">The Context</a></cite> of the [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>] specification.</dd>
+ <dt><dfn title="iri" id="dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></dfn></dt>
+ <dd>An Internationalized Resource Identifier as described in [<cite><a class="bibref" href="#bib-RFC3987">RFC3987</a></cite>].</dd>
+ <dt><dfn title="linked_data" id="dfn-linked_data">Linked Data</dfn></dt>
+ <dd>A set of documents, each containing a representation of a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</dd>
+ <dt><dfn title="linked_data_graph" id="dfn-linked_data_graph">linked data graph</dfn> or <dfn title="dataset" id="dfn-dataset">dataset</dfn></dt>
+ <dd>An unordered labeled directed graph, where <a class="tref internalDFN" title="node" href="#dfn-node">nodes</a> are
+ <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> or <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">Blank Nodes</a>, or other values.
+ A <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> is a generalized representation of a
+ <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-graph">RDF graph</a></cite>
+ as defined in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].</dd>
+ <dt><dfn title="named_graph" id="dfn-named_graph">named graph</dfn></dt>
+ <dd>A <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> that is identified by an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</dd>
+ <dt><dfn title="graph_name" id="dfn-graph_name">graph name</dfn></dt>
+ <dd>The <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> identifying a <a class="tref internalDFN" title="named_graph" href="#dfn-named_graph">named graph</a>.</dd>
+ <dt><dfn title="default_graph" id="dfn-default_graph">default graph</dfn></dt>
+ <dd>When executing an algorithm, the graph where data should be placed
+ if a <a class="tref internalDFN" title="named_graph" href="#dfn-named_graph">named graph</a> is not specified.</dd>
+ <dt><dfn title="node" id="dfn-node">node</dfn></dt>
+ <dd>A piece of information that is represented in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</dd>
+ <dt><dfn title="node_definition" id="dfn-node_definition">node definition</dfn></dt>
+ <dd>A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to represent a <a class="tref internalDFN" title="node" href="#dfn-node">node</a> and
+ one or more properties of that node. A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is a
+ node definition if it does not contain they keys <code>@value</code>,
+ <code>@list</code> or <code>@set</code> and it has one or more keys
+ other than <code>@id</code>.</dd>
+ <dt><dfn title="node_reference" id="dfn-node_reference">node reference</dfn></dt>
+ <dd>A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to reference a node having only the
+ <code>@id</code> key.</dd>
+ <dt><dfn title="blank_node" id="dfn-blank_node">blank node</dfn></dt>
+ <dd>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> in the <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> that does not contain a de-referenceable
+ identifier because it is either ephemeral in nature or does not contain information that needs to be
+ linked to from outside of the linked data graph. A blank node is assigned an identifier starting with
+ the prefix <code>_:</code>.</dd>
+ <dt><dfn title="property" id="dfn-property">property</dfn></dt>
+ <dd>The <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> label of an edge in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</dd>
+ <dt><dfn title="subject" id="dfn-subject">subject</dfn></dt>
+ <dd>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> with at least one outgoing edge, related to an <a class="tref internalDFN" title="object" href="#dfn-object">object</a> node through a <a class="tref internalDFN" title="property" href="#dfn-property">property</a>.</dd>
+ <dt><dfn title="object" id="dfn-object">object</dfn></dt>
+ <dd>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> with at least one incoming edge.</dd>
+ <dt><dfn title="quad" id="dfn-quad">quad</dfn></dt>
+ <dd>A piece of information that contains four items; a <a class="tref internalDFN" title="subject" href="#dfn-subject">subject</a>, a <a class="tref internalDFN" title="property" href="#dfn-property">property</a>,
+ an <a class="tref internalDFN" title="object" href="#dfn-object">object</a>, and a <a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">graph name</a>.</dd>
+ <dt><dfn title="literal" id="dfn-literal">literal</dfn></dt>
+ <dd>An <a class="tref internalDFN" title="object" href="#dfn-object">object</a> expressed as a value such as a string, number or in expanded form.</dd>
+ </dl>
+ </section>
+
+ <section id="jsonldprocessor">
+ <h3><span class="secno">3.2 </span>JsonLdProcessor</h3>
+
+ <p>The JSON-LD processor interface is the high-level programming structure that developers
+ use to access the JSON-LD transformation methods.</p>
+
+ <div class="note"><div class="note-title"><span>Note</span></div><p class="">The JSON-LD API signatures are the same across all programming languages. Due
+ to the fact that asynchronous programming is uncommon in certain languages, developers <em class="rfc2119" title="may">may</em>
+ implement processor with a synchronous interface instead. In that case, the <code>callback</code>
+ parameter <em class="rfc2119" title="must not">must not</em> be included and the result <em class="rfc2119" title="must">must</em> be returned as return value instead.</p></div>
+
+ <pre class="idl"><span id="idl-def-JsonLdProcessor" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">JsonLdProcessor</span> {
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdProcessor-expand-void-object-or-object---or-IRI-input-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options">expand</a></span> (<span class="idlParam"><span class="idlParamType"><a>object or object[] or IRI</a></span> <span class="idlParamName">input</span></span>, <span class="idlParam"><span class="idlParamType"><a>object or IRI</a>?</span> <span class="idlParamName">context</span></span>, <span class="idlParam"><span class="idlParamType"><a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a></span> <span class="idlParamName">callback</span></span>, <span class="idlParam">optional <span class="idlParamType"><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a>?</span> <span class="idlParamName">options</span></span>);</span>
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdProcessor-compact-void-object-or-object---or-IRI-input-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options">compact</a></span> (<span class="idlParam"><span class="idlParamType"><a>object or object[] or IRI</a></span> <span class="idlParamName">input</span></span>, <span class="idlParam"><span class="idlParamType"><a>object or IRI</a></span> <span class="idlParamName">context</span></span>, <span class="idlParam"><span class="idlParamType"><a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a></span> <span class="idlParamName">callback</span></span>, <span class="idlParam">optional <span class="idlParamType"><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a>?</span> <span class="idlParamName">options</span></span>);</span>
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdProcessor-flatten-void-object-or-object---or-IRI-input-string-or-IRI-graph-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options">flatten</a></span> (<span class="idlParam"><span class="idlParamType"><a>object or object[] or IRI</a></span> <span class="idlParamName">input</span></span>, <span class="idlParam"><span class="idlParamType"><a>string or IRI</a></span> <span class="idlParamName">graph</span></span>, <span class="idlParam"><span class="idlParamType"><a>object or IRI</a>?</span> <span class="idlParamName">context</span></span>, <span class="idlParam"><span class="idlParamType"><a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a></span> <span class="idlParamName">callback</span></span>, <span class="idlParam">optional <span class="idlParamType"><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a>?</span> <span class="idlParamName">options</span></span>);</span>
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdProcessor-fromRDF-void-QuadArray-input-JsonLdCallback-callback-JsonLdOptions-options">fromRDF</a></span> (<span class="idlParam"><span class="idlParamType"><a href="#idl-def-Quad" class="idlType"><code>Quad</code></a>[]</span> <span class="idlParamName">input</span></span>, <span class="idlParam"><span class="idlParamType"><a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a></span> <span class="idlParamName">callback</span></span>, <span class="idlParam">optional <span class="idlParamType"><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a>?</span> <span class="idlParamName">options</span></span>);</span>
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdProcessor-toRDF-void-object-or-object---or-IRI-input-QuadCallback-callback-JsonLdOptions-options">toRDF</a></span> (<span class="idlParam"><span class="idlParamType"><a>object or object[] or IRI</a></span> <span class="idlParamName">input</span></span>, <span class="idlParam"><span class="idlParamType"><a href="#idl-def-QuadCallback" class="idlType"><code>QuadCallback</code></a></span> <span class="idlParamName">callback</span></span>, <span class="idlParam">optional <span class="idlParamType"><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a>?</span> <span class="idlParamName">options</span></span>);</span>
+};</span></pre><section id="methods"><h4><span class="secno">3.2.1 </span>Methods</h4><dl class="methods"><dt id="widl-JsonLdProcessor-compact-void-object-or-object---or-IRI-input-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options"><code>compact</code></dt><dd>
+ <a href="#compaction">Compacts</a> the given <code>input</code> using the
+ <code>context</code> according to the steps in the
+ <a href="#compaction-algorithm">Compaction Algorithm</a>. The
+ <code>input</code> <em class="rfc2119" title="must">must</em> be copied, compacted and returned if there are
+ no errors. If the compaction fails, an appropriate exception <em class="rfc2119" title="must">must</em> be
+ thrown.
+
+
+
+ <dl title="InvalidContext" class="exception">
+ <dt>INVALID_SYNTAX</dt>
+ <dd>A general syntax error was detected in the <code>@context</code>.
+ For example, if a <code>@type</code> key maps to anything other than
+ <code>@id</code> or an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, this exception would be raised.</dd>
+ <dt>LOAD_ERROR</dt>
+ <dd>There was a problem encountered loading a remote context.</dd>
+ </dl>
+
+ <dl title="ProcessingError" class="exception">
+ <dt>LOSSY_COMPACTION</dt>
+ <dd>The compaction would lead to a loss of information, such as a
+ <code>@language</code> value.</dd>
+ <dt>CONFLICTING_DATATYPES</dt>
+ <dd>The target datatype specified in the coercion rule and the
+ datatype for the typed literal do not match.</dd>
+ <dt>LIST_OF_LISTS_DETECTED</dt>
+ <dd>A list of lists was detected. This is not supported in this
+ version of JSON-LD.</dd>
+ </dl>
+ <table class="parameters"><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">input</td><td class="prmType"><code><a>object or object[] or IRI</a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">The JSON-LD object or array of JSON-LD objects to perform the compaction upon or an
+ <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> referencing the JSON-LD document to compact.</td></tr><tr><td class="prmName">context</td><td class="prmType"><code><a>object or IRI</a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">The context to use when compacting the <code>input</code>; either in the
+ form of an <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> or as <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</td></tr><tr><td class="prmName">callback</td><td class="prmType"><code><a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">A callback that is called when processing is complete on
+ the given <code>input</code>.</td></tr><tr><td class="prmName">options</td><td class="prmType"><code><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a></code></td><td class="prmNullTrue">✔</td><td class="prmOptTrue">✔</td><td class="prmDesc">A set of options that <em class="rfc2119" title="may">may</em> affect the expansion algorithm such as, e.g., the
+ input document's base <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>. This also includes <code>optimize</code>,
+ which if set will cause processor-specific optimization.</td></tr></table><div><em>Return type: </em><code><a>void</a></code></div></dd><dt id="widl-JsonLdProcessor-expand-void-object-or-object---or-IRI-input-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options"><code>expand</code></dt><dd>
+ <a href="#expansion">Expands</a> the given <code>input</code> according to
+ the steps in the <a href="#expansion-algorithm">Expansion Algorithm</a>. The
+ <code>input</code> <em class="rfc2119" title="must">must</em> be copied, expanded and returned if there are
+ no errors. If the expansion fails, an appropriate exception <em class="rfc2119" title="must">must</em> be thrown.
+
+
+
+ <dl title="InvalidContext" class="exception">
+ <dt>INVALID_SYNTAX</dt>
+ <dd>A general syntax error was detected in the <code>@context</code>.
+ For example, if a <code>@type</code> key maps to anything other than
+ <code>@id</code> or an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, this exception would be raised.</dd>
+ <dt>LOAD_ERROR</dt>
+ <dd>There was a problem encountered loading a remote context.</dd>
+ </dl>
+
+ <dl title="ProcessingError" class="exception">
+ <dt>LIST_OF_LISTS_DETECTED</dt>
+ <dd>A list of lists was detected. This is not supported in this
+ version of JSON-LD.</dd>
+ </dl>
+ <table class="parameters"><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">input</td><td class="prmType"><code><a>object or object[] or IRI</a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">The JSON-LD object or array of JSON-LD objects to perform the expansion upon or an
+ <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> referencing the JSON-LD document to expand.</td></tr><tr><td class="prmName">context</td><td class="prmType"><code><a>object or IRI</a></code></td><td class="prmNullTrue">✔</td><td class="prmOptFalse">✘</td><td class="prmDesc">An optional external context to use additionally to the context embedded in
+ <code>input</code> when expanding the <code>input</code>.</td></tr><tr><td class="prmName">callback</td><td class="prmType"><code><a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">A callback that is called when processing is complete on
+ the given <code>input</code>.</td></tr><tr><td class="prmName">options</td><td class="prmType"><code><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a></code></td><td class="prmNullTrue">✔</td><td class="prmOptTrue">✔</td><td class="prmDesc">A set of options that <em class="rfc2119" title="may">may</em> affect the expansion algorithm such as, e.g., the
+ input document's base <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</td></tr></table><div><em>Return type: </em><code><a>void</a></code></div></dd><dt id="widl-JsonLdProcessor-flatten-void-object-or-object---or-IRI-input-string-or-IRI-graph-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options"><code>flatten</code></dt><dd>
+ <a href="#flattening">Flattens</a> the given <code>input</code> according to
+ the steps in the <a href="#flattening-algorithm">Flattening Algorithm</a>. The
+ <code>input</code> <em class="rfc2119" title="must">must</em> be flattened and returned if there are
+ no errors. If the flattening fails, an appropriate exception <em class="rfc2119" title="must">must</em> be thrown.
+
+ <div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">It is still being discussed if the flatten() method should be
+ added or not. See <a href="https://github.com/json-ld/json-ld.org/issues/109">ISSUE-109</a>.</p></div>
+
+
+ <table class="parameters"><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">input</td><td class="prmType"><code><a>object or object[] or IRI</a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">The JSON-LD object or array of JSON-LD objects to flatten or an
+ <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> referencing the JSON-LD document to flatten.</td></tr><tr><td class="prmName">graph</td><td class="prmType"><code><a>string or IRI</a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">The graph in the document that should be flattened. To return the default
+ graph <code>@default</code> has to be passed, for the merged graph <code>@merged</code>
+ and for any other graph the <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> identifying the graph has to be passed. The
+ default value is <code>@merged</code>.</td></tr><tr><td class="prmName">context</td><td class="prmType"><code><a>object or IRI</a></code></td><td class="prmNullTrue">✔</td><td class="prmOptFalse">✘</td><td class="prmDesc">An optional external context to use additionally to the context embedded in
+ <code>input</code> when expanding the <code>input</code>.</td></tr><tr><td class="prmName">callback</td><td class="prmType"><code><a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">A callback that is called when processing is complete on
+ the given <code>input</code>.</td></tr><tr><td class="prmName">options</td><td class="prmType"><code><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a></code></td><td class="prmNullTrue">✔</td><td class="prmOptTrue">✔</td><td class="prmDesc">A set of options that <em class="rfc2119" title="may">may</em> affect the expansion algorithm such as, e.g., the
+ input document's base <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</td></tr></table><div><em>Return type: </em><code><a>void</a></code></div></dd><dt id="widl-JsonLdProcessor-fromRDF-void-QuadArray-input-JsonLdCallback-callback-JsonLdOptions-options"><code>fromRDF</code></dt><dd>Creates a JSON-LD document given an set of <a class="datatype idlType" title="Quad" href="#idl-def-Quad"><code>Quads</code></a>.
+
+ <table class="parameters"><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">input</td><td class="prmType"><code><a href="#idl-def-Quad" class="idlType"><code>Quad</code></a>[]</code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">A <a class="tref internalDFN" title="dataset" href="#dfn-dataset">dataset</a> represented as an array of <a class="datatype idlType" title="Quad" href="#idl-def-Quad"><code>Quads</code></a>.</td></tr><tr><td class="prmName">callback</td><td class="prmType"><code><a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">A callback that is called when processing is complete on
+ the given <code>input</code>.</td></tr><tr><td class="prmName">options</td><td class="prmType"><code><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a></code></td><td class="prmNullTrue">✔</td><td class="prmOptTrue">✔</td><td class="prmDesc">A set of options that will affect the algorithm. This includes <code>notType</code>,
+ which if set to <a class="tref internalDFN" title="true" href="#dfn-true">true</a> causes the resulting document to use <code>rdf:type</code>
+ as a property, instead of <code>@type</code>.</td></tr></table><div><em>Return type: </em><code><a>void</a></code></div></dd><dt id="widl-JsonLdProcessor-toRDF-void-object-or-object---or-IRI-input-QuadCallback-callback-JsonLdOptions-options"><code>toRDF</code></dt><dd>
+ Processes the <code>input</code> according to the
+ <a href="#convert-to-rdf-algorithm">Convert to RDF Algorithm</a>, calling
+ the provided <code>callback</code> for each <a class="datatype idlType" title="Quad" href="#idl-def-Quad"><code>Quad</code></a> generated.
+
+
+ <dl title="InvalidContext" class="exception">
+ <dt>INVALID_SYNTAX</dt>
+ <dd>A general syntax error was detected in the <code>@context</code>.
+ For example, if a <code>@type</code> key maps to anything other than
+ <code>@id</code> or an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, this exception would be raised.</dd>
+ <dt>LOAD_ERROR</dt>
+ <dd>There was a problem encountered loading a remote context.</dd>
+ </dl>
+
+ <dl title="ProcessingError" class="exception">
+ <dt>LIST_OF_LISTS_DETECTED</dt>
+ <dd>A list of lists was detected. This is not supported in this
+ version of JSON-LD.</dd>
+ </dl>
+
+ <table class="parameters"><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">input</td><td class="prmType"><code><a>object or object[] or IRI</a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">The JSON-LD object or array of JSON-LD objects to convert to RDF or a <a href="#idl-def-IRI" class="idlType"><code>IRI</code></a>
+ referencing the JSON-LD document to convert to RDF.</td></tr><tr><td class="prmName">callback</td><td class="prmType"><code><a href="#idl-def-QuadCallback" class="idlType"><code>QuadCallback</code></a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">A callback that is called when a <a class="datatype idlType" title="Quad" href="#idl-def-Quad"><code>Quad</code></a> is created from processing
+ the given <code>input</code>.
+ </td></tr><tr><td class="prmName">options</td><td class="prmType"><code><a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a></code></td><td class="prmNullTrue">✔</td><td class="prmOptTrue">✔</td><td class="prmDesc">A set of options that <em class="rfc2119" title="may">may</em> affect the conversion to RDF such as, e.g.,
+ the input document's base <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</td></tr></table><div><em>Return type: </em><code><a>void</a></code></div></dd></dl></section>
+
+ </section>
+
+ <section id="callbacks">
+ <h3><span class="secno">3.3 </span>Callbacks</h3>
+ <section id="jsonldcallback">
+ <h4><span class="secno">3.3.1 </span>JsonLdCallback</h4>
+ <p>The <a href="#idl-def-JsonLdCallback" class="idlType"><code>JsonLdCallback</code></a> is used to return a processed JSON-LD representation
+ as the result of processing an API method.</p>
+
+ <pre class="idl"><span id="idl-def-JsonLdCallback" class="idlInterface">[<span class="extAttr">NoInterfaceObject Callback</span>]
+interface <span class="idlInterfaceID">JsonLdCallback</span> {
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdCallback-jsonLd-void-object-or-objectArray-jsonld">jsonLd</a></span> (<span class="idlParam"><span class="idlParamType"><a>object or object</a>[]</span> <span class="idlParamName">jsonld</span></span>);</span>
+};</span></pre><section id="methods-1"><h5><span class="secno">3.3.1.1 </span>Methods</h5><dl class="methods"><dt id="widl-JsonLdCallback-jsonLd-void-object-or-objectArray-jsonld"><code>jsonLd</code></dt><dd>This callback is invoked when processing is complete.
+
+ <table class="parameters"><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">jsonld</td><td class="prmType"><code><a>object or object</a>[]</code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">The processed JSON-LD document.</td></tr></table><div><em>Return type: </em><code><a>void</a></code></div></dd></dl></section>
+ </section>
+ <section id="quadcallback">
+ <h4><span class="secno">3.3.2 </span>QuadCallback</h4>
+ <p>The <a href="#idl-def-QuadCallback" class="idlType"><code>QuadCallback</code></a> is called whenever the processor generates a
+ quad during the <code>quad()</code> call.</p>
+
+ <pre class="idl"><span id="idl-def-QuadCallback" class="idlInterface">[<span class="extAttr">NoInterfaceObject Callback</span>]
+interface <span class="idlInterfaceID">QuadCallback</span> {
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-QuadCallback-quad-void-Quad-quad">quad</a></span> (<span class="idlParam"><span class="idlParamType"><a href="#idl-def-Quad" class="idlType"><code>Quad</code></a></span> <span class="idlParamName">quad</span></span>);</span>
+};</span></pre><section id="methods-2"><h5><span class="secno">3.3.2.1 </span>Methods</h5><dl class="methods"><dt id="widl-QuadCallback-quad-void-Quad-quad"><code>quad</code></dt><dd>This callback is invoked whenever a quad is generated by the processor.
+
+ <table class="parameters"><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">quad</td><td class="prmType"><code><a href="#idl-def-Quad" class="idlType"><code>Quad</code></a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">The quad.</td></tr></table><div><em>Return type: </em><code><a>void</a></code></div></dd></dl></section>
+ </section>
+ </section>
+
+ <section id="data-structures">
+ <h3><span class="secno">3.4 </span>Data Structures</h3>
+ <p>This section describes datatype definitions used within the JSON-LD API.</p>
+
+ <section id="iri">
+ <h4><span class="secno">3.4.1 </span><abbr title="Internationalized Resource Identifier">IRI</abbr></h4>
+ <p>The <a href="#idl-def-IRI" class="idlType"><code>IRI</code></a> datatype is a string representation of an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</p>
+ <pre class="idl"><span id="idl-def-IRI" class="idlTypedef">typedef <span class="idlTypedefType"><a>DOMString</a></span> <span class="idlTypedefID">IRI</span>;</span></pre><div class="idlTypedefDesc">
+ This datatype indicates that the <em>string</em> is interpreted as an Internationalized
+ Resource Identifier [<cite><a class="bibref" href="#bib-RFC3987">RFC3987</a></cite>] identifying a document, which when parsed as JSON yields
+ either a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> or <a class="tref internalDFN" title="array" href="#dfn-array">array</a>.
+ </div>
+ </section>
+
+ <section id="jsonldoptions">
+ <h4><span class="secno">3.4.2 </span>JsonLdOptions</h4>
+ <p>The <a href="#idl-def-JsonLdOptions" class="idlType"><code>JsonLdOptions</code></a> type is used to pass various options to the <a href="#idl-def-JsonLdProcessor" class="idlType"><code>JsonLdProcessor</code></a> methods.</p>
+ <pre class="idl"><span id="idl-def-JsonLdOptions" class="idlDictionary">dictionary <span class="idlDictionaryID">JsonLdOptions</span> {
+<span class="idlMember"> <span class="idlMemberType"><a href="#idl-def-IRI" class="idlType"><code>IRI</code></a>?</span> <span class="idlMemberName"><a href="#widl-JsonLdOptions-base">base</a></span>;</span>
+<span class="idlMember"> <span class="idlMemberType"><a>boolean</a></span> <span class="idlMemberName"><a href="#widl-JsonLdOptions-compactArrays">compactArrays</a></span> = <span class="idlMemberValue">true</span>;</span>
+<span class="idlMember"> <span class="idlMemberType"><a>boolean</a></span> <span class="idlMemberName"><a href="#widl-JsonLdOptions-optimize">optimize</a></span> = <span class="idlMemberValue">false</span>;</span>
+<span class="idlMember"> <span class="idlMemberType"><a>boolean</a></span> <span class="idlMemberName"><a href="#widl-JsonLdOptions-useRdfType">useRdfType</a></span> = <span class="idlMemberValue">false</span>;</span>
+<span class="idlMember"> <span class="idlMemberType"><a>boolean</a></span> <span class="idlMemberName"><a href="#widl-JsonLdOptions-useNativeTypes">useNativeTypes</a></span> = <span class="idlMemberValue">true</span>;</span>
+};</span></pre><section id="dictionary-jsonldoptions-members"><h5><span class="secno">3.4.2.1 </span>Dictionary <a class="idlType" href="#idl-def-JsonLdOptions"><code>JsonLdOptions</code></a> Members</h5><dl class="dictionary-members"><dt id="widl-JsonLdOptions-base"><code>base</code> of type <span class="idlMemberType"><a href="#idl-def-IRI" class="idlType"><code>IRI</code></a></span>, nullable</dt><dd>The Base <abbr title="Internationalized Resource Identifier">IRI</abbr> to use when expanding the document. This overrides the value of
+ <em>input</em> if it is a <a href="#idl-def-IRI" class="idlType"><code>IRI</code></a>. If not specified and <em>input</em> is not
+ an <a href="#idl-def-IRI" class="idlType"><code>IRI</code></a>, the base <abbr title="Internationalized Resource Identifier">IRI</abbr> defaults to the current document <abbr title="Internationalized Resource Identifier">IRI</abbr> if in a browser context,
+ or the empty string if there is no document context.
+ </dd><dt id="widl-JsonLdOptions-compactArrays"><code>compactArrays</code> of type <span class="idlMemberType"><a>boolean</a></span>, defaulting to <code>true</code></dt><dd>If set to <code>true</code>, the JSON-LD processor replaces arrays with just
+ one element with that element during compaction. If set to <code>false</code>,
+ all arrays will remain arrays even if they have just one element.
+ </dd><dt id="widl-JsonLdOptions-optimize"><code>optimize</code> of type <span class="idlMemberType"><a>boolean</a></span>, defaulting to <code>false</code></dt><dd>If set to <code>true</code>, the JSON-LD processor is allowed to
+ optimize the output of the <a href="#compaction-algorithm">Compaction Algorithm</a>
+ to produce even compacter representations. The algorithm for compaction
+ optimization is beyond the scope of this specification and thus
+ not defined. Consequently, different implementations <em class="rfc2119" title="may">may</em> implement
+ different optimization algorithms.
+ </dd><dt id="widl-JsonLdOptions-useNativeTypes"><code>useNativeTypes</code> of type <span class="idlMemberType"><a>boolean</a></span>, defaulting to <code>true</code></dt><dd>If set to <code>true</code>, the JSON-LD processor will try to convert
+ datatyped literals to JSON native types instead of using the
+ expanded object form when <a href="#convert-from-rdf-algorithm">converting from RDF</a>.
+ <code>xsd:boolean</code> values will be converted to <a class="tref internalDFN" title="true" href="#dfn-true">true</a> or <a class="tref internalDFN" title="false" href="#dfn-false">false</a>.
+ <code>xsd:integer</code> and <code>xsd:double</code> values will be
+ converted to
+ <a class="tref internalDFN" title="number" href="#dfn-number">JSON numbers</a>.
+ </dd><dt id="widl-JsonLdOptions-useRdfType"><code>useRdfType</code> of type <span class="idlMemberType"><a>boolean</a></span>, defaulting to <code>false</code></dt><dd>If set to <code>true</code>, the JSON-LD processor will use the
+ expanded <code>rdf:type</code> <abbr title="Internationalized Resource Identifier">IRI</abbr> as the property instead of
+ <code>@type</code> when <a href="#convert-from-rdf-algorithm">converting from RDF</a>.
+ </dd></dl></section>
+ </section>
+
+ <p>The following data structures are used for representing data about
+ RDF quads. They are used for normalization, and <a href="#rdf-conversion">RDF conversion</a>.
+ </p>
+
+ <section id="quad">
+ <h4><span class="secno">3.4.3 </span>Quad</h4>
+ <p>The <a href="#idl-def-Quad" class="idlType"><code>Quad</code></a> interface represents an RDF Quad.
+ See [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>] definition for
+ <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple">RDF triple</a></cite>,
+ which most closely aligns to <a href="#idl-def-Quad" class="idlType"><code>Quad</code></a>.
+ </p>
+ <pre class="idl"><span id="idl-def-Quad" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">Quad</span> {
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span> <span class="idlAttrName"><a href="#widl-Quad-subject">subject</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span> <span class="idlAttrName"><a href="#widl-Quad-property">property</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span> <span class="idlAttrName"><a href="#widl-Quad-object">object</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-Node" class="idlType"><code>Node</code></a>?</span> <span class="idlAttrName"><a href="#widl-Quad-graphName">graphName</a></span>;</span>
+};</span></pre><section id="attributes"><h5><span class="secno">3.4.3.1 </span>Attributes</h5><dl class="attributes"><dt id="widl-Quad-graphName"><code>graphName</code> of type <span class="idlAttrType"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span>, readonly, nullable</dt><dd>If present, the name associated with the <a href="#idl-def-Quad" class="idlType"><code>Quad</code></a> identifying
+ it as a member of a <a class="tref internalDFN" title="named_graph" href="#dfn-named_graph">named graph</a>. If it is missing, the quad
+ is a member of the <a class="tref internalDFN" title="default_graph" href="#dfn-default_graph">default graph</a>.
+ <div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/125"><span>Issue 125</span></a></div><div class="">This element is at risk, and may be removed.</div></div>
+ </dd><dt id="widl-Quad-object"><code>object</code> of type <span class="idlAttrType"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span>, readonly</dt><dd>The <a class="tref internalDFN" title="object" href="#dfn-object">object</a> associated with the <a href="#idl-def-Quad" class="idlType"><code>Quad</code></a>.</dd><dt id="widl-Quad-property"><code>property</code> of type <span class="idlAttrType"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span>, readonly</dt><dd>The <a class="tref internalDFN" title="property" href="#dfn-property">property</a> associated with the <a href="#idl-def-Quad" class="idlType"><code>Quad</code></a>.
+ Within JSON-LD, an <dfn title="rdf_predicate" id="dfn-rdf_predicate">RDF predicate</dfn> is refered to as a
+ <a class="tref internalDFN" title="property" href="#dfn-property">property</a></dd><dt id="widl-Quad-subject"><code>subject</code> of type <span class="idlAttrType"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span>, readonly</dt><dd>The <a class="tref internalDFN" title="subject" href="#dfn-subject">subject</a> associated with the <a href="#idl-def-Quad" class="idlType"><code>Quad</code></a>.</dd></dl></section>
+ </section>
+
+ <section id="node">
+ <h4><span class="secno">3.4.4 </span>Node</h4>
+ <p><a class="datatype idlType" title="Node" href="#idl-def-Node"><code>Node</code></a> is the base class of <a class="datatype idlType" title="IRI" href="#idl-def-IRI"><code><abbr title="Internationalized Resource Identifier">IRI</abbr></code></a>,
+ <a class="datatype idlType" title="BlankNode" href="#idl-def-BlankNode"><code>BlankNode</code></a>, and <a class="datatype idlType" title="Literal" href="#idl-def-Literal"><code>Literal</code></a>. It is the IDL
+ representation of a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> <a class="tref internalDFN" title="node" href="#dfn-node">node</a>.</p>
+ <pre class="idl"><span id="idl-def-Node" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">Node</span> {
+};</span></pre>
+ </section>
+
+ <section id="iri-1">
+ <h4><span class="secno">3.4.5 </span><abbr title="Internationalized Resource Identifier">IRI</abbr></h4>
+ <p>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> that is an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</p>
+ <pre class="idl"><span id="idl-def-IRI-1" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">IRI</span> : <span class="idlSuperclass"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span> {
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-IRI-value">value</a></span>;</span>
+};</span></pre><section id="attributes-1"><h5><span class="secno">3.4.5.1 </span>Attributes</h5><dl class="attributes"><dt id="widl-IRI-value"><code>value</code> of type <span class="idlAttrType"><a>DOMString</a></span>, readonly</dt><dd>The <abbr title="Internationalized Resource Identifier">IRI</abbr> identifier of the <a class="tref internalDFN" title="node" href="#dfn-node">node</a> as a [<cite><a class="bibref" href="#bib-UNICODE">UNICODE</a></cite>] string.</dd></dl></section>
+ </section>
+
+ <section id="blank-node">
+ <h4><span class="secno">3.4.6 </span>Blank Node</h4>
+
+ <p>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> in the <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> that
+ does not contain a de-reference-able identifier because it is either
+ ephemeral in nature or does not contain information that needs to be linked
+ to from outside of the <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.
+ A blank node is assigned an identifier starting
+ with the prefix <code>_:</code> and an implementation dependent,
+ auto-generated suffix that is unique to all information associated with the
+ particular blank node.
+ </p>
+
+ <pre class="idl"><span id="idl-def-BlankNode" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">BlankNode</span> : <span class="idlSuperclass"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span> {
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-BlankNode-identifier">identifier</a></span>;</span>
+};</span></pre><section id="attributes-2"><h5><span class="secno">3.4.6.1 </span>Attributes</h5><dl class="attributes"><dt id="widl-BlankNode-identifier"><code>identifier</code> of type <span class="idlAttrType"><a>DOMString</a></span>, readonly</dt><dd>The temporary identifier of the <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a>.
+ The <code>identifier</code> <em class="rfc2119" title="must not">must not</em> be relied upon in any way between two
+ separate processing runs of the same document or with a different document.</dd></dl></section>
+
+ <div class="note"><div class="note-title"><span>Note</span></div><p class="">Developers and authors must not assume that the
+ value of a <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a> will remain the same between two
+ processing runs. <a href="#idl-def-BlankNode" class="idlType"><code>BlankNode</code></a> values are only valid for the
+ most recent processing run on the document. <a href="#idl-def-BlankNode" class="idlType"><code>BlankNode</code></a>
+ values will often be generated differently by different processors.</p></div>
+
+ <div class="note"><div class="note-title"><span>Note</span></div><p class="">Implementers <em class="rfc2119" title="must">must</em> ensure that <a href="#idl-def-BlankNode" class="idlType"><code>BlankNode</code></a> values are unique
+ within the current environment, two <a class="datatype idlType" title="BlankNode" href="#idl-def-BlankNode"><code>BlankNodes</code></a>
+ are considered equal if, and only if, their values are strictly equal.</p></div>
+ </section>
+
+ <section id="literal">
+ <h4><span class="secno">3.4.7 </span>Literal</h4>
+ <p>Literals represent values such as numbers, dates and strings in
+ RDF data. A <a class="datatype idlType" title="Literal" href="#idl-def-Literal"><code>Literal</code></a> is comprised of three attributes:
+ </p>
+
+ <ul>
+ <li>a lexical form of the <code>value</code></li>
+ <li>an optional <code>language</code> tag</li>
+ <li>a <code>datatype</code> specified by an <a class="datatype idlType" title="IRI" href="#idl-def-IRI"><code><abbr title="Internationalized Resource Identifier">IRI</abbr></code></a></li>
+ </ul>
+
+ <p>Literals representing plain text in a natural language may have a
+ <code>language</code> tag specified by a string token, as specified in
+ [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>], normalized to lowercase
+ (e.g., <code>'en'</code>, <code>'fr'</code>, <code>'en-gb'</code>).
+ They also have a datatype attribute such as <code>xsd:string</code>.
+ If unspecified, the <code>datatype</code> defaults to <code>xsd:string</code>.
+ </p>
+
+ <p>Literals representing values with a specific datatype, such as
+ the integer 72, may have a <code>datatype</code> attribute specified in the form
+ of a <a href="#idl-def-IRI" class="idlType"><code>IRI</code></a> (e.g.,
+ <code>xsd:integer</code>).</p>
+
+ <p> See[<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>] definition for
+ <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-literal">literal</a></cite>.</p>
+
+ <pre class="idl"><span id="idl-def-Literal" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">Literal</span> : <span class="idlSuperclass"><a href="#idl-def-Node" class="idlType"><code>Node</code></a></span> {
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-Literal-value">value</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>DOMString</a>?</span> <span class="idlAttrName"><a href="#widl-Literal-language">language</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-IRI" class="idlType"><code>IRI</code></a>?</span> <span class="idlAttrName"><a href="#widl-Literal-datatype">datatype</a></span>;</span>
+};</span></pre><section id="attributes-3"><h5><span class="secno">3.4.7.1 </span>Attributes</h5><dl class="attributes"><dt id="widl-Literal-datatype"><code>datatype</code> of type <span class="idlAttrType"><a href="#idl-def-IRI" class="idlType"><code>IRI</code></a></span>, readonly, nullable</dt><dd>An optional datatype identified by a <abbr title="Internationalized Resource Identifier">IRI</abbr>.</dd><dt id="widl-Literal-language"><code>language</code> of type <span class="idlAttrType"><a>DOMString</a></span>, readonly, nullable</dt><dd>An optional language tag as defined in [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>], normalized to lowercase.</dd><dt id="widl-Literal-value"><code>value</code> of type <span class="idlAttrType"><a>DOMString</a></span>, readonly</dt><dd>The lexical form of the Literal's value.</dd></dl></section>
+ </section>
+ </section>
+
+</section>
+
+<section id="algorithms">
+
+<!--OddPage-->
+<h2><span class="secno">4. </span>Algorithms</h2>
+
+<p>All algorithms described in this section are intended to operate on
+language-native data structures. That is, the serialization to a text-based
+JSON document isn't required as input or output to any of these algorithms and
+language-native data structures <em class="rfc2119" title="must">must</em> be used where applicable.</p>
+
+<section id="algorithm-terms">
+ <h3><span class="secno">4.1 </span>Algorithm Terms</h3>
+ <dl>
+ <dt><dfn title="active_subject" id="dfn-active_subject">active subject</dfn></dt>
+ <dd>
+ the currently active subject that the processor should use when
+ processing.
+ </dd>
+ <dt><dfn title="active_property" id="dfn-active_property">active property</dfn></dt>
+ <dd>
+ the currently active property that the processor should use when
+ processing. The active property is represented in the original lexical form, which
+ is used for finding coercion mappings in the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.
+ </dd>
+ <dt><dfn title="active_object" id="dfn-active_object">active object</dfn></dt>
+ <dd>
+ the currently active object that the processor should use when
+ processing.
+ </dd>
+ <dt><dfn title="active_context" id="dfn-active_context">active context</dfn></dt>
+ <dd>
+ a context that is used to resolve <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s while the processing
+ algorithm is running. The <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> is the context
+ contained within the <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a>.
+ </dd>
+ <dt><dfn title="compact_iri" id="dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn></dt>
+ <dd>
+ a compact <abbr title="Internationalized Resource Identifier">IRI</abbr> is has the form of <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> and <em>suffix</em> and is used as a way
+ of expressing an <abbr title="Internationalized Resource Identifier">IRI</abbr> without needing to define separate <a class="tref internalDFN" title="term" href="#dfn-term">term</a> definitions for
+ each <abbr title="Internationalized Resource Identifier">IRI</abbr> contained within a common vocabulary identified by <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a>.
+ </dd>
+ <dt><dfn title="local_context" id="dfn-local_context">local context</dfn></dt>
+ <dd>
+ a context that is specified within a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>,
+ specified via the <code>@context</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>.
+ </dd>
+ <dt><dfn title="processor_state" id="dfn-processor_state">processor state</dfn></dt>
+ <dd>
+ the <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a>, which includes the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active
+ context</a>, <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>, and
+ <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>. The <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a> is managed
+ as a stack with elements from the previous <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a>
+ copied into a new <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a> when entering a new
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>.
+ </dd>
+ <dt><dfn title="json-ld_input" id="dfn-json-ld_input">JSON-LD input</dfn></dt>
+ <dd>
+ The JSON-LD data structure that is provided as input to the algorithm.
+ </dd>
+ <dt><dfn title="json-ld_output" id="dfn-json-ld_output">JSON-LD output</dfn></dt>
+ <dd>
+ The JSON-LD data structure that is produced as output by the algorithm.
+ </dd>
+ <dt><dfn title="term" id="dfn-term">term</dfn></dt><dd>
+ A <a class="tref internalDFN" title="term" href="#dfn-term">term</a> is a short word defined in a context that <em class="rfc2119" title="may">may</em> be expanded to an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>
+ </dd>
+ <dt><dfn title="prefix" id="dfn-prefix">prefix</dfn></dt><dd>
+ A <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> is a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> that expands to a vocabulary base <abbr title="Internationalized Resource Identifier">IRI</abbr>. It
+ is typically used along with a <em>suffix</em> to form a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> to create an <abbr title="Internationalized Resource Identifier">IRI</abbr>
+ within a vocabulary.
+ </dd>
+ <dt><dfn title="language-tagged_string" id="dfn-language-tagged_string">language-tagged string</dfn></dt><dd>
+ A <a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged string</a> is a <a class="tref internalDFN" title="literal" href="#dfn-literal">literal</a> without a datatype, including
+ a language. See <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-language-tagged-string">languaged-tagged string</a></cite>
+ in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].
+ </dd>
+ <dt><dfn title="typed_literal" id="dfn-typed_literal">typed literal</dfn></dt><dd>
+ A <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> is a <a class="tref internalDFN" title="literal" href="#dfn-literal">literal</a> with an associated <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>
+ which indicates the literal's datatype. See <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-literal">literal</a></cite>
+ in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].
+ </dd>
+ </dl>
+</section>
+
+<section id="context-processing">
+ <h3 id="context"><span class="secno">4.2 </span>Context Processing</h3>
+ <p>Processing of JSON-LD data structure is managed recursively.
+ During processing, each rule is applied using information provided by the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.
+ Processing begins by pushing a new <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a> onto the <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a> stack.
+ If a <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a> is encountered, information from the <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a> is merged
+ into the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.</p>
+ <p>The <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> is used for expanding properties and values of a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> (or elements
+ of an array) using a <dfn title="term_mapping" id="dfn-term_mapping">term mapping</dfn>. It is also used to maintain
+ <dfn title="coercion_mapping" id="dfn-coercion_mapping">coercion mapping</dfn>s from terms to datatypes, <dfn title="language_mapping" id="dfn-language_mapping">language mapping</dfn>s from terms to language codes,
+ and <dfn title="list_mapping" id="dfn-list_mapping">list mapping</dfn>s and <dfn title="set_mapping" id="dfn-set_mapping">set mapping</dfn>s for terms. Processors <em class="rfc2119" title="must">must</em> use the
+ lexical form of the property when creating a mapping, as lookup is performed on lexical forms, not
+ expanded <abbr title="Internationalized Resource Identifier">IRI</abbr> representations.</p>
+ <p>A <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a> is identified within a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> having a <code>@context</code>
+ property with a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>, <a class="tref internalDFN" title="array" href="#dfn-array">array</a> or a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> value.
+ When processing a <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a>, special processing rules apply:</p>
+ <ol class="algorithm">
+ <li>Create a new, empty <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a>.</li>
+ <li>Let <em>context</em> be the value of <code>@context</code>
+ <ol class="algorithm">
+ <li id="process-context">If <em>context</em> equals <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, clear the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.</li>
+ <li>If <em>context</em> is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, process each element as <em>context</em> in order
+ by starting at <a href="#process-context">Step 2.1</a>.</li>
+ <li>If <em>context</em> is a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>, it <em class="rfc2119" title="must">must</em> have a lexical form of <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>.
+ <ol class="algorithm">
+ <li>Dereference <em>context</em>.</li>
+ <li>If the resulting document is a JSON document, extract the top-level <code>@context</code>
+ element using the JSON Pointer "/@context" as described in [<cite><a class="bibref" href="#bib-JSON-POINTER">JSON-POINTER</a></cite>]. Set <em>context</em>
+ to the extracted content and process it by starting at <a href="#process-context">Step 2.1</a>.</li>
+ </ol>
+ </li>
+ <li>If <em>context</em> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>, perform the following steps:
+ <ol class="algorithm">
+ <li>If <em>context</em> has a <code>@language</code> property, it <em class="rfc2119" title="must">must</em> have a value of a
+ simple <a class="tref internalDFN" title="string" href="#dfn-string">string</a> with the lexical form described in [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>], or <a class="tref internalDFN" title="null" href="#dfn-null">null</a>. Add the language to the <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a>.</li>
+ <li>If <em>value</em> has a <code>@vocab</code> key, it <em class="rfc2119" title="must">must</em> have a value of a simple <a class="tref internalDFN" title="string" href="#dfn-string">string</a>
+ with the lexical form of an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or <a class="tref internalDFN" title="null" href="#dfn-null">null</a>. Add the vocabulary mapping to the <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a>.</li>
+ <li id="object-context">Otherwise, for each property in <em>context</em> perform the following steps:
+ <ol class="algorithm">
+ <li>If the property's value is a simple <a class="tref internalDFN" title="string" href="#dfn-string">string</a>, determine the <abbr title="Internationalized Resource Identifier">IRI</abbr> mapping value by
+ performing <a href="#iri-expansion"><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion</a> on the associated value. If the result of the <abbr title="Internationalized Resource Identifier">IRI</abbr>
+ mapping is an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, merge the property into the <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a>
+ <a class="tref internalDFN" title="term_mapping" href="#dfn-term_mapping">term mapping</a>, unless the property is a JSON-LD <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>, in which
+ case throw an exception.</li>
+ <li>Otherwise, if the property's value is <a class="tref internalDFN" title="null" href="#dfn-null">null</a> remove mapping, coercion,
+ container and language information associated with property from the
+ <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a>.</li>
+ <li>Otherwise, the <em>property</em>'s <em>value</em> <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>.
+ <ol class="algorithm">
+ <li>If the <em>property</em> is a JSON-LD <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> and the value has
+ <code>@id</code>, <code>@language</code> or <code>@type</code> properties, throw an exception.
+ <div class="issue"><div class="issue-title"><span>Issue</span></div><div class="">Undecided if <code>@type</code> or <code>@graph</code> can take a
+ <code>@container</code> with <code>@set</code>.
+ </div></div>
+ </li>
+ <li>If the <em>property</em> has the form of <a class="tref internalDFN" title="term" href="#dfn-term">term</a>, its <em>value</em> <em class="rfc2119" title="must">must</em> have an
+ <code>@id</code> property with a string value which <em class="rfc2119" title="must">must</em> have the form of a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>,
+ <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>. Determine the <abbr title="Internationalized Resource Identifier">IRI</abbr> mapping
+ by performing <a href="#iri-expansion"><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion</a> on the associated value.
+ If the result of the <abbr title="Internationalized Resource Identifier">IRI</abbr> mapping is an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, merge the
+ <em>property</em> into the <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a> <a class="tref internalDFN" title="term_mapping" href="#dfn-term_mapping">term mapping</a>.</li>
+ <li>If the <em>property</em> has the form of of a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> or <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
+ the <em>value</em> <em class="rfc2119" title="may">may</em> have a <code>@id</code> property with a string value which <em class="rfc2119" title="must">must</em> have the
+ form of a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>, <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or absolute <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.
+ Determine the <abbr title="Internationalized Resource Identifier">IRI</abbr> mapping by performing <a href="#iri-expansion"><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion</a> on the associated
+ value. If the result of the <abbr title="Internationalized Resource Identifier">IRI</abbr> mapping is an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, merge the
+ <em>property</em> into the <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a> <a class="tref internalDFN" title="term_mapping" href="#dfn-term_mapping">term mapping</a>.</li>
+ <li>If the <em>value</em> has a <code>@type</code> property, its value <em class="rfc2119" title="must">must</em> have the form of a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>,
+ <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or the <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> <code>@id</code>.
+ Determine the <abbr title="Internationalized Resource Identifier">IRI</abbr> by performing <a href="#iri-expansion"><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion</a> on the associated value.
+ If the result of the <abbr title="Internationalized Resource Identifier">IRI</abbr> mapping is an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> or <code>@id</code>, merge into the
+ <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a> <a class="tref internalDFN" title="coercion_mapping" href="#dfn-coercion_mapping">coercion mapping</a> using the lexical value of the <em>property</em>.</li>
+ <li>If the <em>value</em> has a <code>@container</code> property, its value <em class="rfc2119" title="must">must</em> be <code>@list</code> or
+ <code>@set</code>. Merge the <a class="tref internalDFN" title="list_mapping" href="#dfn-list_mapping">list mapping</a> or <a class="tref internalDFN" title="set_mapping" href="#dfn-set_mapping">set mapping</a> into the
+ <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a> using the lexical value of the <em>property</em>.</li>
+ <li>If the <em>value</em> has a <code>@language</code> property but no <code>@type</code> property, the value of the
+ <code>@language</code> property <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> or <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.
+ Merge the <a class="tref internalDFN" title="language_mapping" href="#dfn-language_mapping">language mapping</a> into the <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a> using the lexical value of the
+ <em>property</em>.</li>
+ </ol>
+ </li>
+ <li>Merge the <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a> into the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.</li>
+ <li>Repeat <a href="#object-context">Step 2.4.2</a> until no entries are added to the <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local
+ context</a>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+
+ <div class="note"><div class="note-title"><span>Note</span></div><p class="">It can be difficult to distinguish between a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> and an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
+ as a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> may seem to be a valid <abbr title="Internationalized Resource Identifier">IRI</abbr> <em>scheme</em>. When performing repeated <abbr title="Internationalized Resource Identifier">IRI</abbr> expansion,
+ a term used as a prefix may not have a valid mapping due to dependencies in resolving term definitions. By
+ continuing <a href="#object-context">Step 2.3.2</a> until no changes are made, mappings to IRIs created
+ using an undefined term prefix will eventually expand to an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>s.</p></div>
+
+ <div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/43"><span>Issue 43</span></a></div><p class=""><a href="https://github.com/json-ld/json-ld.org/issues/43">Issue 43</a>
+ concerns performing <abbr title="Internationalized Resource Identifier">IRI</abbr> expansion in the key position of a context definition.</p></div>
+</section>
+
+<section id="iri-expansion">
+ <h3><span class="secno">4.3 </span><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion</h3>
+ <p>Keys and some values are evaluated to produce an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>. This section defines an algorithm for
+ transforming a value representing an <abbr title="Internationalized Resource Identifier">IRI</abbr> into an actual <abbr title="Internationalized Resource Identifier">IRI</abbr>.</p>
+ <p><a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> may be represented as an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>,
+ a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or as a value relative to <code>@vocab</code>.</p>
+ <p>An <dfn title="absolute_iri" id="dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn> is defined in [<cite><a class="bibref" href="#bib-RFC3987">RFC3987</a></cite>] containing a <em>scheme</em> along with
+ <em>path</em> and optional <em>query</em> and fragment segments. A <dfn title="relative_iri" id="dfn-relative_iri">relative <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn> is an <abbr title="Internationalized Resource Identifier">IRI</abbr>
+ that is relative some other <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>; in the case of JSON-LD this is the base location
+ of the document.</p>
+
+ <p>The algorithm for generating an <abbr title="Internationalized Resource Identifier">IRI</abbr> is:
+ </p><ol class="algorithm">
+ <li>If the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> contains a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> mapping for the value using
+ a case-sensitive comparison, use the mapped value as an <abbr title="Internationalized Resource Identifier">IRI</abbr>.</li>
+ <li>Otherwise, split the value into a <em>prefix</em> and <em>suffix</em> from the first occurrence of ':'.</li>
+ <li>If the prefix is a '_' (underscore), the value represents a named <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a>.</li>
+ <li>If the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> contains a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> mapping for <em>prefix</em> using
+ a case-sensitive comparison, and <em>suffix</em> does not does not begin with '//'
+ (i.e., it does not match a <em>hier-part</em> including
+ <em>authority</em> (as defined in [<cite><a class="bibref" href="#bib-RFC3986">RFC3986</a></cite>]), generate an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>
+ by prepending the mapped prefix to the (possibly empty) suffix using textual concatenation. Note that an empty
+ suffix and no suffix (meaning the value contains no ':' string at all) are treated equivalently.</li>
+ <li>Otherwise, if the <abbr title="Internationalized Resource Identifier">IRI</abbr> being processed does not contain a colon and is a property, i.e., a key in
+ a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>, or the value of <code>@type</code> and the active context has a
+ <code>@vocab</code> mapping, join the mapped value to the suffix using textual concatenation.</li>
+ <li>Otherwise, if the <abbr title="Internationalized Resource Identifier">IRI</abbr> being processed does not contain a colon and is not a property, i.e., not a key in a
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> treat it as a <a class="tref internalDFN" title="relative_iri" href="#dfn-relative_iri">relative <abbr title="Internationalized Resource Identifier">IRI</abbr></a> and resolve it against the base <abbr title="Internationalized Resource Identifier">IRI</abbr> as
+ per [<cite><a class="bibref" href="#bib-RFC3986">RFC3986</a></cite>] using only the basic algorithm in section 5.2. Neither <em>Syntax-Based Normalization</em>
+ nor <em>Scheme-Based Normalization</em> (described in sections 6.2.2 and 6.2.3 of [<cite><a class="bibref" href="#bib-RFC3986">RFC3986</a></cite>]) are performed.
+ Characters additionally allowed in <abbr title="Internationalized Resource Identifier">IRI</abbr> references are treated in the same way that unreserved characters are
+ treated in URI references, per section 6.5 of [<cite><a class="bibref" href="#bib-RFC3987">RFC3987</a></cite>].</li>
+ <li>Otherwise, use the value directly as an <abbr title="Internationalized Resource Identifier">IRI</abbr>.</li>
+ </ol>
+ <p></p>
+</section>
+
+<section id="iri-compaction">
+ <h3><span class="secno">4.4 </span><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction</h3>
+ <p>Some keys and values are expressed using <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s. This section defines an
+ algorithm for transforming an <abbr title="Internationalized Resource Identifier">IRI</abbr> (<em>iri</em>) to a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> or <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> using the
+ <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s specified in the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> using an optional <em>value</em>.</p>
+
+<section id="iri-compaction-algorithm">
+ <h4><span class="secno">4.4.1 </span><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction Algorithm</h4>
+ <p>The algorithm for generating a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> is:
+ </p><ol class="algorithm">
+ <li>Create an empty list of terms <em>terms</em> that will be populated with
+ <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s that are ranked according to how closely they match
+ <em>value</em>. Initialize <em>highest rank</em> to <code>0</code>,
+ and set a flag <em>list container</em> to <code>false</code>.</li>
+ <li>For each <em>term</em> in the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>:
+ <ol class="algorithm">
+ <li>If the <em>term</em>'s <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> is not a complete match against
+ <em>iri</em>, continue to the next <em>term</em>.</li>
+ <li>If <em>value</em> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> containing only the property <code>@list</code>:
+ <ol class="algorithm">
+ <li>If <em>term</em> has a <code>@container</code> set to <code>@set</code>, continue
+ to the next <em>term</em>.</li>
+ <li>If <em>list container</em> is <code>true</code> and <em>term</em> does not have a
+ <code>container</code> set to <code>@list</code> and <em>value</em> is <a class="tref internalDFN" title="null" href="#dfn-null">null</a>,
+ continue to the next <em>term</em>.</li>
+ </ol>
+ </li>
+ <li>Otherwise, if <em>term</em> has a <code>container</code> set to <code>@list</code>,
+ continue to the next <em>term</em>.</li>
+ <li>Set <em>rank</em> to the <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a> of <em>value</em> by passing
+ passing <em>term</em>, <em>value</em>, and <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> to
+ the <a href="#term-rank-algorithm">Term Rank Algorithm</a>.</li>
+ <li>If <em>rank</em> is greater than <code>0</code>:
+ <ol class="algorithm">
+ <li>If <em>term</em> has a <code>container</code> set to <code>@set</code>, then add
+ <code>1</code> to <em>rank</em>.</li>
+ <li>If <em>value</em> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> containing only the property <code>@list</code>
+ and <em>list container</em> is <code>false</code> and <em>term</em> has a <code>container</code>
+ set to <code>@list</code>, then set <em>list container</em> to <code>true</code>, clear
+ <em>terms</em>, set <em>highest rank</em> to <em>rank</em>, and add <em>term</em> to <em>terms</em>.</li>
+ <li>Otherwise, if <em>rank</em> is greater than or equal to <em>highest rank</em>:
+ <ol class="algorithm">
+ <li>If <em>rank</em> is greater than <em>highest rank</em>, clear <em>terms</em> and set
+ <em>highest rank</em> to <em>rank</em>.</li>
+ <li>Add <em>term</em> to <em>terms</em>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>If <em>terms</em> is empty, and the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> has a <code>@vocab</code>
+ which is a prefix of <em>iri</em> where
+ the resulting <a class="tref internalDFN" title="relative_iri" href="#dfn-relative_iri">relative <abbr title="Internationalized Resource Identifier">IRI</abbr></a> is not a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> in the
+ <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>. The resulting <a class="tref internalDFN" title="relative_iri" href="#dfn-relative_iri">relative <abbr title="Internationalized Resource Identifier">IRI</abbr></a> is the
+ unmatched part of <em>iri</em>.</li>
+ <li>If <em>terms</em> is empty, add a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> representation of <em>iri</em>
+ for each <a class="tref internalDFN" title="term" href="#dfn-term">term</a> in the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> which
+ maps to an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> which is a prefix for <em>iri</em> where
+ the resulting <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> is not a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> in the
+ <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>. The resulting <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> is the
+ <a class="tref internalDFN" title="term" href="#dfn-term">term</a> associated with the partially
+ matched <abbr title="Internationalized Resource Identifier">IRI</abbr> in the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> concatenated with a
+ colon (:) character and the unmatched part of <em>iri</em>.</li>
+ <li>If <em>terms</em> is empty, the <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> being processed is a property or the
+ value of <code>@type</code> and <code>@vocab</code> is not null and matches the beginning
+ of <em>iri</em>, return the unmatched portion of <em>iri</em>. Otherwise return
+ <em>iri</em>.</li>
+ <li>Otherwise, return the shortest and lexicographically least value in <em>terms</em>.</li>
+ </ol>
+ <p></p>
+</section>
+
+<section id="term-rank-algorithm">
+<h4><span class="secno">4.4.2 </span>Term Rank Algorithm</h4>
+<p>When selecting among multiple possible terms for a given property, it may be that multiple
+ <a class="tref internalDFN" title="term" href="#dfn-term">terms</a> are defined with the same <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>, but differ in <code>@type</code>, <code>@container</code>
+ or <code>@language</code>. The purpose of this algorithm is to take a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>
+ and a value and give it a <dfn title="term_rank" id="dfn-term_rank">term rank</dfn>. The selection can then be based, partly, on
+ the term having the highest <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a>.</p>
+<p>Given a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> <em>term</em>, <em>value</em>, and <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>
+ determine the <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a> using the following steps:</p>
+<ol class="algorithm">
+ <li>If <em>value</em> is <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a> is <code>3</code>.</li>
+ <li>Otherwise, if <em>value</em> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> containing only the property <code>@list</code>:
+ <ol class="algorithm">
+ <li>If the <code>@list</code> property is an empty array, if <em>term</em> has <code>@container</code>
+ set to <code>@list</code>, <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a> is <code>1</code>, otherwise <code>0</code>.</li>
+ <li>Otherwise, return the sum of the <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a>s for every entry in the list.</li>
+ </ol>
+ </li>
+ <li>Otherwise, <em>value</em> <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>, <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>,
+ or a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> having a <code>@value</code>.
+ <ol class="algorithm">
+ <li>If <em>value</em> has a <code>@value</code> property:
+ <ol class="algorithm">
+ <li>If <em>value</em> has a <code>@type</code> property matching a
+ <code>@type</code> coercion for <em>term</em>, <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a>
+ is <code>3</code>, otherwise if <em>term</em> has no <code>@type</code>
+ coercion and no <code>@language</code>, <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a> is
+ <code>1</code>, otherwise <code>0</code>.</li>
+ <li>Otherwise, if <code>@value</code> is not a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>, if <em>term</em> has
+ no <code>@type</code> or <code>@language</code> it is <code>2</code>, otherwise <code>1</code>.</li>
+ <li>Otherwise, if <em>value</em> has no <code>@language</code> property, if <em>term</em> has
+ <code>@language</code> <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, or <em>term</em> has no <code>@type</code> or
+ <code>@language</code> and the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> has no <code>@language</code>,
+ <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a> is <code>3</code>, otherwise <code>0</code>.</li>
+ <li>Otherwise, if <em>value</em> has a <code>@language</code> property matching a
+ <code>@language</code> definition for <em>term</em> (or
+ <em>term</em> has no <code>@type</code> or <code>@language</code> definition and
+ <code>@language</code> in the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> matches the
+ <em>value</em> <code>@language</code>), <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a> is
+ <code>3</code>, otherwise if <em>term</em> has no <code>@type</code>
+ coercion and no <code>@language</code>, <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a> is
+ <code>1</code>, otherwise <code>0</code>.</li>
+ </ol>
+ </li>
+ <li>Otherwise, if <em>term</em> has <code>@type</code> coerced to <code>@id</code>,
+ <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a> is <code>3</code>, otherwise
+ if <em>term</em> has no <code>@type</code> coercion and no <code>@language</code>,
+ <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a> is <code>1</code>, otherwise <code>0</code>.</li>
+ </ol>
+ </li>
+ <li>Return <a class="tref internalDFN" title="term_rank" href="#dfn-term_rank">term rank</a>.</li>
+</ol>
+</section>
+
+</section>
+
+<section id="value-expansion">
+ <h3><span class="secno">4.5 </span>Value Expansion</h3>
+ <p>Some values in JSON-LD can be expressed in a compact form. These values
+ are required to be expanded at times when processing JSON-LD documents.</p>
+
+ <p>The algorithm for expanding a <em>value</em> takes an <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>
+ and <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>. It is implemented as follows:</p>
+ <ol class="algorithm">
+ <li>If <em>value</em> is <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, the <em>value</em> is already expanded.</li>
+ <li>If <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> is <code>@graph</code> or the target of an <code>@id</code> coercion,
+ expand the value into an object with a key-value pair where the key is <code>@id</code> and the value is
+ the expanded <abbr title="Internationalized Resource Identifier">IRI</abbr> according to the <a href="#iri-expansion"><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion</a> rules.</li>
+ <li>Otherwise, if <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> is not a <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>, then expand <em>value</em> into an
+ object:
+ <ol class="algorithm">
+ <li>Set the first key-value pair to <code>@value</code> and the unexpanded <em>value</em>.</li>
+ <li>If the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> is the target of typed literal coercion, set the second key-value pair
+ to <code>@type</code> and the associated coercion datatype expanded according to the
+ <a href="#iri-expansion"><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion</a> rules.</li>
+ <li>Otherwise, if the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> is the target of language tagging, set the second key-value
+ pair to <code>@language</code> and value of the language tagging from the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.</li>
+ </ol>
+ </li>
+ <li>Otherwise, <em>value</em> is already expanded.</li>
+ </ol>
+</section>
+
+<section id="value-compaction">
+ <h3><span class="secno">4.6 </span>Value Compaction</h3>
+ <p>Some values, such as <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> and <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literals</a>, may be expressed in an
+ expanded form (<dfn title="expanded_value" id="dfn-expanded_value">expanded value</dfn>) in JSON-LD. These values are required to be compacted at
+ times when processing JSON-LD documents.
+ </p>
+
+ <p>The algorithm for compacting an expanded value <em>value</em> takes an <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>
+ and <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>. It is implemented as follows:</p>
+ <ol class="algorithm">
+ <li>If <em>value</em> only has one property and the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> has no default language,
+ then the compacted value is the value of <code>@value</code>.</li>
+ <li>Otherwise, if <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> is <code>@graph</code>, the compacted value is the
+ value associated with the <code>@id</code> key, processed according to
+ the <a href="#iri-compaction"><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction</a> steps.</li>
+ <li>Otherwise, if the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> contains a coercion target for the
+ key that matches the expression of the value, compact the value using the
+ following steps:
+ <ol class="algorithm">
+ <li>If the coercion target is an <code>@id</code>, the compacted
+ value is the value associated with the <code>@id</code> key,
+ processed according to the
+ <a href="#iri-compaction"><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction</a> steps.</li>
+ <li>If the coercion target is a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a>, the compacted
+ value is the value associated with the <code>@value</code> key.</li>
+ </ol>
+ </li>
+ <li>Otherwise, if <em>value</em> contains an <code>@id</code> key, the compacted value is <em>value</em> with
+ the value of <code>@id</code> processed according to the
+ <a href="#iri-compaction"><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction</a> steps.</li>
+ <li>Otherwise, if the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> contains a <code>@language</code>, which
+ matches the <code>@language</code> of the value, or the value has only a <code>@value</code> key, the compacted
+ value is the value associated with the <code>@value</code> key.</li>
+ <li>Otherwise, if the value contains a <code>@type</code> key, the compacted value
+ is <em>value</em> with the <code>@type</code> value processed according to the
+ <a href="#iri-compaction"><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction</a> steps.</li>
+ <li>Otherwise, the value is not modified.</li>
+ </ol>
+</section>
+
+<section id="expansion-1">
+<h3><span class="secno">4.7 </span>Expansion</h3>
+
+<p>Expansion is the process of taking a JSON-LD document and applying a
+ context such that all <abbr title="Internationalized Resource Identifier">IRI</abbr>, datatypes, and literal values are expanded so
+ that the context is no longer necessary. JSON-LD document expansion
+ is typically used as a part of other JSON-LD API methods.</p>
+
+<p>For example, assume the following JSON-LD input document:</p>
+
+<div class="example"><div class="example-title"><span>Example 13</span></div><pre class="example">{
+ "@context":
+ {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "homepage": {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type", "@id"
+ }
+ },
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}</pre></div>
+
+<p>Running the JSON-LD Expansion algorithm against the JSON-LD input document
+ provided above would result in the following output:</p>
+
+<div class="example"><div class="example-title"><span>Example 14</span></div><pre class="example">{
+ "http://xmlns.com/foaf/0.1/name": "Manu Sporny",
+ "http://xmlns.com/foaf/0.1/homepage": {
+ "@id": "http://manu.sporny.org/"
+ }
+}</pre></div>
+
+<section id="expansion-algorithm">
+<h4><span class="secno">4.7.1 </span>Expansion Algorithm</h4>
+
+<p>The algorithm takes three input variables: an <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>,
+ an <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>, and an <em>element</em> to be expanded. To
+ begin, the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> is set to the result of performing, <a href="#context-processing">Context Processing</a> on the passed
+ <em>context</em>, or empty if <em>context</em> is <a class="tref internalDFN" title="null" href="#dfn-null">null</a>,
+ <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> is set to <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, and
+ <em>element</em> is set to the <a class="tref internalDFN" title="json-ld_input" href="#dfn-json-ld_input">JSON-LD input</a>.</p>
+<ol class="algorithm">
+ <li>If <em>element</em> is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, process each entry in <em>element</em> recursively
+ using this algorithm, passing copies of the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> and <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.
+ If has a <code>@container</code> set to <code>@list</code> and any entry in <em>element</em> is an
+ <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, or is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> containing a <code>@list</code> property,
+ throw an exception, as lists of lists are not allowed.
+ If the expanded entry is null, drop it. If it's an array, merge its entries with <em>element</em>'s entries.</li>
+ <li>Otherwise, if <em>element</em> is an object
+ <ol class="algorithm">
+ <li>If <em>element</em> has a <code>@context</code> property, update the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> according to
+ the steps outlined in <a href="#context-processing">Context Processing</a> and remove the <code>@context</code>
+ property.</li>
+ <li>Then, proceed and process each <em>property</em> and <em>value</em> in <em>element</em> as follows:
+ <ol class="algorithm">
+ <li>Remove <em>property</em> from <em>element</em>, expand
+ <em>property</em> according to the steps outlined in <a href="#iri-expansion"><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion</a>.
+ Set the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> to the original un-expanded <em>property</em> if
+ <em>property</em> is not a <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>.</li>
+ <li>If <em>property</em> does not expand to a keyword or an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> (i.e., it doesn't contain a colon),
+ continue with the next property from <em>element</em>.</li>
+ <li>If <em>value</em> is <a class="tref internalDFN" title="null" href="#dfn-null">null</a> and <em>property</em> is not <code>@value</code>, continue with the next
+ property from <em>element</em>.</li>
+ <li>If the <em>property</em> is <code>@id</code> the <em>value</em> <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>.
+ Expand the <em>value</em> according to <a href="#iri-expansion"><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion</a>.</li>
+ <li>Otherwise, if the <em>property</em> is <code>@type</code>:
+ <ol class="algorithm">
+ <li>If <em>value</em> is a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>, expand according to <a href="#iri-expansion"><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion</a>.</li>
+ <li>Otherwise, if <em>value</em> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON Object</a>, it must be empty (used for
+ <cite><a href="../json-ld-framing/#framing">Framing</a></cite>).</li>
+ <li>Otherwise, if <em>value</em> is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, all elements must be <a class="tref internalDFN" title="string" href="#dfn-string">string</a>s.
+ Expand <em>value</em> for each of its entries according to <a href="#iri-expansion"><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion</a>.</li>
+ </ol>
+ </li>
+ <li>Otherwise, if the <em>property</em> is <code>@value</code> or <code>@language</code> the <em>value</em> <em class="rfc2119" title="must not">must not</em> be a
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> or an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>.</li>
+ <li>Otherwise, if the <em>property</em> is <code>@list</code> or <code>@set</code> expand <em>value</em>
+ recursively using this algorithm, passing copies of the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> and <em>active property</em>. If the expanded
+ <em>value</em> is not an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, convert it to an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>.
+ If <em>property</em> is <code>@list</code> and any entry in <em>value</em> is a
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> containing an <code>@list</code> property, throw an exception, as
+ lists of lists are not supported.</li>
+ <li>Otherwise, expand <em>value</em> recursively using this algorithm, passing copies of the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> and
+ <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.</li>
+ <li>If <em>property</em> is not a keyword
+ and <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> has a <code>@container</code> <code>@list</code>
+ and the expanded <em>value</em> is not <a class="tref internalDFN" title="null" href="#dfn-null">null</a>,
+ convert <em>value</em> to an <a class="tref internalDFN" title="object" href="#dfn-object">object</a> with an <code>@list</code> property whose value is
+ set to <em>value</em> (unless <em>value</em> is already in that form).</li>
+ <li>Convert <em>value</em> to <a class="tref internalDFN" title="array" href="#dfn-array">array</a> form unless <em>value</em> is <a class="tref internalDFN" title="null" href="#dfn-null">null</a> or <em>property</em> is
+ <code>@id</code>, <code>@type</code>, <code>@value</code>, or <code>@language</code>.</li>
+ <li>If <em>value</em> is not <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, either merge <em>value</em> into an existing <em>property</em> property of
+ <em>element</em> or create a new <em>property</em> property with <em>value</em> as value.</li>
+ </ol>
+ </li>
+ <li>If the processed <em>element</em> has an <code>@value</code> property
+ <ol class="algorithm">
+ <li><em>element</em> <em class="rfc2119" title="must not">must not</em> have more than one other property, which can either be <code>@language</code> or <code>@type</code>
+ with a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> value.</li>
+ <li>if the value of <code>@value</code> equals <a class="tref internalDFN" title="null" href="#dfn-null">null</a>,
+ replace <em>element</em> with the value of <code>@value</code>.</li>
+ </ol>
+ </li>
+ <li>Otherwise, if <em>element</em> has an <code>@type</code> property and its value is not in the form of an
+ <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, convert it to an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>.</li>
+ <li>If <em>element</em> has an <code>@set</code> or <code>@list</code> property, it <em class="rfc2119" title="must">must</em> be the only property.
+ Set <em>element</em> to the value of <code>@set</code>; leave <code>@list</code> untouched.</li>
+ <li>If <em>element</em> has just a <code>@language</code> property, set <em>element</em> to <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.</li>
+ </ol>
+ </li>
+ <li>Otherwise, expand <em>element</em> according to the <a href="#value-expansion">Value Expansion</a> rules,
+ passing copies of the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> and <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.</li>
+</ol>
+
+<p>If, after the algorithm outlined above is run, the resulting <em>element</em> is an <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with just a <code>@graph</code>
+ property, <em>element</em> is set to the value of <code>@graph</code>'s value. Finally, if <em>element</em> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>,
+ it is wrapped into an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>.</p>
+
+</section>
+
+</section>
+
+<section id="compaction-1">
+<h3><span class="secno">4.8 </span>Compaction</h3>
+
+<p>Compaction is the process of taking a JSON-LD document and applying a
+ context such that the most compact form of the document is generated. JSON
+ is typically expressed in a very compact, key-value format. That is, full
+ IRIs are rarely used as keys. At times, a JSON-LD document may be received
+ that is not in its most compact form. JSON-LD, via the API, provides a way
+ to compact a JSON-LD document.</p>
+
+<p>For example, assume the following JSON-LD input document:</p>
+
+<div class="example"><div class="example-title"><span>Example 15</span></div><pre class="example">{
+ "http://xmlns.com/foaf/0.1/name": "Manu Sporny",
+ "http://xmlns.com/foaf/0.1/homepage": {
+ "@id": "http://manu.sporny.org/"
+ }
+}</pre></div>
+
+<p>Additionally, assume the following developer-supplied JSON-LD context:</p>
+
+<div class="example"><div class="example-title"><span>Example 16</span></div><pre class="example">{
+ "@context": {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "homepage": {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ }
+}</pre></div>
+
+<p>Running the JSON-LD Compaction algorithm given the context supplied above
+ against the JSON-LD input document provided above would result in the following
+ output:</p>
+
+<div class="example"><div class="example-title"><span>Example 17</span></div><pre class="example">{
+ "@context": {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "homepage": {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ },
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}</pre></div>
+
+<p>The compaction algorithm also enables the developer to map any expanded
+ format into an application-specific compacted format. While the context
+ provided above mapped <code>http://xmlns.com/foaf/0.1/name</code> to
+ <strong>name</strong>, it could have also mapped it to any arbitrary string
+ provided by the developer.</p>
+
+<section id="compaction-algorithm">
+<h4><span class="secno">4.8.1 </span>Compaction Algorithm</h4>
+
+<p>The algorithm takes three input variables: an <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>, an <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>,
+ and an <em>element</em> to be compacted. To begin, the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> is
+ set to the result of performing <a href="#context-processing">Context Processing</a> on the passed <em>context</em>,
+ <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> is set to <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, and <em>element</em> is set to the result of performing the
+ <a href="#expansion-algorithm">Expansion Algorithm</a> on the <a class="tref internalDFN" title="json-ld_input" href="#dfn-json-ld_input">JSON-LD input</a>. This removes any existing
+ context to allow the given <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> to be cleanly applied.</p>
+
+<ol class="algorithm">
+ <li>If <em>element</em> is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, process each entry in <em>element</em> recursively
+ using this algorithm, passing a copy of the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> and the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.
+ If <em>element</em> has a single item and the
+ <code class="idlMemberName"><a href="#widl-JsonLdOptions-compactArrays">compactArrays</a></code> option is set to
+ <code>true</code>, the compacted value is that item; otherwise the compacted value is <em>element</em>.</li>
+ <li>Otherwise, if <em>element</em> is an object:
+ <ol class="algorithm">
+ <li>If <em>element</em> has an <code>@value</code> property or element is a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>,
+ return the result of performing
+ <a href="#value-compaction">Value Compaction</a> on <em>element</em> using <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.</li>
+ <li>Otherwise, if the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> has a <code>@container</code> mapping to <code>@list</code>
+ and <em>element</em> has a corresponding <code>@list</code> property, recursively compact that
+ property's value passing a copy of the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> and the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> ensuring
+ that the result is an array with all <a class="tref internalDFN" title="null" href="#dfn-null">null</a> values removed. If there already exists a value for
+ <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> in <em>element</em> and the full <abbr title="Internationalized Resource Identifier">IRI</abbr> of <em>property</em> is also coerced to
+ <code>@list</code>, throw an exception. Otherwise store the resulting array as value of <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>
+ if empty or <em>property</em> otherwise.</li>
+ <li>Otherwise, construct <em>output</em> as a new <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used for returning the result
+ of compacting <em>element</em>. For each <em>property</em> and <em>value</em> in <em>element:</em>
+ <ol class="algorithm">
+ <li>If <em>property</em> is <code>@id</code> or <code>@type</code>
+ <ol class="algorithm">
+ <li>Set <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> to the result of performing
+ <a href="#iri-compaction"><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction</a> on <em>property</em>.</li>
+ <li>If <em>value</em> is a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>, the compacted <em>value</em> is the result of performing
+ <a href="#iri-compaction"><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction</a> on <em>value</em>.</li>
+ <li>Otherwise, <em>value</em> <em class="rfc2119" title="must">must</em> be an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>. Perform <a href="#iri-compaction"><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction</a>
+ on every entry of <em>value</em>. If <em>value</em> contains just one entry and the
+ <code class="idlMemberName"><a href="#widl-JsonLdOptions-compactArrays">compactArrays</a></code> option is set to
+ <code>true</code>, <em>value</em> is set to that entry.</li>
+ <li>Add <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> and the compacted <em>value</em> to <em>output</em>.</li>
+ </ol>
+ </li>
+ <li>Otherwise, <em>value</em> <em class="rfc2119" title="must">must</em> be an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>.</li>
+ <li>If <em>value</em> is empty:
+ <ol class="algorithm">
+ <li>Set <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> to the result of performing
+ <a href="#iri-compaction"><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction</a> on <em>property</em>.</li>
+ <li>Create an entry in <em>output</em> for <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> and <em>value</em>.</li>
+ </ol>
+ </li>
+ <li>For each <em>item</em> in <em>value</em>:
+ <ol class="algorithm">
+ <li>Set <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> to the result of performing <a href="#iri-compaction"><abbr title="Internationalized Resource Identifier">IRI</abbr> Compaction</a>
+ for <em>property</em> and <em>item</em> using the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.</li>
+ <li>Compact <em>item</em> by recursively performing this algorithm passing a copy of
+ the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> and the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.</li>
+ <li>If an entry already exists in <em>output</em> for <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>, convert it
+ to an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> if necessary, and append the compacted <em>value</em>.</li>
+ <li>Otherwise, if the compacted <em>value</em> is not an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> and <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>
+ has a <code>@container</code> mapping to <code>@set</code> or if the
+ <code class="idlMemberName"><a href="#widl-JsonLdOptions-compactArrays">compactArrays</a></code> option is set to
+ <code>false</code>, convert <em>value</em> to an array.</li>
+ <li>Create an entry in <em>output</em> for <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> and <em>value</em>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Otherwise, return <em>element</em> as the compacted <em>element</em>.
+ <div class="issue"><div class="issue-title"><span>Issue</span></div><div class="">Perhaps this should also call <a href="#value-compaction">Value Compaction</a> on
+ native types and strings, which could consolidate potential transformation in one place.</div></div>
+ </li>
+</ol>
+
+<p>If, after the algorithm outlined above is run, the resulting <em>element</em> is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, put <em>element</em> into the
+ <code>@graph</code> property of a new <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> and then set <em>element</em> to that <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>.
+ Finally, add a <code>@context</code> property to <em>element</em> and set it to the initially passed <em>context</em>.</p>
+
+</section>
+
+</section>
+
+<section id="flattening">
+<h3><span class="secno">4.9 </span>Flattening</h3>
+
+<p>Flattening is the process of taking a JSON-LD document, <a href="#expansion">expanding</a>
+ it, labeling all unlabeled nodes with a <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a> identifier, and returning
+ an array of the <a class="tref internalDFN" title="node" href="#dfn-node">nodes</a> defined in the document.</p>
+
+<div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">It is still being discussed if the flatten() method should be added or not.
+ See <a href="https://github.com/json-ld/json-ld.org/issues/109">ISSUE-109</a>.</p></div>
+
+<p>For example, assume the following JSON-LD input document:</p>
+
+<div class="example"><div class="example-title"><span>Example 18</span></div><pre class="example">{
+ "@context": {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "knows": "http://xmlns.com/foaf/0.1/knows"
+ },
+ "@id": "http://example.com/markus",
+ "name": "Markus Lanthaler",
+ "knows": {
+ "name": "Manu Sporny"
+ }
+}</pre></div>
+
+<p>Running the JSON-LD Flattening algorithm for the merged graph (<code>@merged</code>) against
+ the JSON-LD input document provided above would result in the following output:</p>
+
+<div class="example"><div class="example-title"><span>Example 19</span></div><pre class="example">[
+ {
+ "@id": "http://example.com/markus",
+ "http://xmlns.com/foaf/0.1/knows": [ { "@id": "_:t0" } ],
+ "http://xmlns.com/foaf/0.1/name": [ { "@value": "Markus Lanthaler" } ]
+ },
+ {
+ "@id": "_:t0",
+ "http://xmlns.com/foaf/0.1/name": [ { "@value": "Manu Sporny" } ]
+ }
+]</pre></div>
+
+<section id="flattening-algorithm">
+<h4><span class="secno">4.9.1 </span>Flattening Algorithm</h4>
+<p>The algorithm takes two input variables, an <em>element</em> to flatten and the
+ <em>graph</em> for which the <a class="tref internalDFN" title="node" href="#dfn-node">node</a> definitions should be returned. If <em>graph</em>
+ is not set, it will default to <code>@merged</code> which represents the result of
+ merging all graphs including the default graph (<code>@default</code>).</p>
+
+<ol class="algorithm">
+ <li>Expand <em>element</em> according the <a href="#expansion-algorithm">Expansion Algorithm</a>.</li>
+ <li>Generate a <em>nodeMap</em> according the <a href="#node-map-generation">Node Map Generation Algorithm</a>.</li>
+ <li>Initialize an empty array <em>result</em>.</li>
+ <li>If <em>nodeMap</em> has no property <em>graph</em>, return <em>result</em>, otherwise set <em>definitions</em> to its value.</li>
+ <li>Foreach <em>property</em> and <em>value</em> of of <em>definitions</em>:
+ <ol class="algorithm">
+ <li>Add <em>value</em> to <em>result</em>.</li>
+ </ol>
+ </li>
+ <li>Return <em>result</em>.</li>
+</ol>
+
+</section>
+
+<section id="node-map-generation">
+<h4><span class="secno">4.9.2 </span>Node Map Generation</h4>
+<p>The Node Map Generation algorithm takes as input an expanded JSON-LD document and results in a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>
+ <em>nodeMap</em> holding a flat representation of the graphs and <a class="tref internalDFN" title="node" href="#dfn-node">nodes</a> represented in the document. All <a class="tref internalDFN" title="node" href="#dfn-node">nodes</a> that are not
+ uniquely identified by an <abbr title="Internationalized Resource Identifier">IRI</abbr> get assigned a (new) <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a> identifier. The resulting <em>nodeMap</em>
+ document will have a property for every graph in the document whose value is another object with a property for every
+ <a class="tref internalDFN" title="node" href="#dfn-node">node</a> represented in the document. While the default graph is stored under the <code>@default</code> property and the merged graph
+ under the <code>@merged</code> property, all other graphs are stored under their respective <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a>.</p>
+
+<p>The algorithm takes as input the expanded JSON-LD document as <em>element</em>, the initially empty <em>nodeMap</em>,
+ <code>@default</code> as <em>graph</em>, and <a class="tref internalDFN" title="null" href="#dfn-null">null</a> as <em>list</em>.</p>
+
+<ol class="algorithm">
+ <li>If <em>element</em> is an array, process each entry in <em>element</em> recursively, using this algorithm
+ and return.</li>
+ <li>If <em>element</em> is not a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> or if it has a <code>@value</code> property,
+ then if <em>list</em> is not <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, append <em>element</em> to <em>list</em> and return.</li>
+ <li>If the <code>@id</code> property exists and is an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>, set <em>id</em> to its value, otherwise
+ set it to a <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a> identifier created by the
+ <a href="#generate-blank-node-identifier">Generate Blank Node Identifier</a> algorithm.</li>
+ <li>If <em>list</em> is not <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, append a new <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a> to <em>list</em> using
+ <em>id</em> at the value for <code>@id</code>.</li>
+ <li>Let <em>nodes</em> be the value in <em>nodeMap</em> where the key is <em>graph</em>; if no such
+ value exists, insert a new <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> for the key <em>graph</em>. If <em>id</em> is not in
+ <em>nodes</em>, create a new <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> <em>node</em> with <em>id</em> as the value
+ for <code>@id</code>. Let <em>node</em> be the value of <em>id</em> in <em>nodes</em>.</li>
+ <li>For each <em>property</em> that is not <code>@id</code> and each <em>value</em> in <em>element</em> ordered
+ by <em>property</em>:
+ <ol class="algorithm">
+ <li>If <em>property</em> is <code>@graph</code>, recursively call this algorithm passing <em>value</em>
+ for <em>element</em>, <em>nodeMap</em>, <a class="tref internalDFN" title="null" href="#dfn-null">null</a> for <em>list</em> and if <em>graph</em>
+ is <code>@merged</code> use <em>graph</em>, otherwise use <em>id</em> for <em>graph</em> and then continue.</li>
+ <li>If <em>property</em> is not <code>@type</code> and is a keyword, merge <code>property</code> and
+ <code>value</code> into <code>node</code> and then continue.</li>
+ <li>For each value <em>v</em> in the array <em>value</em>:
+ <ol class="algorithm">
+ <li>If <em>v</em> is a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> or <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>:
+ <ol class="algorithm">
+ <li>If the property <code>@id</code> is not an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> or it does not exist,
+ map <em>v</em> to a <a href="#generate-blank-node-identifier">new blank node identifier</a>
+ to avoid collisions. If one does not already exist, add a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a> for
+ <em>v</em> into <em>node</em> for <em>property</em>.</li>
+ <li>Recursively call this algorithm passing <em>v</em> for <em>value</em>, <em>nodeMap</em>,
+ <em>graph</em>, and <a class="tref internalDFN" title="null" href="#dfn-null">null</a> for <em>list</em>.</li>
+ </ol>
+ </li>
+ <li>Otherwise if <em>v</em> has the property <code>@list</code> then recursively call this algorithm
+ with the value of <code>@list</code> as <em>element</em>, <em>nodeMap</em>, <em>graph</em>, and
+ a new array <em>flattenedList</em> as <em>list</em>. Create a new <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with the
+ property <code>@list</code> set to <em>flattenedList</em> and add it to <em>node</em> for
+ <em>property</em>.</li>
+ <li>Otherwise, if <em>property</em> is <code>@type</code> and <em>v</em> is not an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
+ generate a <a href="#generate-blank-node-identifier">new blank node identifier</a> and add it
+ to <em>node</em> for <em>property</em>.</li>
+ <li>Otherwise, add <em>v</em> to <em>node</em> for <em>property</em>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+</ol>
+
+<p>After the above outlined algorithm has been executed, the node map for all graphs including the default graph are contained in
+ <em>nodeMap</em>. To also create the node map for the merged graph, execute the algorithm again, but pass <code>@merged</code>
+ for <em>graph</em>.</p>
+
+</section>
+
+<section id="generate-blank-node-identifier">
+<h4><span class="secno">4.9.3 </span>Generate Blank Node Identifier</h4>
+<p>This algorithm is used by the <a href="#node-map-generation">Node Map Generation Algorithm</a> to
+ deterministically name <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a> identifiers. It uses a <em>identifier map</em>
+ and <em>prefix</em> and takes a possibly <a class="tref internalDFN" title="null" href="#dfn-null">null</a> identifier and returns a new identifier based
+ on <em>prefix</em>.</p>
+<p>The variable <em>next identifier</em> is initialized to <em>prefix</em> appended with <code>0</code>. The
+ default value of <em>prefix</em> is <code>_:t</code>.</p>
+
+<ol class="algorithm">
+ <li>If the old identifier is not <a class="tref internalDFN" title="null" href="#dfn-null">null</a> and is in the <em>identifier map</em>,
+ return the mapped identifier.</li>
+ <li>Otherwise, if the old identifier is not <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, create a new entry in
+ <em>identifier map</em> initialized to the current value of <em>next identifier</em>. Increment
+ <em>next identifier</em> by adding one to the integer suffix. Return the mapped identifier.</li>
+ <li>Otherwise, increment <em>next identifier</em> by adding one to the integer suffix and return its
+ original value.</li>
+</ol>
+</section>
+
+</section>
+
+<section id="rdf-conversion">
+<h3><span class="secno">4.10 </span>RDF Conversion</h3>
+
+<p>A JSON-LD document <em class="rfc2119" title="may">may</em> be converted between other RDF-compatible document
+ formats using the algorithms specified in this section.</p>
+
+<p>The JSON-LD Processing Model describes processing rules for extracting RDF
+ from a JSON-LD document, and for transforming an array of <a href="#idl-def-Quad" class="idlType"><code>Quad</code></a> retrieved by processing
+ another serialization format into JSON-LD. Note that many uses of JSON-LD may not require
+ generation of RDF.</p>
+
+<p>The processing algorithms described in this section are provided in
+ order to demonstrate how one might implement a JSON-LD to RDF processor.
+ Conformant implementations are only required to produce the same type and
+ number of quads during the output process and are not required to
+ implement the algorithm exactly as described.</p>
+
+<section class="informative" id="overview">
+ <h4><span class="secno">4.10.1 </span>Overview</h4><p><em>This section is non-normative.</em></p>
+ <p>
+ JSON-LD is intended to have an easy to parse grammar that closely models existing
+ practice in using JSON for describing object representations. This allows the use
+ of existing libraries for parsing JSON.
+ </p>
+ <p>
+ As with other grammars used for describing <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>, a key
+ concept is that of a <a class="tref internalDFN" title="node" href="#dfn-node">node</a> in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.
+ Nodes may be of three basic types.
+ The first is the <a class="datatype idlType" title="IRI" href="#idl-def-IRI"><code><abbr title="Internationalized Resource Identifier">IRI</abbr></code></a>, which is used to refer to
+ <a class="tref internalDFN" title="node" href="#dfn-node">node</a>s in other <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>s.
+ The second is the
+ <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a>, which are nodes for which an external name does not
+ exist, or is not known. The third is a <a class="tref internalDFN" title="literal" href="#dfn-literal">Literal</a>, which express
+ values such as strings, dates and other information having a lexical
+ form, possibly including an explicit language or datatype.
+ </p>
+ <p>Data described with JSON-LD may be considered to be a graph made
+ up of <a class="tref internalDFN" title="subject" href="#dfn-subject">subject</a> and <a class="tref internalDFN" title="object" href="#dfn-object">object</a>
+ <a class="tref internalDFN" title="node" href="#dfn-node">nodes</a> related via a <a class="tref internalDFN" title="property" href="#dfn-property">property</a>
+ <a class="tref internalDFN" title="node" href="#dfn-node">node</a>. Specific implementations may also choose to operate
+ on the document as a normal JSON description of objects having
+ attributes. Both approaches are valid ways to interact with JSON-LD
+ documents.</p>
+</section>
+
+<section class="informative" id="parsing-examples">
+ <h4><span class="secno">4.10.2 </span>Parsing Examples</h4><p><em>This section is non-normative.</em></p>
+
+ <p>The following examples show simple transformations of JSON-LD documents to Turtle [<cite><a class="bibref" href="#bib-TURTLE-TR">TURTLE-TR</a></cite>].</p>
+
+ <p>The first example uses a simple document containing a simple FOAF profile:</p>
+
+<div class="example"><div class="example-title"><span>Example 20</span></div><pre class="example">{
+ "@context": {"foaf": "http://xmlns.com/foaf/0.1/"},
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": "foaf:Person",
+ "foaf:name": "Gregg Kellogg",
+ "foaf:knows": {
+ "@type": "foaf:Person",
+ "foaf:name": "Manu Sporny"
+ }
+}</pre></div>
+
+ <p>This translates fairly directly to a similar Turtle document:</p>
+
+<div class="example"><div class="example-title"><span>Example 21</span></div><pre class="example">@prefix foaf: <http://xmlns.com/foaf/0.1/>.
+
+<http://greggkellogg.net/foaf#me> a foaf:Person;
+ foaf:name "Gregg Kellogg";
+ foaf:knows [ a foaf:Person; foaf:name "Manu Sporny"].</pre></div>
+
+ <p>The actual parsing steps first require that the JSON-LD document be expanded,
+ to eliminate the <code>@context</code>:</p>
+
+<div class="example"><div class="example-title"><span>Example 22</span></div><pre class="example">[{
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": ["http://xmlns.com/foaf/0.1/Person"],
+ "http://xmlns.com/foaf/0.1/name": [{"@value": "Gregg Kellogg"}],
+ "http://xmlns.com/foaf/0.1/knows": [{
+ "@type": ["http://xmlns.com/foaf/0.1/Person"],
+ "http://xmlns.com/foaf/0.1/name": [{"@value": "Manu Sporny"}]
+ }]
+}]</pre></div>
+
+ <p>The process of translating this to RDF then operates over each
+ <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> to find a subject,
+ each <a class="tref internalDFN" title="property" href="#dfn-property">property</a> to find an <a class="tref internalDFN" title="rdf_predicate" href="#dfn-rdf_predicate">RDF predicate</a>,
+ and each value of that property to find an <a class="tref internalDFN" title="object" href="#dfn-object">object</a>.
+ In this case, each property has just a single object:
+ <code>foaf:name</code> identifies a <a class="tref internalDFN" title="literal" href="#dfn-literal">literal</a>, and
+ <code>foaf:knows</code> identifies a second <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>
+ similar to Turtle's <code>blankNodePropertyList</code>.</p>
+
+ <p>After expansion, JSON-LD <a class="tref internalDFN" title="number" href="#dfn-number">numbers</a>,
+ <a class="tref internalDFN" title="true" href="#dfn-true">booleans</a>, <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literals</a>,
+ <a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged-strings</a>,
+ and <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> become explicit, and can be directly
+ transformed into their RDF representations.</p>
+
+<div class="example"><div class="example-title"><span>Example 23</span></div><pre class="example">[{
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": ["http://xmlns.com/foaf/0.1/Person"],
+ "http://xmlns.com/foaf/0.1/name": [{"@value": "Gregg Kellogg"}],
+ <span class="diff">"http://xmlns.com/foaf/0.1/currentProject": [{"@id": "http://json-ld.org/"}],
+ "http://xmlns.com/foaf/0.1/birthday": [{
+ "@value": "1957-02-27",
+ "@type": "http://www.w3.org/2001/XMLSchema#date"
+ }],</span>
+ "http://xmlns.com/foaf/0.1/knows": [{
+ "@type": ["http://xmlns.com/foaf/0.1/Person"],
+ "http://xmlns.com/foaf/0.1/name": [{"@value": "Manu Sporny"}]
+ }]
+}]</pre></div>
+
+ <p>Translates to:</p>
+
+<div class="example"><div class="example-title"><span>Example 24</span></div><pre class="example">@prefix foaf: <http://xmlns.com/foaf/0.1/>.
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
+
+<http://greggkellogg.net/foaf#me> a foaf:Person;
+ foaf:name "Gregg Kellogg";
+ <span class="diff">foaf:currentProject <http://json-ld.org/>;
+ foaf:birthday "1957-02-27"^^xsd:date;</span>
+ foaf:knows [ a foaf:Person; foaf:name "Manu Sporny"].</pre></div>
+
+</section>
+
+<section id="convert-to-rdf-algorithm">
+ <h4><span class="secno">4.10.3 </span>Convert to RDF Algorithm</h4>
+ <p>
+ The algorithm below is designed for in-memory implementations with random access to <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> elements.
+ </p>
+ <p>
+ A conforming JSON-LD processor implementing RDF conversion <em class="rfc2119" title="must">must</em> implement a
+ processing algorithm that results in the same set of RDF <a class="tref internalDFN" title="quad" href="#dfn-quad">Quads</a> that the following
+ algorithm generates:
+ </p>
+
+ <p>The algorithm takes five input variables: a <em>element</em> to be converted, an
+ <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>, <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> and <a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">graph name</a>.
+ To begin, the <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>, <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> and <a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">graph name</a>
+ are set to <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, and <em>element</em> is
+ set to the result of performing the <a href="#expansion-algorithm">Expansion Algorithm</a> on
+ the <a class="tref internalDFN" title="json-ld_input" href="#dfn-json-ld_input">JSON-LD input</a>. This removes any existing context to allow the given context to be cleanly
+ applied.</p>
+
+ <ol class="algorithm">
+ <li id="processing-step-associative">
+ If <em>element</em> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>, perform the following steps:
+ <ol class="algorithm">
+ <li>Set <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a> to <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.</li>
+ <li>
+ If <em>element</em> has a <code>@value</code> property:
+ <ol class="algorithm">
+ <li>If the value of <code>@value</code> is a <a class="tref internalDFN" title="number" href="#dfn-number">number</a>, set the
+ <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a> to a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> using a string representation
+ of the value as defined in the section <a href="#data-round-tripping">Data Round Tripping</a>.
+ Set datatype to the value of the <code>@type</code> property if it exists, otherwise
+ either <code>xsd:integer</code> or <code>xsd:double</code>, depending
+ on if the value contains a fractional and/or an exponential component.
+ <div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/150"><span>Issue 150</span></a></div><p class="">It is being
+ <a href="https://github.com/json-ld/json-ld.org/issues/150">discussed</a> if the automatic
+ mapping of JSON-native types to the XSD type system should be configurable or not.</p></div></li>
+ <li>Otherwise, if the value of <code>@value</code> is <strong>true</strong> or <strong>false</strong>,
+ set the <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a> to a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> created from the
+ string representation of the value. Set datatype to the value of the <code>@type</code>
+ property if it exists, otherwise <code>xsd:boolean</code>.</li>
+ <li>
+ Otherwise, if <em>element</em> contains a <code>@type</code> property, set the
+ <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a> to a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a>.
+ </li>
+ <li>
+ Otherwise, if <em>element</em> contains a <code>@language</code> property, set the
+ <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a> to a <a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged string</a>.
+ </li>
+ <li>
+ Otherwise, set the <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a> to a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a>
+ using <code>xsd:string</code> as the datatype.
+ </li>
+ </ol>
+ </li>
+ <li>
+ If <em>element</em> has a <code>@list</code> property the value <em class="rfc2119" title="must">must</em> be an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>.
+ Process its value as a list as described in <a href="#list-conversion">List Conversion</a> using
+ the return value as the <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a>
+ </li>
+ <li>If <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a> is not <a class="tref internalDFN" title="null" href="#dfn-null">null</a>:
+ <ol class="algorithm">
+ <li>If neither <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a> nor <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> are <a class="tref internalDFN" title="null" href="#dfn-null">null</a>,
+ generate a <a href="#idl-def-Quad" class="idlType"><code>Quad</code></a>
+ representing <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>, <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>,
+ <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a>, and <a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">graph name</a>.</li>
+ <li>Return <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a>.</li>
+ </ol>
+ </li>
+ <li id="processing-step-subject">If <em>element</em> has a <code>@id</code> property,
+ the value <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>, set the <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a> to the previously
+ expanded value (either a <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a> or an <a class="datatype idlType" title="IRI" href="#idl-def-IRI"><code><abbr title="Internationalized Resource Identifier">IRI</abbr></code></a>).</li>
+ <li>
+ Otherwise, if <em>element</em> does not have a <code>@id</code> property, set the <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active
+ subject</a> to newly generated <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a>.</li>
+ <li>
+ Process each <em>property</em> and <em>value</em> in <em>element</em>, ordered by
+ <em>property</em>, as follows:
+ <ol class="algorithm">
+ <li>
+ If <em>property</em> is <code>@type</code>, set the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>
+ to <code>rdf:type</code>.
+ </li>
+ <li>Otherwise, if <em>property</em> is <code>@graph</code>,
+ process <em>value</em> algorithm recursively, using <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a> as <a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">graph name</a>
+ and null values for <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a> and <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> and then
+ proceed to next property.</li>
+ <li>Otherwise, if <em>property</em> is a <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>, skip this step.</li>
+ <li>Otherwise, set <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> to the <abbr title="Internationalized Resource Identifier">IRI</abbr> value of <em>property</em>.</li>
+ <li>Process <em>value</em> recursively using this algorithm, passing copies of
+ <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>, <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> and <a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">graph name</a>.
+ </li>
+ </ol>
+ </li>
+ <li>
+ Set <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a> to <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>.
+ </li>
+ </ol>
+ </li>
+
+ <li>Otherwise, if <em>element</em> is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, process each value in the <a class="tref internalDFN" title="array" href="#dfn-array">array</a>
+ as follows, process <em>element</em> recursively using this algorithm, using copies of
+ <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>, <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>, and <a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">graph name</a>.</li>
+
+ <li>Otherwise, if <em>element</em> is a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>, then the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>
+ must be <code>rdf:type</code> so set the <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a> to an <a class="datatype idlType" title="IRI" href="#idl-def-IRI"><code><abbr title="Internationalized Resource Identifier">IRI</abbr></code></a>.</li>
+
+ <li>If any of these steps created an <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a> and neither <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>
+ nor <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> are <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, generate a <a href="#idl-def-Quad" class="idlType"><code>Quad</code></a> using
+ <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>,<a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>, <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a> and
+ <a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">graph name</a>.
+ </li>
+ <li>Return <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a>.</li>
+ </ol>
+</section>
+<section id="list-conversion">
+ <h4><span class="secno">4.10.4 </span>List Conversion</h4>
+
+ <p>List Conversion is the process of taking an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> of values and adding them to a newly
+ created <cite><a href="http://www.w3.org/TR/rdf-schema/#ch_collectionvocab">RDF Collection</a></cite> (see
+ [<cite><a class="bibref" href="#bib-RDF-SCHEMA">RDF-SCHEMA</a></cite>]) by linking each element of the list using <code>rdf:first</code> and <code>rdf:next</code>,
+ terminating the list with <code>rdf:nil</code> using the following sequence:</p>
+ <p>The algorithm is invoked with an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> <em>array</em>, the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>
+ and returns a value to be used as an <a class="tref internalDFN" title="active_object" href="#dfn-active_object">active object</a> in the calling location.</p>
+ <div class="note"><div class="note-title"><span>Note</span></div><div class="">This algorithm does not support lists containing lists.</div></div>
+ <ol class="algorithm">
+ <li>
+ If <em>array</em> is empty return <code>rdf:nil</code>.
+ </li>
+ <li>
+ Otherwise, generate a <a href="#idl-def-Quad" class="idlType"><code>Quad</code></a> using using the <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>, <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>
+ and a newly generated <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a> identified as <em>first <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a></em>.
+ </li>
+ <li>
+ For each element in <em>array</em> other than the last element:
+ <ol class="algorithm">
+ <li>Create a processor state using
+ <em>first blank node</em> as the <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>, and
+ <code>rdf:first</code> as the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.
+ <ol class="algorithm">
+ <li>Process the value starting at <a href="#processing-step-associative">Step 1</a>.</li>
+ <li>Proceed using the previous <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a>.</li>
+ </ol>
+ </li>
+ <li>Unless this is the last element in <em>array</em>, generate a new <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a> identified as
+ <em>rest blank node</em>, otherwise use <code>rdf:nil</code>.</li>
+ <li>Generate a new <a href="#idl-def-Quad" class="idlType"><code>Quad</code></a> using <em>first blank node</em>,
+ <code>rdf:rest</code> and <em>rest blank node</em>.</li>
+ <li>Set <em>first blank node</em> to
+ <em>rest blank node</em>.</li>
+ <li>Return <em>first blank node</em>.</li>
+ </ol>
+ </li>
+ </ol>
+</section>
+
+<section id="convert-from-rdf-algorithm">
+ <h4><span class="secno">4.10.5 </span>Convert from RDF Algorithm</h4>
+ <p>In some cases, data exists natively in Triples or Quads form; for example, if the data was originally
+ represented in an RDF graph or triple/quad store. This algorithm is designed to simply translate
+ an array of <a class="datatype idlType" title="Quad" href="#idl-def-Quad"><code>Quads</code></a> into a JSON-LD document.</p>
+ <p>When expanding <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> values having a datatype of <code>xsd:string</code>,
+ the <code>@type</code> <em class="rfc2119" title="must not">must not</em> be set to <code>xsd:string</code> and the resulting value
+ <em class="rfc2119" title="must">must</em> have only a <code>@value</code> property.</p>
+
+ <p>The conversion algorithm takes a single parameter <em>input</em> in the form of an
+ array of <a href="#idl-def-Quad" class="idlType"><code>Quad</code></a> representations.</p>
+
+ <ol class="algorithm">
+ <li id="new_graph">Construct <em>defaultGraph</em> as a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>
+ containing <em>nodes</em> and <em>listMap</em>, each an empty <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>.</li>
+ <li>Construct <em>graphs</em> as a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> containing <em>defaultGraph</em>
+ identified by
+ an empty <a class="tref internalDFN" title="string" href="#dfn-string">string</a>.</li>
+ <li>For each quad in <em>input</em>:
+ <ol class="algorithm">
+ <li>Set <em>graph</em> to the entry in <em>graphs</em> identified
+ by <em>name</em>, initializing it to a new entry using the mechanism
+ described in <a href="#new_graph">Step 1</a>.</li>
+ <li>If <em>property</em> is <code>rdf:first</code>,
+ use the entry in <em>graph.listMap</em> indexed by <em>subject</em>,
+ initializing it to a new <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> if nesessary. Represent
+ <em>object</em> in expanded form, as described in
+ <a href="#value-expansion">Value Expansion</a>. Add the
+ resulting <em>object representation</em> to the entry indexed by
+ <em>first</em>, and skip to the next quad.</li>
+ <li>If <em>property</em> is <code>rdf:rest</code>:
+ <ol class="algorithm">
+ <li>If <em>object</em> is a <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a>, use the entry in
+ <em>graph.listMap</em> indexed by <em>subject</em>, initializing it
+ to a new <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> if necessary. Add the <em>nominalValue</em> of
+ <em>object</em> to the entry indexed by <em>rest</em>.
+ </li>
+ <li>Skip to the next quad.</li>
+ </ol>
+ </li>
+ <li>If <em>name</em> is not <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, and <em>defaultGraph.nodes</em>
+ does not contain an entry for <em>name</em>,
+ create a new entry for <em>name</em> from a new
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with key/value pair of <code>@id</code> and
+ a string representation of <em>name</em>.</li>
+ <li>Set <em>value</em> as the entry from <em>graph.nodes</em> for
+ <em>subject</em>, initializing it to a new
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with key/value pair of <code>@id</code> and
+ a string representation of <em>subject</em> if necessary.</li>
+ <li>If <em>property</em> is <code>rdf:type</code> and the
+ <code class="idlMemberName"><a href="#widl-JsonLdOptions-useRdfType">useRdfType</a></code>
+ option is not present or <a class="tref internalDFN" title="false" href="#dfn-false">false</a>:
+ <ol class="algorithm">
+ <li>Append the string representation of <em>object</em> to the array value for the
+ key <code>@type</code>, creating an entry in <em>value</em> if necessary.</li>
+ </ol>
+ </li>
+
+ <li>If <em>object</em> is a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> and the
+ <code class="idlMemberName"><a href="#widl-JsonLdOptions-useNativeTypes">useNativeTypes</a></code>
+ option is set to <a class="tref internalDFN" title="true" href="#dfn-true">true</a>:
+ <ol class="algorithm">
+ <li>Generate a <em>converted value</em>:
+ <ol class="algorithm">
+ <li>If the literal's type is <code>xsd:boolean</code>, the
+ <em>converted value</em> is <a class="tref internalDFN" title="true" href="#dfn-true">true</a> if the literal
+ matches the value <code>true</code> or <a class="tref internalDFN" title="false" href="#dfn-false">false</a> if
+ the literal matches the value <code>false</code>.</li>
+ <li>If the literal's type is <code>xsd:integer</code> or
+ <code>xsd:double</code>, try to convert the literal to a
+ JSON <a class="tref internalDFN" title="number" href="#dfn-number">number</a>. If the conversion is successful,
+ store the result in <em>converted value</em>, otherwise
+ set <em>converted value</em> to <em>value</em>.</li>
+ <li>Otherwise, do not perform a conversion. Set
+ the <em>converted value</em> to the <em>value</em>.</li>
+ </ol>
+ </li>
+ <li>Append the <em>converted value</em> to the array value for the
+ key, creating an entry in <em>value</em> if necessary.</li>
+ </ol>
+ </li>
+
+ <li>Otherwise, if <em>object</em> is <code>rdf:nil</code>:
+ <ol class="algorithm">
+ <li>Let <em>key</em> be the string representation of <em>property</em>.</li>
+ <li>Append an empty <code>@list</code> representation to the array value for
+ <em>key</em>, creating an entry in <em>value</em> if necessary.</li>
+ </ol>
+ </li>
+ <li>Otherwise,
+ <ol class="algorithm">
+ <li>Let <em>key</em> be the string representation of <em>property</em> and let
+ <em>object representation</em>
+ be <em>object</em> represented in expanded form as described in
+ <a href="#value-expansion">Value Expansion</a>.</li>
+ <li>If <em>object</em> is a <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a>,
+ use the entry in <em>graph.listMap</em> indexed by <em>object</em>,
+ initializing it to a new <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> if nesessary.
+ Add an entry for <em>head</em> with <em>object representation</em>.</li>
+ <li>Append <em>object representation</em> to the array value for
+ <em>key</em>, creating an entry in <em>value</em> if necessary.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>For each <em>name</em> and <em>graph</em> in <em>graphs</em>:
+ <ol class="algorithm">
+ <li>For each <em>subject</em> and <em>entry</em> in <em>graph</em>
+ where <em>entry</em> has both <em>head</em> and <em>first</em> keys:
+ <ol class="algorithm">
+ <li>Set <em>value</em> to the value of <em>head</em> in <em>entry</em>.</li>
+ <li>Remove the entry for <code>@id</code> in <em>value</em>.</li>
+ <li>Add an entry to <em>value</em> for <code>@list</code> initialized to a new array
+ containing the value of <em>first</em> from <em>entry</em>.</li>
+ <li>While <em>entry</em> has a key for <em>rest</em>:
+ <ol class="algorithm">
+ <li>Set <em>entry</em> to the value of <em>graph.listMap</em> for <em>entry.rest</em>.</li>
+ <li>Add the value for <em>entry.first</em> to the list array.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Create <em>array</em> as an empty <a class="tref internalDFN" title="array" href="#dfn-array">array</a>.</li>
+ <li>For each <em>subject</em> and <em>entry</em> in <em>defaultGraph.nodes</em>
+ ordered by <em>subject</em>:
+ <ol class="algorithm">
+ <li>Add <em>entry</em> to <em>array</em>.</li>
+ <li>If <em>graphs</em> has an entry for <em>subject</em>, add a property
+ <code>@graph</code> in <em>entry</em> containing the ordered entries
+ from <em>graphs[subject].nodes</em>.</li>
+ </ol>
+ </li>
+ <li>Return <em>array</em> as the result.</li>
+ </ol>
+</section>
+</section>
+
+</section>
+
+<section id="data-round-tripping">
+
+<!--OddPage-->
+<h2><span class="secno">5. </span>Data Round Tripping</h2>
+
+<p>When <a href="#rdf-conversion">converting JSON-LD to RDF</a> JSON-native types such as
+ <em>numbers</em> and <em>booleans</em> are automatically coerced to <strong>xsd:integer</strong>,
+ <strong>xsd:double</strong>, or <strong>xsd:boolean</strong>. Implementers <em class="rfc2119" title="must">must</em> ensure that the
+ result is a canonical lexical form in the form of a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>. A
+ <dfn title="canonical_lexical_form" id="dfn-canonical_lexical_form">canonical lexical form</dfn> is a set of literals from among the valid set of literals for
+ a datatype such that there is a one-to-one mapping between the canonical lexical form and a value
+ in the value space as defined in [<cite><a class="bibref" href="#bib-XMLSCHEMA11-2">XMLSCHEMA11-2</a></cite>]. In other words, every value <em class="rfc2119" title="must">must</em> be converted
+ to a deterministic string representation.</p>
+
+<p>The canonical lexical form of an <em>integer</em>, i.e., a number without fractions
+ or a number coerced to <strong>xsd:integer</strong>, is a finite-length sequence of decimal
+ digits (<code>0-9</code>) with an optional leading minus sign; leading zeroes are prohibited.
+ To convert the number in JavaScript, implementers can use the following snippet of code:</p>
+
+<div class="example"><div class="example-title"><span>Example 25</span></div><pre class="example">(value).toFixed(0).toString()</pre></div>
+
+<p>The canonical lexical form of a <em>double</em>, i.e., a number with fractions
+ or a number coerced to <strong>xsd:double</strong>, consists of a mantissa followed by the
+ character "E", followed by an exponent. The mantissa <em class="rfc2119" title="must">must</em> be a decimal number. The exponent
+ <em class="rfc2119" title="must">must</em> be an integer. Leading zeroes and a preceding plus sign (<code>+</code>) are prohibited
+ in the exponent. If the exponent is zero, it must be indicated by <code>E0</code>.
+ For the mantissa, the preceding optional plus sign is prohibited and the decimal point is
+ required. Leading and trailing zeroes are prohibited subject to the following: number
+ representations must be normalized such that there is a single digit which is non-zero to the
+ left of the decimal point and at least a single digit to the right of the decimal point unless
+ the value being represented is zero. The canonical representation for zero is <code>0.0E0</code>.
+ <strong>xsd:double</strong>'s value space is defined by the IEEE double-precision 64-bit
+ floating point type [<cite><a class="bibref" href="#bib-IEEE-754-1985">IEEE-754-1985</a></cite>]; in JSON-LD the mantissa is rounded to 15 digits after the
+ decimal point.</p>
+
+<p>To convert the number in JavaScript, implementers can use the following snippet of code:</p>
+
+<div class="example"><div class="example-title"><span>Example 26</span></div><pre class="example">(value).toExponential(15).replace(/(\d)0*e\+?/,'$1E')</pre></div>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">When data such as decimals need to be normalized, JSON-LD authors should
+ not use values that are going to undergo automatic conversion. This is due to the lossy nature
+ of <strong>xsd:double</strong> values. Authors should instead use the expanded object form to
+ set the canonical lexical form directly.</p></div>
+
+<p>The canonical lexical form of the <em>boolean</em> values <code>true</code> and <code>false</code>
+ are the strings <strong>true</strong> and <strong>false</strong>.</p>
+
+<p>When JSON-native <a class="tref internalDFN" title="number" href="#dfn-number">number</a>s, are type coerced, lossless data round-tripping can not
+ be guaranted as rounding errors might occur. Additionally, only literals typed as
+ <strong>xsd:integer</strong>, <strong>xsd:double</strong>, and <strong>xsd:boolean</strong> are
+ automatically converted back to their JSON-native counterparts in when
+ <a href="#rdf-conversion">converting from RDF</a>.</p>
+
+<div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/150"><span>Issue 150</span></a></div><p class="">It is being
+ <a href="https://github.com/json-ld/json-ld.org/issues/150">discussed</a> if the automatic mapping
+ of JSON-native types to the XSD type system should be configurable or not.</p></div>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">Some JSON serializers, such as PHP's native implementation in some versions,
+ backslash-escape the forward slash character. For example, the value
+ <code>http://example.com/</code> would be serialized as <code>http:\/\/example.com\/</code>.
+ This is problematic as other JSON parsers might not understand those escaping characters.
+ There is no need to backslash-escape forward slashes in JSON-LD. To aid interoperability
+ between JSON-LD processors, a JSON-LD serializer <em class="rfc2119" title="must not">must not</em> backslash-escape forward slashes.</p></div>
+
+</section>
+
+<section class="appendix" id="acknowledgements">
+
+<!--OddPage-->
+<h2><span class="secno">A. </span>Acknowledgements</h2>
+
+<p>A large amount of thanks goes out to the JSON-LD Community Group
+participants who worked through many of the technical issues on the mailing
+list and the weekly telecons - of special mention are Niklas Lindström,
+François Daoust, and Zdenko 'Denny' Vrandečić.
+The editors would like to thank Mark Birbeck, who provided a great deal of
+the initial push behind the JSON-LD work via his work on RDFj.
+The work of Dave Lehn and Mike Johnson are appreciated for reviewing,
+and performing several implementations of the specification. Ian Davis is
+thanked for this work on RDF/JSON. Thanks also to Nathan Rixham,
+Bradley P. Allen,
+Kingsley Idehen, Glenn McDonald, Alexandre Passant, Danny Ayers, Ted
+Thibodeau Jr., Olivier Grisel, Josh Mandel, Eric Prud'hommeaux,
+David Wood, Guus Schreiber, Pat Hayes, Sandro Hawke, and Richard
+Cyganiak for their input on the specification.
+</p></section>
+
+
+
+<section id="references" class="appendix">
+<!--OddPage-->
+<h2><span class="secno">B. </span>References</h2><section id="normative-references"><h3><span class="secno">B.1 </span>Normative references</h3><dl class="bibliography"><dt id="bib-BCP47">[BCP47]</dt><dd>A. Phillips; M. Davis. <a href="http://tools.ietf.org/html/bcp47"><cite>Tags for Identifying Languages</cite></a> September 2009. IETF Best Current Practice. URL: <a href="http://tools.ietf.org/html/bcp47">http://tools.ietf.org/html/bcp47</a>
+</dd><dt id="bib-IEEE-754-1985">[IEEE-754-1985]</dt><dd>IEEE. <cite>IEEE Standard for Binary Floating-Point Arithmetic.</cite> See <a href="http://standards.ieee.org/reading/ieee/std_public/description/busarch/754-1985_desc.html">http://standards.ieee.org/reading/ieee/std_public/description/busarch/754-1985_desc.html</a>
+</dd><dt id="bib-JSON-LD">[JSON-LD]</dt><dd><cite><a href="http://json-ld.org/spec/ED/json-ld-syntax/20120522/">The JSON-LD Syntax</a></cite> Manu Sporny, Gregg Kellogg, Markus Lanthaler Editors. World Wide Web Consortium (work in progress). 22 May 2012. Editor's Draft. This edition of the JSON-LD Syntax specification is http://json-ld.org/spec/ED/json-ld-syntax/20120522/. The <a href="http://json-ld.org/spec/latest/json-ld-syntax/">latest edition of the JSON-LD Syntax</a> is available at http://json-ld.org/spec/latest/json-ld-syntax/
+</dd><dt id="bib-JSON-POINTER">[JSON-POINTER]</dt><dd><cite><a href="http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-02">JSON Pointer</a></cite> P. Bryan, Ed. IETF Draft. URL: <a href="http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-02">http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-02</a>
+</dd><dt id="bib-RDF-CONCEPTS">[RDF-CONCEPTS]</dt><dd><cite><a href="http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/">RDF 1.1 Concepts and Abstract Syntax</a></cite> Richard Cyganiak, David Wood, Editors. World Wide Web Consortium (work in progress). 30 May 2012. Editor's Draft. This edition of the JSON-LD Syntax specification is http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/. The <a href="http://www.w3.org/TR/rdf11-concepts/">latest edition of the JSON-LD Syntax</a> is available at http://www.w3.org/TR/rdf11-concepts/
+</dd><dt id="bib-RDF-SCHEMA">[RDF-SCHEMA]</dt><dd>Dan Brickley; Ramanathan V. Guha. <a href="http://www.w3.org/TR/2004/REC-rdf-schema-20040210"><cite>RDF Vocabulary Description Language 1.0: RDF Schema.</cite></a> 10 February 2004. W3C Recommendation. URL: <a href="http://www.w3.org/TR/2004/REC-rdf-schema-20040210">http://www.w3.org/TR/2004/REC-rdf-schema-20040210</a>
+</dd><dt id="bib-RFC3986">[RFC3986]</dt><dd>T. Berners-Lee; R. Fielding; L. Masinter. <a href="http://www.ietf.org/rfc/rfc3986.txt"><cite>Uniform Resource Identifier (URI): Generic Syntax.</cite></a> January 2005. Internet RFC 3986. URL: <a href="http://www.ietf.org/rfc/rfc3986.txt">http://www.ietf.org/rfc/rfc3986.txt</a>
+</dd><dt id="bib-RFC3987">[RFC3987]</dt><dd>M. Dürst; M. Suignard. <a href="http://www.ietf.org/rfc/rfc3987.txt"><cite>Internationalized Resource Identifiers (IRIs).</cite></a> January 2005. Internet RFC 3987. URL: <a href="http://www.ietf.org/rfc/rfc3987.txt">http://www.ietf.org/rfc/rfc3987.txt</a>
+</dd><dt id="bib-RFC4627">[RFC4627]</dt><dd>D. Crockford. <a href="http://www.ietf.org/rfc/rfc4627.txt"><cite>The application/json Media Type for JavaScript Object Notation (JSON)</cite></a> July 2006. Internet RFC 4627. URL: <a href="http://www.ietf.org/rfc/rfc4627.txt">http://www.ietf.org/rfc/rfc4627.txt</a>
+</dd><dt id="bib-WEBIDL">[WEBIDL]</dt><dd><cite><a href="http://www.w3.org/TR/2012/CR-WebIDL-20120419/">Web IDL</a></cite> Cameron McCormack, Editor. World Wide Web Consortium. 19 April 2012. Candidate Recommendataion. This edition of Web IDL is http://www.w3.org/TR/2012/CR-WebIDL-20120419/. The <a href="http://dev.w3.org/2006/webapi/WebIDL/">latest edition of Web IDL</a> is available at http://dev.w3.org/2006/webapi/WebIDL/
+</dd><dt id="bib-XMLSCHEMA11-2">[XMLSCHEMA11-2]</dt><dd>Henry S. Thompson; et al. <a href="http://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/"><cite>W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes.</cite></a> 5 April 2012. W3C Recommendation URL: <a href="http://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/">http://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/</a>
+</dd></dl></section><section id="informative-references"><h3><span class="secno">B.2 </span>Informative references</h3><dl class="bibliography"><dt id="bib-ECMA-262">[ECMA-262]</dt><dd><a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm"><cite>ECMAScript Language Specification.</cite></a> June 2011. URL: <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">http://www.ecma-international.org/publications/standards/Ecma-262.htm</a>
+</dd><dt id="bib-TURTLE-TR">[TURTLE-TR]</dt><dd>Eric Prud'hommeaux, Gavin Carothers. <cite><a href="http://www.w3.org/TR/2011/WD-turtle-20110809/">Turtle: Terse RDF Triple Language.</a></cite> 09 August 2011. W3C Working Draft. URL: <a href="http://www.w3.org/TR/2011/WD-turtle-20110809/">http://www.w3.org/TR/2011/WD-turtle-20110809/</a>
+</dd><dt id="bib-UNICODE">[UNICODE]</dt><dd>The Unicode Consortium. <a href="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html"><cite>The Unicode Standard.</cite></a> 2003. Defined by: The Unicode Standard, Version 4.0 (Boston, MA, Addison-Wesley, ISBN 0-321-18578-1), as updated from time to time by the publication of new versions URL: <a href="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html">http://www.unicode.org/unicode/standard/versions/enumeratedversions.html</a>
+</dd></dl></section></section></body></html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/spec/ED/json-ld-framing/20120830/index.html Thu Aug 30 16:50:04 2012 +0200
@@ -0,0 +1,1185 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
+<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml" typeof="bibo:Document">
+<head>
+<title>JSON-LD Framing 1.0</title>
+<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+
+<!--
+ === NOTA BENE ===
+ For the three scripts below, if your spec resides on dev.w3 you can check them
+ out in the same tree and use relative links so that they'll work offline,
+ -->
+
+
+
+<style type="text/css">
+.diff { font-weight:bold; color:#0a3; }
+</style>
+<style>/*****************************************************************
+ * ReSpec 3 CSS
+ * Robin Berjon - http://berjon.com/
+ *****************************************************************/
+
+/* --- INLINES --- */
+em.rfc2119 {
+ text-transform: lowercase;
+ font-variant: small-caps;
+ font-style: normal;
+ color: #900;
+}
+
+h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
+h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
+ border: none;
+}
+
+dfn {
+ font-weight: bold;
+}
+
+a.internalDFN {
+ color: inherit;
+ border-bottom: 1px solid #99c;
+ text-decoration: none;
+}
+
+a.externalDFN {
+ color: inherit;
+ border-bottom: 1px dotted #ccc;
+ text-decoration: none;
+}
+
+a.bibref {
+ text-decoration: none;
+}
+
+cite .bibref {
+ font-style: normal;
+}
+
+code {
+ color: #ff4500;
+}
+
+
+/* --- --- */
+ol.algorithm { counter-reset:numsection; list-style-type: none; }
+ol.algorithm li { margin: 0.5em 0; }
+ol.algorithm li:before { font-weight: bold; counter-increment: numsection; content: counters(numsection, ".") ") "; }
+
+/* --- TOC --- */
+.toc a, .tof a {
+ text-decoration: none;
+}
+
+a .secno, a .figno {
+ color: #000;
+}
+
+ul.tof, ol.tof {
+ list-style: none outside none;
+}
+
+.caption {
+ margin-top: 0.5em;
+ font-style: italic;
+}
+
+/* --- TABLE --- */
+table.simple {
+ border-spacing: 0;
+ border-collapse: collapse;
+ border-bottom: 3px solid #005a9c;
+}
+
+.simple th {
+ background: #005a9c;
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+}
+
+.simple th[scope="row"] {
+ background: inherit;
+ color: inherit;
+ border-top: 1px solid #ddd;
+}
+
+.simple td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+}
+
+.simple tr:nth-child(even) {
+ background: #f0f6ff;
+}
+
+/* --- DL --- */
+.section dd > p:first-child {
+ margin-top: 0;
+}
+
+.section dd > p:last-child {
+ margin-bottom: 0;
+}
+
+.section dd {
+ margin-bottom: 1em;
+}
+
+.section dl.attrs dd, .section dl.eldef dd {
+ margin-bottom: 0;
+}
+</style><style>/* --- ISSUES/NOTES --- */
+div.issue-title, div.note-title {
+ padding-right: 1em;
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.issue-title { color: #e05252; }
+div.note-title { color: #52e052; }
+div.issue-title span, div.note-title span {
+ text-transform: uppercase;
+}
+div.note, div.issue {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.note > p:first-child, .issue > p:first-child { margin-top: 0 }
+.issue, .note {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+}
+div.issue, div.note {
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+span.note, span.issue { padding: .1em .5em .15em; }
+
+.issue {
+ border-color: #e05252;
+ background: #fbe9e9;
+}
+.note {
+ border-color: #52e052;
+ background: #e9fbe9;
+}
+
+
+</style><style>/* --- WEB IDL --- */
+pre.idl {
+ border-top: 1px solid #90b8de;
+ border-bottom: 1px solid #90b8de;
+ padding: 1em;
+ line-height: 120%;
+}
+
+pre.idl::before {
+ content: "WebIDL";
+ display: block;
+ width: 150px;
+ background: #90b8de;
+ color: #fff;
+ font-family: initial;
+ padding: 3px;
+ font-weight: bold;
+ margin: -1em 0 1em -1em;
+}
+
+.idlType {
+ color: #ff4500;
+ font-weight: bold;
+ text-decoration: none;
+}
+
+/*.idlModule*/
+/*.idlModuleID*/
+/*.idlInterface*/
+.idlInterfaceID, .idlDictionaryID, .idlCallbackID, .idlEnumID {
+ font-weight: bold;
+ color: #005a9c;
+}
+
+.idlSuperclass {
+ font-style: italic;
+ color: #005a9c;
+}
+
+/*.idlAttribute*/
+.idlAttrType, .idlFieldType, .idlMemberType {
+ color: #005a9c;
+}
+.idlAttrName, .idlFieldName, .idlMemberName {
+ color: #ff4500;
+}
+.idlAttrName a, .idlFieldName a, .idlMemberName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlMethod*/
+.idlMethType, .idlCallbackType {
+ color: #005a9c;
+}
+.idlMethName {
+ color: #ff4500;
+}
+.idlMethName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlParam*/
+.idlParamType {
+ color: #005a9c;
+}
+.idlParamName {
+ font-style: italic;
+}
+
+.extAttr {
+ color: #666;
+}
+
+/*.idlConst*/
+.idlConstType {
+ color: #005a9c;
+}
+.idlConstName {
+ color: #ff4500;
+}
+.idlConstName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlException*/
+.idlExceptionID {
+ font-weight: bold;
+ color: #c00;
+}
+
+.idlTypedefID, .idlTypedefType {
+ color: #005a9c;
+}
+
+.idlRaises, .idlRaises a.idlType, .idlRaises a.idlType code, .excName a, .excName a code {
+ color: #c00;
+ font-weight: normal;
+}
+
+.excName a {
+ font-family: monospace;
+}
+
+.idlRaises a.idlType, .excName a.idlType {
+ border-bottom: 1px dotted #c00;
+}
+
+.excGetSetTrue, .excGetSetFalse, .prmNullTrue, .prmNullFalse, .prmOptTrue, .prmOptFalse {
+ width: 45px;
+ text-align: center;
+}
+.excGetSetTrue, .prmNullTrue, .prmOptTrue { color: #0c0; }
+.excGetSetFalse, .prmNullFalse, .prmOptFalse { color: #c00; }
+
+.idlImplements a {
+ font-weight: bold;
+}
+
+dl.attributes, dl.methods, dl.constants, dl.fields, dl.dictionary-members {
+ margin-left: 2em;
+}
+
+.attributes dt, .methods dt, .constants dt, .fields dt, .dictionary-members dt {
+ font-weight: normal;
+}
+
+.attributes dt code, .methods dt code, .constants dt code, .fields dt code, .dictionary-members dt code {
+ font-weight: bold;
+ color: #000;
+ font-family: monospace;
+}
+
+.attributes dt code, .fields dt code, .dictionary-members dt code {
+ background: #ffffd2;
+}
+
+.attributes dt .idlAttrType code, .fields dt .idlFieldType code, .dictionary-members dt .idlMemberType code {
+ color: #005a9c;
+ background: transparent;
+ font-family: inherit;
+ font-weight: normal;
+ font-style: italic;
+}
+
+.methods dt code {
+ background: #d9e6f8;
+}
+
+.constants dt code {
+ background: #ddffd2;
+}
+
+.attributes dd, .methods dd, .constants dd, .fields dd, .dictionary-members dd {
+ margin-bottom: 1em;
+}
+
+table.parameters, table.exceptions {
+ border-spacing: 0;
+ border-collapse: collapse;
+ margin: 0.5em 0;
+ width: 100%;
+}
+table.parameters { border-bottom: 1px solid #90b8de; }
+table.exceptions { border-bottom: 1px solid #deb890; }
+
+.parameters th, .exceptions th {
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+ font-family: initial;
+ font-weight: normal;
+ text-shadow: #666 1px 1px 0;
+}
+.parameters th { background: #90b8de; }
+.exceptions th { background: #deb890; }
+
+.parameters td, .exceptions td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+ vertical-align: top;
+}
+
+.parameters tr:first-child td, .exceptions tr:first-child td {
+ border-top: none;
+}
+
+.parameters td.prmName, .exceptions td.excName, .exceptions td.excCodeName {
+ width: 100px;
+}
+
+.parameters td.prmType {
+ width: 120px;
+}
+
+table.exceptions table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ width: 100%;
+}
+</style><link rel="stylesheet" href="http://www.w3.org/StyleSheets/TR/w3c-unofficial" />
+<!--[if lt IE 9]><script src='undefined://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]-->
+</head>
+
+<body><div class="head">
+ <p>
+
+ </p>
+ <h1 id="title" class="title">JSON-LD Framing 1.0</h1>
+
+ <h2 id="subtitle">An Application Programming Interface for the JSON-LD Syntax</h2>
+
+ <h2 id="unofficial-draft-30-august-2012">Unofficial Draft 30 August 2012</h2>
+ <dl>
+
+
+ <dt>Latest editor's draft:</dt>
+ <dd><a href="http://json-ld.org/spec/latest/json-ld-framing/">http://json-ld.org/spec/latest/json-ld-framing/</a></dd>
+
+
+
+
+
+
+ <dt>Editors:</dt>
+ <dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://manu.sporny.org/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">Manu Sporny</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
+</dd>
+<dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">Gregg Kellogg</a>, <a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">Kellogg Associates</a></span>
+</dd>
+<dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://digitalbazaar.com/" content="Dave Longley" property="foaf:name" rel="foaf:homepage">Dave Longley</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
+</dd>
+<dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">Markus Lanthaler</a>, <a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">Graz University of Technology</a></span>
+</dd>
+
+
+ <dt>Authors:</dt>
+ <dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://digitalbazaar.com/" content="Dave Longley" property="foaf:name" rel="foaf:homepage">Dave Longley</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
+</dd>
+<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://digitalbazaar.com/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">Manu Sporny</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
+</dd>
+<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">Gregg Kellogg</a>, <a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">Kellogg Associates</a></span>
+</dd>
+<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">Markus Lanthaler</a>, <a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">Graz University of Technology</a></span>
+</dd>
+
+
+ </dl>
+
+
+
+
+
+
+ <p class="copyright">
+ This document is licensed under a
+ <a rel="license" href="http://creativecommons.org/licenses/by/3.0/" class="subfoot">Creative Commons
+ Attribution 3.0 License</a>.
+ </p>
+
+
+
+ <hr />
+</div>
+<section id="abstract" class="introductory"><h2>Abstract</h2>
+<p>JSON-LD Framing allows developers to query by example and
+ force a specific tree layout to a JSON-LD document.</p>
+</section><section class="introductory" id="sotd"><h2>Status of This Document</h2>
+
+ <p>
+ This document is merely a public working draft of a potential specification. It has
+ no official standing of any kind and does not represent the support or consensus of any
+ standards organisation.
+ </p>
+
+<p>This document is an experimental work in progress.</p>
+
+<!-- <p>
+This document has been reviewed by W3C Members, by software
+developers, and by other W3C groups and interested parties, and is
+endorsed by the Director as a W3C Recommendation. It is a stable
+document and may be used as reference material or cited from another
+document. W3C's role in making the Recommendation is to draw attention
+to the specification and to promote its widespread deployment. This
+enhances the functionality and interoperability of the Web.
+</p> -->
+
+
+
+</section><section id="toc"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a><ul class="toc"><li class="tocline"><a href="#how-to-read-this-document" class="tocxref"><span class="secno">1.1 </span>How to Read this Document</a></li><li class="tocline"><a href="#general-terminology" class="tocxref"><span class="secno">1.2 </span>General Terminology</a></li><li class="tocline"><a href="#contributing" class="tocxref"><span class="secno">1.3 </span>Contributing</a></li></ul></li><li class="tocline"><a href="#the-application-programming-interface" class="tocxref"><span class="secno">2. </span>The Application Programming Interface</a><ul class="toc"><li class="tocline"><a href="#jsonldprocessor" class="tocxref"><span class="secno">2.1 </span>JsonLdProcessor</a><ul class="toc"><li class="tocline"><a href="#methods" class="tocxref"><span class="secno">2.1.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#callbacks" class="tocxref"><span class="secno">2.2 </span>Callbacks</a><ul class="toc"><li class="tocline"><a href="#jsonldcallback" class="tocxref"><span class="secno">2.2.1 </span>JsonLdCallback</a></li></ul></li><li class="tocline"><a href="#data-structures" class="tocxref"><span class="secno">2.3 </span>Data Structures</a><ul class="toc"><li class="tocline"><a href="#jsonldoptions" class="tocxref"><span class="secno">2.3.1 </span>JsonLdOptions</a></li></ul></li></ul></li><li class="tocline"><a href="#algorithms" class="tocxref"><span class="secno">3. </span>Algorithms</a><ul class="toc"><li class="tocline"><a href="#syntax-tokens-and-keywords" class="tocxref"><span class="secno">3.1 </span>Syntax Tokens and Keywords</a></li><li class="tocline"><a href="#algorithm-terms" class="tocxref"><span class="secno">3.2 </span>Algorithm Terms</a></li><li class="tocline"><a href="#framing" class="tocxref"><span class="secno">3.3 </span>Framing</a><ul class="toc"><li class="tocline"><a href="#framing-algorithm-terms" class="tocxref"><span class="secno">3.3.1 </span>Framing Algorithm Terms</a></li><li class="tocline"><a href="#framing-algorithm" class="tocxref"><span class="secno">3.3.2 </span>Framing Algorithm</a></li><li class="tocline"><a href="#remove-embed" class="tocxref"><span class="secno">3.3.3 </span>Remove Embedded Definition</a></li><li class="tocline"><a href="#embed-values" class="tocxref"><span class="secno">3.3.4 </span>Embed Values</a></li></ul></li></ul></li><li class="tocline"><a href="#iana-considerations" class="tocxref"><span class="secno">A. </span>IANA Considerations</a></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">B. </span>Acknowledgements</a></li><li class="tocline"><a href="#references" class="tocxref"><span class="secno">C. </span>References</a><ul class="toc"><li class="tocline"><a href="#normative-references" class="tocxref"><span class="secno">C.1 </span>Normative references</a></li><li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">C.2 </span>Informative references</a></li></ul></li></ul></section>
+
+
+
+<section id="introduction">
+
+<!--OddPage-->
+<h2><span class="secno">1. </span>Introduction</h2>
+<p>A JSON-LD document is a representation of a directed graph. A single
+ directed graph can have many different serializations, each expressing
+ exactly the same information. Developers typically work with trees, represented as
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>s. While mapping a graph to
+ a tree can be done, the layout of the end result must be specified in advance.
+ A <dfn title="frame" id="dfn-frame">Frame</dfn> can be used by a developer on a JSON-LD document to
+ specify a deterministic layout for a graph.</p>
+
+<section id="how-to-read-this-document">
+<h3><span class="secno">1.1 </span>How to Read this Document</h3>
+
+<p>
+This document is a detailed specification for a serialization of Linked
+Data in JSON. The document is primarily intended for the following audiences:
+</p>
+
+<ul>
+ <li>Authors who want to query JSON-LD documents to create representations
+ more appropriate for a given use case.</li>
+ <li>Software developers that want to implement processors and APIs for
+ JSON-LD.</li>
+</ul>
+
+<p>
+To understand the basics in this specification you must first be familiar with
+JSON, which is detailed in [<cite><a class="bibref" href="#bib-RFC4627">RFC4627</a></cite>]. You must also understand the
+JSON-LD Syntax [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>], which is the base syntax used by all of the
+algorithms in this document,
+and the JSON-LD API [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>]. To understand the API and how it is
+intended to operate in a programming environment, it is useful to have working
+knowledge of the JavaScript programming language [<cite><a class="bibref" href="#bib-ECMA-262">ECMA-262</a></cite>] and
+WebIDL [<cite><a class="bibref" href="#bib-WEBIDL">WEBIDL</a></cite>]. To understand how JSON-LD maps to RDF, it is helpful to be
+familiar with the basic RDF concepts [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].</p>
+
+</section>
+
+<section id="general-terminology">
+ <h3><span class="secno">1.2 </span>General Terminology</h3>
+
+ <div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">The intent of the Working Group and the Editors of this
+ specification is to eventually align terminology used in this document
+ with the terminology used in the RDF Concepts document to the extent to
+ which it makes sense to do so. In general, if there is an analogue to
+ terminology used in this document in the RDF Concepts document, the
+ preference is to use the terminology in the RDF Concepts document.
+ </p></div>
+
+ <p>The following is an explanation of the general terminology used in this document:</p>
+ <dl>
+ <dt><dfn title="json_object" id="dfn-json_object">JSON object</dfn></dt>
+ <dd>An object structure is represented as a pair of curly brackets surrounding zero or
+ more name-value pairs. A name is a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>. A single colon comes after
+ each name, separating the name from the value. A single comma separates a value
+ from a following name. The names within an object <em class="rfc2119" title="should">should</em> be unique.</dd>
+ <dt><dfn title="array" id="dfn-array">array</dfn></dt>
+ <dd>An array is represented as square brackets surrounding zero or more
+ values that are separated by commas.</dd>
+ <dt><dfn title="string" id="dfn-string">string</dfn></dt>
+ <dd>A string is a sequence of zero or more Unicode (UTF-8) characters,
+ wrapped in double quotes, using backslash escapes (if necessary). A
+ character is represented as a single character string.</dd>
+ <dt><dfn title="number" id="dfn-number">number</dfn></dt>
+ <dd>A number is similar to that used in most programming languages, except
+ that the octal and hexadecimal formats are not used and that leading
+ zeros are not allowed.</dd>
+ <dt><dfn title="true" id="dfn-true">true</dfn> and <dfn title="false" id="dfn-false">false</dfn></dt>
+ <dd>Values that are used to express one of two possible boolean states.</dd>
+ <dt><dfn title="null" id="dfn-null">null</dfn></dt>
+ <dd>The use of the <a class="tref internalDFN" title="null" href="#dfn-null">null</a> value within JSON-LD is used to ignore or reset values.</dd>
+ <dt><dfn title="keyword" id="dfn-keyword">keyword</dfn></dt>
+ <dd>A JSON key that is specific to JSON-LD, specified in the JSON-LD Syntax specification [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>]
+ in the section titled <cite><a href="../json-ld-syntax/#syntax-tokens-and-keywords">Syntax Tokens and Keywords</a></cite>.</dd>
+ <dt><dfn title="context" id="dfn-context">context</dfn></dt>
+ <dd>A a set of rules for interpreting a JSON-LD document as specified in
+ <cite><a href="../json-ld-syntax/#the-context">The Context</a></cite> of the [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>] specification.</dd>
+ <dt><dfn title="iri" id="dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></dfn></dt>
+ <dd>An Internationalized Resource Identifier as described in [<cite><a class="bibref" href="#bib-RFC3987">RFC3987</a></cite>].</dd>
+ <dt><dfn title="linked_data" id="dfn-linked_data">Linked Data</dfn></dt>
+ <dd>A set of documents, each containing a representation of a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</dd>
+ <dt><dfn title="linked_data_graph" id="dfn-linked_data_graph">linked data graph</dfn> or <dfn title="dataset" id="dfn-dataset">dataset</dfn></dt>
+ <dd>An unordered labeled directed graph, where <a class="tref internalDFN" title="node" href="#dfn-node">nodes</a> are
+ <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> or <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">Blank Nodes</a>, or other values.
+ A <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> is a generalized representation of a
+ <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-graph">RDF graph</a></cite>
+ as defined in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].</dd>
+ <dt><dfn title="named_graph" id="dfn-named_graph">named graph</dfn></dt>
+ <dd>A <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> that is identified by an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</dd>
+ <dt><dfn title="graph_name" id="dfn-graph_name">graph name</dfn></dt>
+ <dd>The <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> identifying a <a class="tref internalDFN" title="named_graph" href="#dfn-named_graph">named graph</a>.</dd>
+ <dt><dfn title="default_graph" id="dfn-default_graph">default graph</dfn></dt>
+ <dd>When executing an algorithm, the graph where data should be placed
+ if a <a class="tref internalDFN" title="named_graph" href="#dfn-named_graph">named graph</a> is not specified.</dd>
+ <dt><dfn title="node" id="dfn-node">node</dfn></dt>
+ <dd>A piece of information that is represented in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</dd>
+ <dt><dfn title="node_definition" id="dfn-node_definition">node definition</dfn></dt>
+ <dd>A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to represent a <a class="tref internalDFN" title="node" href="#dfn-node">node</a> and
+ one or more properties of that node. A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is a
+ node definition if it does not contain they keys <code>@value</code>,
+ <code>@list</code> or <code>@set</code> and it has one or more keys
+ other than <code>@id</code>.</dd>
+ <dt><dfn title="node_reference" id="dfn-node_reference">node reference</dfn></dt>
+ <dd>A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to reference a node having only the
+ <code>@id</code> key.</dd>
+ <dt><dfn title="blank_node" id="dfn-blank_node">blank node</dfn></dt>
+ <dd>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> in the <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> that does not contain a de-referenceable
+ identifier because it is either ephemeral in nature or does not contain information that needs to be
+ linked to from outside of the linked data graph. A blank node is assigned an identifier starting with
+ the prefix <code>_:</code>.</dd>
+ <dt><dfn title="property" id="dfn-property">property</dfn></dt>
+ <dd>The <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> label of an edge in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</dd>
+ <dt><dfn title="subject" id="dfn-subject">subject</dfn></dt>
+ <dd>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> with at least one outgoing edge, related to an <a class="tref internalDFN" title="object" href="#dfn-object">object</a> node through a <a class="tref internalDFN" title="property" href="#dfn-property">property</a>.</dd>
+ <dt><dfn title="object" id="dfn-object">object</dfn></dt>
+ <dd>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> with at least one incoming edge.</dd>
+ <dt><dfn title="quad" id="dfn-quad">quad</dfn></dt>
+ <dd>A piece of information that contains four items; a <a class="tref internalDFN" title="subject" href="#dfn-subject">subject</a>, a <a class="tref internalDFN" title="property" href="#dfn-property">property</a>,
+ an <a class="tref internalDFN" title="object" href="#dfn-object">object</a>, and a <a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">graph name</a>.</dd>
+ <dt><dfn title="literal" id="dfn-literal">literal</dfn></dt>
+ <dd>An <a class="tref internalDFN" title="object" href="#dfn-object">object</a> expressed as a value such as a string, number or in expanded form.</dd>
+ </dl>
+<p></p>
+</section>
+
+<section id="contributing">
+ <h3><span class="secno">1.3 </span>Contributing</h3>
+
+ <p>There are a number of ways that one may participate in the development of
+ this specification:</p>
+
+ <ul>
+ <li>Technical discussion typically occurs on the public mailing list:
+ <a href="http://lists.w3.org/Archives/Public/public-linked-json/">public-linked-json@w3.org</a></li>
+
+ <li><a href="http://json-ld.org/minutes/">Public teleconferences</a> are held
+ on Tuesdays at 1500UTC on the second and fourth week of each month.</li>
+
+ <li>Specification bugs and issues should be reported in the
+ <a href="https://github.com/json-ld/json-ld.org/issues">issue tracker</a>.</li>
+
+ <li><a href="https://github.com/json-ld/json-ld.org/tree/master/spec">Source code</a> for the
+ specification can be found on Github.</li>
+
+ <li>The <a href="http://webchat.freenode.net/?channels=json-ld">#json-ld</a>
+ IRC channel is available for real-time discussion on irc.freenode.net.</li>
+ </ul>
+
+</section>
+
+</section>
+
+<section id="the-application-programming-interface">
+
+<!--OddPage-->
+<h2><span class="secno">2. </span>The Application Programming Interface</h2>
+
+ <p>This API provides a clean mechanism that enables developers to convert
+ JSON-LD data into a a variety of output formats that are easier to work with in
+ various programming languages. If a JSON-LD API is provided in a programming
+ environment, the entirety of the following API <em class="rfc2119" title="must">must</em> be implemented.
+ </p>
+
+ <section id="jsonldprocessor">
+ <h3><span class="secno">2.1 </span>JsonLdProcessor</h3>
+
+ <p>The JSON-LD processor interface is the high-level programming structure that developers
+ use to access the JSON-LD transformation methods. The definition below is an experimental
+ extension of the interface defined in the [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>].</p>
+
+ <div class="note"><div class="note-title"><span>Note</span></div><p class="">The JSON-LD API signatures are the same across all programming languages. Due
+ to the fact that asynchronous programming is uncommon in certain languages, developers <em class="rfc2119" title="may">may</em>
+ implement processor with a synchronous interface instead. In that case, the <code>callback</code>
+ parameter <em class="rfc2119" title="must not">must not</em> be included and the result <em class="rfc2119" title="must">must</em> be returned as return value instead.</p></div>
+
+ <pre class="idl"><span id="idl-def-JsonLdProcessor" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
+interface <span class="idlInterfaceID">JsonLdProcessor</span> {
+<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdProcessor-frame-void-object-or-object---or-IRI-input-object-or-IRI-frame-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options">frame</a></span> (<span class="idlParam"><span class="idlParamType"><a>object or object[] or IRI</a></span> <span class="idlParamName">input</span></span>, <span class="idlParam"><span class="idlParamType"><a>object or IRI</a></span> <span class="idlParamName">frame</span></span>, <span class="idlParam"><span class="idlParamType"><a>object or IRI</a>?</span> <span class="idlParamName">context</span></span>, <span class="idlParam"><span class="idlParamType"><a>JsonLdCallback</a></span> <span class="idlParamName">callback</span></span>, <span class="idlParam">optional <span class="idlParamType"><a>JsonLdOptions</a>?</span> <span class="idlParamName">options</span></span>);</span>
+};</span></pre><section id="methods"><h4><span class="secno">2.1.1 </span>Methods</h4><dl class="methods"><dt id="widl-JsonLdProcessor-frame-void-object-or-object---or-IRI-input-object-or-IRI-frame-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options"><code>frame</code></dt><dd>
+ <a href="#framing">Frames</a> the given <code>input</code> using the
+ <code>frame</code> according to the steps in the
+ <a href="#framing-algorithm">Framing Algorithm</a>. The <code>input</code>
+ is used to build the framed output and is returned if there are no errors.
+ If there are no matches for the frame, <a class="tref internalDFN" title="null" href="#dfn-null">null</a> <em class="rfc2119" title="must">must</em> be
+ returned. Exceptions <em class="rfc2119" title="must">must</em> be thrown if there are errors.
+
+
+ <table class="parameters"><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">input</td><td class="prmType"><code><a>object or object[] or IRI</a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">The JSON-LD object or array of JSON-LD objects to perform the framing upon or an
+ <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> referencing the JSON-LD document to frame.</td></tr><tr><td class="prmName">frame</td><td class="prmType"><code><a>object or IRI</a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">The frame to use when re-arranging the data of <code>input</code>; either
+ in the form of an <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> or as <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</td></tr><tr><td class="prmName">context</td><td class="prmType"><code><a>object or IRI</a></code></td><td class="prmNullTrue">✔</td><td class="prmOptFalse">✘</td><td class="prmDesc">An optional external context to use additionally to the context embedded in
+ <code>input</code> when expanding the <code>input</code>.</td></tr><tr><td class="prmName">callback</td><td class="prmType"><code><a>JsonLdCallback</a></code></td><td class="prmNullFalse">✘</td><td class="prmOptFalse">✘</td><td class="prmDesc">A callback that is called when processing is complete on
+ the given <code>input</code>.</td></tr><tr><td class="prmName">options</td><td class="prmType"><code><a>JsonLdOptions</a></code></td><td class="prmNullTrue">✔</td><td class="prmOptTrue">✔</td><td class="prmDesc">A set of options that <em class="rfc2119" title="may">may</em> affect the framing algorithm such as, e.g., the
+ input document's base <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</td></tr></table><div><em>Return type: </em><code><a>void</a></code></div></dd></dl></section>
+
+ </section>
+
+ <section id="callbacks">
+ <h3><span class="secno">2.2 </span>Callbacks</h3>
+ <section id="jsonldcallback">
+ <h4><span class="secno">2.2.1 </span>JsonLdCallback</h4>
+ <p>The <a>JsonLdCallback</a> is used to return a processed JSON-LD representation
+ as the result of processing an API method.</p>
+ <p>See <a class="externalDFN" title="JsonLdCallback">JsonLdCallback</a> definition in [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>].</p>
+ </section>
+ </section>
+
+ <section id="data-structures">
+ <h3><span class="secno">2.3 </span>Data Structures</h3>
+ <p>This section describes datatype definitions used within the JSON-LD API.</p>
+
+ <section id="jsonldoptions">
+ <h4><span class="secno">2.3.1 </span>JsonLdOptions</h4>
+ <p>The <a>JsonLdOptions</a> type is used to convert a set of options to an interface method.</p>
+ <p>See <a class="externalDFN" title="JsonLdOptions">JsonLdOptions</a> definition in [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>].</p>
+ </section>
+ </section>
+
+</section>
+
+<section id="algorithms">
+
+<!--OddPage-->
+<h2><span class="secno">3. </span>Algorithms</h2>
+
+<p>All algorithms described in this section are intended to operate on
+language-native data structures. That is, the serialization to a text-based
+JSON document isn't required as input or output to any of these algorithms and
+language-native data structures <em class="rfc2119" title="must">must</em> be used where applicable.</p>
+
+<section id="syntax-tokens-and-keywords">
+ <h3><span class="secno">3.1 </span>Syntax Tokens and Keywords</h3>
+
+ <p>This specification adds a number of <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a> to
+ the ones defined in the [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>] specification:</p>
+
+ <dl>
+ <dt><code>@default</code></dt>
+ <dd>Used in <a href="#framing">Framing</a> to set the default value for
+ an output property when the framed <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> does not include such a property.</dd>
+ <dt><code>@explicit</code></dt>
+ <dd>Used in <a href="#framing">Framing</a> to override the
+ value of <a class="tref internalDFN" title="explicit_inclusion_flag" href="#dfn-explicit_inclusion_flag">explicit inclusion flag</a> within a specific frame.</dd>
+ <dt><code>@omitDefault</code></dt>
+ <dd>Used in <a href="#framing">Framing</a> to override the
+ value of <a class="tref internalDFN" title="omit_default_flag" href="#dfn-omit_default_flag">omit default flag</a> within a specific frame.</dd>
+ <dt><code>@embed</code></dt>
+ <dd>Used in <a href="#framing">Framing</a> to override the
+ value of <a class="tref internalDFN" title="object_embed_flag" href="#dfn-object_embed_flag">object embed flag</a> within a specific frame.</dd>
+ <dt><code>@null</code></dt>
+ <dd>Used in <a href="#framing">Framing</a> when a value of <a class="tref internalDFN" title="null" href="#dfn-null">null</a>
+ should be returned, which would otherwise be removed when
+ <a href="../json-ld-api/index.html#compaction">Compacting</a>.</dd>
+ </dl>
+
+ <p>All JSON-LD tokens and keywords are case-sensitive.</p>
+</section>
+
+<section id="algorithm-terms">
+ <h3><span class="secno">3.2 </span>Algorithm Terms</h3>
+ <dl>
+ <dt><dfn title="active_subject" id="dfn-active_subject">active subject</dfn></dt>
+ <dd>
+ the currently active subject that the processor should use when
+ processing.
+ </dd>
+ <dt><dfn title="active_property" id="dfn-active_property">active property</dfn></dt>
+ <dd>
+ the currently active property that the processor should use when
+ processing. The active property is represented in the original lexical form, which
+ is used for finding coercion mappings in the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.
+ </dd>
+ <dt><dfn title="active_object" id="dfn-active_object">active object</dfn></dt>
+ <dd>
+ the currently active object that the processor should use when
+ processing.
+ </dd>
+ <dt><dfn title="active_context" id="dfn-active_context">active context</dfn></dt>
+ <dd>
+ a context that is used to resolve <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s while the processing
+ algorithm is running. The <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> is the context
+ contained within the <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a>.
+ </dd>
+ <dt><dfn title="compact_iri" id="dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn></dt>
+ <dd>
+ a compact <abbr title="Internationalized Resource Identifier">IRI</abbr> is has the form of <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> and <em>suffix</em> and is used as a way
+ of expressing an <abbr title="Internationalized Resource Identifier">IRI</abbr> without needing to define separate <a class="tref internalDFN" title="term" href="#dfn-term">term</a> definitions for
+ each <abbr title="Internationalized Resource Identifier">IRI</abbr> contained within a common vocabulary identified by <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a>.
+ </dd>
+ <dt><dfn title="local_context" id="dfn-local_context">local context</dfn></dt>
+ <dd>
+ a context that is specified within a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>,
+ specified via the <code>@context</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>.
+ </dd>
+ <dt><dfn title="processor_state" id="dfn-processor_state">processor state</dfn></dt>
+ <dd>
+ the <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a>, which includes the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active
+ context</a>, <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>, and
+ <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>. The <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a> is managed
+ as a stack with elements from the previous <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a>
+ copied into a new <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a> when entering a new
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>.
+ </dd>
+ <dt><dfn title="json-ld_input" id="dfn-json-ld_input">JSON-LD input</dfn></dt>
+ <dd>
+ The JSON-LD data structure that is provided as input to the algorithm.
+ </dd>
+ <dt><dfn title="json-ld_output" id="dfn-json-ld_output">JSON-LD output</dfn></dt>
+ <dd>
+ The JSON-LD data structure that is produced as output by the algorithm.
+ </dd>
+ <dt><dfn title="term" id="dfn-term">term</dfn></dt><dd>
+ A <a class="tref internalDFN" title="term" href="#dfn-term">term</a> is a short word defined in a context that <em class="rfc2119" title="may">may</em> be expanded to an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>
+ </dd>
+ <dt><dfn title="prefix" id="dfn-prefix">prefix</dfn></dt><dd>
+ A <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> is a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> that expands to a vocabulary base <abbr title="Internationalized Resource Identifier">IRI</abbr>. It
+ is typically used along with a <em>suffix</em> to form a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> to create an <abbr title="Internationalized Resource Identifier">IRI</abbr>
+ within a vocabulary.
+ </dd>
+ <dt><dfn title="language-tagged_string" id="dfn-language-tagged_string">language-tagged string</dfn></dt><dd>
+ A <a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged string</a> is a <a class="tref internalDFN" title="literal" href="#dfn-literal">literal</a> without a datatype, including
+ a language. See <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-language-tagged-string">languaged-tagged string</a></cite>
+ in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].
+ </dd>
+ <dt><dfn title="typed_literal" id="dfn-typed_literal">typed literal</dfn></dt><dd>
+ A <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> is a <a class="tref internalDFN" title="literal" href="#dfn-literal">literal</a> with an associated <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>
+ which indicates the literal's datatype.
+ See <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-typed-literal">languaged-tagged literal</a></cite> in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].
+ </dd>
+ </dl>
+</section>
+
+<section id="framing">
+<h3><span class="secno">3.3 </span>Framing</h3>
+<p>Framing is the process of taking a JSON-LD document, which expresses a
+ graph of information, and applying a specific graph layout
+ (called a <a class="tref internalDFN" title="frame" href="#dfn-frame">Frame</a>).</p>
+
+<p>Framing makes use of the <a href="../json-ld-api/index.html#node-map-generation">Node Map Generation</a> algorithm
+ to place each object defined in the JSON-LD document into a flat list of objects, allowing
+ them to be operated upon by the framing algorithm.</p>
+
+<section id="framing-algorithm-terms">
+<h4><span class="secno">3.3.1 </span>Framing Algorithm Terms</h4>
+
+<dl>
+ <dt><dfn title="input_frame" id="dfn-input_frame">input frame</dfn></dt>
+ <dd>the initial <a class="tref internalDFN" title="frame" href="#dfn-frame">frame</a> provided to the framing algorithm.</dd>
+ <dt><dfn title="framing_context" id="dfn-framing_context">framing context</dfn></dt>
+ <dd>a context containing a <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a>, the
+ <a class="tref internalDFN" title="object_embed_flag" href="#dfn-object_embed_flag">object embed flag</a>, the
+ <a class="tref internalDFN" title="explicit_inclusion_flag" href="#dfn-explicit_inclusion_flag">explicit inclusion flag</a> and the
+ <a class="tref internalDFN" title="omit_default_flag" href="#dfn-omit_default_flag">omit default flag</a>.</dd>
+ <dt><dfn title="map_of_embeds" id="dfn-map_of_embeds">map of embeds</dfn></dt>
+ <dd>a map that tracks if a subject is to be embedded in the output of the
+ <a href="#framing-algorithm">Framing Algorithm</a>; it maps a subject
+ <code>@id</code> to a parent <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> and property
+ or parent array.</dd>
+ <dt><dfn title="object_embed_flag" id="dfn-object_embed_flag">object embed flag</dfn></dt>
+ <dd>a flag specifying that objects should be directly embedded in the output,
+ instead of being referred to by their <abbr title="Internationalized Resource Identifier">IRI</abbr>.</dd>
+ <dt><dfn title="explicit_inclusion_flag" id="dfn-explicit_inclusion_flag">explicit inclusion flag</dfn></dt>
+ <dd>a flag specifying that for properties to be included in the output, they
+ must be explicitly declared in the <a class="tref internalDFN" title="framing_context" href="#dfn-framing_context">framing context</a>.</dd>
+ <dt><dfn title="omit_default_flag" id="dfn-omit_default_flag">omit default flag</dfn></dt>
+ <dd>a flag specifying that properties that are missing from the
+ <a class="tref internalDFN" title="json-ld_input" href="#dfn-json-ld_input">JSON-LD input</a>, but present in the <a class="tref internalDFN" title="input_frame" href="#dfn-input_frame">input frame</a>
+ should be omitted from the output.</dd>
+ <dt><dfn title="map_of_flattened_subjects" id="dfn-map_of_flattened_subjects">map of flattened subjects</dfn></dt>
+ <dd>a map of subjects that is the result of the
+ <a href="../json-ld-api/index.html#node-map-generation">Node Map Generation algorithm</a>.</dd>
+</dl>
+</section>
+
+<section id="framing-algorithm">
+<h4><span class="secno">3.3.2 </span>Framing Algorithm</h4>
+
+<div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/118"><span>Issue 118</span></a></div><p class="">This algorithm is a work in progress. Presently, it only works
+ for documents without named graphs.</p></div>
+
+<div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/110"><span>Issue 110</span></a></div><p class="">Currently, framing allows just to select node definitions based
+ on <code>@type</code> matching or duck typing for included properties. It allows value properties to
+ be explicitly matched based on defining the property and excluding things that are undefined, but it
+ does not allow to be more specific about the types of values selected. Allowing this is currently
+ being discussed.</p></div>
+
+<p>The framing algorithm takes an <a class="tref internalDFN" title="json-ld_input" href="#dfn-json-ld_input">JSON-LD input</a> (<strong>expanded input</strong>)
+ and an <a class="tref internalDFN" title="input_frame" href="#dfn-input_frame">input frame</a> (<strong>expanded frame</strong>) that have been expanded
+ according to the <a href="../json-ld-api/index.html#expansion-algorithm">Expansion Algorithm</a>,
+ and a number of options and produces <a class="tref internalDFN" title="json-ld_output" href="#dfn-json-ld_output">JSON-LD output</a>.</p>
+
+<p>Create <a class="tref internalDFN" title="framing_context" href="#dfn-framing_context">framing context</a> using <a class="tref internalDFN" title="null" href="#dfn-null">null</a> for the <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a>,
+ the <a class="tref internalDFN" title="object_embed_flag" href="#dfn-object_embed_flag">object embed flag</a> set to <a class="tref internalDFN" title="true" href="#dfn-true">true</a>, the
+ <a class="tref internalDFN" title="explicit_inclusion_flag" href="#dfn-explicit_inclusion_flag">explicit inclusion flag</a> set to <a class="tref internalDFN" title="false" href="#dfn-false">false</a>, and the
+ <a class="tref internalDFN" title="omit_default_flag" href="#dfn-omit_default_flag">omit default flag</a> set to <a class="tref internalDFN" title="false" href="#dfn-false">false</a> along with <a class="tref internalDFN" title="map_of_flattened_subjects" href="#dfn-map_of_flattened_subjects">map of flattened subjects</a>
+ set to the <code>@merged</code> property of the result of performing the
+ <a href="../json-ld-api/index.html#node-map-generation">Node Map Generation</a> algorithm on
+ <strong>expanded input</strong>. Also create <em>results</em> as an empty <a class="tref internalDFN" title="array" href="#dfn-array">array</a>.</p>
+
+<p>Invoke the recursive algorithm using <a class="tref internalDFN" title="framing_context" href="#dfn-framing_context">framing context</a> (<em>state</em>),
+ the <a class="tref internalDFN" title="map_of_flattened_subjects" href="#dfn-map_of_flattened_subjects">map of flattened subjects</a> (<em>subjects</em>),
+ <strong>expanded frame</strong> (<em>frame</em>), <em>result</em> as <em>parent</em>, and
+ <a class="tref internalDFN" title="null" href="#dfn-null">null</a> as <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.</p>
+
+<p>The following series of steps is the recursive
+ portion of the framing algorithm:</p>
+
+<ol class="algorithm">
+ <li>Validate <em>frame</em>.</li>
+ <li>Create a set of matched subjects by filtering <em>subjects</em> checking
+ the <a class="tref internalDFN" title="map_of_flattened_subjects" href="#dfn-map_of_flattened_subjects">map of flattened subjects</a> against <em>frame</em>:
+ <ol class="algorithm">
+ <li>If <em>frame</em> has a <code>@type</code> property containing
+ one or more <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> match any <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>
+ with a <code>@type</code> property including any of those <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a>.</li>
+ <li>Otherwise, if <em>frame</em> has a <code>@type</code> property only
+ a empty <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>, matches any <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>
+ with a <code>@type</code> property, regardless of the actual values.</li>
+ <li>Otherwise, match if the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> contains all of the
+ non-<a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> properties in <em>frame</em>.</li>
+ </ol>
+ </li>
+ <li>Get values for <em>embedOn</em> and <em>explicitOn</em> by looking in <em>frame</em>
+ for the keys <code>@embed</code> and <code>@explicit</code> using the current values
+ for <a class="tref internalDFN" title="object_embed_flag" href="#dfn-object_embed_flag">object embed flag</a> and <a class="tref internalDFN" title="explicit_inclusion_flag" href="#dfn-explicit_inclusion_flag">explicit inclusion flag</a> from <em>state</em> if not found.</li>
+ <li>For each <em>id</em> and <em>subject</em> from the set of matched subjects, ordered by <em>id</em>:
+ <ol class="algorithm">
+ <li>If the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> is <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, set the <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a> in
+ <em>state</em> to an empty map.</li>
+ <li>Initialize <em>output</em> with <code>@id</code> and <em>id</em>.</li>
+ <li>Initialize <em>embed</em> with <em>parent</em> and <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> to
+ <em>property</em>.</li>
+ <li>If <em>embedOn</em> is <a class="tref internalDFN" title="true" href="#dfn-true">true</a>, and <em>id</em> is in <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a>
+ from <em>state</em>:
+ <ol class="algorithm">
+ <li>Set <em>existing</em> to the value of <em>id</em> in <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a>
+ and set <em>embedOn</em> to <a class="tref internalDFN" title="false" href="#dfn-false">false</a>.</li>
+ <li>If <em>existing</em> has a <em>parent</em> which is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> containing a
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with <code>@id</code> equal to <em>id</em>, <em>element</em> has
+ already been embedded and can be overwritten, so set <em>embedOn</em> to <a class="tref internalDFN" title="true" href="#dfn-true">true</a>.</li>
+ <li>Otherwise, <em>existing</em> has a <em>parent</em> which is a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>.
+ Set <em>embedOn</em> to <a class="tref internalDFN" title="true" href="#dfn-true">true</a> if any of the items in <em>parent</em> <em>property</em>
+ is a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>
+ or <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a> for <em>id</em> because the embed can be overwritten.
+ </li>
+ <li>If <em>embedOn</em> is <a class="tref internalDFN" title="true" href="#dfn-true">true</a>, <em>existing</em> is already embedded but
+ can be overwritten, so <a href="#remove-embed">Remove Embedded Definition</a> for <em>id</em>.
+ </li>
+ </ol>
+ </li>
+ <li>If <em>embedOn</em> is <a class="tref internalDFN" title="false" href="#dfn-false">false</a>, add <em>output</em> to <em>parent</em>
+ by either appending to <em>parent</em> if it is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, or appending
+ to <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> in <em>parent</em> otherwise.</li>
+ <li>Otherwise:
+ <ol class="algorithm">
+ <li>Add <em>embed</em> to <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a> for <em>id</em>.</li>
+ <li>Process each <em>property</em> and <em>value</em> in the matched <em>subject</em>, ordered
+ by <em>property</em>:
+ <ol class="algorithm">
+ <li>If <em>property</em> is a <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>, add <em>property</em> and a copy of <em>value</em>
+ to <em>output</em> and continue with the next property from <em>subject</em>.</li>
+ <li>If <em>property</em> is not in <em>frame</em>:
+ <ol class="algorithm">
+ <li>If <em>explicitOn</em> is <a class="tref internalDFN" title="false" href="#dfn-false">false</a>, <a href="#embed-values">Embed values</a>
+ from <em>subject</em> in <em>output</em> using <em>subject</em> as <em>element</em> and
+ <em>property</em> as <em>active property</em>.</li>
+ <li>Continue to next property.</li>
+ </ol>
+ </li>
+ <li id="frm-process-prop-item">Process each <em>item</em> from <em>value</em> as follows:
+ <ol class="algorithm">
+ <li>If <em>item</em> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with the key <code>@list</code>, then
+ create a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> named <em>list</em> with the key <code>@list</code> and
+ the value of an empty array. Append <em>list</em> to <em>property</em> in
+ <em>output</em>. Process each <em>listitem</em> in the <code>@list</code> array as follows:
+ <ol class="algorithm">
+ <li>If <em>listitem</em> is a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>
+ process <em>listitem</em> recursively using this algorithm passing a new map of
+ <em>subjects</em> that contains the <code>@id</code> of <em>listitem</em> as the key
+ and the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> from the original <a class="tref internalDFN" title="map_of_flattened_subjects" href="#dfn-map_of_flattened_subjects">map of flattened subjects</a>
+ as the value. Pass the first value from
+ <em>frame</em> for <em>property</em> as <em>frame</em>, <em>list</em>
+ as <em>parent</em>, and <code>@list</code> as <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.</li>
+ <li>Otherwise, append a copy of <em>listitem</em> to <code>@list</code> in <em>list</em>.</li>
+ </ol>
+ </li>
+ <li>If <em>item</em> is a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>
+ process <em>item</em> recursively using this algorithm passing a new map as
+ <em>subjects</em> that contains the <code>@id</code> of <em>item</em> as the key and
+ the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> from the original <a class="tref internalDFN" title="map_of_flattened_subjects" href="#dfn-map_of_flattened_subjects">map of flattened subjects</a>
+ as the value. Pass the first value from
+ <em>frame</em> for <em>property</em> as <em>frame</em>, <em>output</em>
+ as <em>parent</em>, and <em>property</em> as <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.
+ <div class="issue"><div class="issue-title"><span>Issue</span></div><div class="">Passing a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a> doesn't work if this map
+ is used recursively. Presently pass <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> from original
+ <a class="tref internalDFN" title="map_of_flattened_subjects" href="#dfn-map_of_flattened_subjects">map of flattened subjects</a>.</div></div></li>
+ <li>Otherwise, append a copy of <em>item</em> to <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> in
+ <em>output</em>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Process each <em>property</em> and <em>value</em> in <em>frame</em>,
+ where <em>property</em> is not a <em>keyword</em>, ordered by <em>property</em>:
+ <ol class="algorithm">
+ <li>Set <em>property frame</em> to the first item in <em>value</em> or a newly created
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> if <em>value</em> is empty.</li>
+ <li>Skip to the next property in <em>frame</em> if <em>property</em> is in <em>output</em>
+ or if <em>property frame</em> contains
+ <code>@omitDefault</code> which is <a class="tref internalDFN" title="true" href="#dfn-true">true</a> or if it does not contain
+ <code>@omitDefault</code> but the value of <a class="tref internalDFN" title="omit_default_flag" href="#dfn-omit_default_flag">omit default flag</a>
+ <a class="tref internalDFN" title="true" href="#dfn-true">true</a>.</li>
+ <li>Set the value of <em>property</em> in <em>output</em> to a new <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>
+ with a property <code>@preserve</code> and a value that is a copy of the value
+ of <code>@default</code> in <em>frame</em> if it exists, or the string
+ <code>@null</code> otherwise.</li>
+ </ol>
+ </li>
+ <li>Add <em>output</em> to <em>parent</em>.
+ If <em>parent</em> is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, append <em>output</em>, otherwise
+ append <em>output</em> to <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> in <em>parent</em>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+</ol>
+
+<p>At the completion of the recursive algorithm, <em>results</em> will contain the top-level
+ <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>s.</p>
+<p>The final two steps of the framing algorithm require
+ <em>results</em> to be compacted according to the
+ <a href="../json-ld-api/index.html#compaction-algorithm">Compaction Algorithm</a> by using the
+ context provided in the <a class="tref internalDFN" title="input_frame" href="#dfn-input_frame">input frame</a>. If the frame has no context, compaction
+ is performed with an empty context (not a null context). The compaction result <em class="rfc2119" title="must">must</em> use
+ the <code>@graph</code> keyword at the top-level, even if the context is empty or if there
+ is only one element to put in the <code>@graph</code> array. Subsequently, replace all key-value
+ pairs where the key is <code>@preserve</code> with the value from the key-pair. If the value
+ from the key-pair is <code>@null</code>, replace the value with <a class="tref internalDFN" title="null" href="#dfn-null">null</a>. If,
+ after replacement, an array contains only the value <a class="tref internalDFN" title="null" href="#dfn-null">null</a> remove the value, leaving
+ an empty array. The resulting value is the final <a class="tref internalDFN" title="json-ld_output" href="#dfn-json-ld_output">JSON-LD output</a>.</p>
+
+</section>
+
+<section id="remove-embed">
+<h4><span class="secno">3.3.3 </span>Remove Embedded Definition</h4>
+<p>This algorithm replaces an already embedded <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> with a
+ <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>. It then recursively removes any entries in the
+ <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a> that had the removed <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> in
+ their parent chain.</p>
+<div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">About as clear as mud</p></div>
+<div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/119"><span>Issue 119</span></a></div><p class="">The current behaviour avoids embedding the same data
+ multiple times in the result makes it difficult to work with the output. A proposal
+ to change this to "agressive re-embedding" is currently being discussed.</p></div>
+<p>The algorithm is invoked with a <a class="tref internalDFN" title="framing_context" href="#dfn-framing_context">framing context</a> and subject id <em>id</em>.</p>
+<ol class="algorithm">
+ <li>Find <em>embed</em> from <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a> for <em>id</em>.</li>
+ <li>Let <em>parent</em> and <em>property</em> be from <em>embed</em>.</li>
+ <li>If <em>parent</em> is an array, replace the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> that matches
+ <em>id</em> with a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>. If parent is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>,
+ replace the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> for <em>property</em> that matches <em>id</em>
+ with a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>.</li>
+ <li>Remove dependents for <em>id</em> in <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a>
+ by scanning the map for entries with <em>parent</em> that have an <code>@id</code> of <em>id</em>,
+ removing that definition from the map, and then removing the dependents for the <em>parent</em> id
+ recursively by repeating this step. This step will terminate when there are no more embed
+ entries containing the removed <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>'s <code>@id</code> in their
+ parent chain.</li>
+</ol>
+</section>
+
+<section id="embed-values">
+<h4><span class="secno">3.3.4 </span>Embed Values</h4>
+<p>This algorithm recursively embeds property values in <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> <em>output</em>, given a
+ <a class="tref internalDFN" title="framing_context" href="#dfn-framing_context">framing context</a>, input <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> <em>element</em>, <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>,
+ and <em>output</em>.</p>
+<ol class="algorithm">
+ <li>For each <em>item</em> in <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> of <em>element</em>:
+ <ol class="algorithm">
+ <li>If <em>item</em> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with the key <code>@list</code>,
+ then create a new <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with a key <code>@list</code> and
+ a value of an empty array and add it to <em>output</em>, appending if <em>output</em>
+ is an array, and appending to <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> otherwise. Recursively call this
+ algorithm passing <em>item</em> as <em>element</em>, <code>@list</code> as <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>,
+ and the new array as <em>output</em>. Continue to the next <em>item</em>.</li>
+ <li>If <em>item</em> is a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>:
+ <ol class="algorithm">
+ <li>If <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a> does not contain an entry for the <code>@id</code> of <em>item</em>:
+ <ol class="algorithm">
+ <li>Initialize <em>embed</em> with <em>output</em> as <em>parent</em> and
+ <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> as <em>property</em>
+ and add to <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a>.</li>
+ <li>Initialize a new <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> <em>o</em> to act as the
+ embedded <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>.</li>
+ <li>For each <em>property</em> and <em>value</em> in the expanded definition for
+ <em>item</em> in <em>subjects</em>:
+ <ol class="algorithm">
+ <li>Add <em>property</em> and a copy of <em>value</em> to <em>o</em> if <em>property</em>
+ is a <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>.</li>
+ <li>Otherwise, recursively call this algorithm passing <em>value</em> as <em>element</em>,
+ <em>property</em> as <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> and <em>o</em> as <em>output</em>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Set <em>item</em> to <em>o</em>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>If <em>output</em> is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, append a copy of <em>item</em>, otherwise
+ append a copy of <em>item</em> to <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> in <em>output</em>.</li>
+</ol>
+</section>
+</section>
+
+</section>
+
+<section class="appendix informative" id="iana-considerations">
+
+<!--OddPage-->
+<h2><span class="secno">A. </span>IANA Considerations</h2><p><em>This section is non-normative.</em></p>
+
+<p>This section is included merely for standards community review and will be
+submitted to the Internet Engineering Steering Group if this specification
+becomes a W3C Recommendation.</p>
+
+<h2 id="application-ld-frame-json">application/ld-frame+json</h2>
+<dl>
+ <dt>Type name:</dt>
+ <dd>application</dd>
+ <dt>Subtype name:</dt>
+ <dd>ld-frame+json</dd>
+ <dt>Required parameters:</dt>
+ <dd>None</dd>
+ <dt>Optional parameters:</dt>
+ <dd>None</dd>
+ <dt>Encoding considerations:</dt>
+ <dd>The same as the <code>application/json</code> MIME media type.</dd>
+ <dt>Security considerations:</dt>
+ <dd>Since a JSON-LD frame is intended to specify a deterministic layout
+ for a JSON-LD graph, the serialization <em class="rfc2119" title="should not">should not</em> be passed through a
+ code execution mechanism such as JavaScript's <code>eval()</code>
+ function. It is <em class="rfc2119" title="recommended">recommended</em> that a conforming parser does not attempt to
+ directly evaluate the JSON-LD frame and instead purely parse the
+ input into a language-native data structure.</dd>
+ <dt>Interoperability considerations:</dt>
+ <dd>Not Applicable</dd>
+ <dt>Published specification:</dt>
+ <dd>The <a href="http://json-ld.org/spec/latest/">JSON-LD</a> specification.</dd>
+ <dt>Applications that use this media type:</dt>
+ <dd>Any programming environment that requires the exchange of
+ directed graphs. Implementations of JSON-LD have been created for
+ JavaScript, Python, Ruby, PHP and C++.
+ </dd>
+ <dt>Additional information:</dt>
+ <dd>
+ <dl>
+ <dt>Magic number(s):</dt>
+ <dd>Not Applicable</dd>
+ <dt>File extension(s):</dt>
+ <dd>.jsonldf</dd>
+ <dt>Macintosh file type code(s):</dt>
+ <dd>TEXT</dd>
+ </dl>
+ </dd>
+ <dt>Person & email address to contact for further information:</dt>
+ <dd>Manu Sporny <msporny@digitalbazaar.com></dd>
+ <dt>Intended usage:</dt>
+ <dd>Common</dd>
+ <dt>Restrictions on usage:</dt>
+ <dd>None</dd>
+ <dt>Author(s):</dt>
+ <dd>Manu Sporny, Gregg Kellogg, Markus Lanthaler, Dave Longley</dd>
+ <dt>Change controller:</dt>
+ <dd>W3C</dd>
+</dl>
+
+<p>Fragment identifiers have no meaning with
+ <a href="#application-ld-frame-json">application/frame-ld+json</a> resources.</p>
+
+</section>
+
+<section class="appendix" id="acknowledgements">
+
+<!--OddPage-->
+<h2><span class="secno">B. </span>Acknowledgements</h2>
+
+<p>A large amount of thanks goes out to the JSON-LD Community Group
+participants who worked through many of the technical issues on the mailing
+list and the weekly telecons - of special mention are Niklas Lindström,
+François Daoust, and Zdenko 'Denny' Vrandečić.
+The editors would like to thank Mark Birbeck, who provided a great deal of
+the initial push behind the JSON-LD work via his work on RDFj.
+The work of Dave Lehn and Mike Johnson are appreciated for reviewing,
+and performing several implementations of the specification. Ian Davis is
+thanked for this work on RDF/JSON. Thanks also to Nathan Rixham,
+Bradley P. Allen,
+Kingsley Idehen, Glenn McDonald, Alexandre Passant, Danny Ayers, Ted
+Thibodeau Jr., Olivier Grisel, Josh Mandel, Eric Prud'hommeaux,
+David Wood, Guus Schreiber, Pat Hayes, Sandro Hawke, and Richard
+Cyganiak for their input on the specification.
+</p></section>
+
+
+
+<section id="references" class="appendix">
+<!--OddPage-->
+<h2><span class="secno">C. </span>References</h2><section id="normative-references"><h3><span class="secno">C.1 </span>Normative references</h3><dl class="bibliography"><dt id="bib-JSON-LD">[JSON-LD]</dt><dd><cite><a href="http://json-ld.org/spec/ED/json-ld-syntax/20120522/">The JSON-LD Syntax</a></cite> Manu Sporny, Gregg Kellogg, Markus Lanthaler Editors. World Wide Web Consortium (work in progress). 22 May 2012. Editor's Draft. This edition of the JSON-LD Syntax specification is http://json-ld.org/spec/ED/json-ld-syntax/20120522/. The <a href="http://json-ld.org/spec/latest/json-ld-syntax/">latest edition of the JSON-LD Syntax</a> is available at http://json-ld.org/spec/latest/json-ld-syntax/
+</dd><dt id="bib-JSON-LD-API">[JSON-LD-API]</dt><dd><cite><a href="http://json-ld.org/spec/ED/json-ld-api/20120524/">The JSON-LD API 1.0</a></cite> Manu Sporny, Gregg Kellogg, Dave Longley, Markus Lanthaler, Editors. World Wide Web Consortium (work in progress). 24 May 2012. Editor's Draft. This edition of the JSON-LD Syntax specification is http://json-ld.org/spec/ED/json-ld-api/20120524/. The <a href="http://json-ld.org/spec/latest/json-ld-api/">latest edition of the JSON-LD Syntax</a> is available at http://json-ld.org/spec/latest/json-ld-api/
+</dd><dt id="bib-RDF-CONCEPTS">[RDF-CONCEPTS]</dt><dd><cite><a href="http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/">RDF 1.1 Concepts and Abstract Syntax</a></cite> Richard Cyganiak, David Wood, Editors. World Wide Web Consortium (work in progress). 30 May 2012. Editor's Draft. This edition of the JSON-LD Syntax specification is http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/. The <a href="http://www.w3.org/TR/rdf11-concepts/">latest edition of the JSON-LD Syntax</a> is available at http://www.w3.org/TR/rdf11-concepts/
+</dd><dt id="bib-RFC3987">[RFC3987]</dt><dd>M. Dürst; M. Suignard. <a href="http://www.ietf.org/rfc/rfc3987.txt"><cite>Internationalized Resource Identifiers (IRIs).</cite></a> January 2005. Internet RFC 3987. URL: <a href="http://www.ietf.org/rfc/rfc3987.txt">http://www.ietf.org/rfc/rfc3987.txt</a>
+</dd><dt id="bib-RFC4627">[RFC4627]</dt><dd>D. Crockford. <a href="http://www.ietf.org/rfc/rfc4627.txt"><cite>The application/json Media Type for JavaScript Object Notation (JSON)</cite></a> July 2006. Internet RFC 4627. URL: <a href="http://www.ietf.org/rfc/rfc4627.txt">http://www.ietf.org/rfc/rfc4627.txt</a>
+</dd><dt id="bib-WEBIDL">[WEBIDL]</dt><dd><cite><a href="http://www.w3.org/TR/2012/CR-WebIDL-20120419/">Web IDL</a></cite> Cameron McCormack, Editor. World Wide Web Consortium. 19 April 2012. Candidate Recommendataion. This edition of Web IDL is http://www.w3.org/TR/2012/CR-WebIDL-20120419/. The <a href="http://dev.w3.org/2006/webapi/WebIDL/">latest edition of Web IDL</a> is available at http://dev.w3.org/2006/webapi/WebIDL/
+</dd></dl></section><section id="informative-references"><h3><span class="secno">C.2 </span>Informative references</h3><dl class="bibliography"><dt id="bib-ECMA-262">[ECMA-262]</dt><dd><a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm"><cite>ECMAScript Language Specification.</cite></a> June 2011. URL: <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">http://www.ecma-international.org/publications/standards/Ecma-262.htm</a>
+</dd></dl></section></section></body></html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/spec/ED/json-ld-syntax/20120830/diff-20120712.html Thu Aug 30 16:50:04 2012 +0200
@@ -0,0 +1,18716 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
+<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml" typeof="bibo:Document">
+<head>
+<title>JSON-LD Syntax 1.0</title>
+<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+
+<!--
+ === NOTA BENE ===
+ For the three scripts below, if your spec resides on dev.w3 you can check them
+ out in the same tree and use relative links so that they'll work offline,
+ -->
+
+
+
+<style type="text/css">
+.diff { font-weight:bold; color:#0a3; }
+.issue.resolved { display: none; }
+</style>
+<style>/*****************************************************************
+ * ReSpec 3 CSS
+ * Robin Berjon - http://berjon.com/
+ *****************************************************************/
+
+/* --- INLINES --- */
+em.rfc2119 {
+ text-transform: lowercase;
+ font-variant: small-caps;
+ font-style: normal;
+ color: #900;
+}
+
+h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
+h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
+ border: none;
+}
+
+dfn {
+ font-weight: bold;
+}
+
+a.internalDFN {
+ color: inherit;
+ border-bottom: 1px solid #99c;
+ text-decoration: none;
+}
+
+a.externalDFN {
+ color: inherit;
+ border-bottom: 1px dotted #ccc;
+ text-decoration: none;
+}
+
+a.bibref {
+ text-decoration: none;
+}
+
+cite .bibref {
+ font-style: normal;
+}
+
+code {
+ color: #ff4500;
+}
+
+
+/* --- --- */
+ol.algorithm { counter-reset:numsection; list-style-type: none; }
+ol.algorithm li { margin: 0.5em 0; }
+ol.algorithm li:before { font-weight: bold; counter-increment: numsection; content: counters(numsection, ".") ") "; }
+
+/* --- TOC --- */
+.toc a, .tof a {
+ text-decoration: none;
+}
+
+a .secno, a .figno {
+ color: #000;
+}
+
+ul.tof, ol.tof {
+ list-style: none outside none;
+}
+
+.caption {
+ margin-top: 0.5em;
+ font-style: italic;
+}
+
+/* --- TABLE --- */
+table.simple {
+ border-spacing: 0;
+ border-collapse: collapse;
+ border-bottom: 3px solid #005a9c;
+}
+
+.simple th {
+ background: #005a9c;
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+}
+
+.simple th[scope="row"] {
+ background: inherit;
+ color: inherit;
+ border-top: 1px solid #ddd;
+}
+
+.simple td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+}
+
+.simple tr:nth-child(even) {
+ background: #f0f6ff;
+}
+
+/* --- DL --- */
+.section dd > p:first-child {
+ margin-top: 0;
+}
+
+.section dd > p:last-child {
+ margin-bottom: 0;
+}
+
+.section dd {
+ margin-bottom: 1em;
+}
+
+.section dl.attrs dd, .section dl.eldef dd {
+ margin-bottom: 0;
+}
+</style><style>/* --- EXAMPLES --- */
+div.example-title {
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.example-title span {
+ text-transform: uppercase;
+}
+aside.example, div.example, div.illegal-example {
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+div.illegal-example { color: red }
+div.illegal-example p { color: black }
+aside.example, div.example {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+ border-color: #e0cb52;
+ background: #fcfaee;
+}
+
+aside.example div.example {
+ border-left-width: .1em;
+ border-color: #999;
+ background: #fff;
+}
+aside.example div.example div.example-title {
+ color: #999;
+}
+</style><style>/* --- ISSUES/NOTES --- */
+div.issue-title, div.note-title {
+ padding-right: 1em;
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.issue-title { color: #e05252; }
+div.note-title { color: #52e052; }
+div.issue-title span, div.note-title span {
+ text-transform: uppercase;
+}
+div.note, div.issue {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.note > p:first-child, .issue > p:first-child { margin-top: 0 }
+.issue, .note {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+}
+div.issue, div.note {
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+span.note, span.issue { padding: .1em .5em .15em; }
+
+.issue {
+ border-color: #e05252;
+ background: #fbe9e9;
+}
+.note {
+ border-color: #52e052;
+ background: #e9fbe9;
+}
+
+
+</style><link rel="stylesheet" href="http://www.w3.org/StyleSheets/TR/W3C-ED" />
+<!--[if lt IE 9]><script src='undefined://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]-->
+<style type='text/css'>
+.diff-old-a {
+ font-size: smaller;
+ color: red;
+}
+
+.diff-new { background-color: yellow; }
+.diff-chg { background-color: lime; }
+.diff-new:before,
+.diff-new:after
+ { content: "\2191" }
+.diff-chg:before, .diff-chg:after
+ { content: "\2195" }
+.diff-old { text-decoration: line-through; background-color: #FBB; }
+.diff-old:before,
+.diff-old:after
+ { content: "\2193" }
+:focus { border: thin red solid}
+</style>
+</head>
+
+<body><div class="head">
+<p>
+<a href="http://www.w3.org/">
+<img width="72" height="48" alt="W3C" src="http://www.w3.org/Icons/w3c_home" />
+</a>
+</p>
+<h1 id="title" class="title">
+JSON-LD
+Syntax
+1.0
+</h1>
+<h2 id="subtitle">
+A
+Context-based
+JSON
+Serialization
+for
+Linking
+Data
+</h2>
+<h2 id="w3c-editor-s-draft-30-august-2012">
+<abbr title="World Wide Web Consortium">
+W3C
+<del class="diff-old">Working
+</del>
+</abbr>
+<ins class="diff-chg">Editor's
+</ins>
+Draft
+<del class="diff-old">12
+July
+</del>
+<ins class="diff-chg">30
+August
+</ins>
+2012
+</h2>
+<dl>
+<dt>
+This
+version:
+</dt>
+<dd>
+<del class="diff-old">http://www.w3.org/TR/2012/WD-json-ld-syntax-20120712/
+</del>
+<a href="http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/ED/json-ld-syntax/20120830/index.html">
+<ins class="diff-chg">http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/ED/json-ld-syntax/20120830/index.html
+</ins>
+</a>
+</dd>
+<dt>
+Latest
+published
+version:
+</dt>
+<dd>
+<a href="http://www.w3.org/TR/json-ld-syntax/">
+http://www.w3.org/TR/json-ld-syntax/
+</a>
+</dd>
+<dt>
+Latest
+editor's
+draft:
+</dt>
+<dd>
+<a href="http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/latest/json-ld-syntax/index.html">
+http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/latest/json-ld-syntax/index.html
+</a>
+</dd>
+<dt>
+Editors:
+</dt>
+<dd inlist="" rel="bibo:editor">
+<span typeof="foaf:Person">
+<a href="http://manu.sporny.org/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">
+Manu
+Sporny
+</a>,
+<a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">
+Digital
+Bazaar
+</a>
+</span>
+</dd>
+<dd inlist="" rel="bibo:editor">
+<span typeof="foaf:Person">
+<a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">
+Gregg
+Kellogg
+</a>,
+<a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">
+Kellogg
+Associates
+</a>
+</span>
+</dd>
+<dd inlist="" rel="bibo:editor">
+<span typeof="foaf:Person">
+<a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">
+Markus
+Lanthaler
+</a>,
+<a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">
+Graz
+University
+of
+Technology
+</a>
+</span>
+</dd>
+<dt>
+Authors:
+</dt>
+<dd rel="dcterms:contributor">
+<span typeof="foaf:Person">
+<a href="http://digitalbazaar.com/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">
+Manu
+Sporny
+</a>,
+<a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">
+Digital
+Bazaar
+</a>
+</span>
+</dd>
+<dd rel="dcterms:contributor">
+<span typeof="foaf:Person">
+<a href="http://digitalbazaar.com/" content="Dave Longley" property="foaf:name" rel="foaf:homepage">
+Dave
+Longley
+</a>,
+<a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">
+Digital
+Bazaar
+</a>
+</span>
+</dd>
+<dd rel="dcterms:contributor">
+<span typeof="foaf:Person">
+<a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">
+Gregg
+Kellogg
+</a>,
+<a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">
+Kellogg
+Associates
+</a>
+</span>
+</dd>
+<dd rel="dcterms:contributor">
+<span typeof="foaf:Person">
+<a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">
+Markus
+Lanthaler
+</a>,
+<a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">
+Graz
+University
+of
+Technology
+</a>
+</span>
+</dd>
+<dd rel="dcterms:contributor">
+<span typeof="foaf:Person">
+<a href="http://webbackplane.com/" content="Mark Birbeck" property="foaf:name" rel="foaf:homepage">
+Mark
+Birbeck
+</a>,
+<del class="diff-old">Sidewinder
+Labs
+</del>
+<a href="http://webbackplane.com/" rel="foaf:workplaceHomepage">
+<ins class="diff-chg">Backplane
+Ltd.
+</ins></a>
+</span>
+</dd>
+</dl>
+<p>
+This
+document
+is
+also
+available
+in
+this
+non-normative
+format:
+<a href="diff-20120712.html">
+diff
+to
+previous
+version
+</a>
+</p>
+<p class="copyright">
+<a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+Copyright
+</a>
+©
+2010-2012
+<a href="http://www.w3.org/">
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+</a>
+<sup>
+®
+</sup>
+(
+<a href="http://www.csail.mit.edu/">
+<abbr title="Massachusetts Institute of Technology">
+MIT
+</abbr>
+</a>,
+<a href="http://www.ercim.eu/">
+<abbr title="European Research Consortium for Informatics and Mathematics">
+ERCIM
+</abbr>
+</a>,
+<a href="http://www.keio.ac.jp/">
+Keio
+</a>
+),
+All
+Rights
+Reserved.
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+<a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">
+liability
+</a>,
+<a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">
+trademark
+</a>
+and
+<a href="http://www.w3.org/Consortium/Legal/copyright-documents">
+document
+use
+</a>
+rules
+apply.
+</p>
+<hr />
+</div>
+<section id="abstract" class="introductory">
+<h2>
+Abstract
+</h2>
+<p>
+JSON
+has
+proven
+to
+be
+a
+highly
+useful
+object
+serialization
+and
+messaging
+format.
+In
+an
+attempt
+to
+harmonize
+the
+representation
+of
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>
+in
+JSON,
+this
+specification
+outlines
+a
+common
+JSON
+representation
+format
+for
+expressing
+directed
+graphs;
+mixing
+both
+Linked
+Data
+and
+non-Linked
+Data
+in
+a
+single
+document.
+</p>
+</section>
+<section class="introductory" id="sotd">
+<h2>
+Status
+of
+This
+Document
+</h2>
+<p>
+<em>
+This
+section
+describes
+the
+status
+of
+this
+document
+at
+the
+time
+of
+its
+publication.
+Other
+documents
+may
+supersede
+this
+document.
+A
+list
+of
+current
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+publications
+and
+the
+latest
+revision
+of
+this
+technical
+report
+can
+be
+found
+in
+the
+<a href="http://www.w3.org/TR/">
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+technical
+reports
+index
+</a>
+at
+http://www.w3.org/TR/.
+</em>
+</p>
+<p>
+This
+document
+has
+been
+under
+development
+for
+over
+18
+months
+in
+the
+JSON
+for
+Linking
+Data
+Community
+Group.
+The
+document
+has
+recently
+been
+transferred
+to
+the
+RDF
+Working
+Group
+for
+review,
+improvement,
+and
+publication
+along
+the
+Recommendation
+track.
+<del class="diff-old">While
+this
+is
+a
+First
+Public
+Working
+Draft
+publication,
+the
+</del>
+<ins class="diff-chg">The
+</ins>
+specification
+has
+undergone
+significant
+development,
+review,
+and
+changes
+during
+the
+course
+of
+the
+last
+18
+<del class="diff-old">months
+and
+is
+more
+mature
+than
+the
+First
+Public
+Working
+Draft
+status
+implies.
+</del>
+<ins class="diff-chg">months.
+</ins>
+</p>
+<p>
+There
+are
+currently
+<a href="http://json-ld.org/#impl">
+five
+interoperable
+implementations
+</a>
+of
+this
+specification.
+There
+is
+a
+<a href="https://github.com/json-ld/json-ld.org/tree/master/test-suite">
+fairly
+complete
+test
+suite
+</a>
+and
+a
+<a href="http://json-ld.org/playground/">
+live
+JSON-LD
+editor
+</a>
+that
+is
+capable
+of
+demonstrating
+the
+features
+described
+in
+this
+document.
+While
+development
+on
+implementations,
+the
+test
+suite
+and
+the
+live
+editor
+will
+continue,
+they
+are
+believed
+to
+be
+mature
+enough
+to
+be
+integrated
+into
+a
+non-production
+system
+at
+this
+point
+in
+time
+with
+the
+expectation
+that
+they
+could
+be
+used
+in
+a
+production
+system
+within
+the
+next
+year.
+</p>
+<p>
+There
+are
+a
+number
+of
+ways
+that
+one
+may
+participate
+in
+the
+development
+of
+this
+specification:
+</p>
+<ul>
+<li>
+If
+you
+want
+to
+make
+sure
+that
+your
+feedback
+is
+formally
+addressed
+by
+the
+RDF
+Working
+Group,
+you
+should
+send
+it
+to
+public-rdf-comments:
+<a href="http://lists.w3.org/Archives/Public/public-rdf-comments/">
+public-rdf-comments@w3.org
+</a>
+</li>
+<li>
+Ad-hoc
+technical
+discussion
+primarily
+occurs
+on
+the
+public
+community
+mailing
+list:
+<a href="http://lists.w3.org/Archives/Public/public-linked-json/">
+public-linked-json@w3.org
+</a>
+</li>
+<li>
+<a href="http://json-ld.org/minutes/">
+Public
+JSON-LD
+Community
+Group
+teleconferences
+</a>
+are
+held
+on
+Tuesdays
+at
+1500UTC
+every
+week.
+</li>
+<li>
+RDF
+Working
+Group
+teleconferences
+are
+held
+on
+Wednesdays
+at
+1500UTC
+every
+week.
+Participation
+is
+limited
+to
+RDF
+Working
+Group
+members.
+</li>
+<li>
+Specification
+bugs
+and
+issues
+should
+be
+reported
+in
+the
+<a href="https://github.com/json-ld/json-ld.org/issues">
+issue
+tracker
+</a>
+if
+you
+do
+not
+want
+to
+send
+an
+e-mail
+to
+the
+public-rdf-comments
+mailing
+list.
+</li>
+<li>
+<a href="https://github.com/json-ld/json-ld.org/tree/master/spec">
+Source
+code
+</a>
+for
+the
+specification
+can
+be
+found
+on
+Github.
+</li>
+<li>
+The
+<a href="http://webchat.freenode.net/?channels=json-ld">
+#json-ld
+</a>
+IRC
+channel
+is
+available
+for
+real-time
+discussion
+on
+irc.freenode.net.
+</li>
+</ul>
+<p>
+This
+document
+was
+published
+by
+the
+<a href="http://www.w3.org/2011/rdf-wg/">
+RDF
+Working
+Group
+</a>
+as
+<del class="diff-old">a
+First
+Public
+Working
+</del>
+<ins class="diff-chg">an
+Editor's
+</ins>
+Draft.
+<del class="diff-old">This
+document
+is
+intended
+to
+become
+a
+W3C
+Recommendation.
+</del>
+If
+you
+wish
+to
+make
+comments
+regarding
+this
+document,
+please
+send
+them
+to
+<a href="mailto:public-rdf-comments@w3.org">
+public-rdf-comments@w3.org
+</a>
+(
+<a href="mailto:public-rdf-comments-request@w3.org?subject=subscribe">
+subscribe
+</a>,
+<a href="http://lists.w3.org/Archives/Public/public-rdf-comments/">
+archives
+</a>
+).
+All
+feedback
+is
+welcome.
+</p>
+<p>
+Publication
+as
+<del class="diff-old">a
+Working
+</del>
+<ins class="diff-chg">an
+Editor's
+</ins>
+Draft
+does
+not
+imply
+endorsement
+by
+the
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+Membership.
+This
+is
+a
+draft
+document
+and
+may
+be
+updated,
+replaced
+or
+obsoleted
+by
+other
+documents
+at
+any
+time.
+It
+is
+inappropriate
+to
+cite
+this
+document
+as
+other
+than
+work
+in
+progress.
+</p>
+<p>
+This
+document
+was
+produced
+by
+a
+group
+operating
+under
+the
+<a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">
+5
+February
+2004
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+Patent
+Policy
+</a>.
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+maintains
+a
+<a rel="disclosure" href="http://www.w3.org/2004/01/pp-impl/46168/status">
+public
+list
+of
+any
+patent
+disclosures
+</a>
+made
+in
+connection
+with
+the
+deliverables
+of
+the
+group;
+that
+page
+also
+includes
+instructions
+for
+disclosing
+a
+patent.
+An
+individual
+who
+has
+actual
+knowledge
+of
+a
+patent
+which
+the
+individual
+believes
+contains
+<a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">
+Essential
+Claim(s)
+</a>
+must
+disclose
+the
+information
+in
+accordance
+with
+<a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">
+section
+6
+of
+the
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+Patent
+Policy
+</a>.
+</p>
+</section>
+<section id="toc">
+<h2 class="introductory">
+Table
+of
+Contents
+</h2>
+<ul class="toc">
+<li class="tocline">
+<a href="#introduction" class="tocxref">
+<span class="secno">
+1.
+</span>
+Introduction
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#how-to-read-this-document" class="tocxref">
+<span class="secno">
+1.1
+</span>
+How
+to
+Read
+this
+Document
+</a>
+</li>
+<li class="tocline">
+<a href="#general-terminology" class="tocxref">
+<span class="secno">
+<ins class="diff-new">1.2
+</ins></span><ins class="diff-new">
+General
+Terminology
+</ins></a></li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#design-goals-and-rationale" class="tocxref">
+<span class="secno">
+2.
+</span>
+Design
+Goals
+and
+Rationale
+</a>
+</li>
+<li class="tocline">
+<a href="#basic-concepts" class="tocxref">
+<span class="secno">
+3.
+</span>
+Basic
+Concepts
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#linked-data" class="tocxref">
+<span class="secno">
+3.1
+</span>
+<del class="diff-old">Linking
+</del>
+<ins class="diff-chg">Linked
+</ins>
+Data
+</a>
+</li>
+<li class="tocline">
+<a href="#syntax-tokens-and-keywords" class="tocxref">
+<span class="secno">
+<del class="diff-old">3.1.1
+</del>
+<ins class="diff-chg">3.2
+</ins>
+</span>
+Syntax
+Tokens
+and
+Keywords
+</a>
+</li>
+<li class="tocline">
+<a href="#the-context" class="tocxref">
+<span class="secno">
+<del class="diff-old">3.1.2
+</del>
+<ins class="diff-chg">3.3
+</ins>
+</span>
+The
+Context
+</a>
+</li>
+<li class="tocline">
+<a href="#from-json-to-json-ld" class="tocxref">
+<span class="secno">
+<del class="diff-old">3.1.3
+</del>
+<ins class="diff-chg">3.4
+</ins>
+</span>
+From
+JSON
+to
+JSON-LD
+</a>
+</li>
+<li class="tocline">
+<a href="#iris" class="tocxref">
+<span class="secno">
+<del class="diff-old">3.2
+</del>
+<ins class="diff-chg">3.5
+</ins>
+</span>
+IRIs
+</a>
+</li>
+<li class="tocline">
+<a href="#node-identifiers" class="tocxref">
+<span class="secno">
+<del class="diff-old">3.3
+</del>
+<ins class="diff-chg">3.6
+</ins>
+</span>
+<del class="diff-old">Identifying
+the
+Subject
+</del>
+<ins class="diff-chg">Node
+Identifiers
+</ins>
+</a>
+</li>
+<li class="tocline">
+<a href="#specifying-the-type" class="tocxref">
+<span class="secno">
+<del class="diff-old">3.4
+</del>
+<ins class="diff-chg">3.7
+</ins>
+</span>
+Specifying
+the
+Type
+</a>
+</li>
+<li class="tocline">
+<a href="#string-internationalization" class="tocxref">
+<span class="secno">
+<del class="diff-old">3.5
+</del>
+<ins class="diff-chg">3.8
+</ins>
+</span>
+String
+Internationalization
+</a>
+</li>
+<li class="tocline">
+<a href="#json-ld-syntax" class="tocxref">
+<span class="secno">
+<del class="diff-old">3.6
+</del>
+<ins class="diff-chg">3.9
+</ins>
+</span>
+JSON-LD
+Syntax
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#advanced-concepts" class="tocxref">
+<span class="secno">
+4.
+</span>
+Advanced
+Concepts
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#compact-iris" class="tocxref">
+<span class="secno">
+4.1
+</span>
+Compact
+IRIs
+</a>
+</li>
+<li class="tocline">
+<a href="#typed-values" class="tocxref">
+<span class="secno">
+4.2
+</span>
+Typed
+Values
+</a>
+</li>
+<li class="tocline">
+<a href="#language-tagged-strings" class="tocxref">
+<span class="secno">
+4.3
+</span>
+<del class="diff-old">External
+Contexts
+</del>
+<ins class="diff-chg">Language-tagged
+Strings
+</ins>
+</a>
+</li>
+<li class="tocline">
+<a href="#referencing-contexts-from-json-documents" class="tocxref">
+<span class="secno">
+4.4
+</span>
+Referencing
+Contexts
+from
+JSON
+Documents
+</a>
+</li>
+<li class="tocline">
+<a href="#expanded-term-definition" class="tocxref">
+<span class="secno">
+4.5
+</span>
+Expanded
+Term
+Definition
+</a>
+</li>
+<li class="tocline">
+<a href="#type-coercion" class="tocxref">
+<span class="secno">
+4.6
+</span>
+Type
+Coercion
+</a>
+</li>
+<li class="tocline">
+<a href="#property-generators" class="tocxref">
+<span class="secno">
+4.7
+</span>
+<ins class="diff-new">Property
+Generators
+</ins></a></li><li class="tocline"><a href="#iri-expansion-within-a-context" class="tocxref"><span class="secno"><ins class="diff-new">
+4.8
+</ins></span>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+Within
+a
+Context
+</a>
+</li>
+<li class="tocline">
+<a href="#sets-and-lists" class="tocxref">
+<span class="secno">
+<del class="diff-old">4.8
+</del>
+<ins class="diff-chg">4.9
+</ins>
+</span>
+Sets
+and
+Lists
+</a>
+</li>
+<li class="tocline">
+<a href="#embedding" class="tocxref">
+<span class="secno">
+<del class="diff-old">4.9
+</del>
+<ins class="diff-chg">4.10
+</ins>
+</span>
+Embedding
+</a>
+</li>
+<li class="tocline">
+<a href="#named-graphs" class="tocxref">
+<span class="secno">
+<del class="diff-old">4.10
+</del>
+<ins class="diff-chg">4.11
+</ins>
+</span>
+Named
+Graphs
+</a>
+</li>
+<li class="tocline">
+<a href="#identifying-unlabeled-nodes" class="tocxref">
+<span class="secno">
+<del class="diff-old">4.11
+</del>
+<ins class="diff-chg">4.12
+</ins>
+</span>
+Identifying
+Unlabeled
+Nodes
+</a>
+</li>
+<li class="tocline">
+<a href="#aliasing-keywords" class="tocxref">
+<span class="secno">
+<del class="diff-old">4.12
+</del>
+<ins class="diff-chg">4.13
+</ins>
+</span>
+Aliasing
+Keywords
+</a>
+</li>
+<li class="tocline">
+<a href="#expanded-document-form" class="tocxref">
+<span class="secno">
+<del class="diff-old">4.13
+</del>
+<ins class="diff-chg">4.14
+</ins>
+</span>
+Expanded
+Document
+Form
+</a>
+</li>
+<li class="tocline">
+<a href="#compact-document-form" class="tocxref">
+<span class="secno">
+<del class="diff-old">4.14
+</del>
+<ins class="diff-chg">4.15
+</ins>
+</span>
+Compact
+Document
+Form
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#json-ld-grammar" class="tocxref">
+<span class="secno">
+A.
+</span>
+JSON-LD
+<del class="diff-old">Authoring
+Guidelines
+</del>
+<ins class="diff-chg">Grammar
+</ins></a><ul class="toc"><li class="tocline"><a href="#grammar-node-definition" class="tocxref"><span class="secno"><ins class="diff-chg">
+A.1
+</ins></span><ins class="diff-chg">
+Node
+Definition
+</ins>
+</a>
+</li>
+<li class="tocline">
+<a href="#grammar-node-reference" class="tocxref">
+<span class="secno">
+<ins class="diff-chg">A.2
+</ins></span><ins class="diff-chg">
+Node
+Reference
+</ins></a></li><li class="tocline"><a href="#grammar-language-map" class="tocxref"><span class="secno"><ins class="diff-chg">
+A.3
+</ins></span><ins class="diff-chg">
+Language
+Map
+</ins></a></li><li class="tocline"><a href="#grammar-expanded-values" class="tocxref"><span class="secno"><ins class="diff-chg">
+A.4
+</ins></span><ins class="diff-chg">
+Expanded
+Values
+</ins></a></li><li class="tocline"><a href="#grammar-set-list" class="tocxref"><span class="secno"><ins class="diff-chg">
+A.5
+</ins></span><ins class="diff-chg">
+List
+and
+Set
+Values
+</ins></a></li><li class="tocline"><a href="#grammar-context" class="tocxref"><span class="secno"><ins class="diff-chg">
+A.6
+</ins></span><ins class="diff-chg">
+Context
+Definition
+</ins></a></li></ul></li><li class="tocline"><a href="#relationship-to-other-linked-data-formats-and-data-models" class="tocxref">
+<span class="secno">
+B.
+</span>
+Relationship
+to
+<del class="diff-old">other
+RDF
+</del>
+<ins class="diff-chg">Other
+Linked
+Data
+</ins>
+Formats
+<ins class="diff-new">and
+Data
+Models
+</ins>
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#rdf" class="tocxref">
+<span class="secno">
+B.1
+</span>
+RDF
+</a>
+</li>
+<li class="tocline">
+<a href="#turtle" class="tocxref">
+<span class="secno">
+B.2
+</span>
+Turtle
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#prefix-definitions" class="tocxref">
+<span class="secno">
+B.2.1
+</span>
+Prefix
+definitions
+</a>
+</li>
+<li class="tocline">
+<a href="#embedding-1" class="tocxref">
+<span class="secno">
+B.2.2
+</span>
+Embedding
+</a>
+</li>
+<li class="tocline">
+<a href="#lists" class="tocxref">
+<span class="secno">
+B.2.3
+</span>
+Lists
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#rdfa" class="tocxref">
+<span class="secno">
+B.3
+</span>
+RDFa
+</a>
+</li>
+<li class="tocline">
+<a href="#microformats" class="tocxref">
+<span class="secno">
+B.4
+</span>
+Microformats
+</a>
+</li>
+<li class="tocline">
+<a href="#microdata" class="tocxref">
+<span class="secno">
+B.5
+</span>
+Microdata
+</a>
+</li>
+</ul>
+</li>
+<li class="tocline">
+<a href="#iana-considerations" class="tocxref">
+<span class="secno">
+C.
+</span>
+IANA
+Considerations
+</a>
+</li>
+<li class="tocline">
+<a href="#acknowledgements" class="tocxref">
+<span class="secno">
+D.
+</span>
+Acknowledgements
+</a>
+</li>
+<li class="tocline">
+<a href="#references" class="tocxref">
+<span class="secno">
+E.
+</span>
+References
+</a>
+<ul class="toc">
+<li class="tocline">
+<a href="#normative-references" class="tocxref">
+<span class="secno">
+E.1
+</span>
+Normative
+references
+</a>
+</li>
+<li class="tocline">
+<a href="#informative-references" class="tocxref">
+<span class="secno">
+E.2
+</span>
+Informative
+references
+</a>
+</li>
+</ul>
+</li>
+</ul>
+</section>
+<section class="informative" id="introduction">
+<h2>
+<span class="secno">
+1.
+</span>
+Introduction
+</h2>
+<p>
+<em>
+This
+section
+is
+non-normative.
+</em>
+</p>
+<p>
+JSON,
+as
+specified
+in
+[
+<cite>
+<a class="bibref" href="#bib-RFC4627">
+RFC4627
+</a>
+</cite>
+],
+is
+a
+simple
+language
+for
+representing
+data
+on
+the
+Web.
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>
+is
+a
+technique
+for
+creating
+a
+network
+of
+inter-connected
+data
+across
+different
+Web
+documents
+and
+Web
+sites.
+A
+<em>
+document
+</em>
+in
+this
+data
+network
+is
+typically
+identified
+using
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+(Internationalized
+Resource
+Identifier).
+A
+software
+program
+can
+typically
+follow
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+just
+like
+you
+follow
+a
+URL
+by
+putting
+it
+into
+your
+browser's
+location
+bar.
+By
+following
+IRIs,
+a
+software
+program
+can
+find
+more
+information
+about
+the
+<em>
+document
+</em>
+and
+the
+<em>
+thing
+</em>
+s
+that
+the
+document
+describes.
+These
+<em>
+things
+</em>
+may
+also
+be
+identified
+using
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+s.
+The
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+allows
+a
+software
+program
+to
+start
+at
+one
+<em>
+document
+</em>
+and
+follow
+links
+to
+other
+<em>
+documents
+</em>
+or
+<em>
+things
+</em>
+in
+order
+to
+learn
+more
+about
+all
+of
+the
+<em>
+documents
+</em>
+and
+<em>
+things
+</em>
+described
+on
+the
+Web.
+</p>
+<p>
+JSON-LD
+is
+designed
+as
+a
+lightweight
+syntax
+that
+can
+be
+used
+to
+express
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>.
+It
+is
+primarily
+intended
+to
+be
+a
+way
+to
+use
+Linked
+Data
+in
+Javascript
+and
+other
+Web-based
+programming
+environments.
+It
+is
+also
+useful
+when
+building
+inter-operable
+Web
+services
+and
+when
+storing
+Linked
+Data
+in
+JSON-based
+document
+storage
+engines.
+It
+is
+practical
+and
+designed
+to
+be
+as
+simple
+as
+possible,
+utilizing
+the
+large
+number
+of
+JSON
+parsers
+and
+libraries
+available
+today.
+</p>
+<p>
+The
+syntax
+does
+not
+necessarily
+require
+applications
+to
+change
+their
+JSON,
+but
+allows
+one
+to
+easily
+add
+meaning
+by
+simply
+adding
+or
+referencing
+a
+context.
+The
+syntax
+is
+designed
+to
+not
+disturb
+already
+deployed
+systems
+running
+on
+JSON,
+but
+provide
+a
+smooth
+upgrade
+path
+from
+JSON
+to
+JSON-LD.
+Finally,
+the
+format
+is
+intended
+to
+be
+easy
+to
+parse,
+efficient
+to
+generate,
+and
+only
+requires
+a
+very
+small
+memory
+footprint
+in
+order
+to
+operate.
+</p>
+<section id="how-to-read-this-document">
+<h3>
+<span class="secno">
+1.1
+</span>
+How
+to
+Read
+this
+Document
+</h3>
+<p>
+<em>
+This
+section
+is
+non-normative.
+</em>
+</p>
+<p>
+This
+document
+is
+a
+detailed
+specification
+for
+a
+serialization
+of
+Linked
+Data
+in
+JSON.
+The
+document
+is
+primarily
+intended
+for
+the
+following
+audiences:
+</p>
+<ul>
+<li>
+Software
+developers
+that
+want
+to
+encode
+Linked
+Data
+in
+a
+way
+that
+is
+cross-language
+compatible
+via
+JSON.
+</li>
+<li>
+Software
+developers
+that
+want
+to
+understand
+the
+design
+decisions
+and
+language
+syntax
+for
+JSON-LD.
+</li>
+<li>
+Software
+developers
+that
+want
+to
+implement
+processors
+and
+APIs
+for
+JSON-LD.
+</li>
+</ul>
+<p>
+This
+specification
+does
+not
+describe
+the
+programming
+interfaces
+for
+the
+JSON-LD
+Syntax.
+The
+specification
+that
+describes
+the
+programming
+interfaces
+for
+JSON-LD
+documents
+is
+the
+JSON-LD
+Application
+Programming
+Interface
+[
+<cite>
+<a class="bibref" href="#bib-JSON-LD-API">
+JSON-LD-API
+</a>
+</cite>
+].
+</p>
+<p>
+To
+understand
+the
+basics
+in
+this
+specification
+you
+must
+first
+be
+familiar
+with
+JSON,
+which
+is
+detailed
+in
+[
+<cite>
+<a class="bibref" href="#bib-RFC4627">
+RFC4627
+</a>
+</cite>
+].
+</p>
+<del class="diff-old">JSON
+[
+RFC4627
+</del>
+</section>
+<section id="general-terminology">
+<h3>
+<del class="diff-old">]
+defines
+several
+terms
+which
+are
+</del>
+<span class="secno">
+<ins class="diff-chg">1.2
+</ins></span><ins class="diff-chg">
+General
+Terminology
+</ins></h3><p><ins class="diff-chg">
+The
+following
+is
+an
+explanation
+of
+the
+general
+terminology
+</ins>
+used
+<del class="diff-old">throughout
+</del>
+<ins class="diff-chg">in
+</ins>
+this
+document:
+</p>
+<dl>
+<dt>
+<dfn title="json_object" id="dfn-json_object">
+JSON
+object
+</dfn>
+</dt>
+<dd>
+An
+object
+structure
+is
+represented
+as
+a
+pair
+of
+curly
+brackets
+surrounding
+zero
+or
+more
+name-value
+pairs.
+A
+name
+is
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>.
+A
+single
+colon
+comes
+after
+each
+name,
+separating
+the
+name
+from
+the
+value.
+A
+single
+comma
+separates
+a
+value
+from
+a
+following
+name.
+The
+names
+within
+an
+object
+<em class="rfc2119" title="should">
+should
+</em>
+be
+unique.
+</dd>
+<dt>
+<dfn title="array" id="dfn-array">
+array
+</dfn>
+</dt>
+<dd>
+In
+JSON,
+an
+array
+is
+an
+<em>
+ordered
+</em>
+sequence
+of
+zero
+or
+more
+values.
+An
+array
+is
+represented
+as
+square
+brackets
+surrounding
+zero
+or
+more
+values
+that
+are
+separated
+by
+commas.
+While
+JSON-LD
+uses
+the
+same
+array
+representation
+as
+JSON,
+the
+collection
+is
+<em>
+unordered
+</em>
+by
+default.
+While
+order
+is
+preserved
+in
+regular
+JSON
+arrays,
+it
+is
+not
+in
+regular
+JSON-LD
+arrays
+unless
+specific
+markup
+is
+provided
+(see
+<a href="#sets-and-lists" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.9
+</ins></span><span class="sec-title">
+Sets
+and
+Lists
+</span>
+</a>
+).
+</dd>
+<dt>
+<dfn title="string" id="dfn-string">
+string
+</dfn>
+</dt>
+<dd>
+A
+string
+is
+a
+sequence
+of
+zero
+or
+more
+Unicode
+characters,
+wrapped
+in
+double
+quotes,
+using
+backslash
+escapes
+(if
+necessary).
+A
+character
+is
+represented
+as
+a
+single
+character
+string.
+</dd>
+<dt>
+<dfn title="number" id="dfn-number">
+number
+</dfn>
+</dt>
+<dd>
+A
+number
+is
+similar
+to
+that
+used
+in
+most
+programming
+languages,
+except
+that
+the
+octal
+and
+hexadecimal
+formats
+are
+not
+used
+and
+that
+leading
+zeros
+are
+not
+allowed.
+</dd>
+<dt>
+<dfn title="true" id="dfn-true">
+true
+</dfn>
+and
+<dfn title="false" id="dfn-false">
+false
+</dfn>
+</dt>
+<dd>
+Values
+that
+are
+used
+to
+express
+one
+of
+two
+possible
+boolean
+states.
+</dd>
+<dt>
+<dfn title="null" id="dfn-null">
+null
+</dfn>
+</dt>
+<dd>
+The
+null
+value
+is
+used
+to
+make
+the
+JSON-LD
+processor
+"forget"
+any
+previously
+defined
+JSON
+key
+that
+is
+associated
+with
+the
+null
+value.
+If
+a
+previous
+definition
+doesn't
+exist,
+the
+entire
+key-value
+is
+ignored.
+If
+a
+previous
+definition
+of
+the
+key
+does
+exist,
+the
+previous
+definition
+is
+undefined.
+</dd>
+<dt>
+<del class="diff-old">subject
+</del>
+<dfn title="node_definition" id="dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</dfn>
+</dt>
+<dd>
+A
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+used
+to
+represent
+a
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node" href="#dfn-node">
+<ins class="diff-chg">node
+</ins>
+</a>
+and
+one
+or
+more
+properties
+of
+that
+<del class="diff-old">subject.
+</del>
+<ins class="diff-chg">node.
+</ins>
+A
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+is
+a
+<del class="diff-old">subject
+</del>
+<ins class="diff-chg">node
+</ins>
+definition
+if
+it
+does
+not
+contain
+they
+keys
+<code>
+@value
+</code>,
+<code>
+@list
+</code>
+or
+<code>
+@set
+</code>
+and
+it
+has
+one
+or
+more
+keys
+other
+than
+<code>
+@id
+</code>.
+<ins class="diff-new">A
+node
+definition
+</ins><em class="rfc2119" title="may"><ins class="diff-new">
+may
+</ins></em><ins class="diff-new">
+be
+spread
+among
+different
+parts
+of
+a
+document
+or
+even
+between
+different
+documents.
+</ins>
+</dd>
+<dt>
+<del class="diff-old">subject
+</del>
+<dfn title="node_reference" id="dfn-node_reference">
+<ins class="diff-chg">node
+</ins>
+reference
+</dfn>
+</dt>
+<dd>
+A
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+used
+to
+reference
+a
+<del class="diff-old">subject
+</del>
+<ins class="diff-chg">node
+</ins>
+having
+only
+the
+<code>
+@id
+</code>
+key.
+</dd>
+</dl>
+<p>
+</p>
+</section>
+</section>
+<section class="informative" id="design-goals-and-rationale">
+<h2>
+<span class="secno">
+2.
+</span>
+Design
+Goals
+and
+Rationale
+</h2>
+<p>
+<em>
+This
+section
+is
+non-normative.
+</em>
+</p>
+<p>
+A
+number
+of
+design
+goals
+were
+established
+before
+the
+creation
+of
+this
+markup
+language:
+</p>
+<dl>
+<dt>
+Simplicity
+</dt>
+<dd>
+No
+extra
+processors
+or
+software
+libraries
+should
+be
+necessary
+to
+use
+JSON-LD
+in
+its
+most
+basic
+form.
+The
+language
+will
+provide
+developers
+with
+a
+very
+easy
+learning
+curve.
+Developers
+need
+only
+know
+JSON
+and
+two
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keywords
+</a>
+(
+<code>
+@context
+</code>
+and
+<code>
+@id
+</code>
+)
+to
+use
+the
+basic
+functionality
+in
+JSON-LD.
+</dd>
+<dt>
+Compatibility
+</dt>
+<dd>
+The
+JSON-LD
+markup
+must
+be
+100%
+compatible
+with
+JSON.
+This
+ensures
+that
+all
+of
+the
+standard
+JSON
+libraries
+work
+seamlessly
+with
+JSON-LD
+documents.
+</dd>
+<dt>
+Expressiveness
+</dt>
+<dd>
+The
+syntax
+must
+be
+able
+to
+express
+directed
+graphs,
+which
+have
+been
+proven
+to
+be
+able
+to
+express
+almost
+every
+real
+world
+data
+model.
+</dd>
+<dt>
+Terseness
+</dt>
+<dd>
+The
+JSON-LD
+syntax
+must
+be
+very
+terse
+and
+human
+readable,
+requiring
+as
+little
+effort
+as
+possible
+from
+the
+developer.
+</dd>
+<dt>
+Zero
+Edits,
+most
+of
+the
+time
+</dt>
+<dd>
+JSON-LD
+must
+provide
+a
+<a href="#referencing-contexts-from-json-documents">
+mechanism
+</a>
+that
+allows
+developers
+to
+specify
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+in
+a
+way
+that
+is
+out-of-band.
+This
+allows
+organizations
+that
+have
+already
+deployed
+large
+JSON-based
+infrastructure
+to
+add
+meaning
+to
+their
+JSON
+documents
+in
+a
+way
+that
+is
+not
+disruptive
+to
+their
+day-to-day
+operations
+and
+is
+transparent
+to
+their
+current
+customers.
+At
+times,
+mapping
+JSON
+to
+a
+graph
+representation
+can
+become
+difficult.
+In
+these
+instances,
+rather
+than
+having
+JSON-LD
+support
+an
+esoteric
+use
+case,
+we
+chose
+not
+to
+support
+the
+use
+case
+and
+support
+a
+simplified
+syntax
+instead.
+So,
+while
+Zero
+Edits
+is
+a
+<ins class="diff-new">design
+</ins>
+goal,
+it
+is
+not
+always
+possible
+without
+adding
+great
+complexity
+to
+the
+language.
+</dd>
+<dt>
+One-pass
+Processing
+</dt>
+<dd>
+JSON-LD
+supports
+one-pass
+processing,
+which
+results
+in
+a
+very
+small
+memory
+footprint
+when
+processing
+documents.
+For
+example,
+to
+expand
+a
+JSON-LD
+document
+from
+a
+compacted
+form,
+only
+one
+pass
+is
+required
+over
+the
+data.
+</dd>
+<dt>
+<ins class="diff-new">Linked
+Data-centric
+</ins></dt><dd><ins class="diff-new">
+The
+focus
+on
+Linked
+Data
+is
+placed
+at
+a
+much
+higher
+priority
+than
+the
+focus
+on
+the
+Semantic
+Web.
+One
+outcome
+of
+this
+ordering
+of
+priorities
+is
+an
+aggressively
+reduced
+focus
+on
+the
+Semantic
+Web
+stack
+(RDF
+[
+</ins><cite><a class="bibref" href="#bib-RDF-CONCEPTS"><ins class="diff-new">
+RDF-CONCEPTS
+</ins></a></cite><ins class="diff-new">
+],
+TURTLE
+[
+</ins><cite><a class="bibref" href="#bib-TURTLE-TR"><ins class="diff-new">
+TURTLE-TR
+</ins></a></cite><ins class="diff-new">
+],
+triple
+stores,
+and
+SPARQL
+[
+</ins><cite><a class="bibref" href="#bib-RDF-SPARQL-QUERY"><ins class="diff-new">
+RDF-SPARQL-QUERY
+</ins></a></cite><ins class="diff-new">
+]).
+While
+this
+may
+be
+off-putting
+to
+proponents
+of
+the
+Semantic
+Web,
+the
+audience
+for
+this
+specification
+are
+Web
+developers
+that
+want
+a
+gentler
+introduction
+and
+a
+simpler
+technology
+stack
+for
+using
+Linked
+Data
+in
+their
+Web
+applications.
+Semantic
+Web
+concepts,
+such
+as
+conversion
+to
+and
+from
+RDF,
+are
+fully
+supported
+by
+JSON-LD,
+but
+the
+implementation
+of
+these
+features
+are
+not
+elaborated
+upon
+in
+this
+specification.
+See
+</ins><a href="#relationship-to-other-linked-data-formats-and-data-models" class="sec-ref"><span class="secno"><ins class="diff-new">
+B.
+</ins></span><span class="sec-title"><ins class="diff-new">
+Relationship
+to
+Other
+Linked
+Data
+Formats
+and
+Data
+Models
+</ins></span></a><ins class="diff-new">
+for
+more
+information
+about
+how
+JSON-LD
+integrates
+into
+the
+more
+traditional
+Semantic
+Web
+stack.
+</ins></dd>
+</dl>
+</section>
+<section class="normative" id="basic-concepts">
+<h2>
+<span class="secno">
+3.
+</span>
+Basic
+Concepts
+</h2>
+<em>
+This
+section
+is
+normative.
+</em>
+<p>
+JSON-LD
+is
+designed
+to
+ensure
+that
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>
+concepts
+can
+be
+marked
+up
+in
+a
+way
+that
+is
+simple
+to
+understand
+and
+create
+by
+Web
+authors.
+In
+many
+cases,
+regular
+JSON
+markup
+can
+become
+Linked
+Data
+with
+the
+simple
+addition
+of
+a
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>.
+As
+more
+JSON-LD
+features
+are
+used,
+more
+semantics
+are
+added
+to
+the
+JSON
+markup.
+</p>
+<section id="linked-data">
+<h3>
+<span class="secno">
+3.1
+</span>
+<del class="diff-old">Linking
+</del>
+<ins class="diff-chg">Linked
+</ins>
+Data
+</h3>
+<p>
+The
+following
+definition
+for
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>
+is
+the
+one
+that
+will
+be
+used
+for
+this
+specification.
+</p>
+<ol>
+<li>
+<dfn title="linked_data" id="dfn-linked_data">
+Linked
+Data
+</dfn>
+is
+a
+set
+of
+documents,
+each
+containing
+a
+representation
+of
+a
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>.
+</li>
+<li>
+A
+<dfn title="linked_data_graph" id="dfn-linked_data_graph">
+linked
+data
+graph
+</dfn>
+is
+an
+unordered
+labeled
+directed
+graph,
+where
+<dfn title="node" id="dfn-node">
+nodes
+</dfn>
+are
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<ins class="diff-chg">IRIs
+</ins></a><ins class="diff-chg">
+or
+</ins><a class="tref internalDFN" title="blank_node" href="#dfn-blank_node"><ins class="diff-chg">
+Blank
+Nodes
+</ins></a>,<ins class="diff-chg">
+or
+other
+values.
+</ins></li><li><ins class="diff-chg">
+A
+</ins><a class="tref internalDFN" title="node" href="#dfn-node"><ins class="diff-chg">
+node
+</ins></a><ins class="diff-chg">
+having
+an
+outgoing
+edge
+</ins><em class="rfc2119" title="must"><ins class="diff-chg">
+must
+</ins></em><ins class="diff-chg">
+be
+an
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr></a><ins class="diff-chg">
+or
+</ins><a class="tref internalDFN" title="blank_node" href="#dfn-blank_node"><ins class="diff-chg">
+Blank
+Node
+</ins></a>.</li><li><ins class="diff-chg">
+A
+</ins><a class="tref internalDFN" title="node" href="#dfn-node"><ins class="diff-chg">
+node
+</ins></a><ins class="diff-chg">
+having
+an
+incoming
+edge
+</ins><em class="rfc2119" title="must"><ins class="diff-chg">
+must
+</ins></em><ins class="diff-chg">
+be
+an
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr></a>,<a class="tref internalDFN" title="blank_node" href="#dfn-blank_node"><ins class="diff-chg">
+Blank
+Node
+</ins></a>,<ins class="diff-chg">
+or
+value
+such
+as
+a
+number
+or
+string.
+</ins></li><li><ins class="diff-chg">
+A
+</ins><a class="tref internalDFN" title="node" href="#dfn-node"><ins class="diff-chg">
+node
+</ins></a><em class="rfc2119" title="may"><ins class="diff-chg">
+may
+</ins></em><ins class="diff-chg">
+have
+both
+incoming
+and
+outgoing
+edges.
+</ins></li><li><ins class="diff-chg">
+An
+edge
+</ins><em class="rfc2119" title="must"><ins class="diff-chg">
+must
+</ins></em><ins class="diff-chg">
+be
+labeled
+with
+an
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-chg">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr></a>,<ins class="diff-chg">
+within
+the
+JSON-LD
+syntax,
+this
+label
+is
+called
+a
+</ins><dfn title="property" id="dfn-property"><ins class="diff-chg">
+property
+</ins></dfn>.</li><li><a class="tref internalDFN" title="iri" href="#dfn-iri"><ins class="diff-chg">
+IRIs
+</ins></a><ins class="diff-chg">
+used
+within
+a
+</ins><a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph"><ins class="diff-chg">
+linked
+data
+graph
+</ins></a><em class="rfc2119" title="should"><ins class="diff-chg">
+should
+</ins></em><ins class="diff-chg">
+be
+dereferenceable
+to
+a
+</ins><a class="tref internalDFN" title="linked_data" href="#dfn-linked_data"><ins class="diff-chg">
+Linked
+Data
+</ins></a><ins class="diff-chg">
+document
+describing
+the
+resource
+denoted
+by
+that
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr></a>.</li></ol><div class="note"><div class="note-title"><span><ins class="diff-chg">
+Note
+</ins></span></div><div class=""><p><ins class="diff-chg">
+A
+</ins><a class="tref internalDFN" title="linked_data" href="#dfn-linked_data"><ins class="diff-chg">
+Linked
+Data
+</ins></a><ins class="diff-chg">
+document
+does
+not
+necessarily
+need
+to
+be
+expressed
+in
+JSON-LD.
+The
+notion
+of
+</ins><a class="tref internalDFN" title="linked_data" href="#dfn-linked_data"><ins class="diff-chg">
+Linked
+Data
+</ins></a><ins class="diff-chg">
+is
+a
+concept
+independent
+of
+any
+given
+serialization
+format.
+In
+particular,
+any
+document
+based
+on
+an
+RDF
+serialization
+format
+is
+a
+</ins><a class="tref internalDFN" title="linked_data" href="#dfn-linked_data"><ins class="diff-chg">
+Linked
+Data
+</ins></a><ins class="diff-chg">
+document.
+</ins></p><p><ins class="diff-chg">
+This
+definition
+of
+</ins><a class="tref internalDFN" title="linked_data" href="#dfn-linked_data"><ins class="diff-chg">
+Linked
+Data
+</ins></a><ins class="diff-chg">
+is
+entirely
+consistent
+with
+that
+in
+[
+</ins><cite><a class="bibref" href="#bib-RDF-CONCEPTS"><ins class="diff-chg">
+RDF-CONCEPTS
+</ins></a></cite><ins class="diff-chg">
+],
+although
+</ins><a class="tref internalDFN" title="linked_data" href="#dfn-linked_data"><ins class="diff-chg">
+Linked
+Data
+</ins></a><ins class="diff-chg">
+may
+not
+be
+a
+valid
+RDF
+document,
+any
+RDF
+document
+is
+an
+expression
+of
+</ins><a class="tref internalDFN" title="linked_data" href="#dfn-linked_data"><ins class="diff-chg">
+Linked
+Data
+</ins></a>.</p></div></div><div class="issue"><div class="issue-title"><span><ins class="diff-chg">
+Issue
+</ins></span></div><p class=""><ins class="diff-chg">
+An
+illustration
+of
+a
+linked
+data
+graph
+would
+probably
+help
+here.
+</ins></p></div><div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/47"><span><ins class="diff-chg">
+Issue
+47
+</ins></span></a></div><div class=""><p><ins class="diff-chg">
+Richard
+Cyganiak
+suggests
+that
+the
+data
+model
+is
+at
+odds
+with
+[
+</ins><cite><a class="bibref" href="#bib-RDF-CONCEPTS"><ins class="diff-chg">
+RDF-CONCEPTS
+</ins></a></cite><ins class="diff-chg">
+]
+and
+should
+be
+more
+closely
+aligned
+with
+it
+instead
+of
+creating
+new
+terminology.
+</ins></p><p><ins class="diff-chg">
+Note
+that
+this
+definition
+is
+provisional,
+and
+may
+be
+reverted
+to
+something
+closer
+to
+the
+original
+depending
+on
+community
+feedback.
+</ins></p><ol><li><a class="tref internalDFN" title="linked_data" href="#dfn-linked_data"><ins class="diff-chg">
+Linked
+Data
+</ins>
+</a>
+<ins class="diff-new">is
+a
+set
+of
+documents,
+each
+containing
+a
+representation
+of
+a
+</ins><a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph"><ins class="diff-new">
+linked
+data
+graph
+</ins></a>.</li><li><ins class="diff-new">
+A
+</ins><a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph"><ins class="diff-new">
+linked
+data
+graph
+</ins></a><ins class="diff-new">
+is
+an
+unordered
+labeled
+directed
+graph,
+where
+nodes
+are
+</ins><em><ins class="diff-new">
+subject
+</ins></em>
+s
+or
+<em>
+object
+</em>
+s,
+and
+edges
+are
+labeled
+using
+<a class="tref internalDFN" title="property" href="#dfn-property">
+properties
+</a>.
+</li>
+<li>
+A
+<em>
+subject
+</em>
+is
+any
+node
+in
+a
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>
+with
+at
+least
+one
+outgoing
+edge.
+</li>
+<li>
+A
+<em>
+subject
+</em>
+<em class="rfc2119" title="should">
+should
+</em>
+be
+labeled
+with
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+(an
+Internationalized
+Resource
+Identifier
+as
+described
+in
+[
+<cite>
+<a class="bibref" href="#bib-RFC3987">
+RFC3987
+</a>
+</cite>
+]).
+</li>
+<li>
+An
+<em>
+object
+</em>
+is
+a
+node
+in
+a
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>
+with
+at
+least
+one
+incoming
+edge.
+</li>
+<li>
+An
+<em>
+object
+</em>
+<em class="rfc2119" title="may">
+may
+</em>
+be
+labeled
+with
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+or
+a
+label
+that
+is
+not
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+such
+as
+plain
+text,
+internationalized
+text,
+or
+a
+strictly-typed
+data
+value.
+</li>
+<li>
+A
+node
+<em class="rfc2119" title="may">
+may
+</em>
+be
+a
+<em>
+subject
+</em>
+and
+an
+<em>
+object
+</em>
+at
+the
+same
+time.
+</li>
+<li>
+A
+<a class="tref internalDFN" title="property" href="#dfn-property">
+property
+</a>
+is
+the
+label
+on
+an
+edge
+in
+a
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>.
+</li>
+<li>
+A
+<a class="tref internalDFN" title="property" href="#dfn-property">
+property
+</a>
+<em class="rfc2119" title="should">
+should
+</em>
+be
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+</li>
+<li>
+An
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+that
+is
+a
+label
+in
+a
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>
+<em class="rfc2119" title="should">
+should
+</em>
+be
+dereferencable
+to
+a
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>
+document
+describing
+the
+labeled
+<em>
+subject
+<del class="diff-old">,
+</del>
+</em>,
+<a class="tref internalDFN" title="property" href="#dfn-property">
+property
+</a>
+or
+<em>
+object
+<del class="diff-old">.
+</del>
+</em>.
+</li>
+</ol>
+<del class="diff-old">Issue
+1
+</del>
+</div>
+<del class="diff-old">An
+illustration
+of
+a
+linked
+data
+graph
+would
+probably
+help
+here.
+Issue
+2
+EricP
+suggests
+that
+the
+definitions
+of
+subject
+and
+object,
+while
+being
+practical,
+are
+at
+odds
+with
+[
+RDF-CONCEPTS
+]
+use
+in
+their
+roles
+within
+a
+triple.
+</del>
+</div>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+JSON-LD
+allows
+properties
+to
+be
+BNodes,
+while
+RDF
+does
+not.
+When
+used
+as
+just
+JSON-LD,
+this
+is
+not
+unreasonable;
+it
+only
+becomes
+an
+issue
+(and
+could
+raise
+an
+exception)
+when
+transformed
+to
+RDF.
+</p>
+</div>
+<p>
+Note
+that
+the
+definition
+for
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>
+above
+is
+silent
+on
+the
+topic
+of
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">
+unlabeled
+nodes
+</a>.
+Nevertheless,
+this
+specification
+allows
+for
+the
+expression
+of
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">
+unlabeled
+nodes
+</a>,
+as
+most
+graph-based
+data
+sets
+on
+the
+Web
+contain
+a
+number
+of
+associated
+nodes
+that
+are
+not
+named
+and
+thus
+are
+not
+directly
+de-referenceable.
+</p>
+<p>
+JSON-LD
+defines
+a
+mechanism
+to
+map
+JSON
+terms,
+i.e.,
+keys
+and
+values,
+to
+IRIs.
+This
+does
+not
+mean
+that
+JSON-LD
+requires
+every
+key
+or
+value
+to
+be
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>,
+but
+rather
+ensures
+that
+keys
+and
+values
+can
+be
+mapped
+to
+IRIs
+if
+the
+developer
+desires
+to
+transform
+their
+data
+into
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>.
+There
+are
+a
+few
+techniques
+that
+can
+ensure
+that
+developers
+will
+generate
+good
+Linked
+Data
+for
+the
+Web.
+JSON-LD
+formalizes
+those
+techniques.
+</p>
+<p>
+We
+will
+be
+using
+the
+following
+JSON
+markup
+as
+the
+example
+for
+the
+rest
+of
+this
+section:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 1</span>: Sample JSON object</div><pre class="example">{
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}
+</pre>
+</div>
+</section>
+<section id="syntax-tokens-and-keywords">
+<h3>
+<span class="secno">
+<del class="diff-old">3.1.1
+</del>
+<ins class="diff-chg">3.2
+</ins>
+</span>
+Syntax
+Tokens
+and
+Keywords
+</h3>
+<p>
+JSON-LD
+specifies
+a
+number
+of
+syntax
+tokens
+and
+<dfn title="keyword" id="dfn-keyword">
+keywords
+</dfn>
+that
+are
+a
+core
+part
+of
+the
+language:
+</p>
+<dl>
+<dt>
+<code>
+@context
+</code>
+</dt>
+<dd>
+Used
+to
+define
+the
+short-hand
+names
+that
+are
+used
+throughout
+a
+JSON-LD
+document.
+These
+short-hand
+names
+are
+called
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+and
+help
+developers
+to
+express
+specific
+identifiers
+in
+a
+compact
+manner.
+The
+<code>
+@context
+</code>
+keyword
+is
+described
+in
+detail
+in
+the
+section
+titled
+<a href="#the-context" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">3.3
+</ins></span><span class="sec-title">
+The
+Context
+</span>
+</a>.
+</dd>
+<dt>
+<code>
+@graph
+</code>
+</dt>
+<dd>
+Used
+to
+explicitly
+label
+a
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>.
+This
+keyword
+is
+described
+in
+<del class="diff-old">the
+section
+titled
+</del>
+<a href="#named-graphs" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.11
+</ins></span><span class="sec-title">
+Named
+Graphs
+</span>
+</a>.
+</dd>
+<dt>
+<code>
+@id
+</code>
+</dt>
+<dd>
+Used
+to
+uniquely
+identify
+<em>
+things
+</em>
+that
+are
+being
+described
+in
+the
+document.
+This
+keyword
+is
+described
+in
+<del class="diff-old">the
+section
+titled
+Identifying
+the
+Subject
+</del>
+<a href="#node-identifiers" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">3.6
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Node
+Identifiers
+</ins></span>
+</a>.
+</dd>
+<dt>
+<code>
+@value
+</code>
+</dt>
+<dd>
+Used
+to
+specify
+the
+data
+that
+is
+associated
+with
+a
+particular
+<a class="tref internalDFN" title="property" href="#dfn-property">
+property
+</a>
+in
+the
+graph.
+This
+keyword
+is
+described
+in
+<del class="diff-old">the
+sections
+titled
+</del>
+<a href="#string-internationalization" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">3.8
+</ins></span><span class="sec-title">
+String
+Internationalization
+</span>
+</a>
+and
+<a href="#typed-values" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.2
+</ins></span><span class="sec-title">
+Typed
+Values
+</span>
+</a>.
+</dd>
+<dt>
+<code>
+@language
+</code>
+</dt>
+<dd>
+Used
+to
+specify
+the
+native
+language
+for
+a
+particular
+value
+or
+the
+default
+language
+of
+a
+JSON-LD
+document.
+This
+keyword
+is
+described
+in
+the
+section
+titled
+<a href="#string-internationalization" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">3.8
+</ins></span><span class="sec-title">
+String
+Internationalization
+</span>
+</a>.
+</dd>
+<dt>
+<code>
+@type
+</code>
+</dt>
+<dd>
+Used
+to
+set
+the
+data
+type
+of
+a
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node" href="#dfn-node">
+<ins class="diff-chg">node
+</ins>
+</a>
+or
+<a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">
+typed
+value
+</a>.
+This
+keyword
+is
+described
+in
+the
+section
+titled
+<a href="#typed-values" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.2
+</ins></span><span class="sec-title">
+Typed
+Values
+</span>
+</a>.
+</dd>
+<dt>
+<code>
+@container
+</code>
+</dt>
+<dd>
+Used
+to
+set
+the
+container
+of
+a
+particular
+value.
+This
+keyword
+is
+described
+in
+the
+section
+titled
+<a href="#sets-and-lists" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.9
+</ins></span><span class="sec-title">
+Sets
+and
+Lists
+</span>
+</a>.
+</dd>
+<dt>
+<code>
+@list
+</code>
+</dt>
+<dd>
+Used
+to
+express
+an
+ordered
+set
+of
+data.
+This
+keyword
+is
+described
+in
+the
+section
+titled
+<a href="#sets-and-lists" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.9
+</ins></span><span class="sec-title">
+Sets
+and
+Lists
+</span>
+</a>.
+</dd>
+<dt>
+<code>
+@set
+</code>
+</dt>
+<dd>
+Used
+to
+express
+an
+unordered
+set
+of
+data.
+This
+keyword
+is
+described
+in
+the
+section
+titled
+<a href="#sets-and-lists" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.9
+</ins></span><span class="sec-title">
+Sets
+and
+Lists
+</span>
+</a>.
+</dd>
+<dt>
+<code>
+<ins class="diff-new">@vocab
+</ins></code></dt><dd><ins class="diff-new">
+Used
+to
+set
+the
+base
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a><ins class="diff-new">
+for
+all
+property
+IRIs
+affected
+by
+the
+</ins><a class="tref internalDFN" title="active_context" href="#dfn-active_context"><ins class="diff-new">
+active
+context
+</ins></a>.<ins class="diff-new">
+This
+keyword
+is
+described
+in
+section
+</ins><a href="#iris" class="sec-ref"><span class="secno"><ins class="diff-new">
+3.5
+</ins></span><span class="sec-title"><ins class="diff-new">
+IRIs
+</ins></span>
+</a>.
+</dd>
+<dt>
+<code>:
+</code>
+</dt>
+<dd>
+The
+separator
+for
+JSON
+keys
+and
+values
+that
+use
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+IRIs
+</a>.
+</dd>
+</dl>
+<p>
+For
+the
+avoidance
+of
+doubt,
+all
+keys,
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keywords
+</a>,
+and
+values
+in
+JSON-LD
+are
+case-sensitive.
+</p>
+</section>
+<section id="the-context">
+<h3>
+<span class="secno">
+<del class="diff-old">3.1.2
+</del>
+<ins class="diff-chg">3.3
+</ins>
+</span>
+The
+Context
+</h3>
+<p>
+In
+JSON-LD,
+a
+<dfn title="context" id="dfn-context">
+context
+</dfn>
+is
+used
+to
+map
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s,
+i.e.,
+properties
+with
+associated
+values
+in
+an
+JSON
+document,
+to
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+s.
+A
+<dfn title="term" id="dfn-term">
+term
+</dfn>
+is
+a
+short
+word
+that
+expands
+to
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+<a class="tref internalDFN" title="term" href="#dfn-term">
+Term
+</a>
+s
+<em class="rfc2119" title="may">
+may
+</em>
+be
+defined
+as
+any
+valid
+JSON
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>
+other
+than
+a
+JSON-LD
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>.
+To
+avoid
+forward-compatibility
+issues,
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+starting
+with
+an
+<code>
+@
+</code>
+character
+<em class="rfc2119" title="should not">
+should
+not
+</em>
+be
+used
+as
+they
+might
+be
+used
+as
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keywords
+</a>
+in
+future
+versions
+of
+JSON-LD.
+Furthermore,
+the
+use
+of
+empty
+terms
+(
+<code>
+""
+</code>
+)
+is
+discouraged
+as
+not
+all
+programming
+languages
+are
+able
+to
+handle
+empty
+property
+names.
+</p>
+<p>
+The
+Web
+uses
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+IRIs
+</a>
+for
+unambiguous
+identification.
+The
+idea
+is
+that
+these
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+mean
+something
+that
+may
+be
+of
+use
+to
+other
+developers
+and
+that
+it
+is
+useful
+to
+give
+them
+an
+unambiguous
+identifier.
+That
+is,
+it
+is
+useful
+for
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+to
+expand
+to
+IRIs
+so
+that
+developers
+don't
+accidentally
+step
+on
+each
+other's
+<dfn title="vocabulary" id="dfn-vocabulary">
+vocabulary
+</dfn>
+terms
+and
+other
+resources.
+Furthermore,
+developers,
+and
+machines,
+are
+able
+to
+use
+this
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+(by
+plugging
+it
+directly
+into
+a
+web
+browser,
+for
+instance)
+to
+go
+to
+the
+term
+and
+get
+a
+definition
+of
+what
+the
+term
+means.
+This
+mechanism
+is
+analogous
+to
+the
+way
+we
+can
+use
+<a href="http://wordnet.princeton.edu/">
+WordNet
+</a>
+today
+to
+see
+the
+definition
+of
+words
+in
+the
+English
+language.
+Developers
+and
+machines
+need
+the
+same
+sort
+of
+definition
+of
+terms.
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+IRIs
+</a>
+provide
+a
+way
+to
+ensure
+that
+these
+terms
+are
+unambiguous.
+For
+example,
+the
+term
+<code>
+name
+</code>
+may
+map
+directly
+to
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<code>
+http://xmlns.com/foaf/0.1/name
+</code>.
+This
+allows
+JSON-LD
+documents
+to
+be
+constructed
+using
+the
+common
+JSON
+practice
+of
+simple
+name/value
+pairs
+while
+ensuring
+that
+the
+data
+is
+useful
+outside
+of
+the
+page,
+API
+or
+database
+in
+which
+it
+resides.
+The
+value
+of
+a
+term
+mapping
+<em class="rfc2119" title="must">
+must
+</em>
+be
+either;
+1)
+a
+simple
+string
+with
+the
+lexical
+form
+of
+an
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+or
+2)
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+or
+3)
+an
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+containing
+an
+<code>
+@id
+</code>,
+<code>
+@type
+</code>,
+<code>
+@language
+</code>,
+or
+<code>
+@container
+</code>
+keyword
+(all
+other
+keywords
+are
+ignored
+by
+a
+JSON-LD
+processor).
+</p>
+<p>
+These
+Linked
+Data
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+are
+typically
+collected
+in
+a
+context
+document
+that
+would
+look
+something
+like
+this:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 2</span>: Context definition</div><pre class="example">{
+ "@context":
+ {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "depiction":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/depiction",
+ "@type": "@id"
+ },
+ "homepage":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ },
+ }
+}
+</pre>
+</div>
+<p>
+Assuming
+that
+this
+context
+document
+can
+be
+retrieved
+at
+<code>
+http://json-ld.org/contexts/person.jsonld
+</code>,
+it
+can
+be
+referenced
+from
+a
+JSON-LD
+document
+by
+adding
+a
+single
+line.
+The
+JSON
+markup
+shown
+in
+the
+previous
+section
+could
+be
+changed
+as
+follows:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 3</span>: Adding context reference to JSON document</div><pre class="example">{
+ <span class="diff">"@context": "http://json-ld.org/contexts/person.jsonld",</span>
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}
+</pre>
+</div>
+<p>
+The
+additions
+above
+transform
+the
+previous
+JSON
+document
+into
+a
+JSON
+document
+with
+added
+semantics
+because
+the
+<code>
+@context
+</code>
+specifies
+how
+the
+<strong>
+name
+</strong>,
+<strong>
+homepage
+</strong>,
+and
+<strong>
+depiction
+</strong>
+terms
+map
+to
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+IRIs
+</a>.
+Mapping
+those
+keys
+to
+IRIs
+gives
+the
+data
+global
+context.
+If
+two
+developers
+use
+the
+same
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+to
+describe
+a
+property,
+they
+are
+more
+than
+likely
+expressing
+the
+same
+concept.
+This
+allows
+both
+developers
+to
+re-use
+each
+others'
+data
+without
+having
+to
+agree
+to
+how
+their
+data
+will
+interoperate
+on
+a
+site-by-site
+basis.
+Contexts
+may
+also
+contain
+type
+information
+for
+certain
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+as
+well
+as
+other
+processing
+instructions
+for
+the
+JSON-LD
+processor.
+</p>
+<div class="note">
+<div class="note-title">
+<span>
+<ins class="diff-new">Note
+</ins></span></div><p class=""><ins class="diff-new">
+External
+JSON-LD
+context
+documents
+</ins><em class="rfc2119" title="may"><ins class="diff-new">
+may
+</ins></em><ins class="diff-new">
+contain
+extra
+information
+located
+outside
+of
+the
+</ins><code><ins class="diff-new">
+@context
+</ins></code><ins class="diff-new">
+key,
+such
+as
+documentation
+about
+the
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-new">
+terms
+</ins></a><ins class="diff-new">
+declared
+in
+the
+document.
+When
+importing
+a
+</ins><code><ins class="diff-new">
+@context
+</ins></code><ins class="diff-new">
+value
+from
+an
+external
+JSON-LD
+context
+document,
+any
+extra
+information
+contained
+outside
+of
+the
+</ins><code><ins class="diff-new">
+@context
+</ins></code><ins class="diff-new">
+value
+</ins><em class="rfc2119" title="must"><ins class="diff-new">
+must
+</ins></em><ins class="diff-new">
+be
+discarded.
+</ins></p></div>
+<p>
+Contexts
+<em class="rfc2119" title="may">
+may
+</em>
+be
+specified
+in-line.
+This
+ensures
+that
+JSON-LD
+documents
+can
+be
+processed
+when
+a
+JSON-LD
+processor
+does
+not
+have
+access
+to
+the
+Web.
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 4</span>: In-line context definition</div><pre class="example">{
+ <span class="diff">"@context":
+ {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "depiction":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/depiction",
+ "@type": "@id"
+ },
+ "homepage":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ },
+ },</span>
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}
+</pre>
+</div>
+<p>
+Contexts
+<em class="rfc2119" title="may">
+may
+</em>
+be
+used
+at
+any
+time
+a
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>
+is
+defined.
+A
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>
+<em class="rfc2119" title="may">
+may
+</em>
+specify
+multiple
+contexts,
+using
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>,
+which
+is
+processed
+in
+order.
+This
+is
+useful
+when
+an
+author
+would
+like
+to
+use
+an
+existing
+context
+and
+add
+application-specific
+terms
+to
+the
+existing
+context.
+Duplicate
+context
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+<em class="rfc2119" title="must">
+must
+</em>
+be
+overridden
+using
+a
+last-defined-overrides
+mechanism.
+</p>
+<div class="example"><div class="example-title"><span>Example 5</span>: Scoped contexts within node definitions</div><pre class="example">{
+ <span class="diff">"@context":
+<ins class="diff-new"> {
+ "name": "http://example.com/person#name",
+ "details": "http://example.com/person#details"
+ },</span>
+ "<span class="diff">name</span>": "Markus Lanthaler",
+ ...
+ "details":
+ {
+</ins> <span class="diff">"@context": {<ins class="diff-new">
+ "name": "http://example.com/organization#name"
+ },</span>
+ "<span class="diff">name</span>": "Graz University of Technology"
+ }
+}
+</ins></pre></div><p><ins class="diff-new">
+In
+the
+example
+above,
+the
+</ins><code><ins class="diff-new">
+name
+</ins></code><ins class="diff-new">
+prefix
+is
+overridden
+in
+the
+more
+deeply
+nested
+</ins><code><ins class="diff-new">
+details
+</ins></code><ins class="diff-new">
+structure.
+Note
+that
+this
+is
+rarely
+a
+good
+authoring
+practice
+and
+is
+typically
+used
+when
+there
+exist
+legacy
+applications
+that
+depend
+on
+the
+specific
+structure
+of
+the
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-new">
+JSON
+object
+</ins></a>.</p>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+If
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+is
+re-defined
+within
+a
+context,
+all
+previous
+rules
+associated
+with
+the
+previous
+definition
+are
+removed.
+A
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+defined
+in
+a
+previous
+context
+<em class="rfc2119" title="must">
+must
+</em>
+be
+removed,
+if
+it
+is
+re-defined
+to
+<code>
+null
+</code>.
+</p>
+</div>
+<p>
+The
+set
+of
+contexts
+defined
+within
+a
+specific
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>
+are
+referred
+to
+as
+<dfn title="local_context" id="dfn-local_context">
+local
+context
+</dfn>
+s.
+Setting
+the
+context
+to
+<code>
+null
+</code>
+effectively
+<del class="diff-old">sets
+</del>
+<ins class="diff-chg">resets
+</ins>
+the
+<del class="diff-old">local
+</del>
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+<ins class="diff-chg">active
+</ins>
+context
+</a>
+to
+<del class="diff-old">the
+initial
+context
+(further
+explained
+in
+the
+JSON-LD
+API,
+Appendix
+A,
+Initial
+Context
+[
+JSON-LD-API
+]
+).
+</del>
+<ins class="diff-chg">an
+empty
+context.
+</ins>
+The
+<dfn title="active_context" id="dfn-active_context">
+active
+context
+</dfn>
+refers
+to
+the
+accumulation
+of
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>
+s
+that
+are
+in
+scope
+at
+a
+specific
+point
+within
+the
+document.
+The
+following
+example
+specifies
+an
+external
+context
+and
+then
+layers
+a
+local
+context
+on
+top
+of
+the
+external
+context:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 6</span>: Combining external and local contexts</div><pre class="example">{
+ <span class="diff">"@context": [
+ "http://json-ld.org/contexts/person.jsonld",
+ {
+ "pic": "http://xmlns.com/foaf/0.1/depiction"
+ }
+ ],</span>
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ <span class="diff">"pic": "http://twitter.com/account/profile_image/manusporny"</span>
+}
+</pre>
+</div>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+To
+ensure
+the
+best
+possible
+performance,
+it
+is
+a
+best
+practice
+to
+put
+the
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+definition
+at
+the
+top
+of
+the
+JSON-LD
+document.
+If
+it
+isn't
+listed
+first,
+processors
+have
+to
+save
+each
+key-value
+pair
+until
+the
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+is
+processed.
+This
+creates
+a
+memory
+and
+complexity
+burden
+for
+certain
+types
+of
+low-memory
+footprint
+JSON-LD
+processors.
+</p>
+</div>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+The
+<code>
+null
+</code>
+value
+is
+processed
+in
+a
+special
+way
+in
+JSON-LD.
+Unless
+otherwise
+specified,
+a
+JSON-LD
+processor
+<em class="rfc2119" title="must">
+must
+</em>
+act
+as
+if
+a
+key-value
+pair
+in
+the
+body
+of
+a
+JSON-LD
+document
+was
+never
+declared
+when
+the
+value
+equals
+<em>
+null
+</em>.
+If
+<code>
+@value
+</code>,
+<code>
+@list
+</code>,
+or
+<code>
+@set
+</code>
+is
+set
+to
+<em>
+null
+</em>
+in
+expanded
+form,
+then
+the
+entire
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+is
+ignored.
+If
+<code>
+@context
+</code>
+is
+set
+to
+<em>
+null
+</em>,
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+is
+reset
+and
+when
+used
+within
+a
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>,
+it
+removes
+any
+definition
+associated
+with
+the
+key,
+unless
+otherwise
+specified.
+</p>
+</div>
+</section>
+<section id="from-json-to-json-ld">
+<h3>
+<span class="secno">
+<del class="diff-old">3.1.3
+</del>
+<ins class="diff-chg">3.4
+</ins>
+</span>
+From
+JSON
+to
+JSON-LD
+</h3>
+<p>
+If
+a
+set
+of
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+such
+as,
+<strong>
+name
+</strong>,
+<strong>
+homepage
+</strong>,
+and
+<strong>
+depiction
+</strong>,
+are
+defined
+in
+a
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>,
+and
+that
+context
+is
+used
+to
+resolve
+the
+names
+in
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+objects
+</a>,
+machines
+are
+able
+to
+automatically
+expand
+the
+terms
+to
+something
+meaningful
+and
+unambiguous,
+like
+this:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 7</span>: Expanded terms</div><pre class="example">{
+ "<span class="diff">http://xmlns.com/foaf/0.1/name</span>": "Manu Sporny",
+ "<span class="diff">http://xmlns.com/foaf/0.1/homepage</span>": "http://manu.sporny.org"
+ "<span class="diff">http://xmlns.com/foaf/0.1/depiction</span>": "http://twitter.com/account/profile_image/manusporny"
+}
+</pre>
+</div>
+<p>
+Doing
+this
+allows
+JSON
+to
+be
+unambiguously
+machine-readable
+without
+requiring
+developers
+to
+drastically
+change
+their
+workflow.
+</p>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+The
+example
+above
+does
+not
+use
+the
+<code>
+@id
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>
+to
+<del class="diff-old">set
+the
+subject
+of
+</del>
+<ins class="diff-chg">identify
+</ins>
+the
+node
+being
+described
+above.
+This
+type
+of
+node
+is
+called
+an
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">
+unlabeled
+node
+</a>.
+It
+is
+advised
+that
+all
+nodes
+described
+in
+JSON-LD
+are
+given
+unique
+identifiers
+via
+the
+<code>
+@id
+</code>
+keyword
+unless
+the
+data
+is
+not
+intended
+to
+be
+linked
+to
+from
+other
+data
+sets.
+</p>
+</div>
+<p>
+A
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+used
+to
+define
+property
+values
+is
+called
+a
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>.
+<del class="diff-old">Subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">Node
+</ins>
+definitions
+</a>
+do
+not
+require
+an
+<code>
+@id
+</code>.
+<del class="diff-old">Subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">Node
+</ins>
+definitions
+</a>
+that
+do
+not
+contain
+an
+<code>
+@id
+</code>
+are
+known
+as
+an
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">
+unlabeled
+nodes
+</a>.
+</p>
+</section>
+<section id="iris">
+<h3>
+<span class="secno">
+<del class="diff-old">3.2
+</del>
+<ins class="diff-chg">3.5
+</ins>
+</span>
+IRIs
+</h3>
+<p>
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<del class="diff-old">IRI
+</del>
+<ins class="diff-chg">IRIs
+</ins>
+</a>
+<del class="diff-old">s
+</del>
+are
+fundamental
+to
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>
+as
+that
+is
+how
+most
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node" href="#dfn-node">
+<ins class="diff-chg">nodes
+</ins>
+</a>
+<del class="diff-old">s,
+</del>
+<ins class="diff-chg">s
+and
+</ins>
+all
+<a class="tref internalDFN" title="property" href="#dfn-property">
+properties
+</a>
+<del class="diff-old">and
+many
+object
+s
+</del>
+are
+identified.
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+s
+can
+be
+expressed
+in
+a
+variety
+of
+different
+ways
+in
+JSON-LD.
+</p>
+<p>
+<ins class="diff-new">An
+</ins><dfn title="iri" id="dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></dfn><ins class="diff-new">
+(an
+Internationalized
+Resource
+Identifier)
+is
+described
+in
+[
+</ins><cite><a class="bibref" href="#bib-RFC3987"><ins class="diff-new">
+RFC3987
+</ins></a></cite><ins class="diff-new">
+])
+and
+the
+use
+with
+JSON-LD
+conforms
+to
+the
+definition
+of
+</ins><cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a></cite><ins class="diff-new">
+in
+[
+</ins><cite><a class="bibref" href="#bib-RDF-CONCEPTS"><ins class="diff-new">
+RDF-CONCEPTS
+</ins></a></cite><ins class="diff-new">
+].
+</ins></p>
+<ol>
+<li>
+Except
+within
+a
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+definition,
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+in
+the
+key
+position
+in
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+that
+have
+a
+mapping
+<del class="diff-old">to
+an
+absolute
+</del>
+<ins class="diff-chg">or
+a
+vocabulary
+base
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+<del class="diff-old">or
+another
+term
+</del>
+in
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+are
+expanded
+to
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+by
+JSON-LD
+processors.
+</li>
+<li>
+An
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+is
+generated
+for
+the
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>
+value
+specified
+using
+<code>
+@id
+</code>
+or
+<code>
+@type
+</code>.
+</li>
+<li>
+An
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+is
+generated
+for
+the
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>
+value
+of
+any
+key
+for
+which
+there
+are
+<a class="tref internalDFN" title="coercion" href="#dfn-coercion">
+coercion
+</a>
+rules
+in
+effect
+that
+identify
+the
+value
+as
+an
+<code>
+@id
+</code>.
+</li>
+</ol>
+<p>
+IRIs
+may
+be
+represented
+as
+an
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+a
+<a class="tref internalDFN" title="relative_iri" href="#dfn-relative_iri">
+relative
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>,
+<del class="diff-old">or
+</del>
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<del class="diff-old">.
+</del>
+</a>,
+<ins class="diff-chg">or
+as
+a
+value
+relative
+to
+</ins><code><ins class="diff-chg">
+@vocab
+</ins></code>.
+</p>
+<p>
+An
+<dfn title="absolute_iri" id="dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</dfn>
+is
+defined
+in
+[
+<cite>
+<a class="bibref" href="#bib-RFC3987">
+RFC3987
+</a>
+</cite>
+]
+containing
+a
+<em>
+scheme
+</em>
+along
+with
+<em>
+path
+</em>
+and
+optional
+<em>
+query
+</em>
+and
+<em>
+fragment
+</em>
+segments.
+A
+<dfn title="relative_iri" id="dfn-relative_iri">
+relative
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</dfn>
+is
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+that
+is
+relative
+to
+some
+other
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+In
+JSON-LD
+all
+<a class="tref internalDFN" title="relative_iri" href="#dfn-relative_iri">
+relative
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+s
+are
+resolved
+relative
+to
+the
+<dfn title="base_iri" id="dfn-base_iri">
+base
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</dfn>
+associated
+with
+the
+document
+(typically,
+the
+directory
+that
+contains
+the
+document
+or
+the
+document
+itself).
+</p>
+<p>
+IRIs
+can
+be
+expressed
+directly
+in
+the
+key
+position
+like
+so:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 8</span>: IRI as a key</div><pre class="example">{
+...
+ "<span class="diff">http://xmlns.com/foaf/0.1/name</span>": "Manu Sporny",
+...
+}
+</pre>
+</div>
+<p>
+In
+the
+example
+above,
+the
+key
+<code>
+http://xmlns.com/foaf/0.1/name
+</code>
+is
+interpreted
+as
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+because
+it
+contains
+a
+colon
+(
+<code>:
+</code>
+)
+and
+the
+'http'
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">
+prefix
+</a>
+does
+not
+exist
+in
+the
+context.
+</p>
+<p>
+Term
+expansion
+occurs
+for
+IRIs
+if
+the
+value
+matches
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+defined
+within
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 9</span>: Term expansion from context definition</div><pre class="example">{
+ "<span class="diff">@context</span>":
+ {
+ "<span class="diff">name</span>": "<span class="diff">http://xmlns.com/foaf/0.1/name</span>"
+...
+ },
+ "<span class="diff">name</span>": "Manu Sporny",
+ "status": "trollin'",
+...
+}
+</pre>
+</div>
+<p>
+<a class="tref internalDFN" title="term" href="#dfn-term">
+Term
+</a>
+s
+are
+case
+sensitive,
+and
+<em class="rfc2119" title="must">
+must
+</em>
+be
+matched
+using
+a
+case-sensitive
+comparison.
+</p>
+<p>
+JSON
+keys
+that
+do
+not
+expand
+to
+an
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+are
+ignored,
+or
+removed
+in
+some
+cases,
+by
+the
+[
+<cite>
+<a class="bibref" href="#bib-JSON-LD-API">
+JSON-LD-API
+</a>
+</cite>
+].
+However,
+JSON
+keys
+that
+do
+not
+include
+a
+mapping
+in
+the
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+are
+still
+considered
+valid
+expressions
+in
+JSON-LD
+documents
+-
+the
+keys
+just
+don't
+have
+any
+machine-readable,
+semantic
+meaning.
+</p>
+<p>
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">
+Prefix
+</a>
+es
+are
+expanded
+when
+the
+form
+of
+the
+value
+is
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+represented
+as
+a
+<code>
+prefix:suffix
+</code>
+combination,
+and
+the
+prefix
+matches
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+defined
+within
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 10</span>: Prefix expansion</div><pre class="example">{
+ "<span class="diff">@context</span>":
+ {
+ "<span class="diff">foaf</span>": "<span class="diff">http://xmlns.com/foaf/0.1/</span>"
+...
+ },
+ "<span class="diff">foaf:name</span>": "Manu Sporny",
+...
+}
+</pre>
+</div>
+<p>
+<code>
+foaf:name
+</code>
+above
+will
+automatically
+expand
+out
+to
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<code>
+http://xmlns.com/foaf/0.1/name
+</code>.
+See
+<a href="#compact-iris" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.1
+</ins></span><span class="sec-title">
+Compact
+IRIs
+</span>
+</a>
+for
+more
+details.
+</p>
+<p>
+<ins class="diff-new">If
+the
+</ins><code><ins class="diff-new">
+@vocab
+</ins></code><ins class="diff-new">
+is
+set,
+all
+keys
+that
+do
+not
+match
+a
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-new">
+term
+</ins></a><ins class="diff-new">
+or
+a
+</ins><a class="tref internalDFN" title="prefix" href="#dfn-prefix"><ins class="diff-new">
+prefix
+</ins></a><ins class="diff-new">
+are
+It
+is
+often
+common
+that
+all
+types
+and
+properties
+come
+from
+the
+same
+vocabulary.
+JSON-LD's
+</ins><code><ins class="diff-new">
+@vocab
+</ins></code><ins class="diff-new">
+keyword
+allows
+to
+set
+a
+base
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a><ins class="diff-new">
+to
+be
+used
+for
+all
+properties
+and
+types
+that
+that
+do
+not
+match
+a
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-new">
+term
+</ins></a>,<ins class="diff-new">
+a
+</ins><a class="tref internalDFN" title="prefix" href="#dfn-prefix"><ins class="diff-new">
+prefix
+</ins></a>,<ins class="diff-new">
+or
+an
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-new">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a><ins class="diff-new">
+(i.e.,
+do
+not
+contain
+a
+colon).
+The
+</ins><code><ins class="diff-new">
+@vocab
+</ins></code><ins class="diff-new">
+mapping
+</ins><em class="rfc2119" title="must"><ins class="diff-new">
+must
+</ins></em><ins class="diff-new">
+have
+a
+value
+of
+a
+simple
+string
+with
+the
+lexical
+form
+of
+an
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr>.</p><div class="example"><div class="example-title"><span>Example 11</span>: Vocabulary base IRI</div><pre class="example">{ <span class="diff">"@context": {<ins class="diff-new">
+ "@vocab": "http://xmlns.com/foaf/1.0/"
+ },</span>
+ "@type": <span class="diff">"Person"</span>,
+</ins> <span class="diff">"name"</span>: "Manu Sporny",<ins class="diff-new">
+}
+</ins></pre></div><p>
+An
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+is
+generated
+when
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+is
+used
+in
+the
+value
+position
+that
+contains
+an
+<code>
+@id
+</code>
+keyword:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 12</span>: Expanded IRI definition</div><pre class="example">{
+...
+ "homepage": { "<span class="diff">@id</span>": "http://manu.sporny.org" }
+...
+}
+</pre>
+</div>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+Specifying
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+with
+an
+<code>
+@id
+</code>
+key
+is
+used
+to
+identify
+that
+<del class="diff-old">object
+</del>
+<a class="tref internalDFN" title="node" href="#dfn-node">
+<ins class="diff-chg">node
+</ins></a>
+using
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+When
+the
+object
+has
+only
+the
+<code>
+@id
+</code>,
+it
+is
+called
+a
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">
+<ins class="diff-chg">node
+</ins>
+reference
+</a>.
+This
+facility
+<em class="rfc2119" title="may">
+may
+</em>
+also
+be
+used
+to
+link
+to
+another
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>
+using
+a
+mechanism
+called
+<a class="tref internalDFN" title="embedding" href="#dfn-embedding">
+embedding
+</a>,
+which
+is
+covered
+in
+the
+section
+titled
+<a href="#embedding" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.10
+</ins></span><span class="sec-title">
+Embedding
+</span>
+</a>.
+</p>
+</div>
+<p>
+If
+type
+<a class="tref internalDFN" title="coercion" href="#dfn-coercion">
+coercion
+</a>
+rules
+are
+specified
+in
+the
+<code>
+@context
+</code>
+for
+a
+particular
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+or
+property
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>,
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+is
+generated:
+</p>
+<div class="example"><div class="example-title"><span>Example 13</span>: Type coercion</div><pre class="example">{<span class="diff">
+ "@context":
+ {
+ ...
+ "homepage":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ ...
+ }</span>
+...
+ "homepage": "http://manu.sporny.org/",
+...
+}
+</pre>
+</div>
+<p>
+In
+the
+example
+above,
+even
+though
+the
+value
+<code>
+http://manu.sporny.org/
+</code>
+is
+expressed
+as
+a
+JSON
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>,
+the
+type
+<a class="tref internalDFN" title="coercion" href="#dfn-coercion">
+coercion
+</a>
+rules
+will
+transform
+the
+value
+into
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+when
+processed
+by
+a
+JSON-LD
+Processor.
+</p>
+</section>
+<section id="node-identifiers">
+<h3>
+<span class="secno">
+<del class="diff-old">3.3
+</del>
+<ins class="diff-chg">3.6
+</ins>
+</span>
+<del class="diff-old">Identifying
+the
+Subject
+</del>
+<ins class="diff-chg">Node
+Identifiers
+</ins>
+</h3>
+<p>
+To
+be
+able
+to
+externally
+reference
+nodes
+in
+a
+graph,
+it
+is
+important
+that
+each
+node
+has
+an
+unambiguous
+identifier.
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+s
+are
+a
+fundamental
+concept
+of
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>,
+and
+nodes
+should
+have
+a
+de-referencable
+identifier
+used
+to
+name
+and
+locate
+them.
+For
+nodes
+to
+be
+truly
+linked,
+de-referencing
+the
+identifier
+should
+result
+in
+a
+representation
+of
+that
+node
+(for
+example,
+using
+a
+URL
+to
+retrieve
+a
+web
+page).
+Associating
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+with
+a
+node
+tells
+an
+application
+that
+the
+returned
+document
+contains
+a
+description
+of
+the
+node
+requested.
+</p>
+<p>
+JSON-LD
+documents
+may
+also
+contain
+descriptions
+of
+other
+nodes,
+so
+it
+is
+necessary
+to
+be
+able
+to
+uniquely
+identify
+each
+node
+which
+may
+be
+externally
+referenced.
+</p>
+<p>
+<del class="diff-old">A
+subject
+</del>
+<ins class="diff-chg">The
+node
+</ins>
+of
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+is
+<del class="diff-old">a
+node
+</del>
+identified
+using
+the
+<code>
+@id
+</code>
+<del class="diff-old">key.
+The
+subject
+is
+the
+first
+piece
+of
+information
+needed
+by
+the
+JSON-LD
+processor
+in
+order
+to
+create
+the
+(subject,
+property,
+object)
+tuple,
+also
+known
+as
+a
+triple.
+</del>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+<ins class="diff-chg">keyword
+</ins></a>:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 14</span>: Identifying a node</div><pre class="example">{
+ "@context":
+ {
+ ...
+ "homepage":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ ...
+ },
+ "<span class="diff">@id</span>": "<span class="diff">http://example.org/people#joebob</span>",
+ "homepage": "http://manu.sporny.org/",
+...
+}
+</pre>
+</div>
+<p>
+The
+example
+above
+<del class="diff-old">would
+set
+the
+subject
+to
+</del>
+<ins class="diff-chg">contains
+a
+node
+identified
+by
+</ins>
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<code>
+http://example.org/people#joebob
+</code>.
+</p>
+<p>
+A
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+used
+to
+define
+property
+values
+is
+called
+a
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>.
+<del class="diff-old">Subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">Node
+</ins>
+definitions
+</a>
+do
+not
+require
+an
+<code>
+@id
+</code>.
+A
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>
+that
+does
+not
+contain
+an
+<code>
+@id
+</code>
+property
+defines
+properties
+of
+an
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">
+unlabeled
+node
+</a>.
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-new">Node
+definitions
+</ins></a><em class="rfc2119" title="may"><ins class="diff-new">
+may
+</ins></em><ins class="diff-new">
+be
+spread
+among
+different
+parts
+of
+a
+document
+or
+even
+between
+different
+documents.
+</ins>
+</p>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+To
+ensure
+the
+best
+possible
+performance,
+when
+possible,
+it
+is
+a
+best
+practice
+to
+put
+JSON-LD
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>
+s,
+such
+as
+<code>
+@id
+</code>
+and
+<code>
+@context
+</code>
+before
+other
+key-value
+pairs
+in
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>.
+However,
+keys
+in
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+are
+not
+ordered,
+so
+processors
+<em class="rfc2119" title="must not">
+must
+not
+</em>
+depend
+on
+key
+ordering.
+If
+keywords
+are
+not
+listed
+first,
+processors
+have
+to
+save
+each
+key-value
+pair
+until
+at
+least
+the
+<code>
+@context
+</code>
+and
+the
+<code>
+@id
+</code>
+are
+processed.
+Not
+specifying
+those
+keywords
+first
+creates
+a
+memory
+and
+complexity
+burden
+for
+low-memory
+footprint
+processors,
+forcing
+them
+to
+use
+more
+memory
+and
+computing
+cycles
+than
+necessary.
+</p>
+</div>
+</section>
+<section id="specifying-the-type">
+<h3>
+<span class="secno">
+<del class="diff-old">3.4
+</del>
+<ins class="diff-chg">3.7
+</ins>
+</span>
+Specifying
+the
+Type
+</h3>
+<p>
+The
+type
+of
+a
+particular
+<del class="diff-old">subject
+</del>
+<ins class="diff-chg">node
+</ins>
+can
+be
+specified
+using
+the
+<code>
+@type
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>.
+<del class="diff-old">Specifying
+the
+type
+in
+this
+way
+will
+generate
+a
+triple
+of
+the
+form
+(subject,
+type,
+type-
+IRI
+).
+</del>
+To
+be
+considered
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>,
+types
+<em class="rfc2119" title="must">
+must
+</em>
+be
+uniquely
+identified
+by
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 15</span>: Specifying the type for a node</div><pre class="example">{
+...
+ "@id": "http://example.org/people#joebob",
+ "<span class="diff">@type</span>": "<span class="diff">http://xmlns.com/foaf/0.1/Person</span>",
+...
+}
+</pre>
+</div>
+<p>
+<ins class="diff-new">A
+node
+can
+be
+assigned
+more
+than
+one
+type
+by
+using
+the
+following
+markup
+pattern:
+</ins></p><div class="example"><div class="example-title"><span>Example 16</span>: Specifying multiple types for a node</div><pre class="example">{<ins class="diff-new">
+...
+ "@id": "http://example.org/places#BrewEats",
+ "<span class="diff">@type</span>": <span class="diff">["http://schema.org/Restaurant", "http://schema.org/Brewery"]</span>
+...
+}
+</ins></pre>
+</div>
+</section>
+<section id="string-internationalization">
+<h3>
+<span class="secno">
+<del class="diff-old">3.5
+</del>
+<ins class="diff-chg">3.8
+</ins>
+</span>
+String
+Internationalization
+</h3>
+<p>
+At
+times,
+it
+is
+important
+to
+annotate
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>
+with
+its
+language.
+In
+JSON-LD
+this
+is
+possible
+in
+a
+variety
+of
+ways.
+Firstly,
+it
+is
+possible
+to
+define
+a
+default
+language
+for
+a
+JSON-LD
+document
+by
+setting
+the
+<code>
+@language
+</code>
+key
+in
+the
+<code>
+@context
+</code>
+or
+in
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+definition:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 17</span>: String Internationalization</div><pre class="example">{
+ <span class="diff">"@context":
+ {
+ ...
+ "@language": "ja"
+ },</span>
+ "name": <span class="diff">"花澄"</span>,
+ "occupation": <span class="diff">"科学者"</span>
+}
+</pre>
+</div>
+<p>
+The
+example
+above
+would
+associate
+the
+<code>
+ja
+</code>
+language
+code
+with
+the
+two
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>
+s
+<em>
+花澄
+</em>
+and
+<em>
+科学者
+</em>.
+Languages
+<em class="rfc2119" title="must">
+must
+</em>
+be
+well-formed
+language
+tags
+according
+to
+[
+<cite>
+<a class="bibref" href="#bib-BCP47">
+BCP47
+</a>
+</cite>
+].
+</p>
+<p>
+It
+is
+possible
+to
+override
+the
+default
+language
+by
+using
+the
+expanded
+form
+of
+a
+value:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 18</span>: Expanded value with language</div><pre class="example">{
+ "@context": {
+ ...
+ "@language": "ja"
+ },
+ "name": "花澄",
+ "occupation": <span class="diff">{
+ "@value": "Scientist",
+ "@language": "en"
+ }</span>
+}
+</pre>
+</div>
+<p>
+It
+is
+also
+possible
+to
+override
+the
+default
+language
+or
+specify
+a
+plain
+value
+by
+omitting
+the
+<code>
+@language
+</code>
+tag
+or
+setting
+it
+to
+<code>
+null
+</code>
+when
+expressing
+the
+expanded
+value:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 19</span>: Expanded value to remove language</div><pre class="example">{
+ "@context": {
+ ...
+ "@language": "ja"
+ },
+ "name": <span class="diff">{
+ "@value": "Frank"
+ },</span>
+ "occupation": <span class="diff"> {
+ "@value": "Ninja",
+ "@language": "en"
+ }</span>,
+ "speciality": "手裏剣"
+}
+</pre>
+</div>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+Please
+note
+that
+language
+associations
+<em class="rfc2119" title="must">
+must
+</em>
+only
+be
+applied
+to
+plain
+literal
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>
+s.
+That
+is,
+<a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">
+typed
+value
+</a>
+s
+or
+values
+that
+are
+subject
+to
+<del class="diff-old">type
+coercion
+</del>
+<a href="#type-coercion" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.6
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Type
+Coercion
+</ins></span>
+</a>
+won't
+be
+language
+tagged.
+</p>
+</div>
+<p>
+To
+clear
+the
+default
+language
+for
+a
+subtree,
+<code>
+@language
+</code>
+can
+be
+set
+to
+<code>
+null
+</code>
+in
+a
+<a class="tref internalDFN" title="local_context" href="#dfn-local_context">
+local
+context
+</a>
+as
+follows:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 20</span>: Clearing default language</div><pre class="example">{
+ "@context": {
+ ...
+ "@language": "ja"
+ },
+ "name": "花澄",
+ "details": {
+<span class="diff"> "@context": {
+ "@language": null
+ },</span>
+ "occupation": "Ninja"
+ }
+}
+</pre>
+</div>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+JSON-LD
+allows
+one
+to
+associate
+language
+information
+with
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s.
+See
+<a href="#expanded-term-definition" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.5
+</ins></span><span class="sec-title">
+Expanded
+Term
+Definition
+</span>
+</a>
+for
+more
+details.
+</p>
+</div>
+</section>
+<section id="json-ld-syntax">
+<h3>
+<span class="secno">
+<del class="diff-old">3.6
+</del>
+<ins class="diff-chg">3.9
+</ins>
+</span>
+JSON-LD
+Syntax
+</h3>
+<p>
+A
+JSON-LD
+document
+is
+first,
+and
+foremost,
+a
+JSON
+document
+(as
+defined
+in
+[
+<cite>
+<del class="diff-old">RFC5988
+</del>
+<a class="bibref" href="#bib-RFC4627">
+<ins class="diff-chg">RFC4627
+</ins>
+</a>
+</cite>
+]),
+and
+any
+syntactically
+correct
+JSON
+document
+<em class="rfc2119" title="must">
+must
+</em>
+be
+processed
+by
+a
+conforming
+JSON-LD
+processor.
+However,
+JSON-LD
+describes
+a
+specific
+syntax
+to
+use
+for
+expressing
+Linked
+Data.
+This
+includes
+the
+use
+of
+specific
+keywords,
+as
+identified
+in
+<a href="#syntax-tokens-and-keywords" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">3.2
+</ins></span><span class="sec-title">
+Syntax
+Tokens
+and
+Keywords
+</span>
+</a>
+for
+expressing
+<del class="diff-old">subject
+</del>
+<a title="node definition">
+<ins class="diff-chg">node
+</ins>
+definitions
+</a>,
+values,
+and
+the
+<a href="#dfn-context" class="internalDFN">
+context
+</a>.
+See
+<del class="diff-old">Appendix
+A
+</del>
+<a href="#json-ld-grammar" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">A.
+</ins></span><span class="sec-title"><ins class="diff-chg">
+JSON-LD
+Grammar
+</ins></span>
+</a>
+for
+authoring
+guidelines
+and
+a
+BNF
+description
+of
+JSON-LD.
+</p>
+</section>
+</section>
+<section id="advanced-concepts">
+<h2>
+<span class="secno">
+4.
+</span>
+Advanced
+Concepts
+</h2>
+<em>
+This
+section
+is
+normative.
+</em>
+<p>
+JSON-LD
+has
+a
+number
+of
+features
+that
+provide
+functionality
+above
+and
+beyond
+the
+core
+functionality
+described
+above.
+The
+following
+section
+describes
+this
+advanced
+functionality
+in
+more
+detail.
+</p>
+<section id="compact-iris">
+<h3>
+<span class="secno">
+4.1
+</span>
+Compact
+IRIs
+</h3>
+<p>
+<a class="tref internalDFN" title="term" href="#dfn-term">
+Term
+</a>
+s
+in
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>
+documents
+may
+draw
+from
+a
+number
+of
+different
+<a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">
+vocabularies
+</a>.
+At
+times,
+declaring
+every
+single
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+that
+a
+document
+uses
+can
+require
+the
+developer
+to
+declare
+tens,
+if
+not
+hundreds
+of
+potential
+<a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">
+vocabulary
+</a>
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+that
+are
+used
+across
+an
+application.
+This
+is
+a
+concern
+for
+at
+least
+two
+reasons:
+the
+first
+is
+the
+cognitive
+load
+on
+the
+developer
+of
+remembering
+all
+of
+the
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s,
+and
+the
+second
+is
+the
+serialized
+size
+of
+the
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+if
+it
+is
+specified
+inline.
+In
+order
+to
+address
+these
+issues,
+the
+concept
+of
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+is
+introduced.
+</p>
+<p>
+A
+<dfn title="compact_iri" id="dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</dfn>
+is
+a
+way
+of
+expressing
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+using
+a
+<em>
+prefix
+</em>
+and
+<em>
+suffix
+</em>
+separated
+by
+a
+colon
+(
+<code>:
+</code>
+)
+which
+is
+similar
+to
+the
+<cite>
+<a href="http://www.w3.org/TR/rdfa-core/#s_curies">
+CURIE
+Syntax
+</a>
+</cite>
+in
+[
+<cite>
+<a class="bibref" href="#bib-RDFA-CORE">
+RDFA-CORE
+</a>
+</cite>
+].
+The
+<dfn title="prefix" id="dfn-prefix">
+prefix
+</dfn>
+is
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+taken
+from
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+and
+is
+a
+short
+string
+identifying
+a
+particular
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+in
+a
+JSON-LD
+document.
+For
+example,
+the
+prefix
+<code>
+foaf
+</code>
+may
+be
+used
+as
+a
+short
+hand
+for
+the
+Friend-of-a-Friend
+vocabulary,
+which
+is
+identified
+using
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<code>
+http://xmlns.com/foaf/0.1/
+</code>.
+A
+developer
+may
+append
+any
+of
+the
+FOAF
+<a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">
+vocabulary
+</a>
+terms
+to
+the
+end
+of
+the
+prefix
+to
+specify
+a
+short-hand
+version
+of
+the
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+for
+the
+<a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">
+vocabulary
+</a>
+term.
+For
+example,
+<code>
+foaf:name
+</code>
+would
+be
+expanded
+out
+to
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<code>
+http://xmlns.com/foaf/0.1/name
+</code>.
+Instead
+of
+having
+to
+remember
+and
+type
+out
+the
+entire
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>,
+the
+developer
+can
+instead
+use
+the
+prefix
+in
+their
+JSON-LD
+markup.
+</p>
+<p>
+Terms
+are
+interpreted
+as
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+s
+if
+they
+contain
+at
+least
+one
+colon
+and
+the
+first
+colon
+is
+not
+followed
+by
+two
+slashes
+(
+<code>
+//
+</code>,
+as
+in
+<code>
+http://example.com
+</code>
+).
+To
+generate
+the
+full
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+the
+value
+is
+first
+split
+into
+a
+<em>
+prefix
+</em>
+and
+<em>
+suffix
+</em>
+at
+the
+first
+occurrence
+of
+a
+colon
+(
+<code>:
+</code>
+).
+If
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>
+contains
+a
+term
+mapping
+for
+<em>
+prefix
+</em>,
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+is
+generated
+by
+prepending
+the
+mapped
+<em>
+prefix
+</em>
+to
+the
+(possibly
+empty)
+<em>
+suffix
+</em>
+using
+textual
+concatenation.
+If
+no
+prefix
+mapping
+is
+defined,
+the
+value
+is
+interpreted
+as
+an
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+If
+the
+prefix
+is
+an
+underscore
+(
+<code>
+_
+</code>
+),
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+remains
+unchanged.
+This
+effectively
+means
+that
+every
+term
+containing
+a
+colon
+will
+be
+interpreted
+by
+a
+JSON-LD
+processor
+as
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>.
+</p>
+<p>
+Consider
+the
+following
+example:
+</p>
+<del class="diff-old"> {
+</del>
+ <div class="example"><div class="example-title"><span>Example 21</span>: Compact IRIs</div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"dc": "http://purl.org/dc/elements/1.1/",</span>
+ <span class="diff">"ex": "http://example.org/vocab#"</span>
+ },
+ "@id": "http://example.org/library",
+ "@type": <span class="diff">"ex:Library"</span>,
+ <span class="diff">"ex:contains"</span>:
+ {
+ "@id": "http://example.org/library/the-republic",
+ "@type": <span class="diff">"ex:Book"</span>,
+ <span class="diff">"dc:creator"</span>: "Plato",
+ <span class="diff">"dc:title"</span>: "The Republic",
+ <span class="diff">"ex:contains"</span>:
+ {
+ "@id": "http://example.org/library/the-republic#introduction",
+ "@type": <span class="diff">"ex:Chapter"</span>,
+ <span class="diff">"dc:description"</span>: "An introductory chapter on The Republic.",
+ <span class="diff">"dc:title"</span>: "The Introduction"
+ }
+ }
+}
+</pre>
+</div>
+<p>
+In
+this
+example,
+two
+different
+<a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">
+vocabularies
+</a>
+are
+referred
+to
+using
+prefixes.
+Those
+prefixes
+are
+then
+used
+as
+type
+and
+property
+values
+using
+the
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<code>
+prefix:suffix
+</code>
+notation.
+</p>
+<p>
+It's
+also
+possible
+to
+use
+compact
+IRIs
+within
+the
+context
+as
+shown
+in
+the
+following
+example:
+</p>
+<del class="diff-old"> {
+</del>
+ <div class="example"><div class="example-title"><span>Example 22</span>: Using vocabularies</div><pre class="example">{
+ "@context":
+ {
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "foaf": "http://xmlns.com/foaf/0.1/",
+ <span class="diff">"foaf:homepage"</span>: { "@type": "@id" },
+ "picture": { "@id": <span class="diff">"foaf:depiction"</span>, "@type": "@id" }
+ },
+ "@id": "http://me.markus-lanthaler.com/",
+ "@type": "foaf:Person",
+ "foaf:name": "Markus Lanthaler",
+ "foaf:homepage": "http://www.markus-lanthaler.com/",
+ "picture": "http://twitter.com/account/profile_image/markuslanthaler"
+}
+</pre>
+</div>
+</section>
+<section id="typed-values">
+<h3>
+<span class="secno">
+4.2
+</span>
+Typed
+Values
+</h3>
+<p>
+A
+value
+with
+an
+associated
+type,
+also
+known
+as
+a
+<dfn title="typed_value" id="dfn-typed_value">
+typed
+value
+</dfn>,
+is
+indicated
+by
+associating
+a
+value
+with
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+which
+indicates
+the
+value's
+type.
+Typed
+values
+may
+be
+expressed
+in
+JSON-LD
+in
+<del class="diff-old">two
+</del>
+<ins class="diff-chg">three
+</ins>
+ways:
+</p>
+<ol>
+<li>
+By
+utilizing
+the
+<code>
+@type
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>
+when
+defining
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+within
+a
+<code>
+@context
+</code>
+section.
+</li>
+<li>
+By
+utilizing
+the
+expanded
+form
+for
+specifying
+<del class="diff-old">objects.
+</del>
+<ins class="diff-chg">values.
+</ins></li><li><ins class="diff-chg">
+By
+using
+a
+native
+JSON
+type
+such
+as
+</ins><a class="tref internalDFN" title="number" href="#dfn-number"><ins class="diff-chg">
+number
+</ins></a>,<a class="tref internalDFN" title="true" href="#dfn-true"><ins class="diff-chg">
+true
+</ins></a>,<ins class="diff-chg">
+or
+</ins><a class="tref internalDFN" title="false" href="#dfn-false"><ins class="diff-chg">
+false
+</ins></a>.
+</li>
+</ol>
+<p>
+The
+first
+example
+uses
+the
+<code>
+@type
+</code>
+keyword
+to
+associate
+a
+type
+with
+a
+particular
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+in
+the
+<code>
+@context
+</code>:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 23</span>: Expanded term definition with type coercion</div><pre class="example">{
+ <span class="diff">"@context":
+ {
+ "modified":
+ {
+ "@id": "http://purl.org/dc/terms/modified",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ },</span>
+...
+ "modified": "2010-05-29T14:17:39+02:00",
+...
+}
+</pre>
+</div>
+<p>
+The
+<em>
+modified
+</em>
+key's
+value
+above
+is
+automatically
+type
+coerced
+to
+a
+datetime
+value
+because
+of
+the
+information
+specified
+in
+the
+<code>
+@context
+</code>.
+</p>
+<p>
+The
+second
+example
+uses
+the
+expanded
+form
+of
+setting
+the
+type
+information
+in
+the
+body
+of
+a
+JSON-LD
+document:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 24</span>: Expanded value with type</div><pre class="example">{
+ "@context":
+ {
+ "modified":
+ {
+ "@id": "http://purl.org/dc/terms/modified"
+ }
+ },
+...
+ "modified":
+ <span class="diff">{
+ "@value": "2010-05-29T14:17:39+02:00",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }</span>
+...
+}
+</pre>
+</div>
+<p>
+Both
+examples
+above
+would
+generate
+<del class="diff-old">an
+object
+with
+</del>
+the
+value
+<del class="diff-old">of
+</del>
+<code>
+2010-05-29T14:17:39+02:00
+</code>
+<del class="diff-old">and
+</del>
+<ins class="diff-chg">with
+</ins>
+the
+type
+<del class="diff-old">of
+</del>
+<code>
+http://www.w3.org/2001/XMLSchema#dateTime
+</code>.
+Note
+that
+it
+is
+also
+possible
+to
+use
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+or
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+to
+express
+the
+value
+of
+a
+type.
+</p>
+<del class="diff-old">Note
+</del>
+<p>
+The
+<code>
+@type
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>
+is
+also
+used
+to
+associate
+a
+type
+with
+a
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node" href="#dfn-node">
+<ins class="diff-chg">node
+</ins>
+</a>.
+<del class="diff-old">Although
+the
+same
+keyword
+is
+used
+in
+both
+places,
+the
+</del>
+<ins class="diff-chg">The
+</ins>
+concept
+of
+an
+<del class="diff-old">object
+</del>
+<dfn title="node_type" id="dfn-node_type">
+<ins class="diff-chg">node
+</ins>
+type
+</dfn>
+and
+a
+<dfn title="value_type" id="dfn-value_type">
+value
+type
+</dfn>
+are
+different.
+This
+is
+similar
+to
+object-oriented
+programming
+languages
+where
+both
+scalar
+and
+structured
+types
+use
+the
+same
+class
+inheritance
+mechanism,
+even
+though
+scalar
+types
+and
+structured
+types
+are
+inherently
+different.
+</p>
+<div class="example"><div class="example-title"><span>Example 25</span>: Example demonstrating the context-sensitivity for @type</div><pre class="example">{
+<ins class="diff-new">...
+ "@id": "http://example.org/posts#TripToWestVirginia",
+</ins> <span class="diff">"@type": "http://schema.org/BlogPosting"</span>,<ins class="diff-new">
+ "modified":
+ {
+ "@value": "2010-05-29T14:17:39+02:00",
+</ins> <span class="diff">"@type": "http://www.w3.org/2001/XMLSchema#dateTime"</span><ins class="diff-new">
+ }
+...
+}
+</ins></pre>
+</div>
+<p>
+<ins class="diff-chg">The
+first
+use
+of
+</ins><code><ins class="diff-chg">
+@type
+</ins></code><ins class="diff-chg">
+associates
+a
+</ins><a class="tref internalDFN" title="node_type" href="#dfn-node_type"><ins class="diff-chg">
+node
+type
+</ins></a><ins class="diff-chg">
+(
+</ins><code><ins class="diff-chg">
+http://schema.org/BlogPosting
+</ins></code><ins class="diff-chg">
+)
+with
+the
+</ins><a class="tref internalDFN" title="node" href="#dfn-node"><ins class="diff-chg">
+node
+</ins></a>,<ins class="diff-chg">
+which
+is
+expressed
+using
+the
+</ins><code><ins class="diff-chg">
+@id
+</ins></code><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keyword
+</ins></a>.<ins class="diff-chg">
+The
+second
+use
+of
+</ins><code><ins class="diff-chg">
+@type
+</ins></code><ins class="diff-chg">
+associates
+a
+</ins><a class="tref internalDFN" title="value_type" href="#dfn-value_type"><ins class="diff-chg">
+value
+type
+</ins></a><ins class="diff-chg">
+(
+</ins><code><ins class="diff-chg">
+http://www.w3.org/2001/XMLSchema#dateTime
+</ins></code><ins class="diff-chg">
+)
+with
+the
+value
+expressed
+using
+the
+</ins><code><ins class="diff-chg">
+@value
+</ins></code><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keyword
+</ins></a>.<ins class="diff-chg">
+As
+a
+general
+rule,
+when
+</ins><code><ins class="diff-chg">
+@value
+</ins></code><ins class="diff-chg">
+and
+</ins><code><ins class="diff-chg">
+@type
+</ins></code><ins class="diff-chg">
+are
+used
+in
+the
+same
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a>,<ins class="diff-chg">
+the
+</ins><code><ins class="diff-chg">
+@type
+</ins></code><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keyword
+</ins></a><ins class="diff-chg">
+is
+expressing
+a
+</ins><a class="tref internalDFN" title="value_type" href="#dfn-value_type"><ins class="diff-chg">
+value
+type
+</ins></a>.<ins class="diff-chg">
+Otherwise,
+the
+</ins><code><ins class="diff-chg">
+@type
+</ins></code><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keyword
+</ins></a><ins class="diff-chg">
+is
+expressing
+a
+</ins><a class="tref internalDFN" title="node_type" href="#dfn-node_type"><ins class="diff-chg">
+node
+type
+</ins></a>.</p></section><section id="language-tagged-strings">
+<h3>
+<span class="secno">
+4.3
+</span>
+<del class="diff-old">External
+Contexts
+</del>
+<ins class="diff-chg">Language-tagged
+Strings
+</ins>
+</h3>
+<p>
+<del class="diff-old">Authors
+may
+choose
+to
+declare
+JSON-LD
+context
+s
+in
+external
+documents
+to
+promote
+re-use
+of
+contexts
+as
+well
+as
+reduce
+the
+size
+of
+JSON-LD
+documents.
+In
+order
+to
+use
+an
+external
+context,
+</del>
+<ins class="diff-chg">A
+string
+with
+</ins>
+an
+<del class="diff-old">author
+must
+specify
+</del>
+<ins class="diff-chg">associated
+language,
+also
+known
+as
+a
+</ins><dfn title="language-tagged_string" id="dfn-language-tagged_string"><ins class="diff-chg">
+language-tagged
+string
+</ins></dfn>,<ins class="diff-chg">
+is
+indicated
+by
+associating
+a
+string
+with
+</ins>
+an
+<del class="diff-old">IRI
+</del>
+<ins class="diff-chg">language
+code
+as
+defined
+in
+[
+</ins><cite>
+<a class="bibref" href="#bib-BCP47">
+<ins class="diff-new">BCP47
+</ins>
+</a>
+<del class="diff-old">to
+a
+valid
+</del>
+</cite>
+<ins class="diff-chg">].
+Language-tagged
+strings
+may
+be
+expressed
+in
+</ins>
+JSON-LD
+<del class="diff-old">document.
+The
+referenced
+document
+must
+have
+</del>
+<ins class="diff-chg">in
+four
+ways:
+</ins></p><ol><li><ins class="diff-chg">
+By
+defining
+</ins>
+a
+<del class="diff-old">top-level
+subject
+definition
+.
+The
+value
+of
+any
+</del>
+<ins class="diff-chg">global
+language
+using
+the
+</ins>
+<code>
+<del class="diff-old">@context
+</del>
+<ins class="diff-chg">@language
+</ins>
+</code>
+<del class="diff-old">key
+</del>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+<ins class="diff-chg">keyword
+</ins></a>
+within
+<del class="diff-old">that
+object
+is
+substituted
+for
+</del>
+<ins class="diff-chg">a
+</ins><code><ins class="diff-chg">
+@context
+</ins></code><ins class="diff-chg">
+section.
+</ins></li><li><ins class="diff-chg">
+By
+utilizing
+</ins>
+the
+<del class="diff-old">IRI
+</del>
+<code>
+<ins class="diff-chg">@language
+</ins></code><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keyword
+</ins></a><ins class="diff-chg">
+when
+defining
+a
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-chg">
+term
+</ins></a>
+within
+<ins class="diff-new">a
+</ins><code><ins class="diff-new">
+@context
+</ins></code><ins class="diff-new">
+section.
+</ins></li><li><ins class="diff-new">
+By
+utilizing
+</ins>
+the
+<del class="diff-old">referencing
+document
+to
+have
+the
+same
+effect
+as
+if
+</del>
+<ins class="diff-chg">expanded
+form
+for
+specifying
+values.
+</ins></li><li><ins class="diff-chg">
+By
+utilizing
+</ins>
+the
+<code>
+<ins class="diff-new">@container
+</ins></code><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-new">
+keyword
+</ins></a><ins class="diff-new">
+with
+a
+</ins>
+value
+<del class="diff-old">were
+specified
+inline
+</del>
+<ins class="diff-chg">of
+</ins><code><ins class="diff-chg">
+@language
+</ins></code><ins class="diff-chg">
+when
+defining
+a
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-chg">
+term
+</ins></a>
+within
+<del class="diff-old">the
+referencing
+document.
+</del>
+<ins class="diff-chg">a
+</ins><code><ins class="diff-chg">
+@context
+</ins></code><ins class="diff-chg">
+section.
+This
+usage
+pattern
+is
+called
+a
+</ins><dfn title="language_map" id="dfn-language_map"><ins class="diff-chg">
+language
+map
+</ins></dfn>.</li></ol>
+<p>
+The
+<del class="diff-old">following
+</del>
+<ins class="diff-chg">first
+</ins>
+example
+<del class="diff-old">demonstrates
+</del>
+<ins class="diff-chg">uses
+</ins>
+the
+<del class="diff-old">use
+of
+an
+external
+context:
+{
+ ,
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}
+Authors
+may
+also
+import
+multiple
+contexts
+or
+</del>
+<code>
+<ins class="diff-chg">@language
+</ins></code><ins class="diff-chg">
+keyword
+to
+associate
+</ins>
+a
+<del class="diff-old">combination
+of
+external
+and
+local
+contexts
+by
+specifying
+</del>
+<ins class="diff-chg">type
+with
+</ins>
+a
+<del class="diff-old">list
+of
+contexts:
+</del>
+<ins class="diff-chg">particular
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-chg">
+term
+</ins></a><ins class="diff-chg">
+in
+the
+</ins><code><ins class="diff-chg">
+@context
+</ins></code>:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 26</span>: Expanded term definition with language coercion</div><pre class="example">{
+ <span class="diff">"@context":
+<del class="diff-old"> [
+ "http://json-ld.org/contexts/person.jsonld",
+ {
+ "foaf": "http://xmlns.com/foaf/0.1/"
+ },
+ "http://json-ld.org/contexts/event.jsonld"
+ ],
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "foaf:depiction": "http://twitter.com/account/profile_image/manusporny",
+ "celebrates":
+</del>
+ {
+<del class="diff-old"> "@type": "Event",
+ "description": "International Talk Like a Pirate Day",
+ "date": "R/2011-09-19"
+ }
+</del>
+<ins class="diff-chg"> "title":
+ {
+ "@id": "http://purl.org/dc/terms/title",
+ "@language": "en"
+ }
+ },</span>
+...
+ "title": "JSON-LD Syntax",
+...
+</ins>
+}
+</pre>
+</div>
+<p>
+<del class="diff-old">Each
+context
+in
+a
+list
+will
+be
+evaluated
+in-order.
+Duplicate
+mappings
+among
+the
+context
+s
+must
+be
+overwritten
+on
+a
+last-defined-overrides
+basis.
+</del>
+The
+<del class="diff-old">context
+list
+must
+</del>
+<em>
+<ins class="diff-chg">modified
+</ins>
+</em>
+<del class="diff-old">contain
+either
+de-referenceable
+IRI
+s
+or
+JSON
+object
+s
+that
+conform
+</del>
+<ins class="diff-chg">key's
+value
+above
+is
+automatically
+language
+coerced
+</ins>
+to
+<ins class="diff-new">a
+English
+value
+because
+of
+</ins>
+the
+<del class="diff-old">context
+syntax
+as
+described
+</del>
+<ins class="diff-chg">information
+specified
+</ins>
+in
+<del class="diff-old">this
+document.
+</del>
+<ins class="diff-chg">the
+</ins><code><ins class="diff-chg">
+@context
+</ins></code>.
+</p>
+<p>
+<del class="diff-old">An
+author
+may
+nest
+contexts
+within
+subject
+definitions
+,
+with
+</del>
+<ins class="diff-chg">The
+second
+example
+uses
+</ins>
+the
+<del class="diff-old">more
+deeply
+nested
+contexts
+overriding
+</del>
+<ins class="diff-chg">expanded
+form
+of
+setting
+</ins>
+the
+<del class="diff-old">values
+</del>
+<ins class="diff-chg">language
+information
+</ins>
+in
+<del class="diff-old">previously
+defined
+contexts:
+</del>
+<ins class="diff-chg">the
+body
+of
+a
+JSON-LD
+document:
+</ins>
+</p>
+<del class="diff-old">{
+ "@context":
+ {
+ "name": "http://example.com/person#name",
+ "details": "http://example.com/person#details"
+ },
+ "": "Markus Lanthaler",
+ ...
+ "details":
+</del>
+<div class="example"><div class="example-title"><span>Example 27</span>: Expanded value with language</div><pre class="example">{
+<ins class="diff-chg"> "@context":
+</ins>
+ {
+<del class="diff-old"> "@context": {
+ "name": "http://example.com/organization#name"
+ },
+ "": "Graz University of Technology"
+ }
+</del>
+<ins class="diff-chg"> "title":
+ {
+ "@id": "http://purl.org/dc/terms/title"
+ }
+ },
+...
+ "title":
+</ins> <span class="diff">{<ins class="diff-chg">
+ "@value": "JSON-LD Syntax",
+ "@language": "en"
+ }</span>
+...
+</ins>
+}
+</pre>
+</div>
+<p>
+<del class="diff-old">In
+the
+example
+above,
+</del>
+<ins class="diff-chg">Both
+examples
+above
+would
+generate
+</ins>
+the
+<ins class="diff-new">value
+</ins>
+<code>
+<del class="diff-old">name
+</del>
+<ins class="diff-chg">JSON-LD
+Syntax
+</ins>
+</code>
+<del class="diff-old">prefix
+is
+overridden
+in
+</del>
+<ins class="diff-chg">tagged
+with
+</ins>
+the
+<del class="diff-old">more
+deeply
+nested
+</del>
+<ins class="diff-chg">language
+</ins>
+<code>
+<del class="diff-old">details
+</del>
+<ins class="diff-chg">en
+</ins>
+</code>
+<del class="diff-old">structure.
+Note
+that
+this
+is
+rarely
+a
+good
+authoring
+practice
+and
+</del>
+<ins class="diff-chg">;
+which
+</ins>
+is
+<del class="diff-old">typically
+used
+when
+</del>
+the
+<del class="diff-old">JSON
+object
+has
+legacy
+applications
+using
+the
+structure
+of
+</del>
+<ins class="diff-chg">[
+</ins><cite><a class="bibref" href="#bib-BCP47"><ins class="diff-chg">
+BCP47
+</ins></a></cite><ins class="diff-chg">
+]
+code
+for
+</ins>
+the
+<del class="diff-old">object.
+</del>
+<ins class="diff-chg">English
+language.
+</ins>
+</p>
+<p>
+<del class="diff-old">External
+JSON-LD
+context
+documents
+may
+contain
+extra
+information
+located
+outside
+of
+the
+@context
+key,
+</del>
+<ins class="diff-chg">Systems
+that
+support
+multiple
+languages
+often
+need
+to
+express
+data
+values
+in
+each
+language.
+Typically,
+</ins>
+such
+<del class="diff-old">as
+documentation
+about
+</del>
+<ins class="diff-chg">systems
+also
+try
+to
+ensure
+that
+developers
+have
+a
+programatically
+easy
+way
+to
+navigate
+</ins>
+the
+<del class="diff-old">prefixes
+</del>
+<ins class="diff-chg">datastructures
+for
+the
+language-specific
+data.
+In
+this
+case,
+</ins><a class="tref internalDFN" title="language_map" href="#dfn-language_map"><ins class="diff-chg">
+language
+map
+</ins>
+</a>
+<del class="diff-old">declared
+</del>
+<ins class="diff-chg">s
+may
+be
+utilized.
+</ins></p><div class="example"><div class="example-title"><span>Example 28</span>: Language map expressing a property in three languages</div><pre class="example">{<ins class="diff-chg">
+ "@context":
+ {
+ "title":
+ {
+ "@id": "http://purl.org/dc/terms/title"
+ "@container": "@language"
+ }
+ },
+...
+ "title":
+</ins> <span class="diff">{<ins class="diff-chg">
+ "en": "JSON-LD Syntax",
+ "ru": "JSON-LD Синтаксис",
+ "ja": "JSON-LDの構文"
+ }</span>
+...
+}
+</ins></pre></div><p><ins class="diff-chg">
+In
+the
+example
+above,
+the
+title
+is
+expressed
+</ins>
+in
+<ins class="diff-new">three
+languages;
+English,
+Russian,
+and
+Japanese.
+To
+access
+</ins>
+the
+<del class="diff-old">document.
+When
+importing
+</del>
+<ins class="diff-chg">data
+above
+in
+</ins>
+a
+<del class="diff-old">@context
+value
+from
+an
+external
+JSON-LD
+context
+document,
+any
+extra
+information
+contained
+outside
+of
+</del>
+<ins class="diff-chg">programming
+language
+supporting
+dot-notation
+accessors
+for
+object
+properties,
+a
+developer
+may
+use
+</ins>
+the
+<code>
+<del class="diff-old">@context
+</del>
+<ins class="diff-chg">property.language
+</ins>
+</code>
+<del class="diff-old">value
+must
+be
+discarded.
+It
+is
+also
+recommended
+that
+a
+human-readable
+document
+is
+served
+as
+well
+</del>
+<ins class="diff-chg">pattern.
+For
+example,
+</ins>
+to
+<del class="diff-old">explain
+</del>
+<ins class="diff-chg">access
+</ins>
+the
+<del class="diff-old">correct
+usage
+</del>
+<ins class="diff-chg">Japanese
+version
+</ins>
+of
+the
+<del class="diff-old">JSON-LD
+context
+document.
+</del>
+<ins class="diff-chg">title,
+a
+developer
+would
+use
+the
+following
+code
+snippet:
+</ins><code><ins class="diff-chg">
+obj.title.ja
+</ins></code>.
+</p>
+</section>
+<section id="referencing-contexts-from-json-documents">
+<h3>
+<span class="secno">
+4.4
+</span>
+Referencing
+Contexts
+from
+JSON
+Documents
+</h3>
+<p>
+Ordinary
+JSON
+documents
+can
+be
+transformed
+into
+JSON-LD
+documents
+by
+referencing
+to
+an
+external
+JSON-LD
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+in
+an
+HTTP
+Link
+Header.
+Doing
+this
+allows
+JSON
+to
+be
+unambiguously
+machine-readable
+without
+requiring
+developers
+to
+drastically
+change
+their
+workflow
+and
+provides
+an
+upgrade
+path
+for
+existing
+infrastructure
+without
+breaking
+existing
+clients
+that
+rely
+on
+the
+<code>
+application/json
+</code>
+media
+type.
+</p>
+<p>
+In
+order
+to
+use
+an
+external
+context
+with
+an
+ordinary
+JSON
+document,
+an
+author
+<em class="rfc2119" title="must">
+must
+</em>
+specify
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+to
+a
+valid
+JSON-LD
+document
+in
+an
+HTTP
+Link
+Header
+[
+<cite>
+<a class="bibref" href="#bib-RFC5988">
+RFC5988
+</a>
+</cite>
+]
+using
+the
+<code>
+describedby
+</code>
+link
+relation.
+The
+referenced
+document
+<em class="rfc2119" title="must">
+must
+</em>
+have
+a
+top-level
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>.
+The
+<code>
+@context
+</code>
+subtree
+within
+that
+object
+is
+added
+to
+the
+top-level
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>
+of
+the
+referencing
+document.
+If
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+is
+at
+the
+top-level
+of
+the
+referencing
+document
+and
+its
+items
+are
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definitions
+</a>,
+the
+<code>
+@context
+</code>
+subtree
+is
+added
+to
+all
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+items.
+All
+extra
+information
+located
+outside
+of
+the
+<code>
+@context
+</code>
+subtree
+in
+the
+referenced
+document
+<em class="rfc2119" title="must">
+must
+</em>
+be
+discarded.
+</p>
+<p>
+The
+following
+example
+demonstrates
+the
+use
+of
+an
+external
+context
+with
+an
+ordinary
+JSON
+document:
+</p>
+<del class="diff-old">GET /ordinary-json-document.json HTTP/1.1
+</del>
+<div class="example"><div class="example-title"><span>Example 29</span>: Specifing context through HTTP header</div><pre class="example">GET /ordinary-json-document.json HTTP/1.1
+Host: example.com
+Accept: application/ld+json,application/json,*/*;q=0.1
+====================================
+HTTP/1.0 200 OK
+...
+Content-Type: <span class="diff">application/json</span>
+<span class="diff">Link: <http://json-ld.org/contexts/person.jsonld>; rel="describedby"; type="application/ld+json"</span>
+{
+ "name": "Markus Lanthaler",
+ "homepage": "http://www.markus-lanthaler.com/",
+ "depiction": "http://twitter.com/account/profile_image/markuslanthaler"
+}
+</pre>
+</div>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+JSON-LD
+documents
+served
+with
+the
+<code>
+application/ld+json
+</code>
+media
+type
+<em class="rfc2119" title="must">
+must
+</em>
+have
+all
+context
+information,
+including
+references
+to
+external
+contexts,
+within
+the
+body
+of
+the
+document.
+</p>
+</div>
+</section>
+<section id="expanded-term-definition">
+<h3>
+<span class="secno">
+4.5
+</span>
+Expanded
+Term
+Definition
+</h3>
+<p>
+Within
+a
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+definition,
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+<em class="rfc2119" title="may">
+may
+</em>
+be
+defined
+using
+an
+expanded
+notation
+to
+allow
+for
+additional
+information
+associated
+with
+the
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+to
+be
+specified
+(see
+also
+<a href="#type-coercion" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.6
+</ins></span><span class="sec-title">
+Type
+Coercion
+</span>
+</a>
+and
+<a href="#sets-and-lists" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.9
+</ins></span><span class="sec-title">
+Sets
+and
+Lists
+</span>
+</a>
+).
+</p>
+<p>
+Instead
+of
+using
+a
+string
+representation
+of
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>,
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<em class="rfc2119" title="may">
+may
+</em>
+be
+specified
+using
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+having
+an
+<code>
+@id
+</code>
+key.
+The
+value
+of
+the
+<code>
+@id
+</code>
+key
+<em class="rfc2119" title="must">
+must
+</em>
+be
+either
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>,
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+or
+an
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+Such
+an
+object
+is
+called
+a
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">
+<ins class="diff-chg">node
+</ins>
+reference
+</a>.
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 30</span>: Expanded term definition</div><pre class="example">{
+ "@context":
+ {
+ "foaf": <span class="diff">{ "@id": "http://xmlns.com/foaf/0.1/" }</span>,
+ "name": <span class="diff">{ "@id": "http://xmlns.com/foaf/0.1/name" }</span>,
+ "homepage": <span class="diff">{ "@id": "foaf:homepage" }</span>,
+ "depiction": <span class="diff">{ "@id": "foaf:depiction" }</span>
+ },
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}
+</pre>
+</div>
+<p>
+This
+allows
+additional
+information
+to
+be
+associated
+with
+the
+term.
+This
+<em class="rfc2119" title="may">
+may
+</em>
+be
+used
+for
+<a href="#type-coercion" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.6
+</ins></span><span class="sec-title">
+Type
+Coercion
+</span>
+</a>,
+<a href="#sets-and-lists" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.9
+</ins></span><span class="sec-title">
+Sets
+and
+Lists
+</span>
+</a>
+),
+or
+to
+associate
+language
+information
+with
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+as
+shown
+in
+the
+following
+example:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 31</span>: Expanded term definition with language</div><pre class="example">{
+ "@context": {
+ ...
+ "ex": "http://example.com/",
+ "@language": "ja",
+ "name": { "@id": "ex:name", <span class="diff">"@language": null</span> },
+ "occupation": { "@id": "ex:occupation" },
+ "occupation_en": { "@id": "ex:occupation", <span class="diff">"@language": "en"</span> },
+ "occupation_cs": { "@id": "ex:occupation", <span class="diff">"@language": "cs"</span> }
+ },
+ <span class="diff">"name": "Yagyū Muneyoshi",
+ "occupation": "忍者",
+ "occupation_en": "Ninja",
+ "occupation_cs": "Nindža",</span>
+ ...
+}
+</pre>
+</div>
+<p>
+The
+example
+above
+would
+associate
+<em>
+忍者
+</em>
+with
+the
+specified
+default
+language
+code
+<code>
+ja
+</code>,
+<em>
+Ninja
+</em>
+with
+the
+language
+code
+<code>
+en
+</code>,
+and
+<em>
+Nindža
+</em>
+with
+the
+language
+code
+<code>
+cs
+</code>.
+The
+value
+of
+<code>
+name
+</code>,
+<em>
+Yagyū
+Muneyoshi
+</em>
+wouldn't
+be
+associated
+with
+any
+language
+code
+since
+<code>
+@language
+</code>
+was
+reset
+to
+<a class="tref internalDFN" title="null" href="#dfn-null">
+null
+</a>
+in
+the
+expanded
+term
+definition.
+</p>
+<p>
+Expanded
+terms
+<em class="rfc2119" title="may">
+may
+</em>
+also
+be
+defined
+using
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+IRIs
+</a>
+or
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+IRIs
+</a>
+as
+keys.
+If
+the
+definition
+does
+not
+include
+an
+<code>
+@id
+</code>
+key,
+the
+expanded
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+is
+determined
+by
+performing
+expansion
+of
+the
+key
+within
+the
+current
+active
+context.
+This
+mechanism
+is
+mainly
+used
+to
+associate
+type
+or
+language
+information
+with
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+or
+an
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+</p>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+While
+it
+is
+possible
+to
+define
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+or
+an
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+to
+expand
+to
+some
+other
+unrelated
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+(for
+example,
+<code>
+foaf:name
+</code>
+expanding
+to
+<code>
+http://example.org/unrelated#species
+</code>
+),
+such
+usage
+is
+strongly
+discouraged.
+</p>
+</div>
+</section>
+<section id="type-coercion">
+<h3>
+<span class="secno">
+4.6
+</span>
+Type
+Coercion
+</h3>
+<p>
+JSON-LD
+supports
+the
+coercion
+of
+values
+to
+particular
+data
+types.
+Type
+<dfn title="coercion" id="dfn-coercion">
+coercion
+</dfn>
+allows
+someone
+deploying
+JSON-LD
+to
+coerce
+the
+incoming
+or
+outgoing
+values
+to
+the
+proper
+data
+type
+based
+on
+a
+mapping
+of
+data
+type
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+s
+to
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s.
+Using
+type
+coercion,
+value
+representation
+is
+preserved
+without
+requiring
+the
+data
+type
+to
+be
+specified
+with
+each
+piece
+of
+data.
+</p>
+<p>
+Type
+coercion
+is
+specified
+within
+an
+<del class="diff-old">expanded
+term
+definition
+</del>
+<a href="#expanded-term-definition" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.5
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Expanded
+Term
+Definition
+</ins></span>
+</a>
+using
+the
+<code>
+@type
+</code>
+key.
+The
+value
+of
+this
+key
+represents
+a
+type
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+and
+<em class="rfc2119" title="must">
+must
+</em>
+take
+the
+form
+of
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>,
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+or
+the
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>
+<code>
+@id
+</code>.
+Specifying
+<code>
+@id
+</code>
+indicates
+that
+within
+the
+body
+of
+a
+JSON-LD
+document,
+a
+string
+value
+of
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+coerced
+to
+<code>
+@id
+</code>
+is
+to
+be
+interpreted
+as
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+</p>
+<p>
+<a class="tref internalDFN" title="term" href="#dfn-term">
+Terms
+</a>
+or
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+IRIs
+</a>
+used
+as
+the
+value
+of
+a
+<code>
+@type
+</code>
+key
+<em class="rfc2119" title="may">
+may
+</em>
+be
+defined
+within
+the
+same
+context.
+This
+means
+that
+one
+may
+specify
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+like
+<code>
+xsd
+</code>
+and
+then
+use
+<code>
+xsd:integer
+</code>
+within
+the
+same
+context
+definition
+-
+the
+JSON-LD
+processor
+will
+be
+able
+to
+determine
+the
+proper
+expansion
+for
+<code>
+xsd:integer
+</code>.
+</p>
+<p>
+The
+example
+below
+demonstrates
+how
+a
+JSON-LD
+author
+can
+coerce
+values
+to
+<a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">
+typed
+value
+</a>
+s,
+IRIs
+and
+lists.
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 32</span>: Expanded term definition with types</div><pre class="example">{
+ "@context":
+ {
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "age":
+ <span class="diff">{
+ "@id": "http://xmlns.com/foaf/0.1/age",
+ "@type": "xsd:integer"
+ }</span>,
+ "homepage":
+ <span class="diff">{
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id",
+ "@container": "@list"
+ }</span>
+ },
+ "name": "John Smith",
+ "age": <span class="diff">"41"</span>,
+ "homepage":
+ <span class="diff">[
+ "http://personal.example.org/",
+ "http://work.example.com/jsmith/"
+ ]</span>
+}
+</pre>
+</div>
+<p>
+The
+example
+above
+would
+generate
+the
+following
+Turtle:
+</p>
+<del class="diff-old">@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+</del>
+<div class="example"><div class="example-title"><span>Example 33</span></div><pre class="example">@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+[ foaf:name "John Smith";
+ foaf:age "41"^^xsd:integer;
+ foaf:homepage ( <http://personal.example.org/> <http://work.example.com/jsmith/> )
+]
+.
+</pre>
+</div>
+<p>
+Terms
+may
+also
+be
+defined
+using
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+IRIs
+</a>
+or
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+IRIs
+</a>.
+This
+allows
+coercion
+rules
+to
+be
+applied
+to
+keys
+which
+are
+not
+represented
+as
+a
+simple
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>.
+For
+example:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 34</span>: Term definition with absolute IRI</div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"foaf": "http://xmlns.com/foaf/0.1/"</span>,
+ "<span class="diff">foaf:age</span>":
+ {
+ "@type": "xsd:integer"
+ },
+ "<span class="diff">foaf:homepage</span>":
+ <span class="diff">{
+ "@type": "@id"
+ }</span>
+ },
+ "foaf:name": "John Smith",
+ "foaf:age": <span class="diff">"41"</span>,
+ "foaf:homepage":
+ <span class="diff">[
+ "http://personal.example.org/",
+ "http://work.example.com/jsmith/"
+ ]</span>
+}
+</pre>
+</div>
+<p>
+In
+this
+case
+the
+<code>
+@id
+</code>
+definition
+is
+optional,
+but
+if
+it
+does
+exist,
+the
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+or
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+is
+treated
+as
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+(not
+a
+<code>
+prefix:suffix
+</code>
+construct)
+so
+that
+the
+actual
+definition
+of
+a
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">
+prefix
+</a>
+becomes
+unnecessary.
+</p>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+Keys
+in
+the
+context
+are
+treated
+as
+<a class="tref internalDFN" title="term" href="#dfn-term">
+terms
+</a>
+for
+the
+purpose
+of
+expansion
+and
+value
+coercion.
+At
+times,
+this
+may
+result
+in
+multiple
+representations
+for
+the
+same
+expanded
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>.
+For
+example,
+one
+could
+specify
+that
+<code>
+dog
+</code>
+and
+<code>
+cat
+</code>
+both
+expanded
+to
+<code>
+http://example.com/vocab#animal
+</code>.
+Doing
+this
+could
+be
+useful
+for
+establishing
+different
+type
+coercion
+or
+language
+specification
+rules.
+It
+also
+allows
+a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+(or
+even
+an
+absolute
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+)
+to
+be
+defined
+as
+something
+else
+entirely.
+For
+example,
+one
+could
+specify
+that
+the
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+<code>
+http://example.org/zoo
+</code>
+should
+expand
+to
+<code>
+http://example.org/river
+</code>,
+but
+this
+usage
+is
+discouraged
+because
+it
+would
+lead
+to
+a
+great
+deal
+of
+confusion
+among
+developers
+attempting
+to
+understand
+the
+JSON-LD
+document.
+</p>
+</div>
+<p>
+Type
+coercion
+is
+performed
+using
+the
+unexpanded
+value
+of
+the
+key,
+which
+<em class="rfc2119" title="must">
+must
+</em>
+have
+an
+exact
+match
+for
+an
+entry
+in
+the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+active
+context
+</a>.
+</p>
+</section>
+<section id="property-generators">
+<h3>
+<span class="secno">
+4.7
+</span>
+<ins class="diff-new">Property
+Generators
+</ins></h3><p><ins class="diff-new">
+At
+times,
+an
+author
+may
+find
+that
+they
+need
+to
+express
+the
+same
+value
+for
+multiple
+properties.
+The
+simplest
+approach
+to
+accomplish
+this
+goal
+would
+be
+to
+do
+the
+following:
+</ins></p><div class="example"><div class="example-title"><span>Example 35</span>: Verbose expression of multiple properties with the same value</div><pre class="example">{<ins class="diff-new">
+ "@context":
+ {
+</ins> <span class="diff">"title1": "http://purl.org/dc/terms/title"</span>, <span class="diff">"title2": "http://schema.org/name"</span>, <span class="diff">"title3": "http://www.w3.org/2000/01/rdf-schema#label"</span><ins class="diff-new">
+ },
+ "@id": "http://example.com/book",
+</ins> <span class="diff">"title1": "The Count of Monte Cristo"</span>, <span class="diff">"title2": "The Count of Monte Cristo"</span>, <span class="diff">"title3": "The Count of Monte Cristo"</span><ins class="diff-new">
+}
+</ins></pre></div><p><ins class="diff-new">
+Unfortunately,
+the
+approach
+above
+produces
+redundant
+data
+and
+would
+become
+a
+publishing
+burden
+for
+large
+data
+sets.
+In
+these
+situations,
+the
+author
+may
+use
+a
+</ins><dfn title="property_generator" id="dfn-property_generator"><ins class="diff-new">
+property
+generator
+</ins></dfn><ins class="diff-new">
+to
+express
+a
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-new">
+term
+</ins></a><ins class="diff-new">
+once,
+but
+have
+the
+JSON-LD
+processor
+expand
+the
+single
+statement
+into
+multiple
+statements.
+This
+method
+can
+be
+accomplished
+by
+using
+the
+following
+markup
+pattern:
+</ins></p><div class="example"><div class="example-title"><span>Example 36</span>: Generating multiple properties using a single term</div><pre class="example">{<ins class="diff-new">
+ "@context":
+ {
+</ins> <span class="diff">"title": { "@id": ["http://purl.org/dc/terms/title",<ins class="diff-new">
+ "http://schema.org/name",
+ "http://www.w3.org/2000/01/rdf-schema#label"] }</span>,
+ },
+ "@id": "http://example.com/book",
+</ins> <span class="diff">"title": "The Count of Monte Cristo"</span><ins class="diff-new">
+}
+</ins></pre></div><p><ins class="diff-new">
+While
+the
+term
+above
+is
+only
+used
+once
+outside
+of
+the
+</ins><code><ins class="diff-new">
+@context
+</ins></code>,<ins class="diff-new">
+a
+JSON-LD
+processor
+will
+internally
+transform
+the
+document
+above
+into
+the
+following
+set
+of
+statements:
+</ins></p><div class="example"><div class="example-title"><span>Example 37</span></div><pre class="example"><http://example.com/book><ins class="diff-new">
+ <http://purl.org/dc/terms/title>
+ "The Count of Monte Cristo" .
+<http://example.com/book>
+ <http://schema.org/name>
+ "The Count of Monte Cristo" .
+<http://example.com/book>
+ <http://www.w3.org/2000/01/rdf-schema#label>
+"The
+Count
+of
+Monte
+Cristo"
+.
+</ins></pre></div></section><section id="iri-expansion-within-a-context"><h3><span class="secno"><ins class="diff-new">
+4.8
+</ins></span>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+Expansion
+Within
+a
+Context
+</h3>
+<p>
+In
+general,
+normal
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+expansion
+rules
+apply
+anywhere
+an
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+is
+expected
+(see
+<a href="#iris" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">3.5
+</ins></span><span class="sec-title">
+IRIs
+</span>
+</a>
+).
+Within
+a
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+definition,
+this
+can
+mean
+that
+terms
+defined
+within
+the
+context
+<em class="rfc2119" title="may">
+may
+</em>
+also
+be
+used
+within
+that
+context
+as
+long
+as
+there
+are
+no
+circular
+dependencies.
+For
+example,
+it
+is
+common
+to
+use
+the
+<code>
+xsd
+</code>
+namespace
+when
+defining
+<a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">
+typed
+value
+</a>
+s:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 38</span>: IRI expansion within context</div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"xsd": "http://www.w3.org/2001/XMLSchema#"</span>,
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "age":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/age",
+ "@type": <span class="diff">"xsd:integer"</span>
+ },
+ "homepage":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ },
+ ...
+}
+</pre>
+</div>
+<p>
+In
+this
+example,
+the
+<code>
+xsd
+</code>
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+is
+defined
+and
+used
+as
+a
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">
+prefix
+</a>
+for
+the
+<code>
+@type
+</code>
+coercion
+of
+the
+<code>
+age
+</code>
+property.
+</p>
+<p>
+<a class="tref internalDFN" title="term" href="#dfn-term">
+Term
+</a>
+s
+<em class="rfc2119" title="may">
+may
+</em>
+also
+be
+used
+when
+defining
+the
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+of
+another
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 39</span></div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"foaf": "http://xmlns.com/foaf/0.1/"</span>,
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "name": <span class="diff">"foaf:name"</span>,
+ "age":
+ {
+ "@id": <span class="diff">"foaf:age"</span>,
+ "@type": "xsd:integer"
+ },
+ "homepage":
+ {
+ "@id": <span class="diff">"foaf:homepage"</span>,
+ "@type": "@id"
+ }
+ },
+ ...
+}
+</pre>
+</div>
+<p>
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+Compact
+IRIs
+</a>
+and
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+IRIs
+</a>
+<em class="rfc2119" title="may">
+may
+</em>
+be
+used
+on
+the
+left-hand
+side
+of
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+definition.
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 40</span></div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"foaf": "http://xmlns.com/foaf/0.1/"</span>,
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "name": "foaf:name",
+ "<span class="diff">foaf:age</span>":
+ {
+ "@type": "xsd:integer"
+ },
+ "<span class="diff">foaf:homepage</span>":
+ <span class="diff">{
+ "@type": "@id"
+ }</span>
+ },
+ ...
+}
+</pre>
+</div>
+<p>
+In
+this
+example,
+the
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+form
+is
+used
+in
+two
+different
+ways.
+In
+the
+first
+approach,
+<code>
+foaf:age
+</code>
+declares
+both
+the
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+for
+the
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+(using
+short-form)
+as
+well
+as
+the
+<code>
+@type
+</code>
+associated
+with
+the
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>.
+In
+the
+second
+approach,
+only
+the
+<code>
+@type
+</code>
+associated
+with
+the
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+is
+specified.
+The
+JSON-LD
+processor
+will
+derive
+the
+full
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+for
+<code>
+foaf:homepage
+</code>
+by
+looking
+up
+the
+<code>
+foaf
+</code>
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">
+prefix
+</a>
+in
+the
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>.
+</p>
+<p>
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+Absolute
+IRIs
+</a>
+<em class="rfc2119" title="may">
+may
+</em>
+also
+be
+used
+in
+the
+key
+position
+in
+a
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 41</span></div><pre class="example">{
+ "@context":
+ {
+ "foaf": "http://xmlns.com/foaf/0.1/",
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "name": "foaf:name",
+ "foaf:age":
+ {
+ "@id": "foaf:age",
+ "@type": "xsd:integer"
+ },
+ "<span class="diff">http://xmlns.com/foaf/0.1/homepage</span>":
+ {
+ "@type": "@id"
+ }
+ },
+ ...
+}
+</pre>
+</div>
+<p>
+In
+order
+for
+the
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+to
+match
+above,
+the
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+absolute
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+<em class="rfc2119" title="must">
+must
+</em>
+also
+be
+used
+in
+the
+JSON-LD
+document.
+Also
+note
+that
+<code>
+foaf:homepage
+</code>
+will
+not
+use
+the
+<code>
+{
+"@type":
+"@id"
+}
+</code>
+declaration
+because
+<code>
+foaf:homepage
+</code>
+is
+not
+the
+same
+as
+<code>
+http://xmlns.com/foaf/0.1/homepage
+</code>.
+That
+is,
+a
+JSON-LD
+processor
+will
+use
+direct
+string
+comparison
+when
+looking
+up
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>
+s
+in
+a
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+before
+it
+applies
+the
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">
+prefix
+</a>
+lookup
+mechanism.
+</p>
+<p>
+The
+only
+exception
+for
+using
+terms
+in
+the
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+is
+that
+they
+<em class="rfc2119" title="must not">
+must
+not
+</em>
+be
+used
+in
+a
+circular
+manner.
+That
+is,
+a
+definition
+of
+<em>
+term-1
+</em>
+<em class="rfc2119" title="must not">
+must
+not
+</em>
+depend
+on
+the
+definition
+of
+<em>
+term-2
+</em>
+if
+<em>
+term-2
+</em>
+also
+depends
+on
+<em>
+term-1
+</em>.
+For
+example,
+the
+following
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+definition
+is
+illegal:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 42</span></div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"term1": "term2:foo",
+ "term2": "term1:bar"</span>
+ },
+ ...
+}
+</pre>
+</div>
+</section>
+<section id="sets-and-lists">
+<h3>
+<span class="secno">
+<del class="diff-old">4.8
+</del>
+<ins class="diff-chg">4.9
+</ins>
+</span>
+Sets
+and
+Lists
+</h3>
+<p>
+A
+JSON-LD
+author
+can
+express
+multiple
+values
+in
+a
+compact
+way
+by
+using
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+s.
+Since
+graphs
+do
+not
+describe
+ordering
+for
+links
+between
+nodes,
+arrays
+in
+JSON-LD
+do
+not
+provide
+an
+ordering
+of
+the
+<del class="diff-old">listed
+objects
+</del>
+<ins class="diff-chg">contained
+elements
+</ins>
+by
+default.
+This
+is
+exactly
+the
+opposite
+from
+regular
+JSON
+arrays,
+which
+are
+ordered
+by
+default.
+For
+example,
+consider
+the
+following
+simple
+document:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 43</span></div><pre class="example">{
+...
+ "@id": "http://example.org/people#joebob",
+ "nick": <span class="diff">[ "joe", "bob", "jaybee" ]</span>,
+...
+}
+</pre>
+</div>
+<p>
+The
+markup
+shown
+above
+would
+result
+in
+three
+triples
+being
+generated,
+each
+relating
+the
+<del class="diff-old">subject
+</del>
+<ins class="diff-chg">node
+</ins>
+to
+an
+individual
+<del class="diff-old">object
+,
+</del>
+<ins class="diff-chg">value,
+</ins>
+with
+no
+inherent
+order:
+</p>
+<del class="diff-old"><http://example.org/people#joebob>
+ <http://xmlns.com/foaf/0.1/nick>
+ "joe" .
+<http://example.org/people#joebob>
+ <http://xmlns.com/foaf/0.1/nick>
+ "bob" .
+</del>
+<div class="issue">
+<div class="issue-title">
+<span>
+<ins class="diff-chg">Issue
+</ins></span></div><p class=""><ins class="diff-chg">
+Including
+an
+illustration
+might
+be
+better.
+</ins></p></div><div class="example"><div class="example-title"><span>Example 44</span></div><pre class="example"><http://example.org/people#joebob> <http://xmlns.com/foaf/0.1/nick> "joe" .<ins class="diff-chg">
+<http://example.org/people#joebob> <http://xmlns.com/foaf/0.1/nick> "bob" .
+</ins>
+<http://example.org/people#joebob>
+<del class="diff-old"> <http://xmlns.com/foaf/0.1/nick>
+</del>
+<ins class="diff-chg"><http://xmlns.com/foaf/0.1/nick>
+</ins>
+"jaybee"
+.
+</pre>
+</div>
+<p>
+Multiple
+values
+may
+also
+be
+expressed
+using
+the
+expanded
+form:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 45</span></div><pre class="example">{
+ "@id": "http://example.org/articles/8",
+ "dc:title": <span class="diff">
+ [
+ {
+ "@value": "Das Kapital",
+ "@language": "de"
+ },
+ {
+ "@value": "Capital",
+ "@language": "en"
+ }
+ ]</span>
+}
+</pre>
+</div>
+<p>
+The
+markup
+shown
+above
+would
+generate
+the
+following
+triples,
+again
+with
+no
+inherent
+order:
+</p>
+<del class="diff-old"><http://example.org/articles/8>
+ <http://purl.org/dc/terms/title>
+ "Das Kapital"@de .
+</del>
+<div class="issue">
+<div class="issue-title">
+<span>
+<ins class="diff-chg">Issue
+</ins></span></div><p class=""><ins class="diff-chg">
+Including
+an
+illustration
+might
+be
+better.
+</ins></p></div><div class="example"><div class="example-title"><span>Example 46</span></div><pre class="example"><http://example.org/articles/8> <http://purl.org/dc/terms/title> "Das Kapital"@de .
+<http://example.org/articles/8>
+<del class="diff-old"> <http://purl.org/dc/terms/title>
+</del>
+<ins class="diff-chg"><http://purl.org/dc/terms/title>
+</ins>
+"Capital"@en
+.
+</pre>
+</div>
+<p>
+As
+the
+notion
+of
+ordered
+collections
+is
+rather
+important
+in
+data
+modeling,
+it
+is
+useful
+to
+have
+specific
+language
+support.
+In
+JSON-LD,
+a
+list
+may
+be
+represented
+using
+the
+<code>
+@list
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>
+as
+follows:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 47</span></div><pre class="example">{
+...
+ "@id": "http://example.org/people#joebob",
+ "foaf:nick":
+ <span class="diff">{
+ "@list": [ "joe", "bob", "jaybee" ]
+ }</span>,
+...
+}
+</pre>
+</div>
+<p>
+This
+describes
+the
+use
+of
+this
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+as
+being
+ordered,
+and
+order
+is
+maintained
+when
+processing
+a
+document.
+If
+every
+use
+of
+a
+given
+multi-valued
+property
+is
+a
+list,
+this
+may
+be
+abbreviated
+by
+setting
+<code>
+@container
+</code>
+to
+<code>
+@list
+</code>
+in
+the
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 48</span></div><pre class="example">{
+ <span class="diff">"@context":
+ {
+ ...
+ "nick":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/nick",
+ "@container": "@list"
+ }
+ }</span>,
+...
+ "@id": "http://example.org/people#joebob",
+ "nick": <span class="diff">[ "joe", "bob", "jaybee" ]</span>,
+...
+}
+</pre>
+</div>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+List
+of
+lists
+are
+not
+allowed
+in
+this
+version
+of
+JSON-LD.
+If
+a
+list
+of
+lists
+is
+detected,
+a
+JSON-LD
+processor
+will
+throw
+an
+exception.
+This
+decision
+was
+made
+due
+to
+the
+extreme
+amount
+of
+added
+complexity
+when
+processing
+lists
+of
+lists.
+</p>
+</div>
+<p>
+Similarly
+to
+<code>
+@list
+</code>,
+there
+exists
+the
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>
+<code>
+@set
+</code>
+to
+describe
+unordered
+sets.
+While
+its
+use
+in
+the
+body
+of
+a
+JSON-LD
+document
+represents
+just
+syntactic
+sugar
+that
+<em class="rfc2119" title="must">
+must
+</em>
+be
+optimized
+away
+when
+processing
+the
+document,
+it
+is
+very
+helpful
+when
+used
+within
+the
+context
+of
+a
+document.
+Values
+of
+terms
+associated
+with
+a
+<code>
+@set
+</code>
+or
+<code>
+@list
+</code>
+container
+are
+always
+represented
+in
+the
+form
+of
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+-
+even
+if
+there
+is
+just
+a
+single
+value
+that
+would
+otherwise
+be
+optimized
+to
+a
+non-array
+form
+in
+a
+<del class="diff-old">compacted
+document
+</del>
+<a href="#compact-document-form" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.15
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Compact
+Document
+Form
+</ins></span>
+</a>.
+This
+makes
+post-processing
+of
+the
+data
+easier
+as
+the
+data
+is
+always
+in
+array
+form,
+even
+if
+the
+array
+only
+contains
+a
+single
+value.
+</p>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+The
+use
+of
+<code>
+@container
+</code>
+in
+the
+body
+of
+a
+JSON-LD
+document,
+i.e.,
+outside
+<code>
+@context
+</code>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+ignored
+by
+JSON-LD
+processors.
+</p>
+</div>
+</section>
+<section id="embedding">
+<h3>
+<span class="secno">
+<del class="diff-old">4.9
+</del>
+<ins class="diff-chg">4.10
+</ins>
+</span>
+Embedding
+</h3>
+<p>
+<del class="diff-old">Object
+</del>
+<dfn title="embedding" id="dfn-embedding">
+<del class="diff-old">embedding
+</del>
+<ins class="diff-chg">Embedding
+</ins>
+</dfn>
+is
+a
+JSON-LD
+feature
+that
+allows
+an
+author
+to
+use
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definitions
+</a>
+as
+<a class="tref internalDFN" title="property" href="#dfn-property">
+property
+</a>
+values.
+This
+is
+a
+commonly
+used
+mechanism
+for
+creating
+a
+parent-child
+relationship
+between
+two
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node" href="#dfn-node">
+<ins class="diff-chg">node
+</ins>
+</a>
+s.
+</p>
+<p>
+The
+example
+shows
+two
+<del class="diff-old">subjects
+</del>
+<ins class="diff-chg">nodes
+</ins>
+related
+by
+a
+property
+from
+the
+first
+<del class="diff-old">subject:
+</del>
+<ins class="diff-chg">node:
+</ins>
+</p>
+<del class="diff-old"> {
+</del>
+ <div class="example"><div class="example-title"><span>Example 49</span></div><pre class="example">{
+...
+ "name": "Manu Sporny",
+ "<span class="diff">knows</span>":
+ {
+ "<span class="diff">@type</span>": "<span class="diff">Person</span>",
+ "<span class="diff">name</span>": "<span class="diff">Gregg Kellogg</span>",
+ }
+...
+}
+</pre>
+</div>
+<p>
+A
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>,
+like
+the
+one
+used
+above,
+<em class="rfc2119" title="may">
+may
+</em>
+be
+used
+in
+any
+value
+position
+in
+the
+body
+of
+a
+JSON-LD
+document.
+</p>
+</section>
+<section id="named-graphs">
+<h3>
+<span class="secno">
+<del class="diff-old">4.10
+</del>
+<ins class="diff-chg">4.11
+</ins>
+</span>
+Named
+Graphs
+</h3>
+<p>
+The
+<code>
+@graph
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>
+is
+used
+to
+express
+a
+set
+of
+JSON-LD
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>
+s
+that
+may
+not
+be
+directly
+related
+to
+one
+another
+through
+a
+property.
+The
+mechanism
+may
+also
+be
+used
+where
+<a class="tref internalDFN" title="embedding" href="#dfn-embedding">
+embedding
+</a>
+is
+not
+desirable
+to
+the
+application.
+For
+example:
+</p>
+<del class="diff-old"> {
+</del>
+ <div class="example"><div class="example-title"><span>Example 50</span></div><pre class="example">{
+ "@context": ...,
+ "<span class="diff">@graph</span>":
+ [
+ {
+ "@id": "http://manu.sporny.org/i/public",
+ "@type": "foaf:Person",
+ "name": "Manu Sporny",
+ "knows": "http://greggkellogg.net/foaf#me"
+ },
+ {
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": "foaf:Person",
+ "name": "Gregg Kellogg",
+ "knows": "http://manu.sporny.org/i/public"
+ }
+ ]
+}
+</pre>
+</div>
+<p>
+In
+this
+case,
+embedding
+doesn't
+work
+as
+each
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>
+references
+the
+other.
+Using
+the
+<code>
+@graph
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>
+allows
+multiple
+resources
+to
+be
+defined
+within
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>,
+and
+allows
+the
+use
+of
+a
+shared
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>.
+When
+used
+in
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+that
+is
+not
+otherwise
+a
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>,
+this
+describes
+resources
+in
+the
+<em>
+default
+graph
+</em>.
+This
+is
+equivalent
+to
+using
+multiple
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definitions
+</a>
+in
+array
+and
+defining
+the
+<code>
+@context
+</code>
+within
+each
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>:
+</p>
+<del class="diff-old">
+</del>
+ <div class="example"><div class="example-title"><span>Example 51</span></div><pre class="example"><span class="diff">[</span>
+ {
+ <span class="diff">"@context": ...,</span>
+ "@id": "http://manu.sporny.org/i/public",
+ "@type": "foaf:Person",
+ "name": "Manu Sporny",
+ "knows": "http://greggkellogg.net/foaf#me"
+ },
+ {
+ <span class="diff">"@context": ...,</span>
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": "foaf:Person",
+ "name": "Gregg Kellogg",
+ "knows": "http://manu.sporny.org/i/public"
+ }
+<span class="diff">
+]
+</span>
+</pre>
+</div>
+<p>
+JSON-LD
+allows
+you
+to
+<em>
+name
+</em>
+things
+on
+the
+Web
+by
+assigning
+an
+<code>
+@id
+</code>
+to
+them,
+which
+is
+typically
+an
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+This
+notion
+extends
+to
+the
+ability
+to
+identify
+graphs
+in
+the
+same
+manner.
+A
+developer
+may
+name
+data
+expressed
+using
+the
+<code>
+@graph
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>
+by
+pairing
+it
+with
+an
+<code>
+@id
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>.
+This
+enables
+the
+developer
+to
+make
+statements
+about
+a
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>
+itself,
+rather
+than
+just
+a
+single
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node" href="#dfn-node">
+<ins class="diff-chg">node
+</ins>
+</a>.
+</p>
+<del class="diff-old"> {
+</del>
+ <div class="example"><div class="example-title"><span>Example 52</span></div><pre class="example">{
+ "@context": ...,
+ <span class="diff">"@id": "http://example.org/graphs/73",
+ "asOf": { "@value": "2012-04-09", "@type": "xsd:date" },
+ "@graph":</span>
+ [
+ {
+ "@id": "http://manu.sporny.org/i/public",
+ "@type": "foaf:Person",
+ "name": "Manu Sporny",
+ "knows": "http://greggkellogg.net/foaf#me"
+ },
+ {
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": "foaf:Person",
+ "name": "Gregg Kellogg",
+ "knows": "http://manu.sporny.org/i/public"
+ }
+ ]
+}
+</pre>
+</div>
+<p>
+The
+example
+above
+expresses
+a
+<em>
+named
+</em>
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>
+that
+is
+identified
+by
+the
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+<code>
+http://example.org/graphs/73
+</code>.
+That
+graph
+is
+composed
+of
+the
+statements
+about
+Manu
+and
+Gregg.
+Meta-data
+about
+the
+graph
+itself
+is
+also
+expressed
+via
+the
+<code>
+asOf
+</code>
+property,
+which
+specifies
+when
+the
+information
+was
+retrieved
+from
+the
+Web.
+</p>
+<div class="issue">
+<div class="issue-title">
+<span>
+Issue
+<del class="diff-old">3
+</del>
+</span>
+</div>
+<p class="">
+These
+examples
+could
+all
+have
+TriG
+definitions
+of
+their
+RDF
+results,
+but
+that
+would
+involve
+adding
+RDF
+earlier
+in
+the
+document.
+</p>
+</div>
+</section>
+<section id="identifying-unlabeled-nodes">
+<h3>
+<span class="secno">
+<del class="diff-old">4.11
+</del>
+<ins class="diff-chg">4.12
+</ins>
+</span>
+Identifying
+Unlabeled
+Nodes
+</h3>
+<p>
+At
+times,
+it
+becomes
+necessary
+to
+be
+able
+to
+express
+information
+without
+being
+able
+to
+specify
+the
+<del class="diff-old">subject.
+</del>
+<ins class="diff-chg">node.
+</ins>
+Typically,
+this
+type
+of
+node
+is
+called
+an
+<dfn title="unlabeled_node" id="dfn-unlabeled_node">
+unlabeled
+node
+</dfn>
+or
+a
+<dfn title="blank_node" id="dfn-blank_node">
+blank
+node
+</dfn>
+(see
+[
+<cite>
+<a class="bibref" href="#bib-RDF-CONCEPTS">
+RDF-CONCEPTS
+</a>
+</cite>
+]
+<cite>
+<a href="http://www.w3.org/TR/rdf11-concepts/#section-blank-nodes">
+Section
+3.4:
+Blank
+Nodes
+</a>
+</cite>
+).
+In
+JSON-LD,
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">
+unlabeled
+node
+</a>
+identifiers
+are
+automatically
+created
+if
+a
+<del class="diff-old">subject
+</del>
+<ins class="diff-chg">node
+</ins>
+is
+not
+specified
+using
+the
+<code>
+@id
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keyword
+</a>.
+However,
+authors
+may
+provide
+identifiers
+for
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">
+unlabeled
+nodes
+</a>
+by
+using
+the
+special
+<code>
+_
+</code>
+(underscore)
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">
+prefix
+</a>.
+This
+allows
+one
+to
+reference
+the
+node
+locally
+within
+the
+document,
+but
+makes
+it
+impossible
+to
+reference
+the
+node
+from
+an
+external
+document.
+The
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">
+unlabeled
+node
+</a>
+identifier
+is
+scoped
+to
+the
+document
+in
+which
+it
+is
+used.
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 53</span></div><pre class="example">{
+...
+ "@id": "<span class="diff">_:foo</span>",
+...
+}
+</pre>
+</div>
+<p>
+The
+example
+above
+would
+set
+the
+<del class="diff-old">subject
+</del>
+<ins class="diff-chg">node
+</ins>
+to
+<code>
+_:foo
+</code>,
+which
+can
+then
+be
+used
+elsewhere
+in
+the
+JSON-LD
+document
+to
+refer
+back
+to
+the
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">
+unlabeled
+node
+</a>.
+If
+a
+developer
+finds
+that
+they
+refer
+to
+the
+unlabeled
+node
+more
+than
+once,
+they
+should
+consider
+naming
+the
+node
+using
+a
+de-referenceable
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+so
+that
+it
+can
+be
+referenced
+also
+from
+other
+documents.
+</p>
+</section>
+<section id="aliasing-keywords">
+<h3>
+<span class="secno">
+<del class="diff-old">4.12
+</del>
+<ins class="diff-chg">4.13
+</ins>
+</span>
+Aliasing
+Keywords
+</h3>
+<p>
+Each
+of
+the
+JSON-LD
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keywords
+</a>,
+except
+for
+<code>
+@context
+</code>,
+<em class="rfc2119" title="may">
+may
+</em>
+be
+aliased
+to
+application-specific
+keywords.
+This
+feature
+allows
+legacy
+JSON
+content
+to
+be
+utilized
+by
+JSON-LD
+by
+re-using
+JSON
+keys
+that
+already
+exist
+in
+legacy
+documents.
+This
+feature
+also
+allows
+developers
+to
+design
+domain-specific
+implementations
+using
+only
+the
+JSON-LD
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>.
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 54</span></div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"url": "@id"</span>,
+ <span class="diff">"a": "@type"</span>,
+ "name": "http://schema.org/name"
+ },
+ "<span class="diff">url</span>": "http://example.com/about#gregg",
+ "<span class="diff">a</span>": "http://schema.org/Person",
+ "name": "Gregg Kellogg"
+}
+</pre>
+</div>
+<p>
+In
+the
+example
+above,
+the
+<code>
+@id
+</code>
+and
+<code>
+@type
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+keywords
+</a>
+have
+been
+given
+the
+aliases
+<strong>
+url
+</strong>
+and
+<strong>
+a
+</strong>,
+respectively.
+</p>
+</section>
+<section id="expanded-document-form">
+<h3>
+<span class="secno">
+<del class="diff-old">4.13
+</del>
+<ins class="diff-chg">4.14
+</ins>
+</span>
+Expanded
+Document
+Form
+</h3>
+<p>
+The
+JSON-LD
+API
+[
+<cite>
+<a class="bibref" href="#bib-JSON-LD-API">
+JSON-LD-API
+</a>
+</cite>
+]
+defines
+an
+method
+for
+<em>
+expanding
+</em>
+a
+JSON-LD
+document.
+Expansion
+is
+the
+process
+of
+taking
+a
+JSON-LD
+document
+and
+applying
+a
+<code>
+@context
+</code>
+such
+that
+all
+IRIs,
+types,
+and
+values
+are
+expanded
+so
+that
+the
+<code>
+@context
+</code>
+is
+no
+longer
+necessary.
+</p>
+<p>
+For
+example,
+assume
+the
+following
+JSON-LD
+input
+document:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 55</span></div><pre class="example">{
+ "@context":
+ {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "homepage": {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+<del class="diff-old"> "@type", "@id"
+</del>
+<ins class="diff-chg"> "@type": "@id"
+</ins>
+ }
+ },
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}
+</pre>
+</div>
+<p>
+Running
+the
+JSON-LD
+Expansion
+algorithm
+against
+the
+JSON-LD
+input
+document
+provided
+above
+would
+result
+in
+the
+following
+output:
+</p>
+<del class="diff-old">[
+</del>
+<div class="example"><div class="example-title"><span>Example 56</span></div><pre class="example">[
+ {
+ "http://xmlns.com/foaf/0.1/name": [
+ { "@value": "Manu Sporny" }
+ ],
+ "http://xmlns.com/foaf/0.1/homepage": [
+ { "@id": "http://manu.sporny.org/" }
+ ]
+ }
+]
+</pre>
+</div>
+<p>
+Expanded
+document
+form
+is
+useful
+when
+an
+application
+has
+to
+process
+input
+data
+in
+a
+deterministic
+form.
+It
+has
+been
+optimized
+to
+ensure
+that
+the
+code
+that
+developers
+have
+to
+write
+is
+minimized
+compared
+to
+the
+code
+that
+would
+have
+to
+be
+written
+to
+operate
+on
+<del class="diff-old">compact
+document
+form
+</del>
+<a href="#compact-document-form" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.15
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Compact
+Document
+Form
+</ins></span>
+</a>.
+</p>
+</section>
+<section id="compact-document-form">
+<h3>
+<span class="secno">
+<del class="diff-old">4.14
+</del>
+<ins class="diff-chg">4.15
+</ins>
+</span>
+Compact
+Document
+Form
+</h3>
+<p>
+The
+JSON-LD
+API
+[
+<cite>
+<a class="bibref" href="#bib-JSON-LD-API">
+JSON-LD-API
+</a>
+</cite>
+]
+defines
+a
+method
+for
+<em>
+compacting
+</em>
+a
+JSON-LD
+document.
+Compaction
+is
+the
+process
+of
+taking
+a
+JSON-LD
+document
+and
+applying
+a
+context
+such
+that
+the
+most
+compact
+form
+of
+the
+document
+is
+generated.
+JSON
+is
+typically
+expressed
+in
+a
+very
+compact,
+key-value
+format.
+That
+is,
+full
+IRIs
+are
+rarely
+used
+as
+keys.
+At
+times,
+a
+JSON-LD
+document
+may
+be
+received
+that
+is
+not
+in
+its
+most
+compact
+form.
+JSON-LD,
+via
+the
+API,
+provides
+a
+way
+to
+compact
+a
+JSON-LD
+document.
+</p>
+<p>
+For
+example,
+assume
+the
+following
+JSON-LD
+input
+document:
+</p>
+<del class="diff-old">[
+</del>
+<div class="example"><div class="example-title"><span>Example 57</span></div><pre class="example">[
+ {
+ "http://xmlns.com/foaf/0.1/name": [ "Manu Sporny" ],
+ "http://xmlns.com/foaf/0.1/homepage": [
+ {
+ "@id": "http://manu.sporny.org/"
+ }
+ ]
+ }
+]
+</pre>
+</div>
+<p>
+Additionally,
+assume
+the
+following
+developer-supplied
+JSON-LD
+context:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 58</span></div><pre class="example">{
+ "@context": {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "homepage": {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ }
+}
+</pre>
+</div>
+<p>
+Running
+the
+JSON-LD
+Compaction
+algorithm
+given
+the
+context
+supplied
+above
+against
+the
+JSON-LD
+input
+document
+provided
+above
+would
+result
+in
+the
+following
+output:
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 59</span></div><pre class="example">{
+ "@context": {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "homepage": {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ },
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}
+</pre>
+</div>
+<p>
+The
+compaction
+algorithm
+enables
+a
+developer
+to
+map
+any
+document
+into
+an
+application-specific
+compacted
+form
+by
+first
+<del class="diff-old">expanding
+the
+document
+</del>
+<a href="#expanded-document-form" class="sec-ref">
+<span class="secno">
+<ins class="diff-chg">4.14
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Expanded
+Document
+Form
+</ins></span>
+</a>.
+While
+the
+context
+provided
+above
+mapped
+<code>
+http://xmlns.com/foaf/0.1/name
+</code>
+to
+<strong>
+name
+</strong>,
+it
+could
+have
+also
+mapped
+it
+to
+any
+arbitrary
+string
+provided
+by
+the
+developer.
+This
+powerful
+mechanism,
+along
+with
+another
+JSON-LD
+API
+technique
+called
+<em>
+framing
+</em>,
+allows
+the
+developer
+to
+re-shape
+the
+incoming
+JSON
+data
+into
+a
+format
+that
+is
+optimized
+for
+their
+application.
+</p>
+</section>
+</section>
+<section class="appendix normative" id="json-ld-grammar">
+<h2>
+<span class="secno">
+A.
+</span>
+JSON-LD
+<del class="diff-old">Authoring
+Guidelines
+</del>
+<ins class="diff-chg">Grammar
+</ins>
+</h2>
+<del class="diff-old">Since
+the
+JSON-LD
+syntax
+</del>
+<em>
+<ins class="diff-chg">This
+section
+is
+normative
+</ins></em><p data-number="114" class="issue resolved"><ins class="diff-chg">
+This
+section
+</ins>
+is
+<ins class="diff-new">an
+attempt
+to
+formalize
+</ins>
+a
+<del class="diff-old">subset
+of
+</del>
+<ins class="diff-chg">normative
+grammar
+for
+JSON-LD.
+</ins></p><p><ins class="diff-chg">
+This
+appendix
+restates
+</ins>
+the
+<del class="diff-old">JSON
+syntax,
+it
+follows
+that
+all
+valid
+</del>
+<ins class="diff-chg">syntactic
+conventions
+described
+in
+the
+previous
+sections
+more
+formally.
+</ins></p><p><ins class="diff-chg">
+A
+JSON-LD
+processor
+</ins><em class="rfc2119" title="should"><ins class="diff-chg">
+should
+</ins></em><ins class="diff-chg">
+attempt
+to
+process
+non-conforming
+</ins>
+JSON-LD
+<del class="diff-old">documents
+are
+valid
+JSON
+</del>
+documents.
+<del class="diff-old">It
+also
+means
+that
+an
+invalid
+JSON
+</del>
+<ins class="diff-chg">Conformance
+violations
+</ins><em class="rfc2119" title="must"><ins class="diff-chg">
+must
+</ins></em><ins class="diff-chg">
+be
+reported
+through
+a
+callback
+mechanism
+defined
+in
+[
+</ins><cite><a class="bibref" href="#bib-JSON-LD-API"><ins class="diff-chg">
+JSON-LD-API
+</ins></a></cite><ins class="diff-chg">
+].
+</ins></p><p><ins class="diff-chg">
+For
+a
+JSON-LD
+</ins>
+document
+<del class="diff-old">can
+never
+</del>
+<ins class="diff-chg">to
+be
+conforming,
+it
+</ins><em class="rfc2119" title="must"><ins class="diff-chg">
+must
+</ins></em>
+be
+a
+valid
+<ins class="diff-new">JSON
+document
+as
+described
+in
+[
+</ins><cite><a class="bibref" href="#bib-RFC4627"><ins class="diff-new">
+RFC4627
+</ins></a></cite><ins class="diff-new">
+].
+</ins></p><p>
+JSON-LD
+<del class="diff-old">document.
+Furthermore,
+JSON-LD
+places
+</del>
+<ins class="diff-chg">introduces
+</ins>
+a
+number
+of
+<del class="diff-old">restrictions
+on
+</del>
+<ins class="diff-chg">keywords
+of
+</ins>
+the
+<del class="diff-old">JSON
+syntax
+in
+order
+to
+define
+</del>
+<ins class="diff-chg">form
+'
+</ins><code><ins class="diff-chg">
+@
+</ins></code><ins class="diff-chg">
+'
+followed
+by
+</ins>
+a
+set
+of
+<del class="diff-old">authoring
+guidelines
+that
+are
+used
+to
+express
+well-formed
+</del>
+<ins class="diff-chg">one
+or
+more
+lower
+case
+alphabetic
+characters
+(
+</ins><code><ins class="diff-chg">
+@[a-z]+
+</ins></code><ins class="diff-chg">
+).
+</ins>
+JSON-LD
+<del class="diff-old">documents.
+At
+times,
+even
+if
+these
+guidelines
+are
+violated,
+</del>
+<ins class="diff-chg">documents
+</ins><em class="rfc2119" title="should not"><ins class="diff-chg">
+should
+not
+</ins></em><ins class="diff-chg">
+define
+terms
+beginning
+with
+'
+</ins><code><ins class="diff-chg">
+@
+</ins></code><ins class="diff-chg">
+'.
+(See
+</ins><a href="#syntax-tokens-and-keywords" class="sec-ref"><span class="secno"><ins class="diff-chg">
+3.2
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Syntax
+Tokens
+and
+Keywords
+</ins></span></a><ins class="diff-chg">
+for
+</ins>
+a
+<ins class="diff-new">complete
+definition
+of
+</ins>
+JSON-LD
+<del class="diff-old">processor
+will
+do
+its
+best
+to
+recover
+from
+the
+mistake
+and
+will
+deterministically
+transform
+the
+author's
+markup
+into
+well-formed
+JSON-LD.
+</del>
+<ins class="diff-chg">keywords).
+</ins>
+</p>
+<div class="note">
+<div class="note-title">
+<span>
+<del class="diff-old">Issue
+4
+</del>
+<ins class="diff-chg">Note
+</ins>
+</span>
+</div>
+<p class="">
+The
+<del class="diff-old">final
+details
+of
+the
+guidelines
+are
+still
+being
+discussed
+(
+ISSUE-114
+</del>
+<ins class="diff-chg">JSON-LD
+context
+allows
+</ins><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keywords
+</ins>
+</a>
+<del class="diff-old">),
+as
+well
+as
+</del>
+<ins class="diff-chg">to
+be
+aliased
+within
+</ins>
+the
+<del class="diff-old">best
+mechanism
+</del>
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+<ins class="diff-chg">active
+context
+</ins></a>.<ins class="diff-chg">
+Whenever
+a
+</ins><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keyword
+</ins></a><ins class="diff-chg">
+is
+discussed,
+this
+is
+also
+understood
+</ins>
+to
+<del class="diff-old">express
+these
+restrictions.
+EBNF
+doesn't
+quite
+capture
+what
+these
+guidelines
+are
+attempting
+</del>
+<ins class="diff-chg">apply
+</ins>
+to
+<del class="diff-old">do
+-
+which
+is
+strongly
+express
+what
+constitutes
+a
+well-formed
+JSON-LD
+document.
+</del>
+<ins class="diff-chg">an
+alias
+for
+that
+</ins><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keyword
+</ins></a>
+For
+<ins class="diff-new">example,
+if
+</ins>
+the
+<del class="diff-old">time
+being,
+</del>
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">
+<ins class="diff-chg">active
+context
+</ins></a><ins class="diff-chg">
+defines
+the
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-chg">
+term
+</ins></a><code><ins class="diff-chg">
+id
+</ins></code><ins class="diff-chg">
+as
+an
+alias
+for
+</ins><code><ins class="diff-chg">
+@id
+</ins></code>,<ins class="diff-chg">
+that
+alias
+may
+be
+legitimately
+used
+as
+</ins>
+a
+<del class="diff-old">simple
+list
+of
+plain
+English
+guidelines
+</del>
+<ins class="diff-chg">substitution
+for
+</ins><code><ins class="diff-chg">
+@id
+</ins></code>.<ins class="diff-chg">
+Note
+that
+</ins><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keyword
+</ins></a><ins class="diff-chg">
+aliases
+</ins>
+are
+<del class="diff-old">provided.
+Issue
+5
+Per
+Andy
+S's
+comment
+,
+consider
+making
+this
+a
+normative
+syntax
+definition
+along
+with
+EBNF.
+</del>
+<ins class="diff-chg">not
+expanded
+during
+context
+processing.
+</ins>
+</p>
+</div>
+<p>
+A
+JSON-LD
+document
+is
+<del class="diff-old">composed
+of
+</del>
+<ins class="diff-chg">either
+a
+</ins>
+a
+single
+<del class="diff-old">subject
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+</ins>
+definition
+</a>
+or
+<del class="diff-old">an
+</del>
+<ins class="diff-chg">a
+JSON
+</ins>
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+<ins class="diff-new">containing
+a
+set
+</ins>
+of
+<del class="diff-old">subject
+</del>
+<ins class="diff-chg">one
+or
+more
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-chg">
+node
+</ins>
+definitions
+</a>.
+<del class="diff-old">The
+value
+of
+@id
+must
+be
+a
+term
+,
+</del>
+</p>
+<div class="example"><div class="example-title"><span>Example 60</span>: Simple node definition</div><pre class="example">{
+<ins class="diff-chg"> "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}
+</ins></pre></div><div class="example"><div class="example-title"><span>Example 61</span>: Array of node definitions</div><pre class="example">[<ins class="diff-chg">
+ {
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+ }, {
+ "name": "Gregg Kellogg",
+ "homepage": "http://greggkellogg.net/",
+ "depiction": "http://twitter.com/account/profile_image/gkellogg"
+ }
+]
+</ins></pre></div><section id="grammar-node-definition"><h3><span class="secno"><ins class="diff-chg">
+A.1
+</ins></span><ins class="diff-chg">
+Node
+Definition
+</ins></h3><p><ins class="diff-chg">
+A
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-chg">
+node
+definition
+</ins></a><ins class="diff-chg">
+is
+</ins>
+a
+<del class="diff-old">compact
+</del>
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+<ins class="diff-chg">JSON
+object
+</ins></a><ins class="diff-chg">
+containing
+one
+or
+more
+key/value
+pairs.
+Keys
+are
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<del class="diff-old">,
+or
+an
+</del>
+</a>
+<ins class="diff-chg">s,
+</ins><a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri"><ins class="diff-chg">
+compact
+</ins>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+<del class="diff-old">.
+</del>
+</a>
+<ins class="diff-chg">s,
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-chg">
+term
+</ins></a><ins class="diff-chg">
+s
+defined
+within
+the
+</ins><a class="tref internalDFN" title="active_context" href="#dfn-active_context"><ins class="diff-chg">
+active
+context
+</ins></a>,<ins class="diff-chg">
+or
+one
+of
+the
+following
+keywords:
+</ins></p><ul>
+<li>
+<del class="diff-old">An
+@id
+keyword
+and
+a
+</del>
+<code>
+<del class="diff-old">@language
+keyword
+must
+not
+exist
+in
+the
+same
+JSON
+object
+.
+</del>
+<ins class="diff-chg">@context
+</ins></code>,
+</li>
+<li>
+<del class="diff-old">An
+@id
+keyword
+and
+a
+</del>
+<code>
+<del class="diff-old">@container
+keyword
+must
+not
+exist
+in
+the
+same
+JSON
+object
+.
+</del>
+<ins class="diff-chg">@graph
+</ins></code>,
+</li>
+<li>
+<del class="diff-old">A
+subject
+definition
+may
+contain
+a
+</del>
+<code>
+<del class="diff-old">@context
+property.
+</del>
+<ins class="diff-chg">@id
+</ins></code>,<ins class="diff-chg">
+or
+</ins>
+</li>
+<li>
+<del class="diff-old">A
+@context
+value
+must
+not
+contain
+an
+embedded
+</del>
+<code>
+<del class="diff-old">@context
+</del>
+<ins class="diff-chg">@type
+</ins>
+</code>
+<del class="diff-old">definition.
+</del>
+</li>
+<del class="diff-old">The
+value
+associated
+with
+</del>
+</ul>
+<p>
+<ins class="diff-chg">If
+the
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-chg">
+node
+definition
+</ins></a><ins class="diff-chg">
+contains
+</ins>
+the
+<code>
+@context
+</code>
+<del class="diff-old">keyword
+</del>
+<ins class="diff-chg">key,
+it's
+value
+</ins>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+<ins class="diff-new">one
+of
+the
+following:
+</ins></p><ul><li>
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+<del class="diff-old">expanding
+to
+an
+</del>
+</a>
+<ins class="diff-chg">with
+the
+lexical
+form
+of
+</ins>
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+</li>
+<li>
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+<ins class="diff-new">conforming
+the
+the
+syntax
+requirements
+stated
+in
+</ins><a href="#grammar-context" class="sec-ref"><span class="secno"><ins class="diff-new">
+A.6
+</ins></span><span class="sec-title"><ins class="diff-new">
+Context
+Definition
+</ins></span>
+</a>,
+<del class="diff-old">null,
+</del>
+or
+</li>
+<li>
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+<del class="diff-old">containing
+a
+combination
+</del>
+<ins class="diff-chg">composed
+of
+any
+number
+</ins>
+of
+the
+<del class="diff-old">allowed
+values.
+</del>
+<ins class="diff-chg">previous
+two
+expressions.
+</ins>
+</li>
+<del class="diff-old">The
+value
+associated
+with
+</del>
+</ul>
+<div class="example"><div class="example-title"><span>Example 62</span>: Node definition with external context</div><pre class="example">{
+ <span class="diff">"@context": "http://json-ld.org/contexts/person.jsonld"</span>,
+<ins class="diff-chg"> "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}
+</ins></pre></div><p><ins class="diff-chg">
+See
+</ins><a href="#node-identifiers" class="sec-ref"><span class="secno"><ins class="diff-chg">
+3.6
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Node
+Identifiers
+</ins></span></a>,<a href="#compact-iris" class="sec-ref"><span class="secno"><ins class="diff-chg">
+4.1
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Compact
+IRIs
+</ins></span></a>,<ins class="diff-chg">
+and
+</ins><a href="#identifying-unlabeled-nodes" class="sec-ref"><span class="secno"><ins class="diff-chg">
+4.12
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Identifying
+Unlabeled
+Nodes
+</ins></span></a><ins class="diff-chg">
+for
+further
+discussion
+on
+</ins><code><ins class="diff-chg">
+@id
+</ins></code><ins class="diff-chg">
+values.
+</ins></p><p><ins class="diff-chg">
+If
+the
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-chg">
+node
+definition
+</ins></a><ins class="diff-chg">
+contains
+</ins>
+the
+<del class="diff-old">keys
+used
+in
+a
+</del>
+<code>
+<del class="diff-old">@context
+</del>
+<ins class="diff-chg">@id
+</ins>
+</code>
+<ins class="diff-new">key,
+it's
+value
+</ins>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+a
+<del class="diff-old">null
+,
+an
+</del>
+<a class="tref internalDFN" title="string" href="#dfn-string">
+<ins class="diff-chg">string
+</ins></a><ins class="diff-chg">
+having
+the
+lexical
+form
+of
+</ins>
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+<ins class="diff-new">compact
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a><ins class="diff-new">
+(including
+</ins><a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node"><ins class="diff-new">
+unlabeled
+node
+</ins></a><ins class="diff-new">
+),
+</ins>
+or
+a
+<del class="diff-old">JSON
+object
+.
+For
+each
+value
+that
+is
+a
+JSON
+object
+</del>
+<a class="tref internalDFN" title="term" href="#dfn-term">
+<ins class="diff-chg">term
+</ins>
+</a>
+<del class="diff-old">that
+is
+associated
+with
+a
+key
+</del>
+<ins class="diff-chg">defined
+</ins>
+in
+<del class="diff-old">a
+@context
+:
+</del>
+<ins class="diff-chg">the
+</ins><a class="tref internalDFN" title="active_context" href="#dfn-active_context"><ins class="diff-chg">
+active
+context
+</ins></a><ins class="diff-chg">
+expanding
+into
+an
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri">
+<del class="diff-old">@id
+and
+</del>
+<abbr title="Internationalized Resource Identifier">
+<ins class="diff-chg">IRI
+</ins></abbr></a><ins class="diff-chg">
+or
+an
+</ins><a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node"><ins class="diff-chg">
+unlabeled
+node
+</ins></a>.</p><div class="example"><div class="example-title"><span>Example 63</span>: Node definition with @id</div><pre class="example">{<ins class="diff-chg">
+ "@context": "http://json-ld.org/contexts/person.jsonld",
+</ins> <span class="diff">"@id": "http://manu.sporny.org/i/public"</span>,<ins class="diff-chg">
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}
+</ins></pre></div><p><ins class="diff-chg">
+If
+the
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-chg">
+node
+definition
+</ins></a><ins class="diff-chg">
+contains
+the
+</ins>
+<code>
+@type
+</code>
+<ins class="diff-new">key,
+it's
+value
+</ins>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+<del class="diff-old">an
+</del>
+<ins class="diff-chg">either
+a
+</ins><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-chg">
+string
+</ins></a><ins class="diff-chg">
+having
+the
+lexical
+form
+of
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-chg">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr>
+</a>,
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+<ins class="diff-new">compact
+</ins>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+<ins class="diff-new">a
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-new">
+term
+</ins></a><ins class="diff-new">
+defined
+in
+the
+</ins><a class="tref internalDFN" title="active_context" href="#dfn-active_context"><ins class="diff-new">
+active
+context
+</ins>
+</a>
+<ins class="diff-new">expanding
+into
+an
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-new">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a>,
+or
+<del class="diff-old">null
+</del>
+<ins class="diff-chg">an
+</ins><a class="tref internalDFN" title="array" href="#dfn-array"><ins class="diff-chg">
+array
+</ins></a><ins class="diff-chg">
+of
+any
+of
+these.
+</ins></p><div class="note">
+<div class="note-title">
+<span>
+<ins class="diff-chg">Note
+</ins></span></div>
+<p class="">
+<ins class="diff-new">A
+JSON-LD
+processor
+</ins><em class="rfc2119" title="should"><ins class="diff-new">
+should
+</ins></em><ins class="diff-new">
+process
+non-conforming
+documents
+having
+</ins>
+<code>
+<del class="diff-old">@container
+</del>
+<ins class="diff-chg">@type
+</ins>
+</code>
+<ins class="diff-new">values
+including
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-new">
+node
+definition
+</ins></a><ins class="diff-new">
+or
+</ins><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference"><ins class="diff-new">
+node
+reference
+</ins></a><ins class="diff-new">
+entries
+but
+</ins>
+<em class="rfc2119" title="must">
+must
+</em>
+<del class="diff-old">be
+associated
+with
+a
+</del>
+<ins class="diff-chg">discard
+everything
+except
+for
+the
+</ins>
+value
+of
+<del class="diff-old">either
+</del>
+<ins class="diff-chg">the
+</ins>
+<code>
+<del class="diff-old">@set
+</del>
+<ins class="diff-chg">@id
+</ins>
+</code>
+<del class="diff-old">or
+@list
+.
+</del>
+<ins class="diff-chg">key.
+</ins></p></div><div class="example"><div class="example-title"><span>Example 64</span>: Node definition with @type</div><pre class="example">{<ins class="diff-chg">
+ "@context": "http://json-ld.org/contexts/person.jsonld",
+ "@id": "http://manu.sporny.org/i/public",
+</ins> <span class="diff">"@type": "Person"</span>,<ins class="diff-chg">
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}
+</ins></pre></div><p><ins class="diff-chg">
+See
+</ins><a href="#specifying-the-type" class="sec-ref"><span class="secno"><ins class="diff-chg">
+3.7
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Specifying
+the
+Type
+</ins></span>
+</a>
+<ins class="diff-new">for
+further
+discussion
+on
+</ins>
+<code>
+<del class="diff-old">@language
+</del>
+<ins class="diff-chg">@type
+</ins>
+</code>
+<ins class="diff-new">values.
+</ins></p><p><ins class="diff-new">
+If
+the
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-new">
+node
+definition
+</ins></a><ins class="diff-new">
+contains
+the
+</ins><code><ins class="diff-new">
+@graph
+</ins></code><ins class="diff-new">
+key,
+it's
+value
+</ins>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+a
+<del class="diff-old">string
+expressed
+in
+[
+BCP47
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+definition
+</ins>
+</a>
+<del class="diff-old">]
+</del>
+or
+<ins class="diff-new">an
+</ins><a class="tref internalDFN" title="array" href="#dfn-array"><ins class="diff-new">
+array
+</ins></a><ins class="diff-new">
+of
+zero
+or
+more
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-new">
+node
+definitions
+</ins></a>.<ins class="diff-new">
+If
+the
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-new">
+node
+definition
+</ins></a><ins class="diff-new">
+contains
+an
+</ins>
+<code>
+<del class="diff-old">null
+.
+Any
+</del>
+<ins class="diff-chg">@id
+</ins></code><ins class="diff-chg">
+keyword,
+its
+value
+is
+used
+as
+the
+label
+of
+a
+named
+graph.
+</ins></p><div class="note"><div class="note-title"><span><ins class="diff-chg">
+Note
+</ins></span></div><p class=""><ins class="diff-chg">
+As
+a
+special
+case,
+if
+the
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><ins class="diff-chg">
+contains
+no
+keys
+</ins>
+other
+<del class="diff-old">property
+must
+</del>
+<ins class="diff-chg">than
+</ins><code><ins class="diff-chg">
+@graph
+</ins></code><ins class="diff-chg">
+and
+</ins><code><ins class="diff-chg">
+@context
+</ins></code>,<ins class="diff-chg">
+and
+the
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><ins class="diff-chg">
+is
+the
+root
+of
+the
+JSON-LD
+document,
+the
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><ins class="diff-chg">
+is
+not
+treated
+as
+a
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-chg">
+node
+definition
+</ins></a><ins class="diff-chg">
+;
+this
+is
+used
+as
+a
+way
+of
+defining
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-chg">
+node
+definitions
+</ins></a><ins class="diff-chg">
+that
+may
+not
+form
+a
+connected
+graph.
+This
+allows
+a
+</ins><a class="tref internalDFN" title="context" href="#dfn-context"><ins class="diff-chg">
+context
+</ins></a><ins class="diff-chg">
+to
+</ins>
+be
+<del class="diff-old">ignored
+</del>
+<ins class="diff-chg">defined
+which
+is
+shared
+</ins>
+by
+<del class="diff-old">a
+</del>
+<ins class="diff-chg">all
+of
+the
+constituent
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-chg">
+node
+definitions
+</ins></a>.</p></div><div class="example"><div class="example-title"><span>Example 65</span>: Multiple node definitions with a single context using @graph</div><pre class="example">{<ins class="diff-chg">
+ "@context": ...,
+ "<span class="diff">@graph</span>":
+ [
+ {
+ "@id": "http://manu.sporny.org/i/public",
+ "@type": "foaf:Person",
+ "name": "Manu Sporny",
+ "knows": "http://greggkellogg.net/foaf#me"
+ },
+ {
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": "foaf:Person",
+ "name": "Gregg Kellogg",
+ "knows": "http://manu.sporny.org/i/public"
+ }
+ ]
+}
+</ins></pre></div><p><ins class="diff-chg">
+See
+</ins><a href="#named-graphs" class="sec-ref"><span class="secno"><ins class="diff-chg">
+4.11
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Named
+Graphs
+</ins></span></a><ins class="diff-chg">
+for
+further
+discussion
+on
+</ins><code><ins class="diff-chg">
+@graph
+</ins></code><ins class="diff-chg">
+values.
+</ins></p><p><ins class="diff-chg">
+A
+</ins>
+JSON-LD
+<del class="diff-old">processor
+and
+</del>
+<ins class="diff-chg">document
+</ins><em class="rfc2119" title="must not"><ins class="diff-chg">
+must
+not
+</ins></em><ins class="diff-chg">
+contain
+any
+other
+</ins><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keyword
+</ins></a><ins class="diff-chg">
+or
+alias
+expanding
+to
+any
+other
+keyword.
+</ins></p><p><ins class="diff-chg">
+Other
+keys
+</ins>
+<em class="rfc2119" title="must">
+must
+</em>
+<ins class="diff-new">expand
+to
+an
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-new">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a><ins class="diff-new">
+using
+the
+</ins><a class="tref internalDFN" title="active_context" href="#dfn-active_context"><ins class="diff-new">
+active
+context
+</ins></a>.<ins class="diff-new">
+The
+values
+associated
+with
+these
+keys
+may
+</ins>
+be
+<del class="diff-old">preserved
+in
+compaction
+and
+framing.
+</del>
+<ins class="diff-chg">any
+of
+the
+following:
+</ins></p><ul><li><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-chg">
+string
+</ins></a>,
+</li>
+<li>
+<a class="tref internalDFN" title="number" href="#dfn-number">
+<ins class="diff-chg">number
+</ins></a>,
+</li>
+<li>
+<del class="diff-old">A
+subject
+</del>
+<a class="tref internalDFN" title="true" href="#dfn-true">
+<ins class="diff-chg">true
+</ins></a>,</li><li><a class="tref internalDFN" title="false" href="#dfn-false"><ins class="diff-chg">
+false
+</ins></a>,</li><li><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a>,</li><li><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference"><ins class="diff-chg">
+node
+reference
+</ins></a>,</li><li><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-chg">
+node
+</ins>
+definition
+<del class="diff-old">may
+have
+an
+@graph
+property.
+</del>
+</a>,
+</li>
+<li>
+<del class="diff-old">The
+</del>
+<a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">
+<ins class="diff-chg">typed
+</ins>
+value
+<del class="diff-old">of
+a
+</del>
+</a>,
+</li>
+<li>
+<a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">
+<ins class="diff-chg">language-tagged
+string
+</ins></a>,</li><li>
+<code>
+<del class="diff-old">@graph
+</del>
+<ins class="diff-chg">@set
+</ins></code><ins class="diff-chg">
+or
+</ins><code><ins class="diff-chg">
+@list
+</ins>
+</code>
+<del class="diff-old">property
+must
+be
+a
+subject
+</del>
+definition
+<ins class="diff-new">(see
+</ins><a href="#sets-and-lists" class="sec-ref"><span class="secno"><ins class="diff-new">
+4.9
+</ins></span><span class="sec-title"><ins class="diff-new">
+Sets
+and
+Lists
+</ins></span>
+</a>
+<del class="diff-old">or
+</del>
+<ins class="diff-chg">),
+</ins></li><li>
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+<del class="diff-old">of
+</del>
+</a>
+zero
+or
+more
+<del class="diff-old">subject
+definitions
+.
+</del>
+<ins class="diff-chg">of
+these,
+or
+</ins>
+</li>
+<li>
+<a class="tref internalDFN" title="language_map" href="#dfn-language_map">
+<ins class="diff-new">language
+map
+</ins></a>.</li></ul></section><section id="grammar-node-reference"><h3><span class="secno"><ins class="diff-new">
+A.2
+</ins></span><ins class="diff-new">
+Node
+Reference
+</ins></h3><p>
+A
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+containing
+<del class="diff-old">a
+</del>
+<ins class="diff-chg">only
+the
+</ins>
+<code>
+<del class="diff-old">@set
+</del>
+<ins class="diff-chg">@id
+</ins>
+</code>
+<del class="diff-old">key
+must
+</del>
+<ins class="diff-chg">(or
+alias)
+is
+a
+</ins><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference"><ins class="diff-chg">
+node
+reference
+</ins></a><ins class="diff-chg">
+and
+</ins>
+not
+<del class="diff-old">have
+any
+other
+keys.
+</del>
+<ins class="diff-chg">a
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-chg">
+node
+definition
+</ins></a>.</p><div class="example"><div class="example-title"><span>Example 66</span>: Explicit node reference</div><pre class="example">{<ins class="diff-chg">
+ "@context": ...,
+ "@graph": [
+ {
+ "@id": "http://example.org/library",
+ "@type": "ex:Library",
+</ins> <span class="diff">"ex:contains": {"@id": "http://example.org/library/the-republic"}</span><ins class="diff-chg">
+ }, {
+ "@id": "http://example.org/library/the-republic",
+ "@type": "ex:Book",
+ "dc:creator": "Plato",
+ "dc:title": "The Republic",
+</ins> <span class="diff">"ex:contains": {"@id": "http://example.org/library/the-republic#introduction"}</span><ins class="diff-chg">
+ }, {
+ "@id": "http://example.org/library/the-republic#introduction",
+ "@type": "ex:Chapter",
+ "dc:description": "An introductory chapter on The Republic.",
+ "dc:title": "The Introduction"
+ }
+ ]
+}
+}
+</ins></pre></div></section><section id="grammar-language-map"><h3><span class="secno"><ins class="diff-chg">
+A.3
+</ins></span><ins class="diff-chg">
+Language
+Map
+</ins></h3><p>
+A
+<del class="diff-old">JSON
+object
+</del>
+<a class="tref internalDFN" title="language_map" href="#dfn-language_map">
+<ins class="diff-chg">language
+map
+</ins>
+</a>
+<del class="diff-old">containing
+</del>
+<ins class="diff-chg">may
+be
+used
+as
+</ins>
+a
+<ins class="diff-new">term
+value
+within
+a
+</ins><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-new">
+node
+definition
+</ins></a><ins class="diff-new">
+if
+the
+term
+is
+defined
+with
+</ins>
+<code>
+<del class="diff-old">@list
+</del>
+<ins class="diff-chg">@container
+</ins>
+</code>
+<del class="diff-old">key
+</del>
+<ins class="diff-chg">set
+to
+</ins><code><ins class="diff-chg">
+@language
+</ins></code>.</p><p><ins class="diff-chg">
+The
+keys
+of
+a
+</ins><a class="tref internalDFN" title="language_map" href="#dfn-language_map"><ins class="diff-chg">
+language
+map
+</ins></a><em class="rfc2119" title="must">
+must
+<del class="diff-old">not
+</del>
+</em>
+<del class="diff-old">have
+</del>
+<ins class="diff-chg">be
+a
+[
+</ins><cite><a class="bibref" href="#bib-BCP47"><ins class="diff-chg">
+BCP47
+</ins></a></cite><ins class="diff-chg">
+]
+string
+with
+an
+associated
+value
+that
+is
+</ins>
+any
+<del class="diff-old">other
+keys.
+</del>
+<ins class="diff-chg">of
+the
+following
+types:
+</ins></p><ul><li><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-chg">
+string
+</ins></a>,
+</li>
+<li>
+<del class="diff-old">The
+</del>
+<a class="tref internalDFN" title="number" href="#dfn-number">
+<ins class="diff-chg">number
+</ins></a>,</li><li><a class="tref internalDFN" title="true" href="#dfn-true"><ins class="diff-chg">
+true
+</ins></a>,</li><li><a class="tref internalDFN" title="false" href="#dfn-false"><ins class="diff-chg">
+false
+</ins></a>,</li><li><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a>,</li><li><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference"><ins class="diff-chg">
+node
+reference
+</ins></a>,</li><li><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-chg">
+node
+definition
+</ins></a>,</li><li><a class="tref internalDFN" title="typed_value" href="#dfn-typed_value"><ins class="diff-chg">
+typed
+</ins>
+value
+<del class="diff-old">of
+an
+</del>
+</a>,
+</li>
+<li>
+<a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">
+<ins class="diff-chg">language-tagged
+string
+</ins></a>,</li><li>
+<code>
+@set
+</code>
+or
+<code>
+@list
+</code>
+<del class="diff-old">key
+can
+be
+a
+string,
+a
+number,
+a
+JSON
+object
+,
+</del>
+<ins class="diff-chg">definition
+(see
+</ins><a href="#sets-and-lists" class="sec-ref"><span class="secno"><ins class="diff-chg">
+4.9
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Sets
+and
+Lists
+</ins></span></a><ins class="diff-chg">
+),
+</ins>
+or
+</li>
+<li>
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+<del class="diff-old">containing
+a
+combination
+</del>
+<ins class="diff-chg">zero
+or
+more
+</ins>
+of
+<del class="diff-old">the
+allowed
+values.
+</del>
+<ins class="diff-chg">these
+</ins>
+</li>
+<del class="diff-old">For
+each
+</del>
+</ul>
+<p data-number="133" class="issue resolved">
+<ins class="diff-chg">We
+had
+also
+discussed
+values
+other
+than
+strings,
+such
+as
+those
+that
+might
+represent
+a
+more
+reified
+version
+of
+a
+value
+with
+other
+properties,
+such
+as
+is
+described
+using
+</ins><a href="http://www.w3.org/TR/skos-reference/skos-xl.html"><ins class="diff-chg">
+SKOS-XL
+</ins></a>.</p><div class="example"><div class="example-title"><span>Example 67</span>: Language map expressing a property in three languages</div><pre class="example">{<ins class="diff-chg">
+ "@context":
+ {
+ "title":
+ {
+ "@id": "http://purl.org/dc/terms/title"
+</ins> <span class="diff">"@container": "@language"</span><ins class="diff-chg">
+ }
+ },
+...
+ "title":
+</ins> <span class="diff">{<ins class="diff-chg">
+ "en": "JSON-LD Syntax",
+ "ru": "JSON-LD Синтаксис",
+ "ja": "JSON-LDの構文"
+ }</span>
+...
+}
+</ins></pre></div></section><section id="grammar-expanded-values"><h3><span class="secno"><ins class="diff-chg">
+A.4
+</ins></span><ins class="diff-chg">
+Expanded
+Values
+</ins></h3><p><ins class="diff-chg">
+An
+</ins><dfn title="expanded_value" id="dfn-expanded_value"><ins class="diff-chg">
+expanded
+value
+</ins></dfn><ins class="diff-chg">
+is
+a
+</ins>
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+<del class="diff-old">that
+contains
+a
+</del>
+<ins class="diff-chg">containing
+the
+</ins>
+<code>
+@value
+</code>
+<del class="diff-old">key:
+</del>
+<ins class="diff-chg">key,
+or
+an
+alias
+for
+the
+</ins><code><ins class="diff-chg">
+@value
+</ins></code><ins class="diff-chg">
+value
+key.
+</ins>
+It
+<em class="rfc2119" title="may">
+may
+</em>
+<del class="diff-old">have
+a
+</del>
+<ins class="diff-chg">also
+contain
+the
+</ins>
+<code>
+<del class="diff-old">@language
+</del>
+<ins class="diff-chg">@type
+</ins>
+</code>
+or
+<code>
+<del class="diff-old">@type
+</del>
+<ins class="diff-chg">@language
+</ins>
+</code>
+<del class="diff-old">property
+and
+</del>
+<ins class="diff-chg">keys,
+or
+their
+respective
+keyword
+aliases.
+An
+</ins><a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value"><ins class="diff-chg">
+expanded
+value
+</ins></a>
+<em class="rfc2119" title="must not">
+must
+not
+</em>
+<del class="diff-old">have
+any
+</del>
+<ins class="diff-chg">contain
+keys
+</ins>
+other
+<del class="diff-old">properties.
+It
+</del>
+<ins class="diff-chg">than
+</ins><code><ins class="diff-chg">
+@value
+</ins></code>,<code><ins class="diff-chg">
+@language
+</ins></code>,<ins class="diff-chg">
+and
+</ins><code><ins class="diff-chg">
+@type
+</ins></code>.<ins class="diff-chg">
+An
+</ins><a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value"><ins class="diff-chg">
+expanded
+value
+</ins></a>
+<em class="rfc2119" title="must not">
+must
+not
+</em>
+contain
+both
+the
+<code>
+@language
+</code>
+and
+<code>
+@type
+</code>
+<del class="diff-old">keys
+at
+the
+same
+time.
+</del>
+<ins class="diff-chg">keys.
+</ins></p><p>
+The
+value
+of
+the
+<code>
+@value
+</code>
+<del class="diff-old">key
+</del>
+<ins class="diff-chg">key,
+or
+its
+alias,
+</ins>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+<ins class="diff-new">either
+</ins>
+a
+<a class="tref internalDFN" title="string" href="#dfn-string">
+string
+</a>,
+<a class="tref internalDFN" title="number" href="#dfn-number">
+<ins class="diff-new">number
+</ins></a>,<a class="tref internalDFN" title="true" href="#dfn-true"><ins class="diff-new">
+true
+</ins></a>,
+or
+<a class="tref internalDFN" title="false" href="#dfn-false">
+<ins class="diff-new">false
+</ins></a>.</p><p><ins class="diff-new">
+If
+an
+</ins><a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value"><ins class="diff-new">
+expanded
+value
+</ins></a><ins class="diff-new">
+contains
+</ins>
+a
+<del class="diff-old">number.
+</del>
+<code>
+<ins class="diff-chg">@language
+</ins></code><ins class="diff-chg">
+key,
+it
+</ins><em class="rfc2119" title="must not"><ins class="diff-chg">
+must
+not
+</ins></em><ins class="diff-chg">
+contain
+any
+other
+key
+except
+</ins><code><ins class="diff-chg">
+@value
+</ins></code>.
+The
+value
+of
+the
+<code>
+@language
+</code>
+key
+<em class="rfc2119" title="must">
+must
+</em>
+<del class="diff-old">be
+null
+or
+a
+string
+</del>
+<ins class="diff-chg">have
+the
+lexical
+form
+described
+</ins>
+in
+[
+<cite>
+<a class="bibref" href="#bib-BCP47">
+BCP47
+</a>
+</cite>
+<del class="diff-old">]
+format.
+</del>
+<ins class="diff-chg">],
+or
+be
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a>.</p><p><ins class="diff-chg">
+If
+an
+</ins><a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value"><ins class="diff-chg">
+expanded
+value
+</ins></a><ins class="diff-chg">
+contains
+a
+</ins><code><ins class="diff-chg">
+@type
+</ins></code><ins class="diff-chg">
+key,
+it
+</ins><em class="rfc2119" title="must not"><ins class="diff-chg">
+must
+not
+</ins></em><ins class="diff-chg">
+contain
+any
+other
+key
+except
+</ins><code><ins class="diff-chg">
+@value
+</ins></code>.
+The
+value
+of
+<code>
+@type
+</code>
+<em class="rfc2119" title="must">
+must
+</em>
+be
+<del class="diff-old">null
+,
+</del>
+a
+<a class="tref internalDFN" title="term" href="#dfn-term">
+term
+</a>,
+<del class="diff-old">a
+</del>
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">
+compact
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+<del class="diff-old">an
+</del>
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">
+<ins class="diff-chg">absolute
+</ins>
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>,
+<ins class="diff-new">or
+</ins><code><ins class="diff-new">
+null
+</ins></code>.</p><p><ins class="diff-new">
+See
+</ins><a href="#typed-values" class="sec-ref"><span class="secno"><ins class="diff-new">
+4.2
+</ins></span><span class="sec-title"><ins class="diff-new">
+Typed
+Values
+</ins></span></a><ins class="diff-new">
+and
+</ins><a href="#language-tagged-strings" class="sec-ref"><span class="secno"><ins class="diff-new">
+4.3
+</ins></span><span class="sec-title"><ins class="diff-new">
+Language-tagged
+Strings
+</ins></span></a><ins class="diff-new">
+for
+a
+further
+discussion
+of
+</ins><a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value"><ins class="diff-new">
+expanded
+values
+</ins></a>.</p></section><section id="grammar-set-list"><h3><span class="secno"><ins class="diff-new">
+A.5
+</ins></span><ins class="diff-new">
+List
+and
+Set
+Values
+</ins></h3><p><ins class="diff-new">
+A
+</ins><dfn title="list" id="dfn-list"><ins class="diff-new">
+list
+</ins></dfn><ins class="diff-new">
+is
+</ins>
+a
+<a class="tref internalDFN" title="json_object" href="#dfn-json_object">
+JSON
+object
+</a>
+<ins class="diff-new">having
+only
+the
+</ins><code><ins class="diff-new">
+@list
+</ins></code><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-new">
+keyword
+</ins></a>.<ins class="diff-new">
+Its
+value
+</ins><em class="rfc2119" title="must"><ins class="diff-new">
+must
+</ins></em><ins class="diff-new">
+be
+an
+</ins><a class="tref internalDFN" title="array" href="#dfn-array"><ins class="diff-new">
+array
+</ins></a><ins class="diff-new">
+of
+any
+of
+the
+following:
+</ins></p><ul><li><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-new">
+string
+</ins></a>,</li><li><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference"><ins class="diff-new">
+node
+reference
+</ins></a>,</li><li><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition"><ins class="diff-new">
+node
+definition
+</ins></a>,</li><li><a class="tref internalDFN" title="typed_value" href="#dfn-typed_value"><ins class="diff-new">
+typed
+value
+</ins>
+</a>,
+or
+</li>
+<li>
+<a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">
+<ins class="diff-new">language-tagged
+string
+</ins></a>.</li></ul><p><ins class="diff-new">
+A
+</ins><dfn title="set" id="dfn-set"><ins class="diff-new">
+set
+</ins></dfn><ins class="diff-new">
+is
+a
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-new">
+JSON
+object
+</ins></a><ins class="diff-new">
+having
+only
+the
+</ins><code><ins class="diff-new">
+@set
+</ins></code><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-new">
+keyword
+</ins></a>.<ins class="diff-new">
+Its
+value
+</ins><em class="rfc2119" title="must"><ins class="diff-new">
+must
+</ins></em><ins class="diff-new">
+be
+</ins>
+an
+<a class="tref internalDFN" title="array" href="#dfn-array">
+array
+</a>
+<del class="diff-old">containing
+a
+combination
+</del>
+<ins class="diff-chg">of
+any
+</ins>
+of
+the
+<del class="diff-old">allowed
+values.
+</del>
+<ins class="diff-chg">following:
+</ins></p><ul><li><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-chg">
+string
+</ins></a>,
+</li>
+<li>
+<a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">
+<ins class="diff-chg">node
+reference
+</ins></a>,
+</li>
+<li>
+<del class="diff-old">In
+</del>
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">
+<ins class="diff-chg">node
+definition
+</ins></a>,</li><li><a class="tref internalDFN" title="typed_value" href="#dfn-typed_value"><ins class="diff-chg">
+typed
+value
+</ins></a>,</li><li><a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string"><ins class="diff-chg">
+language-tagged
+string
+</ins></a>,</li><li><code><ins class="diff-chg">
+@set
+</ins></code><ins class="diff-chg">
+or
+</ins><code><ins class="diff-chg">
+@list
+</ins></code><ins class="diff-chg">
+definition
+(see
+</ins><a href="#sets-and-lists" class="sec-ref"><span class="secno"><ins class="diff-chg">
+4.9
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Sets
+and
+Lists
+</ins></span></a><ins class="diff-chg">
+),
+or
+</ins></li><li><ins class="diff-chg">
+an
+</ins><a class="tref internalDFN" title="array" href="#dfn-array"><ins class="diff-chg">
+array
+</ins></a><ins class="diff-chg">
+zero
+or
+more
+of
+these.
+</ins></li></ul><p><ins class="diff-chg">
+See
+</ins><a href="#sets-and-lists" class="sec-ref"><span class="secno"><ins class="diff-chg">
+4.9
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Sets
+and
+Lists
+</ins></span></a><ins class="diff-chg">
+for
+a
+further
+discussion
+of
+List
+and
+Set
+Values.
+</ins></p></section><section id="grammar-context"><h3><span class="secno"><ins class="diff-chg">
+A.6
+</ins></span><ins class="diff-chg">
+Context
+Definition
+</ins></h3><p><ins class="diff-chg">
+A
+</ins><dfn title="context_definition" id="dfn-context_definition"><ins class="diff-chg">
+context
+definition
+</ins></dfn><ins class="diff-chg">
+is
+a
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><ins class="diff-chg">
+containing
+one
+or
+more
+key/value
+pairs.
+Keys
+are
+non-keyword
+</ins><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-chg">
+strings
+</ins></a><ins class="diff-chg">
+or
+</ins>
+the
+<del class="diff-old">body
+</del>
+<code>
+<ins class="diff-chg">@language
+</ins></code><ins class="diff-chg">
+or
+</ins><code><ins class="diff-chg">
+@vocab
+</ins></code><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keywords
+</ins></a>.<ins class="diff-chg">
+A
+</ins><a class="tref internalDFN" title="context_definition" href="#dfn-context_definition"><ins class="diff-chg">
+context
+definition
+</ins></a><em class="rfc2119" title="should not"><ins class="diff-chg">
+should
+not
+</ins></em><ins class="diff-chg">
+contain
+any
+keys
+having
+the
+lexical
+form
+</ins>
+of
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+<ins class="diff-new">keyword
+</ins></a><ins class="diff-new">
+other
+than
+</ins><code><ins class="diff-new">
+@language
+</ins></code><ins class="diff-new">
+or
+</ins><code><ins class="diff-new">
+@vocab
+</ins></code>.</p><p><ins class="diff-new">
+If
+the
+</ins><a class="tref internalDFN" title="context_definition" href="#dfn-context_definition"><ins class="diff-new">
+context
+definition
+</ins></a><ins class="diff-new">
+has
+</ins>
+a
+<del class="diff-old">JSON-LD
+document,
+</del>
+<code>
+<ins class="diff-chg">@language
+</ins></code><ins class="diff-chg">
+key,
+the
+value
+</ins><em class="rfc2119" title="must"><ins class="diff-chg">
+must
+</ins></em><ins class="diff-chg">
+have
+the
+lexical
+form
+described
+in
+[
+</ins><cite><a class="bibref" href="#bib-BCP47"><ins class="diff-chg">
+BCP47
+</ins></a></cite><ins class="diff-chg">
+]
+or
+be
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a>.</p><p><ins class="diff-chg">
+If
+the
+</ins><a class="tref internalDFN" title="context_definition" href="#dfn-context_definition"><ins class="diff-chg">
+context
+definition
+</ins></a><ins class="diff-chg">
+has
+a
+</ins><code><ins class="diff-chg">
+@vocab
+</ins></code><ins class="diff-chg">
+key,
+</ins>
+the
+value
+<em class="rfc2119" title="must">
+<ins class="diff-new">must
+</ins></em><ins class="diff-new">
+have
+the
+lexical
+form
+of
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-new">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a><ins class="diff-new">
+or
+be
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-new">
+null
+</ins></a>.</p><p><ins class="diff-new">
+Other
+keys
+are
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-new">
+term
+</ins></a><ins class="diff-new">
+definitions.
+Their
+values
+</ins><em class="rfc2119" title="must"><ins class="diff-new">
+must
+</ins></em><ins class="diff-new">
+be
+either
+a
+</ins><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-new">
+string
+</ins></a>,<ins class="diff-new">
+or
+a
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-new">
+JSON
+object
+</ins></a><ins class="diff-new">
+having
+the
+form
+</ins>
+of
+<ins class="diff-new">an
+</ins><a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition"><ins class="diff-new">
+expanded
+term
+definition
+</ins></a><ins class="diff-new">
+(see
+</ins><a href="#expanded-term-definition" class="sec-ref"><span class="secno"><ins class="diff-new">
+4.5
+</ins></span><span class="sec-title"><ins class="diff-new">
+Expanded
+Term
+Definition
+</ins></span></a><ins class="diff-new">
+).
+</ins></p><p><ins class="diff-new">
+An
+</ins><dfn title="expanded_term_definition" id="dfn-expanded_term_definition"><ins class="diff-new">
+expanded
+term
+definition
+</ins></dfn><ins class="diff-new">
+is
+composed
+of
+zero
+or
+more
+keys
+from
+</ins><code><ins class="diff-new">
+@id
+</ins></code>,
+<code>
+@type
+</code>,
+<code>
+<ins class="diff-new">@language
+</ins>
+</code>
+<ins class="diff-new">or
+</ins><code><ins class="diff-new">
+@container
+</ins></code>.<ins class="diff-new">
+An
+</ins><a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition"><ins class="diff-new">
+expanded
+term
+definition
+</ins></a>
+<em class="rfc2119" title="must not">
+must
+not
+</em>
+<del class="diff-old">be
+</del>
+<ins class="diff-chg">contain
+any
+other
+keys.
+All
+values
+associated
+with
+</ins>
+<code>
+@id
+<del class="diff-old">.
+This
+</del>
+</code>
+<em class="rfc2119" title="must">
+<ins class="diff-chg">must
+</ins></em><ins class="diff-chg">
+expand
+to
+an
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-chg">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-chg">
+IRI
+</ins></abbr></a>.</p><p><ins class="diff-chg">
+If
+the
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-chg">
+term
+</ins></a><ins class="diff-chg">
+definition
+</ins>
+is
+<ins class="diff-new">not
+a
+</ins><a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri"><ins class="diff-new">
+compact
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a><ins class="diff-new">
+or
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-new">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a>,<ins class="diff-new">
+the
+</ins><a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition"><ins class="diff-new">
+expanded
+term
+definition
+</ins></a><em class="rfc2119" title="must"><ins class="diff-new">
+must
+</ins></em><ins class="diff-new">
+include
+the
+</ins><code><ins class="diff-new">
+@id
+</ins></code><ins class="diff-new">
+key.
+</ins></p><p><ins class="diff-new">
+If
+the
+</ins><a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition"><ins class="diff-new">
+expanded
+term
+definition
+</ins></a><ins class="diff-new">
+contains
+the
+</ins><code><ins class="diff-new">
+@id
+</ins></code><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-new">
+keyword
+</ins></a>,<ins class="diff-new">
+it
+</ins><em class="rfc2119" title="must"><ins class="diff-new">
+must
+</ins></em><ins class="diff-new">
+be
+a
+</ins><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-new">
+string
+</ins></a><ins class="diff-new">
+having
+the
+lexical
+form
+of
+</ins><a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a>,<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri"><ins class="diff-new">
+compact
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a>,<ins class="diff-new">
+a
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-new">
+term
+</ins></a><ins class="diff-new">
+defined
+</ins>
+in
+<del class="diff-old">contrast
+to
+</del>
+the
+<del class="diff-old">use
+</del>
+<ins class="diff-chg">defining
+</ins><a class="tref internalDFN" title="context_definition" href="#dfn-context_definition"><ins class="diff-chg">
+context
+definition
+</ins></a><ins class="diff-chg">
+or
+the
+</ins><a class="tref internalDFN" title="active_context" href="#dfn-active_context"><ins class="diff-chg">
+active
+context
+</ins></a>,<ins class="diff-chg">
+or
+an
+</ins><a class="tref internalDFN" title="array" href="#dfn-array"><ins class="diff-chg">
+array
+</ins></a><ins class="diff-chg">
+composed
+</ins>
+of
+<ins class="diff-new">any
+of
+the
+previous
+allowed
+values.
+</ins></p><p><ins class="diff-new">
+If
+the
+</ins><a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition"><ins class="diff-new">
+expanded
+term
+definition
+</ins></a><ins class="diff-new">
+contains
+the
+</ins>
+<code>
+@type
+</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">
+<ins class="diff-new">keyword
+</ins></a>,<ins class="diff-new">
+it
+</ins><em class="rfc2119" title="must"><ins class="diff-new">
+must
+</ins></em><ins class="diff-new">
+be
+a
+</ins><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-new">
+string
+</ins></a><ins class="diff-new">
+having
+the
+lexical
+form
+of
+</ins><a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri"><ins class="diff-new">
+absolute
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a>,<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri"><ins class="diff-new">
+compact
+</ins><abbr title="Internationalized Resource Identifier"><ins class="diff-new">
+IRI
+</ins></abbr></a>,<ins class="diff-new">
+or
+a
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-new">
+term
+</ins></a><ins class="diff-new">
+defined
+</ins>
+in
+the
+<ins class="diff-new">defining
+</ins><a class="tref internalDFN" title="context_definition" href="#dfn-context_definition"><ins class="diff-new">
+context
+definition
+</ins></a><ins class="diff-new">
+or
+the
+</ins><a class="tref internalDFN" title="active_context" href="#dfn-active_context"><ins class="diff-new">
+active
+context
+</ins></a>.</p><p><ins class="diff-new">
+If
+the
+</ins><a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition"><ins class="diff-new">
+expanded
+term
+definition
+</ins></a><ins class="diff-new">
+contains
+the
+</ins>
+<code>
+<del class="diff-old">@context
+</del>
+<ins class="diff-chg">@language
+</ins></code><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keyword
+</ins></a>,<ins class="diff-chg">
+the
+value
+</ins><em class="rfc2119" title="must"><ins class="diff-chg">
+must
+</ins></em><ins class="diff-chg">
+have
+the
+lexical
+form
+described
+in
+[
+</ins><cite><a class="bibref" href="#bib-BCP47"><ins class="diff-chg">
+BCP47
+</ins></a></cite><ins class="diff-chg">
+]
+or
+be
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a>.</p><p><ins class="diff-chg">
+If
+the
+</ins><a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition"><ins class="diff-chg">
+expanded
+term
+definition
+</ins></a><ins class="diff-chg">
+contains
+the
+</ins><code><ins class="diff-chg">
+@container
+</ins></code><a class="tref internalDFN" title="keyword" href="#dfn-keyword"><ins class="diff-chg">
+keyword
+</ins></a>,<ins class="diff-chg">
+the
+value
+</ins><em class="rfc2119" title="must"><ins class="diff-chg">
+must
+</ins></em><ins class="diff-chg">
+be
+either
+</ins><code><ins class="diff-chg">
+@list
+</ins>
+</code>,
+<del class="diff-old">where
+this
+</del>
+<code>
+<ins class="diff-chg">@set
+</ins></code>,<code><ins class="diff-chg">
+@language
+</ins></code>,<ins class="diff-chg">
+or
+be
+</ins><a class="tref internalDFN" title="null" href="#dfn-null"><ins class="diff-chg">
+null
+</ins></a>.<ins class="diff-chg">
+If
+the
+value
+</ins>
+is
+<del class="diff-old">allowed.
+</del>
+<code>
+<ins class="diff-chg">@language
+</ins></code>,<ins class="diff-chg">
+when
+the
+</ins><a class="tref internalDFN" title="term" href="#dfn-term"><ins class="diff-chg">
+term
+</ins></a><ins class="diff-chg">
+is
+used
+outside
+of
+the
+</ins><code><ins class="diff-chg">
+@context
+</ins></code>,<ins class="diff-chg">
+the
+associated
+value
+</ins><em class="rfc2119" title="must"><ins class="diff-chg">
+must
+</ins></em><ins class="diff-chg">
+be
+a
+</ins><a class="tref internalDFN" title="json_object" href="#dfn-json_object"><ins class="diff-chg">
+JSON
+object
+</ins></a><ins class="diff-chg">
+whose
+keys
+are
+</ins><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-chg">
+string
+</ins></a><ins class="diff-chg">
+s
+that
+are
+[
+</ins><cite><a class="bibref" href="#bib-BCP47"><ins class="diff-chg">
+BCP47
+</ins></a></cite><ins class="diff-chg">
+]
+language
+identifiers.
+The
+values
+associated
+with
+each
+[
+</ins><cite><a class="bibref" href="#bib-BCP47"><ins class="diff-chg">
+BCP47
+</ins></a></cite><ins class="diff-chg">
+]
+language
+string
+</ins><em class="rfc2119" title="must"><ins class="diff-chg">
+must
+</ins></em><ins class="diff-chg">
+be
+a
+</ins><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-chg">
+string
+</ins></a><ins class="diff-chg">
+or
+an
+</ins><a class="tref internalDFN" title="array" href="#dfn-array"><ins class="diff-chg">
+array
+</ins></a><ins class="diff-chg">
+of
+</ins><a class="tref internalDFN" title="string" href="#dfn-string"><ins class="diff-chg">
+string
+</ins></a><ins class="diff-chg">
+s.
+</ins></p><p><ins class="diff-chg">
+See
+</ins><a href="#the-context" class="sec-ref"><span class="secno"><ins class="diff-chg">
+3.3
+</ins></span><span class="sec-title"><ins class="diff-chg">
+The
+Context
+</ins></span></a><ins class="diff-chg">
+and
+</ins><a href="#expanded-term-definition" class="sec-ref"><span class="secno"><ins class="diff-chg">
+4.5
+</ins></span><span class="sec-title"><ins class="diff-chg">
+Expanded
+Term
+Definition
+</ins></span></a><ins class="diff-chg">
+for
+a
+further
+discussion
+of
+contexts.
+</ins></p></section><div class="example"><div class="example-title"><span>Example 68</span>: Context definition with simple terms, expanded term definitions and @language</div><pre class="example">{<ins class="diff-chg">
+ "@language": "en",
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "foaf": "http://xmlns.com/foaf/0.1/",
+ "name": "foaf:name",
+ "depiction": {"@id": "foaf:depiction", "@type": "@id"},
+ "modified": {"@id": "http://purl.org/dc/terms/modified", "@type": "xsd:dateTime"},
+ "homepage": {"@id": "foaf:homepage", "@type": "@id", "@container": "@list"}
+}
+</ins></pre>
+</div>
+</section>
+<section class="appendix informative" id="relationship-to-other-linked-data-formats-and-data-models">
+<h2>
+<span class="secno">
+B.
+</span>
+Relationship
+to
+<del class="diff-old">other
+RDF
+</del>
+<ins class="diff-chg">Other
+Linked
+Data
+</ins>
+Formats
+<ins class="diff-new">and
+Data
+Models
+</ins>
+</h2>
+<p>
+<em>
+This
+section
+is
+non-normative.
+</em>
+</p>
+<div class="issue">
+<div class="issue-title">
+<span>
+Issue
+<del class="diff-old">6
+</del>
+</span>
+</div>
+<p class="">
+The
+intent
+of
+the
+Working
+Group
+and
+the
+Editors
+of
+this
+specification
+is
+to
+eventually
+align
+terminology
+used
+in
+this
+document
+with
+the
+terminology
+used
+in
+the
+RDF
+Concepts
+document
+[
+<cite>
+<a class="bibref" href="#bib-RDF-CONCEPTS">
+RDF-CONCEPTS
+</a>
+</cite>
+]
+to
+the
+extent
+to
+which
+it
+makes
+sense
+to
+do
+so.
+In
+general,
+if
+there
+is
+an
+analogue
+to
+terminology
+used
+in
+this
+document
+in
+the
+RDF
+Concepts
+document,
+the
+preference
+is
+to
+use
+the
+terminology
+in
+the
+RDF
+Concepts
+document.
+</p>
+</div>
+<p>
+JSON-LD
+is
+a
+specification
+for
+representing
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>
+in
+JSON.
+A
+common
+way
+of
+working
+with
+Linked
+Data
+is
+through
+<dfn title="rdf" id="dfn-rdf">
+RDF
+</dfn>,
+the
+Resource
+Description
+Framework.
+RDF
+can
+be
+expressed
+using
+JSON-LD
+by
+associating
+JSON-LD
+concepts
+such
+as
+<code>
+@id
+</code>
+and
+<code>
+@type
+</code>
+with
+the
+equivalent
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>
+s
+in
+RDF.
+Further
+information
+about
+RDF
+may
+be
+found
+in
+the
+[
+<cite>
+<a class="bibref" href="#bib-RDF-PRIMER">
+RDF-PRIMER
+</a>
+</cite>
+].
+</p>
+<p>
+The
+JSON-LD
+markup
+examples
+below
+demonstrate
+how
+JSON-LD
+can
+be
+used
+to
+express
+semantic
+data
+marked
+up
+in
+other
+languages
+and
+data
+models
+such
+as
+RDF,
+Turtle,
+RDFa,
+Microformats,
+and
+Microdata.
+These
+sections
+are
+merely
+provided
+as
+evidence
+that
+JSON-LD
+is
+very
+flexible
+in
+what
+it
+can
+express
+across
+different
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">
+Linked
+Data
+</a>
+approaches.
+Further
+information
+on
+transforming
+JSON-LD
+into
+RDF
+are
+detailed
+in
+the
+[
+<cite>
+<a class="bibref" href="#bib-JSON-LD-API">
+JSON-LD-API
+</a>
+</cite>
+].
+</p>
+<section id="rdf">
+<h3>
+<span class="secno">
+B.1
+</span>
+RDF
+</h3>
+<p>
+<em>
+This
+section
+is
+non-normative.
+</em>
+</p>
+<p>
+The
+RDF
+data
+model,
+as
+outlined
+in
+[
+<cite>
+<a class="bibref" href="#bib-RDF-CONCEPTS">
+RDF-CONCEPTS
+</a>
+</cite>
+],
+is
+an
+abstract
+syntax
+for
+representing
+a
+directed
+graph
+of
+information.
+JSON-LD
+is
+capable
+of
+serializing
+any
+RDF
+graph,
+and
+performing
+full
+RDF
+to
+JSON-LD
+to
+RDF
+round-tripping.
+A
+complete
+description
+of
+how
+JSON-LD
+maps
+to
+RDF
+and
+algorithms
+detailing
+how
+one
+can
+convert
+from
+RDF
+to
+JSON-LD
+and
+from
+JSON-LD
+to
+RDF
+are
+included
+in
+the
+JSON-LD
+API
+[
+<cite>
+<a class="bibref" href="#bib-JSON-LD-API">
+JSON-LD-API
+</a>
+</cite>
+]
+specification.
+</p>
+</section>
+<section id="turtle">
+<h3>
+<span class="secno">
+B.2
+</span>
+Turtle
+</h3>
+<p>
+The
+following
+are
+examples
+of
+converting
+<a class="tref internalDFN" title="rdf" href="#dfn-rdf">
+RDF
+</a>
+expressed
+in
+[
+<cite>
+<a class="bibref" href="#bib-TURTLE-TR">
+TURTLE-TR
+</a>
+</cite>
+]
+into
+JSON-LD.
+</p>
+<section id="prefix-definitions">
+<h4>
+<span class="secno">
+B.2.1
+</span>
+Prefix
+definitions
+</h4>
+<p>
+<em>
+This
+section
+is
+non-normative.
+</em>
+</p>
+<p>
+The
+JSON-LD
+context
+has
+direct
+equivalents
+for
+the
+Turtle
+<code>
+@prefix
+</code>
+declaration:
+</p>
+<del class="diff-old">@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+</del>
+<div class="example"><div class="example-title"><span>Example 69</span></div><pre class="example">@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+<http://manu.sporny.org/i/public> a foaf:Person;
+ foaf:name "Manu Sporny";
+foaf:homepage
+<http://manu.sporny.org/>
+.
+</pre>
+</div>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 70</span></div><pre class="example">{
+ "@context":
+ {
+ "foaf": "http://xmlns.com/foaf/0.1/"
+ },
+ "@id": "http://manu.sporny.org/i/public",
+ "@type": "foaf:Person",
+ "foaf:name": "Manu Sporny",
+ "foaf:homepage": { "@id": "http://manu.sporny.org/" }
+}
+</pre>
+</div>
+<div class="note">
+<div class="note-title">
+<span>
+Note
+</span>
+</div>
+<p class="">
+JSON-LD
+has
+no
+equivalent
+for
+the
+Turtle
+<code>
+@base
+</code>
+declaration.
+<del class="diff-old">Instead,
+authors
+may
+use
+a
+prefix
+definition
+to
+resolve
+relative
+IRI
+s:
+</del>
+</p>
+<del class="diff-old">{
+ "@context":
+ {
+
+ "foaf": "http://xmlns.com/foaf/0.1/"
+ },
+ "@id": ,
+ "@type": "foaf:Person",
+ "foaf:name": "Manu Sporny",
+ "foaf:homepage": { "@id": }
+}
+</del>
+</div>
+</section>
+<section id="embedding-1">
+<h4>
+<span class="secno">
+B.2.2
+</span>
+Embedding
+</h4>
+<p>
+Both
+Turtle
+and
+JSON-LD
+allow
+<del class="diff-old">embedding
+of
+objects,
+</del>
+<ins class="diff-chg">embedding,
+</ins>
+although
+Turtle
+only
+allows
+embedding
+of
+<del class="diff-old">objects
+which
+use
+</del>
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">
+unlabeled
+<del class="diff-old">node
+identifiers.
+</del>
+<ins class="diff-chg">nodes
+</ins></a>.
+</p>
+<del class="diff-old">@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+</del>
+</section>
+<div class="example"><div class="example-title"><span>Example 71</span></div><pre class="example">@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+<http://manu.sporny.org/i/public>
+ a foaf:Person;
+ foaf:name "Manu Sporny";
+foaf:knows
+[
+a
+foaf:Person;
+foaf:name
+"Gregg
+Kellogg"
+]
+.
+</pre>
+</div>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 72</span></div><pre class="example">{
+ "@context":
+ {
+ "foaf": "http://xmlns.com/foaf/0.1/"
+ },
+ "@id": "http://manu.sporny.org/i/public",
+ "@type": "foaf:Person",
+ "foaf:name": "Manu Sporny",
+ "foaf:knows":
+ {
+ "@type": "foaf:Person",
+ "foaf:name": "Gregg Kellogg"
+ }
+}
+</pre>
+</div>
+<section id="lists">
+<h4>
+<span class="secno">
+B.2.3
+</span>
+Lists
+</h4>
+<p>
+Both
+JSON-LD
+and
+Turtle
+can
+represent
+sequential
+lists
+of
+values.
+</p>
+<del class="diff-old">@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+</del>
+<div class="example"><div class="example-title"><span>Example 73</span></div><pre class="example">@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+<http://example.org/people#joebob> a foaf:Person;
+ foaf:name "Joe Bob";
+foaf:nick
+(
+"joe"
+"bob"
+"jaybee"
+)
+.
+</pre>
+</div>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 74</span></div><pre class="example">{
+ "@context":
+ {
+ "foaf": "http://xmlns.com/foaf/0.1/"
+ },
+ "@id": "http://example.org/people#joebob",
+ "@type": "foaf:Person",
+ "foaf:name": "Joe Bob",
+ "foaf:nick":
+ {
+ "@list": [ "joe", "bob", "jaybee" ]
+ }
+}
+</pre>
+</div>
+</section>
+</section>
+<section id="rdfa">
+<h3>
+<span class="secno">
+B.3
+</span>
+RDFa
+</h3>
+<p>
+The
+following
+example
+describes
+three
+people
+with
+their
+respective
+names
+and
+homepages.
+</p>
+<del class="diff-old">>
+</del>
+<div class="example"><div class="example-title"><span>Example 75</span></div><pre class="example"><div <span class="diff">prefix="foaf: http://xmlns.com/foaf/0.1/"</span>>
+ <ul>
+ <li <span class="diff">typeof="foaf:Person"</span>>
+ <a <span class="diff">rel="foaf:homepage" href="http://example.com/bob/" property="foaf:name" </span>>Bob</a>
+ </li>
+ <li <span class="diff">typeof="foaf:Person"</span>>
+ <a <span class="diff">rel="foaf:homepage" href="http://example.com/eve/" property="foaf:name" </span>>Eve</a>
+ </li>
+ <li <span class="diff">typeof="foaf:Person"</span>>
+ <a <span class="diff">rel="foaf:homepage" href="http://example.com/manu/" property="foaf:name" </span>>Manu</a>
+ </li>
+ </ul>
+</div>
+</pre>
+</div>
+<p>
+An
+example
+JSON-LD
+implementation
+using
+a
+single
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+is
+described
+below.
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 76</span></div><pre class="example">{
+ "@context":
+ {
+ "foaf": "http://xmlns.com/foaf/0.1/"
+ },
+ "@graph":
+ [
+ {
+ "@type": "foaf:Person",
+ "foaf:homepage": "http://example.com/bob/",
+ "foaf:name": "Bob"
+ },
+ {
+ "@type": "foaf:Person",
+ "foaf:homepage": "http://example.com/eve/",
+ "foaf:name": "Eve"
+ },
+ {
+ "@type": "foaf:Person",
+ "foaf:homepage": "http://example.com/manu/",
+ "foaf:name": "Manu"
+ }
+ ]
+}
+</pre>
+</div>
+</section>
+<section id="microformats">
+<h3>
+<span class="secno">
+B.4
+</span>
+Microformats
+</h3>
+<p>
+The
+following
+example
+uses
+a
+simple
+Microformats
+hCard
+example
+to
+express
+how
+the
+Microformat
+is
+represented
+in
+JSON-LD.
+</p>
+<del class="diff-old"><div class="vcard">
+</del>
+<div class="example"><div class="example-title"><span>Example 77</span></div><pre class="example"><div class="vcard">
+ <a class="url fn" href="http://tantek.com/">Tantek Çelik</a>
+</div>
+</pre>
+</div>
+<p>
+The
+representation
+of
+the
+hCard
+expresses
+the
+Microformat
+terms
+in
+the
+<a class="tref internalDFN" title="context" href="#dfn-context">
+context
+</a>
+and
+uses
+them
+directly
+for
+the
+<code>
+url
+</code>
+and
+<code>
+fn
+</code>
+properties.
+Also
+note
+that
+the
+Microformat
+to
+JSON-LD
+processor
+has
+generated
+the
+proper
+URL
+type
+for
+<code>
+http://tantek.com/
+</code>.
+</p>
+<del class="diff-old">{
+</del>
+<div class="example"><div class="example-title"><span>Example 78</span></div><pre class="example">{
+ "@context":
+ {
+ "vcard": "http://microformats.org/profile/hcard#vcard",
+ "url":
+ {
+ "@id": "http://microformats.org/profile/hcard#url",
+ "@type": "@id"
+ },
+ "fn": "http://microformats.org/profile/hcard#fn"
+ },
+ "@type": "vcard",
+ "url": "http://tantek.com/",
+ "fn": "Tantek Çelik"
+}
+</pre>
+</div>
+</section>
+<section id="microdata">
+<h3>
+<span class="secno">
+B.5
+</span>
+Microdata
+</h3>
+<p>
+The
+microdata
+example
+below
+expresses
+book
+information
+as
+a
+microdata
+Work
+item.
+</p>
+<del class="diff-old"><dl itemscope
+</del>
+<div class="example"><div class="example-title"><span>Example 79</span></div><pre class="example"><dl itemscope
+ itemtype="http://purl.org/vocab/frbr/core#Work"
+ itemid="http://purl.oreilly.com/works/45U8QJGZSQKDH8N">
+ <dt>Title</dt>
+ <dd><cite itemprop="http://purl.org/dc/terms/title">Just a Geek</cite></dd>
+ <dt>By</dt>
+ <dd><span itemprop="http://purl.org/dc/terms/creator">Wil Wheaton</span></dd>
+ <dt>Format</dt>
+ <dd itemprop="http://purl.org/vocab/frbr/core#realization"
+ itemscope
+ itemtype="http://purl.org/vocab/frbr/core#Expression"
+ itemid="http://purl.oreilly.com/products/9780596007683.BOOK">
+ <link itemprop="http://purl.org/dc/terms/type" href="http://purl.oreilly.com/product-types/BOOK">
+ Print
+ </dd>
+ <dd itemprop="http://purl.org/vocab/frbr/core#realization"
+ itemscope
+ itemtype="http://purl.org/vocab/frbr/core#Expression"
+ itemid="http://purl.oreilly.com/products/9780596802189.EBOOK">
+ <link itemprop="http://purl.org/dc/terms/type" href="http://purl.oreilly.com/product-types/EBOOK">
+ Ebook
+ </dd>
+</dl>
+</pre>
+</div>
+<p>
+Note
+that
+the
+JSON-LD
+representation
+of
+the
+Microdata
+information
+stays
+true
+to
+the
+desires
+of
+the
+Microdata
+community
+to
+avoid
+contexts
+and
+instead
+refer
+to
+items
+by
+their
+full
+<a class="tref internalDFN" title="iri" href="#dfn-iri">
+<abbr title="Internationalized Resource Identifier">
+IRI
+</abbr>
+</a>.
+</p>
+<del class="diff-old">[
+</del>
+<div class="example"><div class="example-title"><span>Example 80</span></div><pre class="example">[
+ {
+ "@id": "http://purl.oreilly.com/works/45U8QJGZSQKDH8N",
+ "@type": "http://purl.org/vocab/frbr/core#Work",
+ "http://purl.org/dc/terms/title": "Just a Geek",
+ "http://purl.org/dc/terms/creator": "Whil Wheaton",
+ "http://purl.org/vocab/frbr/core#realization":
+ [
+ "http://purl.oreilly.com/products/9780596007683.BOOK",
+ "http://purl.oreilly.com/products/9780596802189.EBOOK"
+ ]
+ },
+ {
+ "@id": "http://purl.oreilly.com/products/9780596007683.BOOK",
+ "@type": "http://purl.org/vocab/frbr/core#Expression",
+ "http://purl.org/dc/terms/type": "http://purl.oreilly.com/product-types/BOOK"
+ },
+ {
+ "@id": "http://purl.oreilly.com/products/9780596802189.EBOOK",
+ "@type": "http://purl.org/vocab/frbr/core#Expression",
+ "http://purl.org/dc/terms/type": "http://purl.oreilly.com/product-types/EBOOK"
+ }
+]
+</pre>
+</div>
+</section>
+</section>
+<section class="appendix informative" id="iana-considerations">
+<h2>
+<span class="secno">
+C.
+</span>
+IANA
+Considerations
+</h2>
+<p>
+<em>
+This
+section
+is
+non-normative.
+</em>
+</p>
+<p>
+This
+section
+is
+included
+merely
+for
+standards
+community
+review
+and
+will
+be
+submitted
+to
+the
+Internet
+Engineering
+Steering
+Group
+if
+this
+specification
+becomes
+a
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+Recommendation.
+</p>
+<h2 id="application-ld-json">
+application/ld+json
+</h2>
+<dl>
+<dt>
+Type
+name:
+</dt>
+<dd>
+application
+</dd>
+<dt>
+Subtype
+name:
+</dt>
+<dd>
+ld+json
+</dd>
+<dt>
+Required
+parameters:
+</dt>
+<dd>
+None
+</dd>
+<dt>
+Optional
+parameters:
+</dt>
+<dd>
+<dl>
+<dt>
+<code>
+form
+</code>
+</dt>
+<dd>
+Determines
+the
+serialization
+form
+for
+the
+JSON-LD
+document.
+The
+only
+valid
+value
+at
+the
+moment
+is
+<code>
+expanded
+</code>.
+If
+no
+form
+is
+specified
+in
+an
+HTTP
+request
+header
+to
+an
+HTTP
+server,
+the
+server
+<em class="rfc2119" title="may">
+may
+</em>
+choose
+any
+form.
+If
+no
+form
+is
+specified
+in
+an
+HTTP
+response,
+the
+form
+<em class="rfc2119" title="must not">
+must
+not
+</em>
+be
+assumed
+to
+take
+any
+particular
+form.
+</dd>
+</dl>
+</dd>
+<dt>
+Encoding
+considerations:
+</dt>
+<dd>
+The
+same
+as
+the
+<code>
+application/json
+</code>
+MIME
+media
+type.
+</dd>
+<dt>
+Security
+considerations:
+</dt>
+<dd>
+Since
+JSON-LD
+is
+intended
+to
+be
+a
+pure
+data
+exchange
+format
+for
+directed
+graphs,
+the
+serialization
+<em class="rfc2119" title="should not">
+should
+not
+</em>
+be
+passed
+through
+a
+code
+execution
+mechanism
+such
+as
+JavaScript's
+<code>
+eval()
+</code>
+function.
+It
+is
+<em class="rfc2119" title="recommended">
+recommended
+</em>
+that
+a
+conforming
+parser
+does
+not
+attempt
+to
+directly
+evaluate
+the
+JSON-LD
+serialization
+and
+instead
+purely
+parse
+the
+input
+into
+a
+language-native
+data
+structure.
+</dd>
+<dt>
+Interoperability
+considerations:
+</dt>
+<dd>
+Not
+Applicable
+</dd>
+<dt>
+Published
+specification:
+</dt>
+<dd>
+The
+<a href="http://json-ld.org/spec/latest/">
+JSON-LD
+</a>
+specification.
+</dd>
+<dt>
+Applications
+that
+use
+this
+media
+type:
+</dt>
+<dd>
+Any
+programming
+environment
+that
+requires
+the
+exchange
+of
+directed
+graphs.
+Implementations
+of
+JSON-LD
+have
+been
+created
+for
+JavaScript,
+Python,
+Ruby,
+PHP
+and
+C++.
+</dd>
+<dt>
+Additional
+information:
+</dt>
+<dd>
+<dl>
+<dt>
+Magic
+number(s):
+</dt>
+<dd>
+Not
+Applicable
+</dd>
+<dt>
+File
+extension(s):
+</dt>
+<dd>.jsonld
+</dd>
+<dt>
+Macintosh
+file
+type
+code(s):
+</dt>
+<dd>
+TEXT
+</dd>
+</dl>
+</dd>
+<dt>
+Person
+&
+email
+address
+to
+contact
+for
+further
+information:
+</dt>
+<dd>
+Manu
+Sporny
+<msporny@digitalbazaar.com>
+</dd>
+<dt>
+Intended
+usage:
+</dt>
+<dd>
+Common
+</dd>
+<dt>
+Restrictions
+on
+usage:
+</dt>
+<dd>
+None
+</dd>
+<dt>
+Author(s):
+</dt>
+<dd>
+Manu
+Sporny,
+Gregg
+Kellogg,
+Markus
+Lanthaler,
+Dave
+Longley
+</dd>
+<dt>
+Change
+controller:
+</dt>
+<dd>
+<abbr title="World Wide Web Consortium">
+W3C
+</abbr>
+</dd>
+</dl>
+<p>
+Fragment
+identifiers
+used
+with
+<a href="#application-ld-json">
+application/ld+json
+</a>
+resources
+<em class="rfc2119" title="may">
+may
+</em>
+identify
+a
+node
+in
+the
+<a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">
+linked
+data
+graph
+</a>
+expressed
+in
+the
+resource.
+This
+idiom,
+which
+is
+also
+used
+in
+RDF
+[
+<cite>
+<a class="bibref" href="#bib-RDF-CONCEPTS">
+RDF-CONCEPTS
+</a>
+</cite>
+],
+gives
+a
+simple
+way
+to
+"mint"
+new,
+document-local
+IRIs
+to
+label
+nodes
+and
+therefore
+contributes
+considerably
+to
+the
+expressive
+power
+of
+JSON-LD.
+</p>
+</section>
+<section class="appendix informative" id="acknowledgements">
+<h2>
+<span class="secno">
+D.
+</span>
+Acknowledgements
+</h2>
+<p>
+<em>
+This
+section
+is
+non-normative.
+</em>
+</p>
+<p>
+<ins class="diff-new">A
+large
+amount
+of
+thanks
+goes
+out
+to
+the
+JSON-LD
+Community
+Group
+participants
+who
+worked
+through
+many
+of
+the
+technical
+issues
+on
+the
+mailing
+list
+and
+the
+weekly
+telecons
+-
+of
+special
+mention
+are
+Niklas
+Lindström,
+François
+Daoust,
+and
+Zdenko
+'Denny'
+Vrandečić.
+</ins>
+The
+editors
+would
+like
+to
+thank
+Mark
+Birbeck,
+who
+provided
+a
+great
+deal
+of
+the
+initial
+push
+behind
+the
+JSON-LD
+work
+via
+his
+work
+on
+<del class="diff-old">RDFj,
+</del>
+<ins class="diff-chg">RDFj.
+The
+work
+of
+</ins>
+Dave
+Lehn
+and
+Mike
+Johnson
+<del class="diff-old">who
+reviewed,
+provided
+feedback,
+</del>
+<ins class="diff-chg">are
+appreciated
+for
+reviewing,
+</ins>
+and
+<del class="diff-old">performed
+</del>
+<ins class="diff-chg">performing
+</ins>
+several
+implementations
+of
+the
+<del class="diff-old">specification,
+and
+</del>
+<ins class="diff-chg">specification.
+</ins>
+Ian
+<del class="diff-old">Davis,
+who
+created
+</del>
+<ins class="diff-chg">Davis
+is
+thanked
+for
+this
+work
+on
+</ins>
+RDF/JSON.
+Thanks
+also
+to
+<del class="diff-old">Nath
+</del>
+<ins class="diff-chg">Nathan
+Rixham,
+Bradley
+P.
+Allen,
+Kingsley
+Idehen,
+Glenn
+McDonald,
+Alexandre
+Passant,
+Danny
+Ayers,
+Ted
+Thibodeau
+Jr.,
+Olivier
+Grisel,
+Josh
+Mandel,
+Eric
+Prud'hommeaux,
+David
+Wood,
+Guus
+Schreiber,
+Pat
+Hayes,
+Sandro
+Hawke,
+and
+Richard
+Cyganiak
+for
+their
+input
+on
+the
+specification.
+</ins></p></section><section id="references" class="appendix"><h2><span class="secno"><ins class="diff-chg">
+E.
+</ins></span><ins class="diff-chg">
+References
+</ins></h2><section id="normative-references"><h3><span class="secno"><ins class="diff-chg">
+E.1
+</ins></span><ins class="diff-chg">
+Normative
+references
+</ins></h3><dl class="bibliography"><dt id="bib-BCP47"><ins class="diff-chg">
+[BCP47]
+</ins></dt><dd><ins class="diff-chg">
+A.
+Phillips;
+M.
+Davis.
+</ins><a href="http://tools.ietf.org/html/bcp47"><cite><ins class="diff-chg">
+Tags
+for
+Identifying
+Languages
+</ins></cite></a><ins class="diff-chg">
+September
+2009.
+IETF
+Best
+Current
+Practice.
+URL:
+</ins><a href="http://tools.ietf.org/html/bcp47"><ins class="diff-chg">
+http://tools.ietf.org/html/bcp47
+</ins></a></dd><dt id="bib-RDF-CONCEPTS"><ins class="diff-chg">
+[RDF-CONCEPTS]
+</ins></dt><dd><cite><a href="http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/"><ins class="diff-chg">
+RDF
+1.1
+Concepts
+and
+Abstract
+Syntax
+</ins></a></cite><ins class="diff-chg">
+Richard
+Cyganiak,
+David
+Wood,
+Editors.
+World
+Wide
+Web
+Consortium
+(work
+in
+progress).
+30
+May
+2012.
+Editor's
+Draft.
+This
+edition
+of
+the
+JSON-LD
+Syntax
+specification
+is
+http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/.
+The
+</ins><a href="http://www.w3.org/TR/rdf11-concepts/"><ins class="diff-chg">
+latest
+edition
+of
+the
+JSON-LD
+Syntax
+</ins></a><ins class="diff-chg">
+is
+available
+at
+http://www.w3.org/TR/rdf11-concepts/
+</ins></dd><dt id="bib-RFC3987"><ins class="diff-chg">
+[RFC3987]
+</ins></dt><dd><ins class="diff-chg">
+M.
+Dürst;
+M.
+Suignard.
+</ins><a href="http://www.ietf.org/rfc/rfc3987.txt"><cite><ins class="diff-chg">
+Internationalized
+Resource
+Identifiers
+(IRIs).
+</ins></cite></a><ins class="diff-chg">
+January
+2005.
+Internet
+RFC
+3987.
+URL:
+</ins><a href="http://www.ietf.org/rfc/rfc3987.txt"><ins class="diff-chg">
+http://www.ietf.org/rfc/rfc3987.txt
+</ins></a></dd><dt id="bib-RFC4627"><ins class="diff-chg">
+[RFC4627]
+</ins></dt>
+<dd>
+<ins class="diff-new">D.
+Crockford.
+</ins><a href="http://www.ietf.org/rfc/rfc4627.txt"><cite><ins class="diff-new">
+The
+application/json
+Media
+Type
+for
+JavaScript
+Object
+Notation
+(JSON)
+</ins></cite></a><ins class="diff-new">
+July
+2006.
+Internet
+RFC
+4627.
+URL:
+</ins><a href="http://www.ietf.org/rfc/rfc4627.txt"><ins class="diff-new">
+http://www.ietf.org/rfc/rfc4627.txt
+</ins></a></dd><dt id="bib-RFC5988"><ins class="diff-new">
+[RFC5988]
+</ins></dt><dd><cite><a href="http://tools.ietf.org/rfc/rfc5988"><ins class="diff-new">
+Web
+Linking
+</ins></a></cite><ins class="diff-new">
+M.
+Nottingham.
+Editor.
+October
+2010.
+IETF
+Standard.
+URL:
+</ins><a href="http://tools.ietf.org/rfc/rfc5988.txt"><ins class="diff-new">
+http://tools.ietf.org/rfc/rfc5988.txt
+</ins></a></dd></dl></section><section id="informative-references"><h3><span class="secno"><ins class="diff-new">
+E.2
+</ins></span><ins class="diff-new">
+Informative
+references
+</ins></h3><dl class="bibliography"><dt id="bib-JSON-LD-API"><ins class="diff-new">
+[JSON-LD-API]
+</ins></dt><dd><cite><a href="http://json-ld.org/spec/ED/json-ld-api/20120524/"><ins class="diff-new">
+The
+JSON-LD
+API
+1.0
+</ins></a></cite><ins class="diff-new">
+Manu
+Sporny,
+Gregg
+Kellogg,
+Dave
+Longley,
+Markus
+Lanthaler,
+Editors.
+World
+Wide
+Web
+Consortium
+(work
+in
+progress).
+24
+May
+2012.
+Editor's
+Draft.
+This
+edition
+of
+the
+JSON-LD
+Syntax
+specification
+is
+http://json-ld.org/spec/ED/json-ld-api/20120524/.
+The
+</ins><a href="http://json-ld.org/spec/latest/json-ld-api/"><ins class="diff-new">
+latest
+edition
+of
+the
+JSON-LD
+Syntax
+</ins></a><ins class="diff-new">
+is
+available
+at
+http://json-ld.org/spec/latest/json-ld-api/
+</ins></dd><dt id="bib-RDF-PRIMER"><ins class="diff-new">
+[RDF-PRIMER]
+</ins></dt><dd><ins class="diff-new">
+Frank
+Manola;
+Eric
+Miller.
+</ins><a href="http://www.w3.org/TR/2004/REC-rdf-primer-20040210/"><cite><ins class="diff-new">
+RDF
+Primer.
+</ins></cite></a><ins class="diff-new">
+10
+February
+2004.
+W3C
+Recommendation.
+URL:
+</ins><a href="http://www.w3.org/TR/2004/REC-rdf-primer-20040210/"><ins class="diff-new">
+http://www.w3.org/TR/2004/REC-rdf-primer-20040210/
+</ins></a></dd><dt id="bib-RDF-SPARQL-QUERY"><ins class="diff-new">
+[RDF-SPARQL-QUERY]
+</ins></dt><dd><ins class="diff-new">
+Andy
+Seaborne;
+Eric
+Prud'hommeaux.
+</ins><a href="http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115"><cite><ins class="diff-new">
+SPARQL
+Query
+Language
+for
+RDF.
+</ins></cite></a><ins class="diff-new">
+15
+January
+2008.
+W3C
+Recommendation.
+URL:
+</ins><a href="http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115"><ins class="diff-new">
+http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115
+</ins></a></dd><dt id="bib-RDFA-CORE"><ins class="diff-new">
+[RDFA-CORE]
+</ins></dt><dd><ins class="diff-new">
+Shane
+McCarron;
+et
+al.
+</ins><a href="http://www.w3.org/TR/2012/REC-rdfa-core-201
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/spec/ED/json-ld-syntax/20120830/index.html Thu Aug 30 16:50:04 2012 +0200
@@ -0,0 +1,3141 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
+<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml" typeof="bibo:Document">
+<head>
+<title>JSON-LD Syntax 1.0</title>
+<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+
+<!--
+ === NOTA BENE ===
+ For the three scripts below, if your spec resides on dev.w3 you can check them
+ out in the same tree and use relative links so that they'll work offline,
+ -->
+
+
+
+<style type="text/css">
+.diff { font-weight:bold; color:#0a3; }
+.issue.resolved { display: none; }
+</style>
+<style>/*****************************************************************
+ * ReSpec 3 CSS
+ * Robin Berjon - http://berjon.com/
+ *****************************************************************/
+
+/* --- INLINES --- */
+em.rfc2119 {
+ text-transform: lowercase;
+ font-variant: small-caps;
+ font-style: normal;
+ color: #900;
+}
+
+h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
+h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
+ border: none;
+}
+
+dfn {
+ font-weight: bold;
+}
+
+a.internalDFN {
+ color: inherit;
+ border-bottom: 1px solid #99c;
+ text-decoration: none;
+}
+
+a.externalDFN {
+ color: inherit;
+ border-bottom: 1px dotted #ccc;
+ text-decoration: none;
+}
+
+a.bibref {
+ text-decoration: none;
+}
+
+cite .bibref {
+ font-style: normal;
+}
+
+code {
+ color: #ff4500;
+}
+
+
+/* --- --- */
+ol.algorithm { counter-reset:numsection; list-style-type: none; }
+ol.algorithm li { margin: 0.5em 0; }
+ol.algorithm li:before { font-weight: bold; counter-increment: numsection; content: counters(numsection, ".") ") "; }
+
+/* --- TOC --- */
+.toc a, .tof a {
+ text-decoration: none;
+}
+
+a .secno, a .figno {
+ color: #000;
+}
+
+ul.tof, ol.tof {
+ list-style: none outside none;
+}
+
+.caption {
+ margin-top: 0.5em;
+ font-style: italic;
+}
+
+/* --- TABLE --- */
+table.simple {
+ border-spacing: 0;
+ border-collapse: collapse;
+ border-bottom: 3px solid #005a9c;
+}
+
+.simple th {
+ background: #005a9c;
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+}
+
+.simple th[scope="row"] {
+ background: inherit;
+ color: inherit;
+ border-top: 1px solid #ddd;
+}
+
+.simple td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+}
+
+.simple tr:nth-child(even) {
+ background: #f0f6ff;
+}
+
+/* --- DL --- */
+.section dd > p:first-child {
+ margin-top: 0;
+}
+
+.section dd > p:last-child {
+ margin-bottom: 0;
+}
+
+.section dd {
+ margin-bottom: 1em;
+}
+
+.section dl.attrs dd, .section dl.eldef dd {
+ margin-bottom: 0;
+}
+</style><style>/* --- EXAMPLES --- */
+div.example-title {
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.example-title span {
+ text-transform: uppercase;
+}
+aside.example, div.example, div.illegal-example {
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+div.illegal-example { color: red }
+div.illegal-example p { color: black }
+aside.example, div.example {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+ border-color: #e0cb52;
+ background: #fcfaee;
+}
+
+aside.example div.example {
+ border-left-width: .1em;
+ border-color: #999;
+ background: #fff;
+}
+aside.example div.example div.example-title {
+ color: #999;
+}
+</style><style>/* --- ISSUES/NOTES --- */
+div.issue-title, div.note-title {
+ padding-right: 1em;
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.issue-title { color: #e05252; }
+div.note-title { color: #52e052; }
+div.issue-title span, div.note-title span {
+ text-transform: uppercase;
+}
+div.note, div.issue {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.note > p:first-child, .issue > p:first-child { margin-top: 0 }
+.issue, .note {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+}
+div.issue, div.note {
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+span.note, span.issue { padding: .1em .5em .15em; }
+
+.issue {
+ border-color: #e05252;
+ background: #fbe9e9;
+}
+.note {
+ border-color: #52e052;
+ background: #e9fbe9;
+}
+
+
+</style><link rel="stylesheet" href="http://www.w3.org/StyleSheets/TR/W3C-ED" />
+<!--[if lt IE 9]><script src='undefined://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]-->
+</head>
+
+<body><div class="head">
+ <p>
+
+ <a href="http://www.w3.org/"><img width="72" height="48" alt="W3C" src="http://www.w3.org/Icons/w3c_home" /></a>
+
+ </p>
+ <h1 id="title" class="title">JSON-LD Syntax 1.0</h1>
+
+ <h2 id="subtitle">A Context-based JSON Serialization for Linking Data</h2>
+
+ <h2 id="w3c-editor-s-draft-30-august-2012"><abbr title="World Wide Web Consortium">W3C</abbr> Editor's Draft 30 August 2012</h2>
+ <dl>
+
+ <dt>This version:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/ED/json-ld-syntax/20120830/index.html">http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/ED/json-ld-syntax/20120830/index.html</a></dd>
+ <dt>Latest published version:</dt>
+ <dd><a href="http://www.w3.org/TR/json-ld-syntax/">http://www.w3.org/TR/json-ld-syntax/</a></dd>
+
+
+ <dt>Latest editor's draft:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/latest/json-ld-syntax/index.html">http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/latest/json-ld-syntax/index.html</a></dd>
+
+
+
+
+
+
+
+
+ <dt>Editors:</dt>
+ <dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://manu.sporny.org/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">Manu Sporny</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
+</dd>
+<dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">Gregg Kellogg</a>, <a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">Kellogg Associates</a></span>
+</dd>
+<dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">Markus Lanthaler</a>, <a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">Graz University of Technology</a></span>
+</dd>
+
+
+ <dt>Authors:</dt>
+ <dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://digitalbazaar.com/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">Manu Sporny</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
+</dd>
+<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://digitalbazaar.com/" content="Dave Longley" property="foaf:name" rel="foaf:homepage">Dave Longley</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
+</dd>
+<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">Gregg Kellogg</a>, <a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">Kellogg Associates</a></span>
+</dd>
+<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">Markus Lanthaler</a>, <a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">Graz University of Technology</a></span>
+</dd>
+<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://webbackplane.com/" content="Mark Birbeck" property="foaf:name" rel="foaf:homepage">Mark Birbeck</a>, <a href="http://webbackplane.com/" rel="foaf:workplaceHomepage">Backplane Ltd.</a></span>
+</dd>
+
+
+ </dl>
+
+
+ <p>
+
+ This document is also available in this non-normative format:
+
+ <a href="diff-20120712.html">diff to previous version</a>
+ </p>
+
+
+
+
+ <p class="copyright">
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> ©
+ 2010-2012
+
+ <a href="http://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>,
+ <a href="http://www.ercim.eu/"><abbr title="European Research Consortium for Informatics and Mathematics">ERCIM</abbr></a>,
+ <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved.
+ <abbr title="World Wide Web Consortium">W3C</abbr> <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and
+ <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.
+ </p>
+
+
+ <hr />
+</div>
+<section id="abstract" class="introductory"><h2>Abstract</h2>
+<p>
+JSON has proven to be a highly useful object serialization and messaging format.
+In an attempt to harmonize the representation of <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>
+in JSON, this specification outlines a common JSON representation format for
+expressing directed graphs; mixing both Linked Data and non-Linked Data in
+a single document.
+</p>
+</section><section class="introductory" id="sotd"><h2>Status of This Document</h2>
+
+
+
+ <p>
+ <em>This section describes the status of this document at the time of its publication. Other
+ documents may supersede this document. A list of current <abbr title="World Wide Web Consortium">W3C</abbr> publications and the latest revision
+ of this technical report can be found in the <a href="http://www.w3.org/TR/"><abbr title="World Wide Web Consortium">W3C</abbr> technical reports
+ index</a> at http://www.w3.org/TR/.</em>
+ </p>
+
+<p>This document has been under development for over 18 months in the
+JSON for Linking Data Community Group. The document has recently been
+transferred to the RDF Working Group for review, improvement, and publication
+along the Recommendation track. The specification has undergone significant
+development, review, and changes during the course of the last 18 months.
+</p>
+<p>
+There are currently
+<a href="http://json-ld.org/#impl">five interoperable implementations</a>
+of this specification. There is
+a <a href="https://github.com/json-ld/json-ld.org/tree/master/test-suite">fairly complete test suite</a>
+and a
+<a href="http://json-ld.org/playground/">live JSON-LD editor</a>
+that is capable of demonstrating the features described in
+this document. While development on implementations, the test suite
+and the live editor will continue, they are believed to be mature enough
+to be integrated into a non-production system at this point in time with
+the expectation that they could be used in a production system within the
+next year.
+</p>
+
+<p>There are a number of ways that one may participate in the development of
+this specification:</p>
+
+<ul>
+ <li>If you want to make sure that your feedback is formally addressed by
+ the RDF Working Group, you should send it to public-rdf-comments:
+ <a href="http://lists.w3.org/Archives/Public/public-rdf-comments/">public-rdf-comments@w3.org</a></li>
+
+ <li>Ad-hoc technical discussion primarily occurs on the public community mailing list:
+ <a href="http://lists.w3.org/Archives/Public/public-linked-json/">public-linked-json@w3.org</a></li>
+
+ <li><a href="http://json-ld.org/minutes/">Public JSON-LD Community Group teleconferences</a>
+ are held on Tuesdays at 1500UTC every week.</li>
+
+ <li>RDF Working Group teleconferences are held on Wednesdays at 1500UTC
+ every week. Participation is limited to RDF Working Group members.</li>
+
+ <li>Specification bugs and issues should be reported in the
+ <a href="https://github.com/json-ld/json-ld.org/issues">issue tracker</a>
+ if you do not want to send an e-mail to the public-rdf-comments mailing
+ list.</li>
+
+ <li><a href="https://github.com/json-ld/json-ld.org/tree/master/spec">Source code</a>
+ for the specification can be found on Github.</li>
+
+ <li>The <a href="http://webchat.freenode.net/?channels=json-ld">#json-ld</a>
+ IRC channel is available for real-time discussion on irc.freenode.net.</li>
+</ul>
+
+
+ <p>
+ This document was published by the <a href="http://www.w3.org/2011/rdf-wg/">RDF Working Group</a> as an Editor's Draft.
+
+ If you wish to make comments regarding this document, please send them to
+ <a href="mailto:public-rdf-comments@w3.org">public-rdf-comments@w3.org</a>
+ (<a href="mailto:public-rdf-comments-request@w3.org?subject=subscribe">subscribe</a>,
+ <a href="http://lists.w3.org/Archives/Public/public-rdf-comments/">archives</a>).
+
+
+ All feedback is welcome.
+ </p>
+
+ <p>
+ Publication as an Editor's Draft does not imply endorsement by the <abbr title="World Wide Web Consortium">W3C</abbr> Membership.
+ This is a draft document and may be updated, replaced or obsoleted by other documents at
+ any time. It is inappropriate to cite this document as other than work in progress.
+ </p>
+
+
+ <p>
+
+ This document was produced by a group operating under the
+ <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.
+
+
+
+
+ <abbr title="World Wide Web Consortium">W3C</abbr> maintains a <a rel="disclosure" href="http://www.w3.org/2004/01/pp-impl/46168/status">public list of any patent disclosures</a>
+
+ made in connection with the deliverables of the group; that page also includes instructions for
+ disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains
+ <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the
+ information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section
+ 6 of the <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.
+
+
+ </p>
+
+
+
+
+</section><section id="toc"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a><ul class="toc"><li class="tocline"><a href="#how-to-read-this-document" class="tocxref"><span class="secno">1.1 </span>How to Read this Document</a></li><li class="tocline"><a href="#general-terminology" class="tocxref"><span class="secno">1.2 </span>General Terminology</a></li></ul></li><li class="tocline"><a href="#design-goals-and-rationale" class="tocxref"><span class="secno">2. </span>Design Goals and Rationale</a></li><li class="tocline"><a href="#basic-concepts" class="tocxref"><span class="secno">3. </span>Basic Concepts</a><ul class="toc"><li class="tocline"><a href="#linked-data" class="tocxref"><span class="secno">3.1 </span>Linked Data</a></li><li class="tocline"><a href="#syntax-tokens-and-keywords" class="tocxref"><span class="secno">3.2 </span>Syntax Tokens and Keywords</a></li><li class="tocline"><a href="#the-context" class="tocxref"><span class="secno">3.3 </span>The Context</a></li><li class="tocline"><a href="#from-json-to-json-ld" class="tocxref"><span class="secno">3.4 </span>From JSON to JSON-LD</a></li><li class="tocline"><a href="#iris" class="tocxref"><span class="secno">3.5 </span>IRIs</a></li><li class="tocline"><a href="#node-identifiers" class="tocxref"><span class="secno">3.6 </span>Node Identifiers</a></li><li class="tocline"><a href="#specifying-the-type" class="tocxref"><span class="secno">3.7 </span>Specifying the Type</a></li><li class="tocline"><a href="#string-internationalization" class="tocxref"><span class="secno">3.8 </span>String Internationalization</a></li><li class="tocline"><a href="#json-ld-syntax" class="tocxref"><span class="secno">3.9 </span>JSON-LD Syntax</a></li></ul></li><li class="tocline"><a href="#advanced-concepts" class="tocxref"><span class="secno">4. </span>Advanced Concepts</a><ul class="toc"><li class="tocline"><a href="#compact-iris" class="tocxref"><span class="secno">4.1 </span>Compact IRIs</a></li><li class="tocline"><a href="#typed-values" class="tocxref"><span class="secno">4.2 </span>Typed Values</a></li><li class="tocline"><a href="#language-tagged-strings" class="tocxref"><span class="secno">4.3 </span>Language-tagged Strings</a></li><li class="tocline"><a href="#referencing-contexts-from-json-documents" class="tocxref"><span class="secno">4.4 </span>Referencing Contexts from JSON Documents</a></li><li class="tocline"><a href="#expanded-term-definition" class="tocxref"><span class="secno">4.5 </span>Expanded Term Definition</a></li><li class="tocline"><a href="#type-coercion" class="tocxref"><span class="secno">4.6 </span>Type Coercion</a></li><li class="tocline"><a href="#property-generators" class="tocxref"><span class="secno">4.7 </span>Property Generators</a></li><li class="tocline"><a href="#iri-expansion-within-a-context" class="tocxref"><span class="secno">4.8 </span><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion Within a Context</a></li><li class="tocline"><a href="#sets-and-lists" class="tocxref"><span class="secno">4.9 </span>Sets and Lists</a></li><li class="tocline"><a href="#embedding" class="tocxref"><span class="secno">4.10 </span>Embedding</a></li><li class="tocline"><a href="#named-graphs" class="tocxref"><span class="secno">4.11 </span>Named Graphs</a></li><li class="tocline"><a href="#identifying-unlabeled-nodes" class="tocxref"><span class="secno">4.12 </span>Identifying Unlabeled Nodes</a></li><li class="tocline"><a href="#aliasing-keywords" class="tocxref"><span class="secno">4.13 </span>Aliasing Keywords</a></li><li class="tocline"><a href="#expanded-document-form" class="tocxref"><span class="secno">4.14 </span>Expanded Document Form</a></li><li class="tocline"><a href="#compact-document-form" class="tocxref"><span class="secno">4.15 </span>Compact Document Form</a></li></ul></li><li class="tocline"><a href="#json-ld-grammar" class="tocxref"><span class="secno">A. </span>JSON-LD Grammar</a><ul class="toc"><li class="tocline"><a href="#grammar-node-definition" class="tocxref"><span class="secno">A.1 </span>Node Definition</a></li><li class="tocline"><a href="#grammar-node-reference" class="tocxref"><span class="secno">A.2 </span>Node Reference</a></li><li class="tocline"><a href="#grammar-language-map" class="tocxref"><span class="secno">A.3 </span>Language Map</a></li><li class="tocline"><a href="#grammar-expanded-values" class="tocxref"><span class="secno">A.4 </span>Expanded Values</a></li><li class="tocline"><a href="#grammar-set-list" class="tocxref"><span class="secno">A.5 </span>List and Set Values</a></li><li class="tocline"><a href="#grammar-context" class="tocxref"><span class="secno">A.6 </span>Context Definition</a></li></ul></li><li class="tocline"><a href="#relationship-to-other-linked-data-formats-and-data-models" class="tocxref"><span class="secno">B. </span>Relationship to Other Linked Data Formats and Data Models</a><ul class="toc"><li class="tocline"><a href="#rdf" class="tocxref"><span class="secno">B.1 </span>RDF</a></li><li class="tocline"><a href="#turtle" class="tocxref"><span class="secno">B.2 </span>Turtle</a><ul class="toc"><li class="tocline"><a href="#prefix-definitions" class="tocxref"><span class="secno">B.2.1 </span>Prefix definitions</a></li><li class="tocline"><a href="#embedding-1" class="tocxref"><span class="secno">B.2.2 </span>Embedding</a></li><li class="tocline"><a href="#lists" class="tocxref"><span class="secno">B.2.3 </span>Lists</a></li></ul></li><li class="tocline"><a href="#rdfa" class="tocxref"><span class="secno">B.3 </span>RDFa</a></li><li class="tocline"><a href="#microformats" class="tocxref"><span class="secno">B.4 </span>Microformats</a></li><li class="tocline"><a href="#microdata" class="tocxref"><span class="secno">B.5 </span>Microdata</a></li></ul></li><li class="tocline"><a href="#iana-considerations" class="tocxref"><span class="secno">C. </span>IANA Considerations</a></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">D. </span>Acknowledgements</a></li><li class="tocline"><a href="#references" class="tocxref"><span class="secno">E. </span>References</a><ul class="toc"><li class="tocline"><a href="#normative-references" class="tocxref"><span class="secno">E.1 </span>Normative references</a></li><li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">E.2 </span>Informative references</a></li></ul></li></ul></section>
+
+
+
+<section class="informative" id="introduction">
+
+<!--OddPage-->
+<h2><span class="secno">1. </span>Introduction</h2><p><em>This section is non-normative.</em></p>
+
+<p>
+JSON, as specified in [<cite><a class="bibref" href="#bib-RFC4627">RFC4627</a></cite>], is a simple language for representing
+data on the Web. <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> is a technique for creating a network
+of inter-connected data across different Web documents and Web sites.
+A <em>document</em> in this data network is typically identified using an
+<a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> (Internationalized Resource Identifier). A software program
+can typically follow an <abbr title="Internationalized Resource Identifier">IRI</abbr> just like you follow a URL by putting it into your
+browser's location bar. By following IRIs, a software program can find
+more information about the <em>document</em> and the <em>thing</em>s that
+the document describes.
+These <em>things</em> may also be identified using <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s. The
+<a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> allows a software program to start at one
+<em>document</em> and follow links to other
+<em>documents</em> or <em>things</em> in order to learn more about all of
+the <em>documents</em> and <em>things</em> described on the Web.
+</p>
+
+<p>
+JSON-LD is designed as a lightweight syntax that can be used to express
+<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>. It is primarily intended to be a way to use Linked Data
+in Javascript and other Web-based programming environments. It is also
+useful when building inter-operable Web services and when storing Linked
+Data in JSON-based document storage engines. It is practical and designed
+to be as simple as possible, utilizing the large number of JSON parsers
+and libraries available today.
+</p>
+
+<p>
+The syntax does not necessarily require applications to change their JSON, but
+allows one to easily add meaning by simply adding or referencing a context.
+The syntax is designed to not disturb already deployed systems
+running on JSON, but provide a smooth upgrade path from JSON to JSON-LD.
+Finally, the format is intended to be easy to parse, efficient
+to generate, and only requires a very small memory footprint in order to
+operate.
+</p>
+
+<section id="how-to-read-this-document">
+<h3><span class="secno">1.1 </span>How to Read this Document</h3><p><em>This section is non-normative.</em></p>
+
+<p>
+This document is a detailed specification for a serialization of Linked
+Data in JSON. The document is primarily intended for the following audiences:
+</p>
+
+<ul>
+ <li>Software developers that want to encode Linked Data in a way that is
+ cross-language compatible via JSON.</li>
+ <li>Software developers that want to understand the design decisions and
+ language syntax for JSON-LD.</li>
+ <li>Software developers that want to implement processors and APIs for
+ JSON-LD.</li>
+</ul>
+
+<p>This specification does not describe the programming interfaces for the
+JSON-LD Syntax. The specification that describes the programming interfaces
+for JSON-LD documents is the JSON-LD Application Programming Interface
+[<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>].</p>
+
+<p>
+To understand the basics in this specification you must first be familiar with
+JSON, which is detailed in [<cite><a class="bibref" href="#bib-RFC4627">RFC4627</a></cite>].</p>
+
+</section>
+
+<section id="general-terminology">
+ <h3><span class="secno">1.2 </span>General Terminology</h3>
+
+ <p>The following is an explanation of the general terminology used in this document:</p>
+
+ <dl>
+ <dt><dfn title="json_object" id="dfn-json_object">JSON object</dfn></dt><dd>
+ An object structure is represented as a pair of curly brackets
+ surrounding zero or more name-value pairs. A name is a
+ <a class="tref internalDFN" title="string" href="#dfn-string">string</a>. A single colon comes after each name, separating the
+ name from the value. A single comma separates a value from a following
+ name. The names within an object <em class="rfc2119" title="should">should</em> be unique.
+ </dd>
+ <dt><dfn title="array" id="dfn-array">array</dfn></dt>
+ <dd>
+ In JSON, an array is an <em>ordered</em> sequence of zero or more values.
+ An array is represented as square brackets surrounding
+ zero or more values that are separated by commas.
+ While JSON-LD uses the same array representation as JSON,
+ the collection is <em>unordered</em> by default. While order is
+ preserved in regular JSON arrays, it is not in regular JSON-LD arrays
+ unless specific markup is provided
+ (see <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>).</dd>
+ <dt><dfn title="string" id="dfn-string">string</dfn></dt><dd>
+ A string is a sequence of zero or more Unicode characters,
+ wrapped in double quotes, using backslash escapes (if necessary). A
+ character is represented as a single character string.</dd>
+ <dt><dfn title="number" id="dfn-number">number</dfn></dt>
+ <dd>
+ A number is similar to that used in most programming languages, except
+ that the octal and hexadecimal formats are not used and that leading
+ zeros are not allowed.</dd>
+ <dt><dfn title="true" id="dfn-true">true</dfn> and <dfn title="false" id="dfn-false">false</dfn></dt><dd>
+ Values that are used to express one of two possible boolean states.</dd>
+ <dt><dfn title="null" id="dfn-null">null</dfn></dt><dd>
+ The null value is used to make the JSON-LD processor "forget" any
+ previously defined JSON key that is associated with the null value.
+ If a previous definition doesn't exist, the entire key-value is ignored.
+ If a previous definition of the key does exist, the previous
+ definition is undefined.</dd>
+ <dt><dfn title="node_definition" id="dfn-node_definition">node definition</dfn></dt><dd>
+ A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to represent a <a class="tref internalDFN" title="node" href="#dfn-node">node</a> and
+ one or more properties of that node. A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is a
+ node definition if it does not contain they keys <code>@value</code>,
+ <code>@list</code> or <code>@set</code> and it has one or more keys other
+ than <code>@id</code>. A node definition <em class="rfc2119" title="may">may</em> be spread among different
+ parts of a document or even between different documents.</dd>
+ <dt><dfn title="node_reference" id="dfn-node_reference">node reference</dfn></dt><dd>
+ A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to reference a node having only the
+ <code>@id</code> key.</dd>
+ </dl>
+<p></p>
+
+</section>
+
+</section>
+
+<section class="informative" id="design-goals-and-rationale">
+
+<!--OddPage-->
+<h2><span class="secno">2. </span>Design Goals and Rationale</h2><p><em>This section is non-normative.</em></p>
+
+<p>A number of design goals were established before the creation of this
+ markup language:</p>
+
+<dl>
+ <dt>Simplicity</dt>
+ <dd>No extra
+ processors or software libraries should be necessary to use JSON-LD in its most
+ basic form. The language will provide developers with a very easy
+ learning curve. Developers need only know JSON and two
+ <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a> (<code>@context</code>
+ and <code>@id</code>) to use the basic functionality in JSON-LD.</dd>
+ <dt>Compatibility</dt>
+ <dd>The JSON-LD markup must be 100% compatible with JSON. This ensures that
+ all of the standard JSON libraries work seamlessly with JSON-LD documents.</dd>
+ <dt>Expressiveness</dt>
+ <dd>The syntax must be able to express directed graphs, which have been proven
+ to be able to express almost every real world data model.</dd>
+ <dt>Terseness</dt>
+ <dd>The JSON-LD syntax must be very terse and human readable, requiring as
+ little effort as possible from the developer.</dd>
+
+<!--<dt>Pragmatism</dt>
+ <dd>Mixing the expression of pure Linked Data with data that is not
+ linked was an approach that was driven by pragmatism. JSON-LD attempts to be
+ more practical than theoretical in its approach to Linked Data.</dd>-->
+
+ <dt>Zero Edits, most of the time</dt>
+ <dd>JSON-LD must provide a
+ <a href="#referencing-contexts-from-json-documents">mechanism</a>
+ that allows developers to specify <a class="tref internalDFN" title="context" href="#dfn-context">context</a> in a way that is
+ out-of-band.
+ This allows organizations that have
+ already deployed large JSON-based infrastructure to add meaning to their
+ JSON documents in a way that is not disruptive to their day-to-day operations and is
+ transparent to their current customers. At times, mapping JSON to
+ a graph representation can become difficult. In these instances, rather than
+ having JSON-LD support an esoteric use case, we chose not to support the
+ use case and support a simplified syntax instead. So, while Zero Edits is
+ a design goal, it is not always possible without adding great complexity to
+ the language.
+ </dd>
+ <dt>One-pass Processing</dt>
+ <dd>JSON-LD supports one-pass processing, which results in a very small memory
+ footprint when processing documents. For example, to expand a JSON-LD document
+ from a compacted form, only one pass is required over the data.</dd>
+ <dt>Linked Data-centric</dt>
+ <dd>The focus on Linked Data is placed at a much higher priority than the
+ focus on the Semantic Web. One outcome of this ordering of
+ priorities is an aggressively reduced focus on the Semantic Web stack
+ (RDF [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>], TURTLE [<cite><a class="bibref" href="#bib-TURTLE-TR">TURTLE-TR</a></cite>], triple stores, and
+ SPARQL [<cite><a class="bibref" href="#bib-RDF-SPARQL-QUERY">RDF-SPARQL-QUERY</a></cite>]).
+ While this may be off-putting to proponents of the Semantic Web, the audience
+ for this specification are Web developers that want a gentler introduction
+ and a simpler technology stack for using Linked Data in their Web applications.
+ Semantic Web concepts, such as conversion to and from RDF, are fully supported
+ by JSON-LD, but the implementation of these features are not elaborated upon
+ in this specification. See <a href="#relationship-to-other-linked-data-formats-and-data-models" class="sec-ref"><span class="secno">B.</span> <span class="sec-title">Relationship to Other Linked Data Formats and Data Models</span></a>
+ for more information about how JSON-LD integrates into the more traditional
+ Semantic Web stack.
+ </dd>
+</dl>
+</section>
+
+<section class="normative" id="basic-concepts">
+
+<!--OddPage-->
+<h2><span class="secno">3. </span>Basic Concepts</h2>
+
+<em>This section is normative.</em>
+
+<p>JSON-LD is designed to ensure that <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> concepts can be
+marked up in a way that is simple to understand and create by Web authors.
+In many cases, regular JSON markup can become Linked Data with the
+simple addition of a <a class="tref internalDFN" title="context" href="#dfn-context">context</a>. As more JSON-LD features are
+used, more semantics are added to the JSON markup.</p>
+
+<section id="linked-data">
+<h3><span class="secno">3.1 </span>Linked Data</h3>
+
+<p>
+The following definition for <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> is the one that will
+be used for this specification.
+</p>
+<ol>
+ <li><dfn title="linked_data" id="dfn-linked_data">Linked Data</dfn> is a set of documents, each containing a representation of a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</li>
+ <li>A <dfn title="linked_data_graph" id="dfn-linked_data_graph">linked data graph</dfn> is an unordered labeled directed graph, where <dfn title="node" id="dfn-node">nodes</dfn> are <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> or <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">Blank Nodes</a>, or other values.</li>
+ <li>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> having an outgoing edge <em class="rfc2119" title="must">must</em> be an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> or <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">Blank Node</a>.</li>
+ <li>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> having an incoming edge <em class="rfc2119" title="must">must</em> be an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>, <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">Blank Node</a>, or value such as a number or string.</li>
+ <li>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> <em class="rfc2119" title="may">may</em> have both incoming and outgoing edges.</li>
+ <li>An edge <em class="rfc2119" title="must">must</em> be labeled with an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, within the JSON-LD syntax, this label is called a <dfn title="property" id="dfn-property">property</dfn>.</li>
+ <li><a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> used within a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> <em class="rfc2119" title="should">should</em> be dereferenceable to a <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> document describing the resource denoted by that <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</li>
+</ol>
+
+<div class="note"><div class="note-title"><span>Note</span></div><div class="">
+ <p>A <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> document does not necessarily need to be expressed in JSON-LD. The notion of
+ <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> is a concept independent of any given serialization format. In particular, any document based on
+ an RDF serialization format is a <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> document.</p>
+
+ <p>This definition of <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> is entirely consistent with that in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>], although
+ <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> may not be a valid RDF document, any RDF document is an expression of <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>.</p>
+</div></div>
+
+<div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">An illustration of a linked data graph would probably help here.</p></div>
+
+<div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/47"><span>Issue 47</span></a></div><div class="">
+ <p>Richard Cyganiak suggests that the data model is at odds with [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>] and should
+ be more closely aligned with it instead of creating new terminology.</p>
+ <p>Note that this definition is provisional, and may be reverted to something closer to the original depending on community feedback.</p>
+ <ol>
+ <li><a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> is a set of documents, each containing a representation of a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</li>
+ <li>A <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> is an unordered labeled directed graph, where nodes are <em>subject</em>s or <em>object</em>s, and edges are labeled using <a class="tref internalDFN" title="property" href="#dfn-property">properties</a>.</li>
+ <li>A <em>subject</em> is any node in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> with at least one outgoing edge.</li>
+ <li>A <em>subject</em> <em class="rfc2119" title="should">should</em> be labeled with an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> (an Internationalized Resource Identifier as described in [<cite><a class="bibref" href="#bib-RFC3987">RFC3987</a></cite>]).</li>
+ <li>An <em>object</em> is a node in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> with at least one incoming edge.</li>
+ <li>An <em>object</em> <em class="rfc2119" title="may">may</em> be labeled with an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> or a label that is not an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> such as plain text, internationalized text, or a strictly-typed data value.</li>
+ <li>A node <em class="rfc2119" title="may">may</em> be a <em>subject</em> and an <em>object</em> at the same time.</li>
+ <li>A <a class="tref internalDFN" title="property" href="#dfn-property">property</a> is the label on an edge in a
+ <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</li>
+ <li>A <a class="tref internalDFN" title="property" href="#dfn-property">property</a> <em class="rfc2119" title="should">should</em> be an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</li>
+ <li>An <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> that is a label in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> <em class="rfc2119" title="should">should</em> be dereferencable to a <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> document describing the labeled <em>subject</em>, <a class="tref internalDFN" title="property" href="#dfn-property">property</a> or <em>object</em>.</li>
+ </ol>
+</div></div>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">JSON-LD allows properties to be BNodes, while RDF does
+ not. When used as just JSON-LD, this is not unreasonable;
+ it only becomes an issue (and could raise an exception) when
+ transformed to RDF.</p></div>
+
+<p>Note that the definition for <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> above is silent on the
+topic of <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled nodes</a>. Nevertheless, this specification allows for the expression
+of <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled nodes</a>, as most graph-based data sets on the Web contain a number
+of associated nodes that are not named and thus are not directly
+de-referenceable.
+</p>
+
+<p>JSON-LD defines a mechanism to map JSON terms, i.e., keys and values, to IRIs. This does not mean
+that JSON-LD requires every key or value to be an <abbr title="Internationalized Resource Identifier">IRI</abbr>, but rather ensures that
+keys and values can be mapped to IRIs if the developer desires to transform
+their data into <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>. There are a few techniques that can ensure
+that developers will generate good Linked Data for the Web. JSON-LD
+formalizes those techniques.
+</p>
+
+<p>We will be using the following JSON markup as the example for the
+rest of this section:
+</p>
+
+<div class="example"><div class="example-title"><span>Example 1</span>: Sample JSON object</div><pre class="example">{
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}</pre></div>
+
+</section>
+
+<section id="syntax-tokens-and-keywords">
+<h3><span class="secno">3.2 </span>Syntax Tokens and Keywords</h3>
+
+<p>JSON-LD specifies a number of syntax tokens and <dfn title="keyword" id="dfn-keyword">keywords</dfn>
+that are a core part of the language:</p>
+
+<dl>
+<dt><code>@context</code></dt>
+<dd>Used to define the short-hand names that are used throughout a JSON-LD
+ document. These short-hand names are called <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s and help
+ developers to express specific identifiers in a compact manner. The
+ <code>@context</code> keyword is described in detail in the section titled
+ <a href="#the-context" class="sec-ref"><span class="secno">3.3</span> <span class="sec-title">The Context</span></a>.</dd>
+<dt><code>@graph</code></dt><dd>Used to explicitly label a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.
+ This keyword is described in <a href="#named-graphs" class="sec-ref"><span class="secno">4.11</span> <span class="sec-title">Named Graphs</span></a>.</dd>
+<dt><code>@id</code></dt>
+<dd>Used to uniquely identify <em>things</em> that are being described in the document.
+ This keyword is described in <a href="#node-identifiers" class="sec-ref"><span class="secno">3.6</span> <span class="sec-title">Node Identifiers</span></a>.</dd>
+<dt><code>@value</code></dt>
+<dd>Used to specify the data that is associated with a particular
+ <a class="tref internalDFN" title="property" href="#dfn-property">property</a> in the graph. This keyword is described in
+ <a href="#string-internationalization" class="sec-ref"><span class="secno">3.8</span> <span class="sec-title">String Internationalization</span></a> and
+ <a href="#typed-values" class="sec-ref"><span class="secno">4.2</span> <span class="sec-title">Typed Values</span></a>.</dd>
+<dt><code>@language</code></dt>
+<dd>Used to specify the native language for a particular value or the default
+ language of a JSON-LD document. This keyword is described in the section titled
+ <a href="#string-internationalization" class="sec-ref"><span class="secno">3.8</span> <span class="sec-title">String Internationalization</span></a>.</dd>
+<dt><code>@type</code></dt>
+<dd>Used to set the data type of a <a class="tref internalDFN" title="node" href="#dfn-node">node</a> or
+ <a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>. This keyword is described in the section titled
+ <a href="#typed-values" class="sec-ref"><span class="secno">4.2</span> <span class="sec-title">Typed Values</span></a>.</dd>
+<dt><code>@container</code></dt>
+<dd>Used to set the container of a particular value.
+ This keyword is described in the section titled <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>.</dd>
+<dt><code>@list</code></dt>
+<dd>Used to express an ordered set of data.
+ This keyword is described in the section titled <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>.</dd>
+<dt><code>@set</code></dt>
+<dd>Used to express an unordered set of data.
+ This keyword is described in the section titled <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>.</dd>
+<dt><code>@vocab</code></dt>
+<dd>Used to set the base <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> for all property IRIs affected by the
+ <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>. This keyword is described in section <a href="#iris" class="sec-ref"><span class="secno">3.5</span> <span class="sec-title">IRIs</span></a>.</dd>
+<dt><code>:</code></dt>
+<dd>The separator for JSON keys and values that use
+ <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact IRIs</a>.</dd>
+</dl>
+
+<p>For the avoidance of doubt, all keys, <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a>, and values in JSON-LD are
+case-sensitive.</p>
+</section>
+
+<section id="the-context">
+<h3><span class="secno">3.3 </span>The Context</h3>
+
+<p>In JSON-LD, a <dfn title="context" id="dfn-context">context</dfn> is used to map <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s, i.e., properties with associated
+ values in an JSON document, to <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s. A <dfn title="term" id="dfn-term">term</dfn> is a short word that expands to an
+ <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>. <a class="tref internalDFN" title="term" href="#dfn-term">Term</a>s <em class="rfc2119" title="may">may</em> be defined as any valid JSON <a class="tref internalDFN" title="string" href="#dfn-string">string</a> other
+ than a JSON-LD <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. To avoid
+ forward-compatibility issues, <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s starting with an <code>@</code> character <em class="rfc2119" title="should not">should not</em> be used
+ as they might be used as <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a> in future versions of JSON-LD. Furthermore,
+ the use of empty terms (<code>""</code>) is discouraged as not all programming languages are able to handle
+ empty property names.</p>
+<p>The Web uses <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> for unambiguous identification. The
+ idea is that these <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s mean something that may be of use to other developers and that it is useful to
+ give them an unambiguous identifier. That is, it is useful for <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s to expand to IRIs so that
+ developers don't accidentally step on each other's <dfn title="vocabulary" id="dfn-vocabulary">vocabulary</dfn> terms and other resources. Furthermore, developers, and
+ machines, are able to use this <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> (by plugging it directly into a web browser, for instance) to go to
+ the term and get a definition of what the term means. This mechanism is analogous to the way we can use
+ <a href="http://wordnet.princeton.edu/">WordNet</a> today to see the definition of words in the English language.
+ Developers and machines need the same sort of definition of terms. <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> provide a way to
+ ensure that these terms are unambiguous. For example, the term <code>name</code> may
+ map directly to the <abbr title="Internationalized Resource Identifier">IRI</abbr> <code>http://xmlns.com/foaf/0.1/name</code>. This allows JSON-LD documents to be constructed
+ using the common JSON practice of simple name/value pairs while ensuring that the data is useful outside of the
+ page, API or database in which it resides. The value of a term mapping
+ <em class="rfc2119" title="must">must</em> be either; 1) a simple string with the lexical form of an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> or
+ 2) <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or 3) an <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> containing an
+ <code>@id</code>, <code>@type</code>, <code>@language</code>, or <code>@container</code> keyword
+ (all other keywords are ignored by a JSON-LD processor).
+</p>
+
+<p>These Linked Data <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s are typically collected in a
+context document that would look something like this:</p>
+
+<div class="example"><div class="example-title"><span>Example 2</span>: Context definition</div><pre class="example">{
+ "@context":
+ {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "depiction":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/depiction",
+ "@type": "@id"
+ },
+ "homepage":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ },
+ }
+}</pre></div>
+
+<p>Assuming that this context document can be retrieved at <code>http://json-ld.org/contexts/person.jsonld</code>,
+ it can be referenced from a JSON-LD document by adding a single line. The JSON markup shown in the previous
+ section could be changed as follows:</p>
+
+<div class="example"><div class="example-title"><span>Example 3</span>: Adding context reference to JSON document</div><pre class="example">{
+ <span class="diff">"@context": "http://json-ld.org/contexts/person.jsonld",</span>
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}</pre></div>
+
+<p>The additions above transform the previous JSON document into a JSON document
+with added semantics because the <code>@context</code> specifies how the
+<strong>name</strong>, <strong>homepage</strong>, and <strong>depiction</strong>
+terms map to <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a>.
+Mapping those keys to IRIs gives the data global context. If two
+developers use the same <abbr title="Internationalized Resource Identifier">IRI</abbr> to describe a property, they are more than likely
+expressing the same concept. This allows both developers to re-use each others'
+data without having to agree to how their data will interoperate on a
+site-by-site basis. Contexts may also contain type information
+for certain <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s as well as other processing instructions for
+the JSON-LD processor.</p>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">External JSON-LD context documents <em class="rfc2119" title="may">may</em> contain extra information
+located outside of the <code>@context</code> key, such as documentation about the
+<a class="tref internalDFN" title="term" href="#dfn-term">terms</a> declared in the document. When importing a
+<code>@context</code> value from an external JSON-LD context document, any extra
+information contained outside of the <code>@context</code> value <em class="rfc2119" title="must">must</em> be discarded.</p></div>
+
+<p>Contexts <em class="rfc2119" title="may">may</em> be specified in-line. This ensures that JSON-LD documents
+can be processed when a JSON-LD processor does not have access to the Web.</p>
+
+<div class="example"><div class="example-title"><span>Example 4</span>: In-line context definition</div><pre class="example">{
+ <span class="diff">"@context":
+ {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "depiction":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/depiction",
+ "@type": "@id"
+ },
+ "homepage":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ },
+ },</span>
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}</pre></div>
+
+<p>Contexts <em class="rfc2119" title="may">may</em> be used at any time a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> is defined.
+ A <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> <em class="rfc2119" title="may">may</em> specify multiple contexts, using an
+ <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, which is processed in order. This is useful
+ when an author would like to use an existing context and add
+ application-specific terms to the existing context. Duplicate context
+ <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s <em class="rfc2119" title="must">must</em> be overridden using a last-defined-overrides
+ mechanism.</p>
+
+<div class="example"><div class="example-title"><span>Example 5</span>: Scoped contexts within node definitions</div><pre class="example">{
+ <span class="diff">"@context":
+ {
+ "name": "http://example.com/person#name",
+ "details": "http://example.com/person#details"
+ },</span>
+ "<span class="diff">name</span>": "Markus Lanthaler",
+ ...
+ "details":
+ {
+ <span class="diff">"@context": {
+ "name": "http://example.com/organization#name"
+ },</span>
+ "<span class="diff">name</span>": "Graz University of Technology"
+ }
+}</pre></div>
+
+<p>In the example above, the <code>name</code> prefix is overridden in the
+ more deeply nested <code>details</code> structure. Note that this is
+ rarely a good authoring practice and is typically used when there exist
+ legacy applications that depend on the specific structure of the
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>.</p>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">If a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> is re-defined within a context, all previous
+ rules associated with the previous definition are removed. A <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined
+ in a previous context <em class="rfc2119" title="must">must</em> be removed, if it is re-defined to <code>null</code>.</p></div>
+
+<p>The set of contexts defined within a specific <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> are
+ referred to as <dfn title="local_context" id="dfn-local_context">local context</dfn>s. Setting the context to <code>null</code>
+ effectively resets the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> to an empty context. The
+ <dfn title="active_context" id="dfn-active_context">active context</dfn> refers to the accumulation of <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a>s
+ that are in scope at a specific point within the document. The following example
+ specifies an external context and then layers a local context on top of the external
+ context:</p>
+
+<div class="example"><div class="example-title"><span>Example 6</span>: Combining external and local contexts</div><pre class="example">{
+ <span class="diff">"@context": [
+ "http://json-ld.org/contexts/person.jsonld",
+ {
+ "pic": "http://xmlns.com/foaf/0.1/depiction"
+ }
+ ],</span>
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ <span class="diff">"pic": "http://twitter.com/account/profile_image/manusporny"</span>
+}</pre></div>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">To ensure the best possible performance, it is a best practice to
+ put the <a class="tref internalDFN" title="context" href="#dfn-context">context</a> definition at the top of the JSON-LD document. If it isn't listed
+ first, processors have to save each key-value pair until the <a class="tref internalDFN" title="context" href="#dfn-context">context</a> is processed.
+ This creates a memory and complexity burden for certain types of
+ low-memory footprint JSON-LD processors.</p></div>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">The <code>null</code> value is processed in a special way
+ in JSON-LD. Unless otherwise specified, a JSON-LD processor <em class="rfc2119" title="must">must</em> act as if a
+ key-value pair in the body of a JSON-LD document was never declared when
+ the value equals <em>null</em>. If <code>@value</code>, <code>@list</code>,
+ or <code>@set</code> is set to <em>null</em> in expanded form, then the
+ entire <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is ignored. If <code>@context</code> is set
+ to <em>null</em>, the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> is reset and when used
+ within a <a class="tref internalDFN" title="context" href="#dfn-context">context</a>, it removes any definition associated with
+ the key, unless otherwise specified.</p></div>
+
+</section>
+
+<section id="from-json-to-json-ld">
+<h3><span class="secno">3.4 </span>From JSON to JSON-LD</h3>
+
+<p>If a set of <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s such as, <strong>name</strong>,
+<strong>homepage</strong>, and <strong>depiction</strong>,
+are defined in a <a class="tref internalDFN" title="context" href="#dfn-context">context</a>, and that context is used to resolve the
+names in <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON objects</a>, machines are able to automatically expand the terms to
+something meaningful and unambiguous, like this:</p>
+
+<div class="example"><div class="example-title"><span>Example 7</span>: Expanded terms</div><pre class="example">{
+ "<span class="diff">http://xmlns.com/foaf/0.1/name</span>": "Manu Sporny",
+ "<span class="diff">http://xmlns.com/foaf/0.1/homepage</span>": "http://manu.sporny.org"
+ "<span class="diff">http://xmlns.com/foaf/0.1/depiction</span>": "http://twitter.com/account/profile_image/manusporny"
+}</pre></div>
+
+<p>Doing this allows JSON to be unambiguously machine-readable without
+requiring developers to drastically change their workflow.</p>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">The example above does not use the <code>@id</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>
+to identify the node being described above. This type of node is called an
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a>. It is advised that all nodes described in JSON-LD are
+given unique identifiers via the <code>@id</code> keyword unless the data is not
+intended to be linked to from other data sets.</p></div>
+
+<p>A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to define property values is called a
+ <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>. <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">Node definitions</a>
+ do not require an <code>@id</code>.
+ <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">Node definitions</a> that do not
+ contain an <code>@id</code> are known as an <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled nodes</a>.</p>
+
+</section>
+
+<section id="iris">
+<h3><span class="secno">3.5 </span>IRIs</h3>
+
+<p><a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> are fundamental to <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>
+as that is how most <a class="tref internalDFN" title="node" href="#dfn-node">nodes</a>s and all
+<a class="tref internalDFN" title="property" href="#dfn-property">properties</a> are
+identified. <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s can be expressed in a variety of different ways
+in JSON-LD.</p>
+
+<p>An <dfn title="iri" id="dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></dfn>
+ (an Internationalized Resource Identifier) is described in [<cite><a class="bibref" href="#bib-RFC3987">RFC3987</a></cite>])
+ and the use with JSON-LD conforms to the definition of
+ <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a></cite> in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].</p>
+
+<ol>
+ <li>Except within a <a class="tref internalDFN" title="context" href="#dfn-context">context</a> definition, <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s in the key position in
+ a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> that have a mapping or a vocabulary base <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> in the
+ <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> are expanded to an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> by JSON-LD processors.</li>
+ <li>An <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> is generated for the <a class="tref internalDFN" title="string" href="#dfn-string">string</a> value specified using
+ <code>@id</code> or <code>@type</code>.</li>
+ <li>An <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> is generated for the <a class="tref internalDFN" title="string" href="#dfn-string">string</a> value of any key for which there
+ are <a class="tref internalDFN" title="coercion" href="#dfn-coercion">coercion</a> rules in effect that identify the value as an <code>@id</code>.</li>
+</ol>
+
+<p>IRIs may be represented as an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, a <a class="tref internalDFN" title="relative_iri" href="#dfn-relative_iri">relative <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>,
+ a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or as a value relative to <code>@vocab</code>.</p>
+
+<p>An <dfn title="absolute_iri" id="dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn> is defined in [<cite><a class="bibref" href="#bib-RFC3987">RFC3987</a></cite>] containing a <em>scheme</em> along with
+ <em>path</em> and optional <em>query</em> and <em>fragment</em> segments. A <dfn title="relative_iri" id="dfn-relative_iri">relative <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn> is an <abbr title="Internationalized Resource Identifier">IRI</abbr>
+ that is relative to some other <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>. In JSON-LD all <a class="tref internalDFN" title="relative_iri" href="#dfn-relative_iri">relative <abbr title="Internationalized Resource Identifier">IRI</abbr></a>s are resolved relative to the
+ <dfn title="base_iri" id="dfn-base_iri">base <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn> associated with the document (typically, the directory that contains the document or the document itself).</p>
+
+<p>IRIs can be expressed directly in the key position like so:</p>
+
+<div class="example"><div class="example-title"><span>Example 8</span>: IRI as a key</div><pre class="example">{
+...
+ "<span class="diff">http://xmlns.com/foaf/0.1/name</span>": "Manu Sporny",
+...
+}</pre></div>
+
+<p>In the example above, the key <code>http://xmlns.com/foaf/0.1/name</code> is interpreted
+ as an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> because it contains a colon
+ (<code>:</code>) and the 'http' <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> does not exist in
+ the context.</p>
+
+<p>Term expansion occurs for IRIs if the value matches a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined within the
+<a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>:</p>
+
+<div class="example"><div class="example-title"><span>Example 9</span>: Term expansion from context definition</div><pre class="example">{
+ "<span class="diff">@context</span>":
+ {
+ "<span class="diff">name</span>": "<span class="diff">http://xmlns.com/foaf/0.1/name</span>"
+...
+ },
+ "<span class="diff">name</span>": "Manu Sporny",
+ "status": "trollin'",
+...
+}</pre></div>
+
+<p><a class="tref internalDFN" title="term" href="#dfn-term">Term</a>s are case sensitive, and <em class="rfc2119" title="must">must</em> be matched using a case-sensitive comparison.</p>
+
+<p>JSON keys that do not expand to an absolute <abbr title="Internationalized Resource Identifier">IRI</abbr> are ignored, or removed
+in some cases, by the [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>]. However, JSON keys that do not include
+a mapping in the <a class="tref internalDFN" title="context" href="#dfn-context">context</a> are still considered valid expressions
+in JSON-LD documents - the keys just don't have any machine-readable,
+semantic meaning.</p>
+
+<p><a class="tref internalDFN" title="prefix" href="#dfn-prefix">Prefix</a>es are expanded when the form of the value is a
+ <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> represented as a <code>prefix:suffix</code>
+ combination, and the prefix matches a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined within the
+ <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>:</p>
+
+<div class="example"><div class="example-title"><span>Example 10</span>: Prefix expansion</div><pre class="example">{
+ "<span class="diff">@context</span>":
+ {
+ "<span class="diff">foaf</span>": "<span class="diff">http://xmlns.com/foaf/0.1/</span>"
+...
+ },
+ "<span class="diff">foaf:name</span>": "Manu Sporny",
+...
+}</pre></div>
+
+<p><code>foaf:name</code> above will automatically expand out to the <abbr title="Internationalized Resource Identifier">IRI</abbr>
+<code>http://xmlns.com/foaf/0.1/name</code>. See <a href="#compact-iris" class="sec-ref"><span class="secno">4.1</span> <span class="sec-title">Compact IRIs</span></a> for more details.</p>
+
+<p>If the <code>@vocab</code> is set, all keys that do not match a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> or a <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a>
+ are
+
+
+It is often common that all types and properties come from the same vocabulary. JSON-LD's
+<code>@vocab</code> keyword allows to set a base <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> to be used for all properties and types
+that that do not match a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>, a <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a>, or an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>
+(i.e., do not contain a colon). The <code>@vocab</code> mapping <em class="rfc2119" title="must">must</em> have a value of a simple string with the
+lexical form of an absolute <abbr title="Internationalized Resource Identifier">IRI</abbr>.</p>
+
+<div class="example"><div class="example-title"><span>Example 11</span>: Vocabulary base IRI</div><pre class="example">{
+ <span class="diff">"@context": {
+ "@vocab": "http://xmlns.com/foaf/1.0/"
+ },</span>
+ "@type": <span class="diff">"Person"</span>,
+ <span class="diff">"name"</span>: "Manu Sporny",
+}</pre></div>
+
+<p>An <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> is generated when a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is used in the
+ value position that contains an <code>@id</code> keyword:</p>
+
+<div class="example"><div class="example-title"><span>Example 12</span>: Expanded IRI definition</div><pre class="example">{
+...
+ "homepage": { "<span class="diff">@id</span>": "http://manu.sporny.org" }
+...
+}</pre></div>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">Specifying a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with an
+ <code>@id</code> key is used to identify that <a class="tref internalDFN" title="node" href="#dfn-node">node</a> using an
+ <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>. When the object has only the <code>@id</code>, it
+ is called a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>.
+ This facility <em class="rfc2119" title="may">may</em> also be used to link to another
+ <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> using a mechanism called
+ <a class="tref internalDFN" title="embedding" href="#dfn-embedding">embedding</a>, which is covered in the section titled
+ <a href="#embedding" class="sec-ref"><span class="secno">4.10</span> <span class="sec-title">Embedding</span></a>.</p></div>
+
+<p>If type <a class="tref internalDFN" title="coercion" href="#dfn-coercion">coercion</a> rules are specified in the <code>@context</code> for
+a particular <a class="tref internalDFN" title="term" href="#dfn-term">term</a> or property <abbr title="Internationalized Resource Identifier">IRI</abbr>, an <abbr title="Internationalized Resource Identifier">IRI</abbr> is generated:</p>
+
+<div class="example"><div class="example-title"><span>Example 13</span>: Type coercion</div><pre class="example">{<span class="diff">
+ "@context":
+ {
+ ...
+ "homepage":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ ...
+ }</span>
+...
+ "homepage": "http://manu.sporny.org/",
+...
+}</pre></div>
+
+<p>In the example above, even though the value
+<code>http://manu.sporny.org/</code> is expressed as a JSON
+<a class="tref internalDFN" title="string" href="#dfn-string">string</a>, the type <a class="tref internalDFN" title="coercion" href="#dfn-coercion">coercion</a> rules will transform
+the value into an <abbr title="Internationalized Resource Identifier">IRI</abbr> when processed by a JSON-LD Processor.</p>
+
+</section>
+
+<section id="node-identifiers">
+<h3><span class="secno">3.6 </span>Node Identifiers</h3>
+
+<p>To be able to externally reference nodes in a graph, it is important that each node has
+ an unambiguous identifier. <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s are a fundamental concept of
+ <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>, and nodes should have a de-referencable
+ identifier used to name and locate them. For nodes to be truly linked,
+ de-referencing the identifier should result in a representation of that node
+ (for example, using a URL to retrieve a web page).
+ Associating an <abbr title="Internationalized Resource Identifier">IRI</abbr> with a node tells an application that the returned
+ document contains a description of the node requested.</p>
+
+<p>JSON-LD documents may also contain descriptions of other nodes, so it is necessary to be able to
+ uniquely identify each node which may be externally referenced.</p>
+
+<p>The node of a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is identified using the <code>@id</code>
+ <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>:</p>
+
+<div class="example"><div class="example-title"><span>Example 14</span>: Identifying a node</div><pre class="example">{
+ "@context":
+ {
+ ...
+ "homepage":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ ...
+ },
+ "<span class="diff">@id</span>": "<span class="diff">http://example.org/people#joebob</span>",
+ "homepage": "http://manu.sporny.org/",
+...
+}</pre></div>
+
+<p>The example above contains a node identified by the <abbr title="Internationalized Resource Identifier">IRI</abbr>
+ <code>http://example.org/people#joebob</code>.</p>
+
+<p>A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to define property values is called a
+ <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>. <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">Node definitions</a>
+ do not require an <code>@id</code>. A <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>
+ that does not contain an <code>@id</code> property defines properties of an
+ <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a>. <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">Node definitions</a> <em class="rfc2119" title="may">may</em>
+ be spread among different parts of a document or even between different documents.</p>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">To ensure the best possible performance, when possible, it is a best practice
+ to put JSON-LD <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>s, such as <code>@id</code> and
+ <code>@context</code> before other key-value pairs in a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>.
+ However, keys in a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> are not ordered,
+ so processors <em class="rfc2119" title="must not">must not</em> depend on key ordering. If keywords are not listed
+ first, processors have to save each key-value pair until at least the
+ <code>@context</code> and the <code>@id</code> are processed. Not
+ specifying those keywords first creates a memory and complexity burden for
+ low-memory footprint processors, forcing them to use more memory and
+ computing cycles than necessary.</p></div>
+
+
+</section>
+
+<section id="specifying-the-type">
+<h3><span class="secno">3.7 </span>Specifying the Type</h3>
+
+<p>The type of a particular node can be specified using the <code>@type</code>
+ <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. To be considered <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>, types <em class="rfc2119" title="must">must</em>
+ be uniquely identified by an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</p>
+
+<div class="example"><div class="example-title"><span>Example 15</span>: Specifying the type for a node</div><pre class="example">{
+...
+ "@id": "http://example.org/people#joebob",
+ "<span class="diff">@type</span>": "<span class="diff">http://xmlns.com/foaf/0.1/Person</span>",
+...
+}</pre></div>
+
+<p>A node can be assigned more than one type by using the following markup
+pattern:</p>
+
+<div class="example"><div class="example-title"><span>Example 16</span>: Specifying multiple types for a node</div><pre class="example">{
+...
+ "@id": "http://example.org/places#BrewEats",
+ "<span class="diff">@type</span>": <span class="diff">["http://schema.org/Restaurant", "http://schema.org/Brewery"]</span>
+...
+}</pre></div>
+
+
+</section>
+
+<section id="string-internationalization">
+<h3><span class="secno">3.8 </span>String Internationalization</h3>
+
+<p>At times, it is important to annotate a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>
+ with its language. In JSON-LD this is possible in a variety of ways.
+ Firstly, it is possible to define a default language for a JSON-LD document
+ by setting the <code>@language</code> key in the <code>@context</code> or in a
+ <a class="tref internalDFN" title="term" href="#dfn-term">term</a> definition:</p>
+
+<div class="example"><div class="example-title"><span>Example 17</span>: String Internationalization</div><pre class="example">{
+ <span class="diff">"@context":
+ {
+ ...
+ "@language": "ja"
+ },</span>
+ "name": <span class="diff">"花澄"</span>,
+ "occupation": <span class="diff">"科学者"</span>
+}</pre></div>
+
+<p>The example above would associate the <code>ja</code> language
+ code with the two <a class="tref internalDFN" title="string" href="#dfn-string">string</a>s <em>花澄</em> and <em>科学者</em>.
+ Languages <em class="rfc2119" title="must">must</em> be well-formed language tags according to [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>].</p>
+
+<p>It is possible to override the default language by using the expanded
+form of a value:</p>
+
+<div class="example"><div class="example-title"><span>Example 18</span>: Expanded value with language</div><pre class="example">{
+ "@context": {
+ ...
+ "@language": "ja"
+ },
+ "name": "花澄",
+ "occupation": <span class="diff">{
+ "@value": "Scientist",
+ "@language": "en"
+ }</span>
+}</pre></div>
+
+<p>It is also possible to override the default language or specify a plain
+value by omitting the <code>@language</code> tag or setting it to
+<code>null</code> when expressing the expanded value:</p>
+
+<div class="example"><div class="example-title"><span>Example 19</span>: Expanded value to remove language</div><pre class="example">{
+ "@context": {
+ ...
+ "@language": "ja"
+ },
+ "name": <span class="diff">{
+ "@value": "Frank"
+ },</span>
+ "occupation": <span class="diff"> {
+ "@value": "Ninja",
+ "@language": "en"
+ }</span>,
+ "speciality": "手裏剣"
+}</pre></div>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">Please note that language associations <em class="rfc2119" title="must">must</em> only be applied
+ to plain literal <a class="tref internalDFN" title="string" href="#dfn-string">string</a>s. That is, <a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>s
+ or values that are subject to <a href="#type-coercion" class="sec-ref"><span class="secno">4.6</span> <span class="sec-title">Type Coercion</span></a>
+ won't be language tagged.</p></div>
+
+<p>To clear the default language for a subtree, <code>@language</code> can
+be set to <code>null</code> in a <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a> as follows:</p>
+
+<div class="example"><div class="example-title"><span>Example 20</span>: Clearing default language</div><pre class="example">{
+ "@context": {
+ ...
+ "@language": "ja"
+ },
+ "name": "花澄",
+ "details": {
+<span class="diff"> "@context": {
+ "@language": null
+ },</span>
+ "occupation": "Ninja"
+ }
+}</pre></div>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">JSON-LD allows one to associate language information with
+ <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s.
+ See <a href="#expanded-term-definition" class="sec-ref"><span class="secno">4.5</span> <span class="sec-title">Expanded Term Definition</span></a> for
+ more details.</p></div>
+
+</section>
+
+<section id="json-ld-syntax">
+ <h3><span class="secno">3.9 </span>JSON-LD Syntax</h3>
+
+ <p>A JSON-LD document is first, and foremost, a JSON document
+ (as defined in [<cite><a class="bibref" href="#bib-RFC4627">RFC4627</a></cite>]), and any syntactically correct JSON document
+ <em class="rfc2119" title="must">must</em> be processed by a conforming JSON-LD processor. However, JSON-LD
+ describes a specific syntax to use for expressing Linked Data. This
+ includes the use of specific keywords, as identified in <a href="#syntax-tokens-and-keywords" class="sec-ref"><span class="secno">3.2</span> <span class="sec-title">Syntax Tokens and Keywords</span></a> for
+ expressing <a title="node definition">node definitions</a>, values,
+ and the <a href="#dfn-context" class="internalDFN">context</a>. See <a href="#json-ld-grammar" class="sec-ref"><span class="secno">A.</span> <span class="sec-title">JSON-LD Grammar</span></a> for authoring
+ guidelines and a BNF description of JSON-LD.</p>
+
+</section>
+</section>
+
+<section id="advanced-concepts">
+
+<!--OddPage-->
+<h2><span class="secno">4. </span>Advanced Concepts</h2>
+
+<em>This section is normative.</em>
+
+<p>JSON-LD has a number of features that provide functionality above and beyond
+the core functionality described above. The following section describes this
+advanced functionality in more detail.
+</p>
+
+<section id="compact-iris">
+ <h3><span class="secno">4.1 </span>Compact IRIs</h3>
+ <p>
+ <a class="tref internalDFN" title="term" href="#dfn-term">Term</a>s in <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> documents may draw from
+ a number of different <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabularies</a>.
+ At times, declaring every single <a class="tref internalDFN" title="term" href="#dfn-term">term</a> that a document uses can require the
+ developer to declare tens, if not hundreds of potential
+ <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabulary</a> <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s that are used across an
+ application. This is a concern for at least two reasons: the
+ first is the cognitive load on the developer of remembering all of the
+ <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s, and the second is the serialized size of the
+ <a class="tref internalDFN" title="context" href="#dfn-context">context</a> if it is specified inline. In order to address these issues,
+ the concept of a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> is introduced.</p>
+ <p>
+ A <dfn title="compact_iri" id="dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn> is a way of expressing an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>
+ using a <em>prefix</em> and <em>suffix</em> separated by a colon (<code>:</code>) which is
+ similar to the <cite><a href="http://www.w3.org/TR/rdfa-core/#s_curies">CURIE Syntax</a></cite>
+ in [<cite><a class="bibref" href="#bib-RDFA-CORE">RDFA-CORE</a></cite>]. The <dfn title="prefix" id="dfn-prefix">prefix</dfn> is a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> taken from the
+ <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> and is a short string identifying a
+ particular <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> in a JSON-LD document.
+ For example, the prefix <code>foaf</code> may be used as a short
+ hand for the Friend-of-a-Friend vocabulary, which is identified using
+ the <abbr title="Internationalized Resource Identifier">IRI</abbr> <code>http://xmlns.com/foaf/0.1/</code>. A developer may append
+ any of the FOAF <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabulary</a> terms to the end of the prefix
+ to specify a short-hand version of the <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> for the
+ <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabulary</a> term. For example, <code>foaf:name</code> would
+ be expanded out to the <abbr title="Internationalized Resource Identifier">IRI</abbr> <code>http://xmlns.com/foaf/0.1/name</code>.
+ Instead of having to remember and type out the entire <abbr title="Internationalized Resource Identifier">IRI</abbr>, the developer
+ can instead use the prefix in their JSON-LD markup.
+ </p>
+ <p>Terms are interpreted as <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>s if they contain at least one
+ colon and the first colon is not followed by two slashes (<code>//</code>, as in
+ <code>http://example.com</code>). To generate the full <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
+ the value is first split into a <em>prefix</em> and <em>suffix</em> at the first
+ occurrence of a colon (<code>:</code>). If the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>
+ contains a term mapping for <em>prefix</em>, an <abbr title="Internationalized Resource Identifier">IRI</abbr> is generated by
+ prepending the mapped <em>prefix</em> to the (possibly empty) <em>suffix</em>
+ using textual concatenation. If no prefix mapping is defined, the value is interpreted
+ as an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>. If the prefix is an underscore
+ (<code>_</code>), the <abbr title="Internationalized Resource Identifier">IRI</abbr> remains unchanged. This effectively means that every term
+ containing a colon will be interpreted by a JSON-LD processor as an <abbr title="Internationalized Resource Identifier">IRI</abbr>.
+ </p>
+ <p>Consider the following example:</p>
+ <div class="example"><div class="example-title"><span>Example 21</span>: Compact IRIs</div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"dc": "http://purl.org/dc/elements/1.1/",</span>
+ <span class="diff">"ex": "http://example.org/vocab#"</span>
+ },
+ "@id": "http://example.org/library",
+ "@type": <span class="diff">"ex:Library"</span>,
+ <span class="diff">"ex:contains"</span>:
+ {
+ "@id": "http://example.org/library/the-republic",
+ "@type": <span class="diff">"ex:Book"</span>,
+ <span class="diff">"dc:creator"</span>: "Plato",
+ <span class="diff">"dc:title"</span>: "The Republic",
+ <span class="diff">"ex:contains"</span>:
+ {
+ "@id": "http://example.org/library/the-republic#introduction",
+ "@type": <span class="diff">"ex:Chapter"</span>,
+ <span class="diff">"dc:description"</span>: "An introductory chapter on The Republic.",
+ <span class="diff">"dc:title"</span>: "The Introduction"
+ }
+ }
+}</pre></div>
+ <p>
+ In this example, two different <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabularies</a>
+ are referred to using prefixes. Those prefixes are then used as type and
+ property values using the compact <abbr title="Internationalized Resource Identifier">IRI</abbr> <code>prefix:suffix</code> notation.
+ </p>
+ <p>It's also possible to use compact IRIs within the context as shown in the
+ following example:</p>
+ <div class="example"><div class="example-title"><span>Example 22</span>: Using vocabularies</div><pre class="example">{
+ "@context":
+ {
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "foaf": "http://xmlns.com/foaf/0.1/",
+ <span class="diff">"foaf:homepage"</span>: { "@type": "@id" },
+ "picture": { "@id": <span class="diff">"foaf:depiction"</span>, "@type": "@id" }
+ },
+ "@id": "http://me.markus-lanthaler.com/",
+ "@type": "foaf:Person",
+ "foaf:name": "Markus Lanthaler",
+ "foaf:homepage": "http://www.markus-lanthaler.com/",
+ "picture": "http://twitter.com/account/profile_image/markuslanthaler"
+}</pre></div>
+</section>
+
+<section id="typed-values">
+<h3><span class="secno">4.2 </span>Typed Values</h3>
+
+<p>
+ A value with an associated type, also known as a
+ <dfn title="typed_value" id="dfn-typed_value">typed value</dfn>, is indicated by associating a value with
+ an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> which indicates the value's type. Typed values may be
+ expressed in JSON-LD in three ways:
+</p>
+
+<ol>
+ <li>By utilizing the <code>@type</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> when defining
+ a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> within a <code>@context</code> section.</li>
+ <li>By utilizing the expanded form for specifying values.</li>
+ <li>By using a native JSON type such as <a class="tref internalDFN" title="number" href="#dfn-number">number</a>, <a class="tref internalDFN" title="true" href="#dfn-true">true</a>, or <a class="tref internalDFN" title="false" href="#dfn-false">false</a>.</li>
+</ol>
+
+<p>The first example uses the <code>@type</code> keyword to associate a
+type with a particular <a class="tref internalDFN" title="term" href="#dfn-term">term</a> in the <code>@context</code>:</p>
+
+<div class="example"><div class="example-title"><span>Example 23</span>: Expanded term definition with type coercion</div><pre class="example">{
+ <span class="diff">"@context":
+ {
+ "modified":
+ {
+ "@id": "http://purl.org/dc/terms/modified",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ },</span>
+...
+ "modified": "2010-05-29T14:17:39+02:00",
+...
+}</pre></div>
+
+<p>The <em>modified</em> key's value above is automatically type coerced to a
+datetime value because of the information specified in the
+<code>@context</code>.</p>
+
+<p>The second example uses the expanded form of setting the type information
+in the body of a JSON-LD document:</p>
+
+<div class="example"><div class="example-title"><span>Example 24</span>: Expanded value with type</div><pre class="example">{
+ "@context":
+ {
+ "modified":
+ {
+ "@id": "http://purl.org/dc/terms/modified"
+ }
+ },
+...
+ "modified":
+ <span class="diff">{
+ "@value": "2010-05-29T14:17:39+02:00",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }</span>
+...
+}</pre></div>
+
+<p>Both examples above would generate the value
+ <code>2010-05-29T14:17:39+02:00</code> with the type
+ <code>http://www.w3.org/2001/XMLSchema#dateTime</code>. Note that it is
+ also possible to use a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> or a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> to
+ express the value of a type.</p>
+
+<p>The <code>@type</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> is also used to associate a type
+ with a <a class="tref internalDFN" title="node" href="#dfn-node">node</a>. The concept of an <dfn title="node_type" id="dfn-node_type">node type</dfn> and
+ a <dfn title="value_type" id="dfn-value_type">value type</dfn> are different. This is similar to object-oriented
+ programming languages where both scalar and structured types use the same
+ class inheritance mechanism, even though scalar types and structured types are
+ inherently different.</p>
+
+<div class="example"><div class="example-title"><span>Example 25</span>: Example demonstrating the context-sensitivity for @type</div><pre class="example">{
+...
+ "@id": "http://example.org/posts#TripToWestVirginia",
+ <span class="diff">"@type": "http://schema.org/BlogPosting"</span>,
+ "modified":
+ {
+ "@value": "2010-05-29T14:17:39+02:00",
+ <span class="diff">"@type": "http://www.w3.org/2001/XMLSchema#dateTime"</span>
+ }
+...
+}</pre></div>
+
+<p>The first use of <code>@type</code> associates a <a class="tref internalDFN" title="node_type" href="#dfn-node_type">node type</a>
+ (<code>http://schema.org/BlogPosting</code>) with the <a class="tref internalDFN" title="node" href="#dfn-node">node</a>,
+ which is expressed using the <code>@id</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>.
+ The second use of <code>@type</code> associates a <a class="tref internalDFN" title="value_type" href="#dfn-value_type">value type</a>
+ (<code>http://www.w3.org/2001/XMLSchema#dateTime</code>) with the
+ value expressed using the <code>@value</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. As a
+ general rule, when <code>@value</code> and <code>@type</code> are used in
+ the same <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>, the <code>@type</code>
+ <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> is expressing a <a class="tref internalDFN" title="value_type" href="#dfn-value_type">value type</a>.
+ Otherwise, the <code>@type</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> is expressing a
+ <a class="tref internalDFN" title="node_type" href="#dfn-node_type">node type</a>.</p>
+
+</section>
+
+<section id="language-tagged-strings">
+<h3><span class="secno">4.3 </span>Language-tagged Strings</h3>
+
+<p>
+ A string with an associated language, also known as a
+ <dfn title="language-tagged_string" id="dfn-language-tagged_string">language-tagged string</dfn>, is indicated by associating a string with
+ an language code as defined in [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>]. Language-tagged strings may be
+ expressed in JSON-LD in four ways:
+</p>
+
+<ol>
+ <li>By defining a global language using the <code>@language</code>
+ <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> within a <code>@context</code> section.</li>
+ <li>By utilizing the <code>@language</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> when defining
+ a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> within a <code>@context</code> section.</li>
+ <li>By utilizing the expanded form for specifying values.</li>
+ <li>By utilizing the <code>@container</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> with a
+ value of <code>@language</code> when defining a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> within
+ a <code>@context</code> section. This usage pattern is called a
+ <dfn title="language_map" id="dfn-language_map">language map</dfn>.</li>
+</ol>
+
+<p>The first example uses the <code>@language</code> keyword to associate a
+type with a particular <a class="tref internalDFN" title="term" href="#dfn-term">term</a> in the <code>@context</code>:</p>
+
+<div class="example"><div class="example-title"><span>Example 26</span>: Expanded term definition with language coercion</div><pre class="example">{
+ <span class="diff">"@context":
+ {
+ "title":
+ {
+ "@id": "http://purl.org/dc/terms/title",
+ "@language": "en"
+ }
+ },</span>
+...
+ "title": "JSON-LD Syntax",
+...
+}</pre></div>
+
+<p>The <em>modified</em> key's value above is automatically
+ language coerced to a English value because of the information specified in
+ the <code>@context</code>.</p>
+
+<p>The second example uses the expanded form of setting the language information
+in the body of a JSON-LD document:</p>
+
+<div class="example"><div class="example-title"><span>Example 27</span>: Expanded value with language</div><pre class="example">{
+ "@context":
+ {
+ "title":
+ {
+ "@id": "http://purl.org/dc/terms/title"
+ }
+ },
+...
+ "title":
+ <span class="diff">{
+ "@value": "JSON-LD Syntax",
+ "@language": "en"
+ }</span>
+...
+}</pre></div>
+
+<p>Both examples above would generate the value <code>JSON-LD Syntax</code>
+ tagged with the language <code>en</code>; which is the [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>] code
+ for the English language.</p>
+
+<p>Systems that support multiple languages often need to express data values in
+each language. Typically, such systems also try to ensure that developers have
+a programatically easy way to navigate the datastructures for the
+language-specific data. In this case, <a class="tref internalDFN" title="language_map" href="#dfn-language_map">language map</a>s
+may be utilized.</p>
+
+<div class="example"><div class="example-title"><span>Example 28</span>: Language map expressing a property in three languages</div><pre class="example">{
+ "@context":
+ {
+ "title":
+ {
+ "@id": "http://purl.org/dc/terms/title"
+ "@container": "@language"
+ }
+ },
+...
+ "title":
+ <span class="diff">{
+ "en": "JSON-LD Syntax",
+ "ru": "JSON-LD Синтаксис",
+ "ja": "JSON-LDの構文"
+ }</span>
+...
+}</pre></div>
+
+<p>In the example above, the title is expressed in three languages; English,
+ Russian, and Japanese. To access the data above in a programming language
+ supporting dot-notation accessors for object properties, a developer may
+ use the <code>property.language</code> pattern. For example, to access the
+ Japanese version of the title, a developer would use the following code
+ snippet: <code>obj.title.ja</code>.</p>
+</section>
+
+<section id="referencing-contexts-from-json-documents">
+<h3><span class="secno">4.4 </span>Referencing Contexts from JSON Documents</h3>
+
+<p>Ordinary JSON documents can be transformed into JSON-LD documents by referencing
+to an external JSON-LD <a class="tref internalDFN" title="context" href="#dfn-context">context</a> in an HTTP Link Header. Doing this
+allows JSON to be unambiguously machine-readable without requiring developers to
+drastically change their workflow and provides an upgrade path for existing
+infrastructure without breaking existing clients that rely on the <code>application/json</code>
+media type.
+</p>
+
+<p>
+In order to use an external context with an ordinary JSON document, an author
+<em class="rfc2119" title="must">must</em> specify an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> to a valid JSON-LD document in an HTTP Link
+Header [<cite><a class="bibref" href="#bib-RFC5988">RFC5988</a></cite>] using the <code>describedby</code> link relation.
+
+The referenced document <em class="rfc2119" title="must">must</em> have a top-level <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>. The
+<code>@context</code> subtree within that object is added to the top-level
+<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> of the referencing document. If an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> is at the top-level of the
+referencing document and its items are <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definitions</a>, the <code>@context</code>
+subtree is added to all <a class="tref internalDFN" title="array" href="#dfn-array">array</a> items. All extra information located outside
+of the <code>@context</code> subtree in the referenced document <em class="rfc2119" title="must">must</em> be
+discarded.
+</p>
+
+<p>The following example demonstrates the use of an external context with an
+ordinary JSON document:</p>
+
+<div class="example"><div class="example-title"><span>Example 29</span>: Specifing context through HTTP header</div><pre class="example">GET /ordinary-json-document.json HTTP/1.1
+Host: example.com
+Accept: application/ld+json,application/json,*/*;q=0.1
+
+====================================
+
+HTTP/1.0 200 OK
+...
+Content-Type: <span class="diff">application/json</span>
+<span class="diff">Link: <http://json-ld.org/contexts/person.jsonld>; rel="describedby"; type="application/ld+json"</span>
+
+{
+ "name": "Markus Lanthaler",
+ "homepage": "http://www.markus-lanthaler.com/",
+ "depiction": "http://twitter.com/account/profile_image/markuslanthaler"
+}</pre></div>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">JSON-LD documents served with the <code>application/ld+json</code> media type
+ <em class="rfc2119" title="must">must</em> have all context information, including references to external contexts, within the
+ body of the document.</p></div>
+</section>
+
+<section id="expanded-term-definition">
+<h3><span class="secno">4.5 </span>Expanded Term Definition</h3>
+
+<p>Within a <a class="tref internalDFN" title="context" href="#dfn-context">context</a> definition, <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s <em class="rfc2119" title="may">may</em> be
+ defined using an expanded notation to allow for additional information
+ associated with the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> to be specified (see also
+ <a href="#type-coercion" class="sec-ref"><span class="secno">4.6</span> <span class="sec-title">Type Coercion</span></a> and
+ <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>).</p>
+
+<p>Instead of using a string representation of an <abbr title="Internationalized Resource Identifier">IRI</abbr>, the <abbr title="Internationalized Resource Identifier">IRI</abbr> <em class="rfc2119" title="may">may</em> be
+specified using a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> having an <code>@id</code> key.
+The value of the <code>@id</code> key <em class="rfc2119" title="must">must</em> be either a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>, a
+<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>. Such
+an object is called a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>.</p>
+
+<div class="example"><div class="example-title"><span>Example 30</span>: Expanded term definition</div><pre class="example">{
+ "@context":
+ {
+ "foaf": <span class="diff">{ "@id": "http://xmlns.com/foaf/0.1/" }</span>,
+ "name": <span class="diff">{ "@id": "http://xmlns.com/foaf/0.1/name" }</span>,
+ "homepage": <span class="diff">{ "@id": "foaf:homepage" }</span>,
+ "depiction": <span class="diff">{ "@id": "foaf:depiction" }</span>
+ },
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}</pre></div>
+
+<p>This allows additional information to be associated with the term. This
+ <em class="rfc2119" title="may">may</em> be used for <a href="#type-coercion" class="sec-ref"><span class="secno">4.6</span> <span class="sec-title">Type Coercion</span></a>,
+ <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>), or to associate language
+ information with a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> as shown in the following example:</p>
+
+<div class="example"><div class="example-title"><span>Example 31</span>: Expanded term definition with language</div><pre class="example">{
+ "@context": {
+ ...
+ "ex": "http://example.com/",
+ "@language": "ja",
+ "name": { "@id": "ex:name", <span class="diff">"@language": null</span> },
+ "occupation": { "@id": "ex:occupation" },
+ "occupation_en": { "@id": "ex:occupation", <span class="diff">"@language": "en"</span> },
+ "occupation_cs": { "@id": "ex:occupation", <span class="diff">"@language": "cs"</span> }
+ },
+ <span class="diff">"name": "Yagyū Muneyoshi",
+ "occupation": "忍者",
+ "occupation_en": "Ninja",
+ "occupation_cs": "Nindža",</span>
+ ...
+}</pre></div>
+
+<p>The example above would associate <em>忍者</em> with the specified default
+ language code <code>ja</code>, <em>Ninja</em> with the language code
+ <code>en</code>, and <em>Nindža</em> with the language code <code>cs</code>.
+ The value of <code>name</code>, <em>Yagyū Muneyoshi</em> wouldn't be
+ associated with any language code since <code>@language</code> was reset to
+ <a class="tref internalDFN" title="null" href="#dfn-null">null</a> in the expanded term definition.</p>
+
+<p>Expanded terms <em class="rfc2119" title="may">may</em> also be defined using <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact IRIs</a> or
+ <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute IRIs</a> as keys. If the definition does not include an
+ <code>@id</code> key, the expanded <abbr title="Internationalized Resource Identifier">IRI</abbr> is determined by performing expansion of the key
+ within the current active context. This mechanism is mainly used to associate type or language
+ information with a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> or an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</p>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">While it is possible to define a
+ <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or an absolute <abbr title="Internationalized Resource Identifier">IRI</abbr> to expand to some
+ other unrelated <abbr title="Internationalized Resource Identifier">IRI</abbr> (for example, <code>foaf:name</code> expanding to
+ <code>http://example.org/unrelated#species</code>),
+ such usage is strongly discouraged.</p></div>
+</section>
+
+<section id="type-coercion">
+<h3><span class="secno">4.6 </span>Type Coercion</h3>
+
+<p>JSON-LD supports the coercion of values to particular data types.
+Type <dfn title="coercion" id="dfn-coercion">coercion</dfn> allows someone deploying JSON-LD to coerce the incoming or
+outgoing values to the proper data type based on a mapping of data type <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s to
+<a class="tref internalDFN" title="term" href="#dfn-term">term</a>s. Using type coercion, value representation is preserved without requiring
+the data type to be specified with each piece of data.</p>
+
+<p>Type coercion is specified within an <a href="#expanded-term-definition" class="sec-ref"><span class="secno">4.5</span> <span class="sec-title">Expanded Term Definition</span></a>
+ using the <code>@type</code> key. The value of this key represents a type <abbr title="Internationalized Resource Identifier">IRI</abbr> and <em class="rfc2119" title="must">must</em> take the form of
+ a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>, <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or the <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> <code>@id</code>. Specifying
+ <code>@id</code> indicates that within the body of a JSON-LD document, a string value of a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> coerced to
+ <code>@id</code> is to be interpreted as an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</p>
+
+<p><a class="tref internalDFN" title="term" href="#dfn-term">Terms</a> or <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact IRIs</a> used as the value of a
+ <code>@type</code> key <em class="rfc2119" title="may">may</em> be defined within the same context. This means that one may specify a
+ <a class="tref internalDFN" title="term" href="#dfn-term">term</a> like <code>xsd</code> and then use <code>xsd:integer</code> within the same
+ context definition - the JSON-LD processor will be able to determine the proper expansion for
+ <code>xsd:integer</code>.</p>
+
+<p>The example below demonstrates how a JSON-LD author can coerce values to
+<a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>s, IRIs and lists.</p>
+
+<div class="example"><div class="example-title"><span>Example 32</span>: Expanded term definition with types</div><pre class="example">{
+ "@context":
+ {
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "age":
+ <span class="diff">{
+ "@id": "http://xmlns.com/foaf/0.1/age",
+ "@type": "xsd:integer"
+ }</span>,
+ "homepage":
+ <span class="diff">{
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id",
+ "@container": "@list"
+ }</span>
+ },
+ "name": "John Smith",
+ "age": <span class="diff">"41"</span>,
+ "homepage":
+ <span class="diff">[
+ "http://personal.example.org/",
+ "http://work.example.com/jsmith/"
+ ]</span>
+}</pre></div>
+
+<p>The example above would generate the following Turtle:</p>
+
+<div class="example"><div class="example-title"><span>Example 33</span></div><pre class="example">@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[ foaf:name "John Smith";
+ foaf:age "41"^^xsd:integer;
+ foaf:homepage ( <http://personal.example.org/> <http://work.example.com/jsmith/> )
+] .</pre></div>
+
+<p>Terms may also be defined using <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute IRIs</a> or <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact IRIs</a>.
+ This allows coercion rules to be applied to keys which are not represented as a simple <a class="tref internalDFN" title="term" href="#dfn-term">term</a>.
+ For example:</p>
+
+<div class="example"><div class="example-title"><span>Example 34</span>: Term definition with absolute IRI</div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"foaf": "http://xmlns.com/foaf/0.1/"</span>,
+ "<span class="diff">foaf:age</span>":
+ {
+ "@type": "xsd:integer"
+ },
+ "<span class="diff">foaf:homepage</span>":
+ <span class="diff">{
+ "@type": "@id"
+ }</span>
+ },
+ "foaf:name": "John Smith",
+ "foaf:age": <span class="diff">"41"</span>,
+ "foaf:homepage":
+ <span class="diff">[
+ "http://personal.example.org/",
+ "http://work.example.com/jsmith/"
+ ]</span>
+}</pre></div>
+
+<p>In this case the <code>@id</code> definition is optional, but if it does exist, the <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>
+ or <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> is treated as a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> (not a <code>prefix:suffix</code> construct)
+ so that the actual definition of a <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> becomes unnecessary.</p>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">Keys in the context are treated as <a class="tref internalDFN" title="term" href="#dfn-term">terms</a> for the purpose of
+ expansion and value coercion. At times, this may result in multiple representations for the same expanded <abbr title="Internationalized Resource Identifier">IRI</abbr>.
+ For example, one could specify that <code>dog</code> and <code>cat</code> both expanded to <code>http://example.com/vocab#animal</code>.
+ Doing this could be useful for establishing different type coercion or language specification rules. It also allows a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> (or even an
+ absolute <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>) to be defined as something else entirely. For example, one could specify that
+ the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> <code>http://example.org/zoo</code> should expand to
+ <code>http://example.org/river</code>, but this usage is discouraged because it would lead to a
+ great deal of confusion among developers attempting to understand the JSON-LD document.</p></div>
+
+<p>Type coercion is performed using the unexpanded value of the key,
+ which <em class="rfc2119" title="must">must</em> have an exact match for an entry in the
+ <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.</p>
+
+</section>
+
+
+<section id="property-generators">
+<h3><span class="secno">4.7 </span>Property Generators</h3>
+
+<p>At times, an author may find that they need to express the same value for
+multiple properties. The simplest approach to accomplish this goal would be
+to do the following:</p>
+
+<div class="example"><div class="example-title"><span>Example 35</span>: Verbose expression of multiple properties with the same value</div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"title1": "http://purl.org/dc/terms/title"</span>,
+ <span class="diff">"title2": "http://schema.org/name"</span>,
+ <span class="diff">"title3": "http://www.w3.org/2000/01/rdf-schema#label"</span>
+ },
+ "@id": "http://example.com/book",
+ <span class="diff">"title1": "The Count of Monte Cristo"</span>,
+ <span class="diff">"title2": "The Count of Monte Cristo"</span>,
+ <span class="diff">"title3": "The Count of Monte Cristo"</span>
+}</pre></div>
+
+<p>Unfortunately, the approach above produces redundant data and would become a
+publishing burden for large data sets.
+In these situations, the author may use
+a <dfn title="property_generator" id="dfn-property_generator">property generator</dfn> to express a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> once, but have
+the JSON-LD processor expand the single statement into multiple statements.
+This method can be accomplished by using the following markup pattern:</p>
+
+<div class="example"><div class="example-title"><span>Example 36</span>: Generating multiple properties using a single term</div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"title": { "@id": ["http://purl.org/dc/terms/title",
+ "http://schema.org/name",
+ "http://www.w3.org/2000/01/rdf-schema#label"] }</span>,
+ },
+ "@id": "http://example.com/book",
+ <span class="diff">"title": "The Count of Monte Cristo"</span>
+}</pre></div>
+
+<p>While the term above is only used once outside of the <code>@context</code>,
+a JSON-LD processor will internally transform the document above into
+the following set of statements:</p>
+
+<div class="example"><div class="example-title"><span>Example 37</span></div><pre class="example"><http://example.com/book>
+ <http://purl.org/dc/terms/title>
+ "The Count of Monte Cristo" .
+<http://example.com/book>
+ <http://schema.org/name>
+ "The Count of Monte Cristo" .
+<http://example.com/book>
+ <http://www.w3.org/2000/01/rdf-schema#label>
+ "The Count of Monte Cristo" .</pre></div>
+
+</section>
+
+<section id="iri-expansion-within-a-context">
+ <h3><span class="secno">4.8 </span><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion Within a Context</h3>
+ <p>In general, normal <abbr title="Internationalized Resource Identifier">IRI</abbr> expansion rules apply
+ anywhere an <abbr title="Internationalized Resource Identifier">IRI</abbr> is expected (see <a href="#iris" class="sec-ref"><span class="secno">3.5</span> <span class="sec-title">IRIs</span></a>). Within
+ a <a class="tref internalDFN" title="context" href="#dfn-context">context</a> definition, this can mean that terms defined
+ within the context <em class="rfc2119" title="may">may</em> also be used within that context as long as
+ there are no circular dependencies. For example, it is common to use
+ the <code>xsd</code> namespace when defining <a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>s:</p>
+<div class="example"><div class="example-title"><span>Example 38</span>: IRI expansion within context</div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"xsd": "http://www.w3.org/2001/XMLSchema#"</span>,
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "age":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/age",
+ "@type": <span class="diff">"xsd:integer"</span>
+ },
+ "homepage":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ },
+ ...
+}</pre></div>
+<p>In this example, the <code>xsd</code> <a class="tref internalDFN" title="term" href="#dfn-term">term</a> is defined
+ and used as a <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> for the <code>@type</code> coercion
+ of the <code>age</code> property.</p>
+
+<p><a class="tref internalDFN" title="term" href="#dfn-term">Term</a>s <em class="rfc2119" title="may">may</em> also be used when defining the <abbr title="Internationalized Resource Identifier">IRI</abbr> of another
+<a class="tref internalDFN" title="term" href="#dfn-term">term</a>:</p>
+
+<div class="example"><div class="example-title"><span>Example 39</span></div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"foaf": "http://xmlns.com/foaf/0.1/"</span>,
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "name": <span class="diff">"foaf:name"</span>,
+ "age":
+ {
+ "@id": <span class="diff">"foaf:age"</span>,
+ "@type": "xsd:integer"
+ },
+ "homepage":
+ {
+ "@id": <span class="diff">"foaf:homepage"</span>,
+ "@type": "@id"
+ }
+ },
+ ...
+}</pre></div>
+
+<p><a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">Compact IRIs</a>
+ and <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> <em class="rfc2119" title="may">may</em> be used on the left-hand side of a
+ <a class="tref internalDFN" title="term" href="#dfn-term">term</a> definition.</p>
+
+<div class="example"><div class="example-title"><span>Example 40</span></div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"foaf": "http://xmlns.com/foaf/0.1/"</span>,
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "name": "foaf:name",
+ "<span class="diff">foaf:age</span>":
+ {
+ "@type": "xsd:integer"
+ },
+ "<span class="diff">foaf:homepage</span>":
+ <span class="diff">{
+ "@type": "@id"
+ }</span>
+ },
+ ...
+}</pre></div>
+
+<p>
+In this example, the <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> form is used in two different
+ways.
+In the first approach, <code>foaf:age</code> declares both the
+<a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> for the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> (using short-form) as well as the
+<code>@type</code> associated with the <a class="tref internalDFN" title="term" href="#dfn-term">term</a>. In the second
+approach, only the <code>@type</code> associated with the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> is
+specified. The JSON-LD processor will derive the full <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> for
+<code>foaf:homepage</code> by looking up the <code>foaf</code>
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> in the
+<a class="tref internalDFN" title="context" href="#dfn-context">context</a>.
+</p>
+
+<p>
+<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">Absolute IRIs</a> <em class="rfc2119" title="may">may</em> also be used in the key position in a <a class="tref internalDFN" title="context" href="#dfn-context">context</a>:
+</p>
+
+<div class="example"><div class="example-title"><span>Example 41</span></div><pre class="example">{
+ "@context":
+ {
+ "foaf": "http://xmlns.com/foaf/0.1/",
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "name": "foaf:name",
+ "foaf:age":
+ {
+ "@id": "foaf:age",
+ "@type": "xsd:integer"
+ },
+ "<span class="diff">http://xmlns.com/foaf/0.1/homepage</span>":
+ {
+ "@type": "@id"
+ }
+ },
+ ...
+}</pre></div>
+
+<p>
+In order for the <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> to match above, the <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> <em class="rfc2119" title="must">must</em> also
+be used in the JSON-LD document. Also note that <code>foaf:homepage</code>
+will not use the <code>{ "@type": "@id" }</code> declaration because
+<code>foaf:homepage</code> is not the same as
+<code>http://xmlns.com/foaf/0.1/homepage</code>. That is, a JSON-LD
+processor will use direct string comparison when looking up
+<a class="tref internalDFN" title="term" href="#dfn-term">term</a>s in a <a class="tref internalDFN" title="context" href="#dfn-context">context</a> before it applies the
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> lookup mechanism.
+</p>
+
+<p>The only exception for using terms in the <a class="tref internalDFN" title="context" href="#dfn-context">context</a> is that
+ they <em class="rfc2119" title="must not">must not</em> be used in a circular manner. That is,
+ a definition of <em>term-1</em> <em class="rfc2119" title="must not">must not</em> depend on the
+ definition of <em>term-2</em> if <em>term-2</em> also depends on
+ <em>term-1</em>. For example, the following <a class="tref internalDFN" title="context" href="#dfn-context">context</a> definition
+ is illegal:</p>
+<div class="example"><div class="example-title"><span>Example 42</span></div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"term1": "term2:foo",
+ "term2": "term1:bar"</span>
+ },
+ ...
+}</pre></div>
+</section>
+
+<section id="sets-and-lists">
+<h3><span class="secno">4.9 </span>Sets and Lists</h3>
+
+<p>A JSON-LD author can express multiple values in a compact way by using
+ <a class="tref internalDFN" title="array" href="#dfn-array">array</a>s. Since graphs do not describe ordering for links
+ between nodes, arrays in JSON-LD do not provide an ordering of the
+ contained elements by default. This is exactly the opposite from regular JSON
+ arrays, which are ordered by default. For example, consider the following
+ simple document:</p>
+
+<div class="example"><div class="example-title"><span>Example 43</span></div><pre class="example">{
+...
+ "@id": "http://example.org/people#joebob",
+ "nick": <span class="diff">[ "joe", "bob", "jaybee" ]</span>,
+...
+}</pre></div>
+
+<p>The markup shown above would result in three triples being generated,
+ each relating the node to an individual value, with no inherent order:</p>
+
+<div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">Including an illustration might be better.</p></div>
+
+<div class="example"><div class="example-title"><span>Example 44</span></div><pre class="example"><http://example.org/people#joebob> <http://xmlns.com/foaf/0.1/nick> "joe" .
+<http://example.org/people#joebob> <http://xmlns.com/foaf/0.1/nick> "bob" .
+<http://example.org/people#joebob> <http://xmlns.com/foaf/0.1/nick> "jaybee" .</pre></div>
+
+<p>Multiple values may also be expressed using the expanded form:</p>
+
+<div class="example"><div class="example-title"><span>Example 45</span></div><pre class="example">{
+ "@id": "http://example.org/articles/8",
+ "dc:title": <span class="diff">
+ [
+ {
+ "@value": "Das Kapital",
+ "@language": "de"
+ },
+ {
+ "@value": "Capital",
+ "@language": "en"
+ }
+ ]</span>
+}</pre></div>
+
+<p>The markup shown above would generate the following triples, again with
+ no inherent order:</p>
+
+<div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">Including an illustration might be better.</p></div>
+
+<div class="example"><div class="example-title"><span>Example 46</span></div><pre class="example"><http://example.org/articles/8> <http://purl.org/dc/terms/title> "Das Kapital"@de .
+<http://example.org/articles/8> <http://purl.org/dc/terms/title> "Capital"@en .</pre></div>
+
+
+<p>As the notion of ordered collections is rather important in data
+ modeling, it is useful to have specific language support. In JSON-LD,
+ a list may be represented using the <code>@list</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> as follows:</p>
+<div class="example"><div class="example-title"><span>Example 47</span></div><pre class="example">{
+...
+ "@id": "http://example.org/people#joebob",
+ "foaf:nick":
+ <span class="diff">{
+ "@list": [ "joe", "bob", "jaybee" ]
+ }</span>,
+...
+}</pre></div>
+
+<p>This describes the use of this <a class="tref internalDFN" title="array" href="#dfn-array">array</a> as being ordered,
+ and order is maintained when processing a document. If every use of a given multi-valued
+ property is a list, this may be abbreviated by setting <code>@container</code>
+ to <code>@list</code> in the <a class="tref internalDFN" title="context" href="#dfn-context">context</a>:</p>
+<div class="example"><div class="example-title"><span>Example 48</span></div><pre class="example">{
+ <span class="diff">"@context":
+ {
+ ...
+ "nick":
+ {
+ "@id": "http://xmlns.com/foaf/0.1/nick",
+ "@container": "@list"
+ }
+ }</span>,
+...
+ "@id": "http://example.org/people#joebob",
+ "nick": <span class="diff">[ "joe", "bob", "jaybee" ]</span>,
+...
+}</pre></div>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">List of lists are not allowed in this version of JSON-LD.
+ If a list of lists is detected, a JSON-LD processor will throw an exception.
+ This decision was made due to the extreme amount of added complexity when
+ processing lists of lists.</p></div>
+
+<p>Similarly to <code>@list</code>, there exists the <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> <code>@set</code> to
+ describe unordered sets. While its use in the body of a JSON-LD document
+ represents just syntactic sugar that <em class="rfc2119" title="must">must</em> be optimized away when processing
+ the document, it is very helpful when used within the context of a document.
+ Values of terms associated with a <code>@set</code> or <code>@list</code> container
+ are always represented in the form of an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> - even if there is just a
+ single value that would otherwise be optimized to a non-array form in a
+ <a href="#compact-document-form" class="sec-ref"><span class="secno">4.15</span> <span class="sec-title">Compact Document Form</span></a>. This makes post-processing of
+ the data easier as the data is always in array form, even if the array only
+ contains a single value.</p>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">The use of <code>@container</code> in the body of a JSON-LD
+ document, i.e., outside <code>@context</code> <em class="rfc2119" title="must">must</em> be ignored by
+ JSON-LD processors.</p></div>
+
+</section>
+
+<section id="embedding">
+ <h3><span class="secno">4.10 </span>Embedding</h3>
+
+ <p><dfn title="embedding" id="dfn-embedding">Embedding</dfn> is a JSON-LD feature that allows an author to
+ use <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definitions</a> as
+ <a class="tref internalDFN" title="property" href="#dfn-property">property</a> values. This is a commonly used mechanism for
+ creating a parent-child relationship between two <a class="tref internalDFN" title="node" href="#dfn-node">node</a>s.</p>
+
+ <p>The example shows two nodes related by a property from the first node:</p>
+
+ <div class="example"><div class="example-title"><span>Example 49</span></div><pre class="example">{
+...
+ "name": "Manu Sporny",
+ "<span class="diff">knows</span>":
+ {
+ "<span class="diff">@type</span>": "<span class="diff">Person</span>",
+ "<span class="diff">name</span>": "<span class="diff">Gregg Kellogg</span>",
+ }
+...
+}</pre></div>
+
+ <p>
+ A <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>, like the one used above, <em class="rfc2119" title="may">may</em> be used in
+ any value position in the body of a JSON-LD document.</p>
+</section>
+
+<section id="named-graphs">
+ <h3><span class="secno">4.11 </span>Named Graphs</h3>
+ <p>The <code>@graph</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> is used to express a set of
+ JSON-LD <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>s that may not be directly related
+ to one another through a property. The mechanism may also be used where
+ <a class="tref internalDFN" title="embedding" href="#dfn-embedding">embedding</a> is not desirable to the application. For example:</p>
+
+ <div class="example"><div class="example-title"><span>Example 50</span></div><pre class="example">{
+ "@context": ...,
+ "<span class="diff">@graph</span>":
+ [
+ {
+ "@id": "http://manu.sporny.org/i/public",
+ "@type": "foaf:Person",
+ "name": "Manu Sporny",
+ "knows": "http://greggkellogg.net/foaf#me"
+ },
+ {
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": "foaf:Person",
+ "name": "Gregg Kellogg",
+ "knows": "http://manu.sporny.org/i/public"
+ }
+ ]
+}</pre></div>
+
+ <p>In this case, embedding doesn't work as each
+ <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> references the other. Using the
+ <code>@graph</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> allows multiple resources to be
+ defined within an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, and allows the use of a shared
+ <a class="tref internalDFN" title="context" href="#dfn-context">context</a>. When used in a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> that is not otherwise
+ a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>, this describes resources in the <em>default graph</em>.
+ This is equivalent to using multiple <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definitions</a> in array and defining
+ the <code>@context</code> within each <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>:</p>
+
+ <div class="example"><div class="example-title"><span>Example 51</span></div><pre class="example"><span class="diff">[</span>
+ {
+ <span class="diff">"@context": ...,</span>
+ "@id": "http://manu.sporny.org/i/public",
+ "@type": "foaf:Person",
+ "name": "Manu Sporny",
+ "knows": "http://greggkellogg.net/foaf#me"
+ },
+ {
+ <span class="diff">"@context": ...,</span>
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": "foaf:Person",
+ "name": "Gregg Kellogg",
+ "knows": "http://manu.sporny.org/i/public"
+ }
+<span class="diff">]</span></pre></div>
+
+ <p>JSON-LD allows you to <em>name</em> things on the Web by assigning
+ an <code>@id</code> to them, which is typically an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.
+ This notion extends to the ability to identify graphs in the same
+ manner. A developer may name data expressed using the <code>@graph</code>
+ <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> by pairing it with an <code>@id</code>
+ <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. This enables the developer to make statements
+ about a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> itself,
+ rather than just a single <a class="tref internalDFN" title="node" href="#dfn-node">node</a>.</p>
+
+ <div class="example"><div class="example-title"><span>Example 52</span></div><pre class="example">{
+ "@context": ...,
+ <span class="diff">"@id": "http://example.org/graphs/73",
+ "asOf": { "@value": "2012-04-09", "@type": "xsd:date" },
+ "@graph":</span>
+ [
+ {
+ "@id": "http://manu.sporny.org/i/public",
+ "@type": "foaf:Person",
+ "name": "Manu Sporny",
+ "knows": "http://greggkellogg.net/foaf#me"
+ },
+ {
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": "foaf:Person",
+ "name": "Gregg Kellogg",
+ "knows": "http://manu.sporny.org/i/public"
+ }
+ ]
+}</pre></div>
+
+ <p>The example above expresses a <em>named</em>
+ <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> that is identified by the <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>
+ <code>http://example.org/graphs/73</code>. That graph is composed of the
+ statements about Manu and Gregg. Meta-data about the graph itself is also
+ expressed via the <code>asOf</code> property, which specifies when the
+ information was retrieved from the Web.</p>
+
+ <div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">These examples could all have TriG definitions of their RDF results,
+ but that would involve adding RDF earlier in the document.</p></div>
+
+</section>
+
+<section id="identifying-unlabeled-nodes">
+<h3><span class="secno">4.12 </span>Identifying Unlabeled Nodes</h3>
+
+<p>At times, it becomes necessary to be able to express information without
+being able to specify the node. Typically, this type of node is called
+an <dfn title="unlabeled_node" id="dfn-unlabeled_node">unlabeled node</dfn> or a <dfn title="blank_node" id="dfn-blank_node">blank node</dfn> (see [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>] <cite><a href="http://www.w3.org/TR/rdf11-concepts/#section-blank-nodes">Section 3.4: Blank Nodes</a></cite>).
+In JSON-LD, <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a> identifiers are
+automatically created if a node is not specified using the
+<code>@id</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. However, authors may provide identifiers for
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled nodes</a> by using the special <code>_</code> (underscore)
+<a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a>. This allows one to reference the node locally within the
+document, but makes it impossible to reference the node from an
+external document. The <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a> identifier is scoped to the
+document in which it is used.</p>
+
+<div class="example"><div class="example-title"><span>Example 53</span></div><pre class="example">{
+...
+ "@id": "<span class="diff">_:foo</span>",
+...
+}</pre></div>
+
+<p>The example above would set the node to <code>_:foo</code>, which can
+then be used elsewhere in the JSON-LD document to refer back to the
+<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a>. If a developer finds that they refer to the unlabeled
+node more than once, they should consider naming the node using a de-referenceable
+<a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> so that it can be referenced also from other documents.
+</p>
+
+</section>
+
+<section id="aliasing-keywords">
+<h3><span class="secno">4.13 </span>Aliasing Keywords</h3>
+
+<p>Each of the JSON-LD <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a>,
+except for <code>@context</code>, <em class="rfc2119" title="may">may</em> be aliased to application-specific
+keywords. This feature allows legacy JSON content to be utilized
+by JSON-LD by re-using JSON keys that already exist in legacy documents.
+This feature also allows developers to design domain-specific implementations
+using only the JSON-LD <a class="tref internalDFN" title="context" href="#dfn-context">context</a>.</p>
+
+<div class="example"><div class="example-title"><span>Example 54</span></div><pre class="example">{
+ "@context":
+ {
+ <span class="diff">"url": "@id"</span>,
+ <span class="diff">"a": "@type"</span>,
+ "name": "http://schema.org/name"
+ },
+ "<span class="diff">url</span>": "http://example.com/about#gregg",
+ "<span class="diff">a</span>": "http://schema.org/Person",
+ "name": "Gregg Kellogg"
+}</pre></div>
+
+<p>In the example above, the <code>@id</code> and <code>@type</code>
+<a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a> have been given the aliases <strong>url</strong> and
+<strong>a</strong>, respectively.
+</p>
+
+</section>
+
+<section id="expanded-document-form">
+<h3><span class="secno">4.14 </span>Expanded Document Form</h3>
+<p>The JSON-LD API [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>] defines an method for <em>expanding</em> a
+ JSON-LD document.
+ Expansion is the process of taking a JSON-LD document and applying a
+ <code>@context</code> such that all IRIs, types, and values
+ are expanded so that the <code>@context</code> is no longer necessary.</p>
+
+<p>For example, assume the following JSON-LD input document:</p>
+
+<div class="example"><div class="example-title"><span>Example 55</span></div><pre class="example">{
+ "@context":
+ {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "homepage": {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ },
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}</pre></div>
+
+<p>Running the JSON-LD Expansion algorithm against the JSON-LD input document
+ provided above would result in the following output:</p>
+
+<div class="example"><div class="example-title"><span>Example 56</span></div><pre class="example">[
+ {
+ "http://xmlns.com/foaf/0.1/name": [
+ { "@value": "Manu Sporny" }
+ ],
+ "http://xmlns.com/foaf/0.1/homepage": [
+ { "@id": "http://manu.sporny.org/" }
+ ]
+ }
+]</pre></div>
+
+<p>Expanded document form is useful when an application has to process input
+data in a deterministic form. It has been optimized to ensure that the code
+that developers have to write is minimized compared to the code that would
+have to be written to operate on
+<a href="#compact-document-form" class="sec-ref"><span class="secno">4.15</span> <span class="sec-title">Compact Document Form</span></a>.</p>
+
+</section>
+
+<section id="compact-document-form">
+<h3><span class="secno">4.15 </span>Compact Document Form</h3>
+<p>The JSON-LD API [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>] defines a method for <em>compacting</em> a JSON-LD document.
+ Compaction is the process of taking a JSON-LD document and applying a
+ context such that the most compact form of the document is generated. JSON
+ is typically expressed in a very compact, key-value format. That is, full
+ IRIs are rarely used as keys. At times, a JSON-LD document may be received
+ that is not in its most compact form. JSON-LD, via the API, provides a way
+ to compact a JSON-LD document.</p>
+
+<p>For example, assume the following JSON-LD input document:</p>
+
+<div class="example"><div class="example-title"><span>Example 57</span></div><pre class="example">[
+ {
+ "http://xmlns.com/foaf/0.1/name": [ "Manu Sporny" ],
+ "http://xmlns.com/foaf/0.1/homepage": [
+ {
+ "@id": "http://manu.sporny.org/"
+ }
+ ]
+ }
+]</pre></div>
+
+<p>Additionally, assume the following developer-supplied JSON-LD context:</p>
+
+<div class="example"><div class="example-title"><span>Example 58</span></div><pre class="example">{
+ "@context": {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "homepage": {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ }
+}</pre></div>
+
+<p>Running the JSON-LD Compaction algorithm given the context supplied above
+ against the JSON-LD input document provided above would result in the following
+ output:</p>
+
+<div class="example"><div class="example-title"><span>Example 59</span></div><pre class="example">{
+ "@context": {
+ "name": "http://xmlns.com/foaf/0.1/name",
+ "homepage": {
+ "@id": "http://xmlns.com/foaf/0.1/homepage",
+ "@type": "@id"
+ }
+ },
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/"
+}</pre></div>
+
+<p>The compaction algorithm enables a developer to map any document into an
+ application-specific compacted form by first <a href="#expanded-document-form" class="sec-ref"><span class="secno">4.14</span> <span class="sec-title">Expanded Document Form</span></a>.
+ While the context provided above mapped <code>http://xmlns.com/foaf/0.1/name</code>
+ to <strong>name</strong>, it could have also mapped it to any arbitrary string
+ provided by the developer. This powerful mechanism, along with another
+ JSON-LD API technique called <em>framing</em>, allows the developer to
+ re-shape the incoming JSON data into a format that is optimized for
+ their application.</p>
+</section>
+
+</section>
+
+<section class="appendix normative" id="json-ld-grammar">
+
+<!--OddPage-->
+<h2><span class="secno">A. </span>JSON-LD Grammar</h2>
+<em>This section is normative</em>
+
+<p data-number="114" class="issue resolved">This section is an attempt to formalize
+a normative grammar for JSON-LD.</p>
+
+<p>This appendix restates the syntactic conventions described in the
+ previous sections more formally.</p>
+
+<p>A JSON-LD processor <em class="rfc2119" title="should">should</em> attempt to process non-conforming
+ JSON-LD documents. Conformance violations <em class="rfc2119" title="must">must</em> be reported through a
+ callback mechanism defined in [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>].</p>
+
+<p>For a JSON-LD document to be conforming, it <em class="rfc2119" title="must">must</em> be a valid JSON document
+ as described in [<cite><a class="bibref" href="#bib-RFC4627">RFC4627</a></cite>].</p>
+
+<p>JSON-LD introduces a number of keywords of the form '<code>@</code>'
+ followed by a set of one or more lower case alphabetic characters
+ (<code>@[a-z]+</code>). JSON-LD documents <em class="rfc2119" title="should not">should not</em> define terms beginning
+ with '<code>@</code>'.
+ (See <a href="#syntax-tokens-and-keywords" class="sec-ref"><span class="secno">3.2</span> <span class="sec-title">Syntax Tokens and Keywords</span></a> for a complete definition of JSON-LD keywords).</p>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">The JSON-LD context allows <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a> to be
+ aliased within the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>. Whenever a <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> is
+ discussed, this is also understood to apply to an alias for that <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>
+ For example, if the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> defines the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> <code>id</code> as
+ an alias for <code>@id</code>, that alias may be legitimately used as a substitution
+ for <code>@id</code>. Note that <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> aliases are not expanded during
+ context processing.</p></div>
+
+<p>A JSON-LD document is either a
+ a single <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>
+ or a JSON <a class="tref internalDFN" title="array" href="#dfn-array">array</a> containing a set of
+ one or more <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definitions</a>.</p>
+<div class="example"><div class="example-title"><span>Example 60</span>: Simple node definition</div><pre class="example">{
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}</pre></div>
+<div class="example"><div class="example-title"><span>Example 61</span>: Array of node definitions</div><pre class="example">[
+ {
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+ }, {
+ "name": "Gregg Kellogg",
+ "homepage": "http://greggkellogg.net/",
+ "depiction": "http://twitter.com/account/profile_image/gkellogg"
+ }
+]</pre></div>
+
+<section id="grammar-node-definition">
+<h3><span class="secno">A.1 </span>Node Definition</h3>
+<p>A <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>
+ containing one or more key/value pairs. Keys are <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s,
+ <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>s,
+ <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s defined within the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>, or one of the
+ following keywords:</p>
+<ul>
+ <li><code>@context</code>,</li>
+ <li><code>@graph</code>,</li>
+ <li><code>@id</code>, or</li>
+ <li><code>@type</code></li>
+</ul>
+<p>If the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> contains the <code>@context</code>
+ key, it's value <em class="rfc2119" title="must">must</em> be one of the following:</p>
+<ul>
+ <li>a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> with the lexical form of <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>,</li>
+ <li>a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> conforming the the syntax requirements stated
+ in <a href="#grammar-context" class="sec-ref"><span class="secno">A.6</span> <span class="sec-title">Context Definition</span></a>, or</li>
+ <li>an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> composed of any number of the previous two expressions.</li>
+</ul>
+<div class="example"><div class="example-title"><span>Example 62</span>: Node definition with external context</div><pre class="example">{
+ <span class="diff">"@context": "http://json-ld.org/contexts/person.jsonld"</span>,
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}</pre></div>
+<p>See <a href="#node-identifiers" class="sec-ref"><span class="secno">3.6</span> <span class="sec-title">Node Identifiers</span></a>, <a href="#compact-iris" class="sec-ref"><span class="secno">4.1</span> <span class="sec-title">Compact IRIs</span></a>,
+ and <a href="#identifying-unlabeled-nodes" class="sec-ref"><span class="secno">4.12</span> <span class="sec-title">Identifying Unlabeled Nodes</span></a> for further discussion on
+ <code>@id</code> values.</p>
+
+<p>If the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> contains the <code>@id</code>
+ key, it's value
+ <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> having the lexical form of <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
+ <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> (including <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a>), or a
+ <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined in the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> expanding
+ into an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> or an <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a>.</p>
+
+<div class="example"><div class="example-title"><span>Example 63</span>: Node definition with @id</div><pre class="example">{
+ "@context": "http://json-ld.org/contexts/person.jsonld",
+ <span class="diff">"@id": "http://manu.sporny.org/i/public"</span>,
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}</pre></div>
+
+<p>If the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> contains the <code>@type</code>
+ key, it's value
+ <em class="rfc2119" title="must">must</em> be either a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> having the lexical form of
+ <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined in the
+ <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> expanding into an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
+ or an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> of any of these.</p>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">A JSON-LD processor <em class="rfc2119" title="should">should</em> process non-conforming documents
+ having <code>@type</code> values including <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> or
+ <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a> entries but <em class="rfc2119" title="must">must</em>
+ discard everything except for the value of the <code>@id</code> key.</p></div>
+
+<div class="example"><div class="example-title"><span>Example 64</span>: Node definition with @type</div><pre class="example">{
+ "@context": "http://json-ld.org/contexts/person.jsonld",
+ "@id": "http://manu.sporny.org/i/public",
+ <span class="diff">"@type": "Person"</span>,
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "depiction": "http://twitter.com/account/profile_image/manusporny"
+}</pre></div>
+<p>See <a href="#specifying-the-type" class="sec-ref"><span class="secno">3.7</span> <span class="sec-title">Specifying the Type</span></a> for further discussion on
+ <code>@type</code> values.</p>
+
+<p>If the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> contains the <code>@graph</code>
+ key, it's value <em class="rfc2119" title="must">must</em>
+ be a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> or an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> of zero or more
+ <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definitions</a>. If the
+ <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> contains an <code>@id</code> keyword,
+ its value is used as the label of a named graph.</p>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">As a special case, if the <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> contains no
+ keys other than <code>@graph</code> and <code>@context</code>, and the
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is the root of the JSON-LD document, the
+ <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is not treated as a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>; this
+ is used as a way of defining <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node
+ definitions</a> that may not form a connected graph. This allows a
+ <a class="tref internalDFN" title="context" href="#dfn-context">context</a> to be defined which is shared by all of the constituent
+ <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definitions</a>.</p></div>
+
+
+<div class="example"><div class="example-title"><span>Example 65</span>: Multiple node definitions with a single context using @graph</div><pre class="example">{
+ "@context": ...,
+ "<span class="diff">@graph</span>":
+ [
+ {
+ "@id": "http://manu.sporny.org/i/public",
+ "@type": "foaf:Person",
+ "name": "Manu Sporny",
+ "knows": "http://greggkellogg.net/foaf#me"
+ },
+ {
+ "@id": "http://greggkellogg.net/foaf#me",
+ "@type": "foaf:Person",
+ "name": "Gregg Kellogg",
+ "knows": "http://manu.sporny.org/i/public"
+ }
+ ]
+}</pre></div>
+
+<p>See <a href="#named-graphs" class="sec-ref"><span class="secno">4.11</span> <span class="sec-title">Named Graphs</span></a> for further discussion on
+ <code>@graph</code> values.</p>
+
+<p>A JSON-LD document <em class="rfc2119" title="must not">must not</em> contain any other <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> or
+ alias expanding to any other keyword.</p>
+
+<p>Other keys <em class="rfc2119" title="must">must</em> expand to an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> using the
+ <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>. The values associated with these keys
+ may be any of the following:</p>
+
+<ul>
+ <li><a class="tref internalDFN" title="string" href="#dfn-string">string</a>,</li>
+ <li><a class="tref internalDFN" title="number" href="#dfn-number">number</a>,</li>
+ <li><a class="tref internalDFN" title="true" href="#dfn-true">true</a>,</li>
+ <li><a class="tref internalDFN" title="false" href="#dfn-false">false</a>,</li>
+ <li><a class="tref internalDFN" title="null" href="#dfn-null">null</a>,</li>
+ <li><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>,</li>
+ <li><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>,</li>
+ <li><a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>,</li>
+ <li><a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged string</a>,</li>
+ <li><code>@set</code> or <code>@list</code>
+ definition (see <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>),</li>
+ <li>an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> zero or more of these, or</li>
+ <li><a class="tref internalDFN" title="language_map" href="#dfn-language_map">language map</a>.</li>
+</ul>
+
+</section>
+
+<section id="grammar-node-reference">
+<h3><span class="secno">A.2 </span>Node Reference</h3>
+<p>A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> containing only the <code>@id</code> (or alias)
+ is a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a> and not a
+ <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>.
+</p>
+<div class="example"><div class="example-title"><span>Example 66</span>: Explicit node reference</div><pre class="example">{
+ "@context": ...,
+ "@graph": [
+ {
+ "@id": "http://example.org/library",
+ "@type": "ex:Library",
+ <span class="diff">"ex:contains": {"@id": "http://example.org/library/the-republic"}</span>
+ }, {
+ "@id": "http://example.org/library/the-republic",
+ "@type": "ex:Book",
+ "dc:creator": "Plato",
+ "dc:title": "The Republic",
+ <span class="diff">"ex:contains": {"@id": "http://example.org/library/the-republic#introduction"}</span>
+ }, {
+ "@id": "http://example.org/library/the-republic#introduction",
+ "@type": "ex:Chapter",
+ "dc:description": "An introductory chapter on The Republic.",
+ "dc:title": "The Introduction"
+ }
+ ]
+}
+}</pre></div>
+</section>
+
+<section id="grammar-language-map">
+<h3><span class="secno">A.3 </span>Language Map</h3>
+<p>A <a class="tref internalDFN" title="language_map" href="#dfn-language_map">language map</a> may be used as a term value within a
+ <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> if the term is defined with
+ <code>@container</code> set to <code>@language</code>.</p>
+<p>The keys of a <a class="tref internalDFN" title="language_map" href="#dfn-language_map">language map</a> <em class="rfc2119" title="must">must</em> be a [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>] string
+ with an associated value that is any of the following types:</p>
+<ul>
+ <li><a class="tref internalDFN" title="string" href="#dfn-string">string</a>,</li>
+ <li><a class="tref internalDFN" title="number" href="#dfn-number">number</a>,</li>
+ <li><a class="tref internalDFN" title="true" href="#dfn-true">true</a>,</li>
+ <li><a class="tref internalDFN" title="false" href="#dfn-false">false</a>,</li>
+ <li><a class="tref internalDFN" title="null" href="#dfn-null">null</a>,</li>
+ <li><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>,</li>
+ <li><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>,</li>
+ <li><a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>,</li>
+ <li><a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged string</a>,</li>
+ <li><code>@set</code> or <code>@list</code>
+ definition (see <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>), or</li>
+ <li>an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> zero or more of these</li>
+</ul>
+<p data-number="133" class="issue resolved">We had also discussed values other than strings, such as those that might represent a more reified version of a value with other properties, such as is described using <a href="http://www.w3.org/TR/skos-reference/skos-xl.html">SKOS-XL</a>.</p>
+<div class="example"><div class="example-title"><span>Example 67</span>: Language map expressing a property in three languages</div><pre class="example">{
+ "@context":
+ {
+ "title":
+ {
+ "@id": "http://purl.org/dc/terms/title"
+ <span class="diff">"@container": "@language"</span>
+ }
+ },
+...
+ "title":
+ <span class="diff">{
+ "en": "JSON-LD Syntax",
+ "ru": "JSON-LD Синтаксис",
+ "ja": "JSON-LDの構文"
+ }</span>
+...
+}</pre></div>
+</section>
+
+<section id="grammar-expanded-values">
+<h3><span class="secno">A.4 </span>Expanded Values</h3>
+<p>An <dfn title="expanded_value" id="dfn-expanded_value">expanded value</dfn> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> containing the
+ <code>@value</code> key, or an alias for the <code>@value</code> value key.
+ It <em class="rfc2119" title="may">may</em>
+ also contain the <code>@type</code> or <code>@language</code> keys, or their
+ respective keyword aliases. An <a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value">expanded value</a> <em class="rfc2119" title="must not">must not</em>
+ contain keys other than <code>@value</code>, <code>@language</code>, and
+ <code>@type</code>.
+ An <a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value">expanded value</a> <em class="rfc2119" title="must not">must not</em> contain both the
+ <code>@language</code> and <code>@type</code> keys.</p>
+ <p>The value of the <code>@value</code> key, or its alias, <em class="rfc2119" title="must">must</em> be either a
+ <a class="tref internalDFN" title="string" href="#dfn-string">string</a>, <a class="tref internalDFN" title="number" href="#dfn-number">number</a>, <a class="tref internalDFN" title="true" href="#dfn-true">true</a>, or
+ <a class="tref internalDFN" title="false" href="#dfn-false">false</a>.</p>
+<p>If an <a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value">expanded value</a> contains a <code>@language</code> key,
+ it <em class="rfc2119" title="must not">must not</em> contain any other key except <code>@value</code>. The value of
+ the <code>@language</code> key <em class="rfc2119" title="must">must</em> have the lexical form described in
+ [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>], or be <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.</p>
+<p>If an <a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value">expanded value</a> contains a <code>@type</code> key, it
+ <em class="rfc2119" title="must not">must not</em> contain any other key except <code>@value</code>. The value of
+ <code>@type</code> <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>, <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
+ <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or <code>null</code>.</p>
+<p>See <a href="#typed-values" class="sec-ref"><span class="secno">4.2</span> <span class="sec-title">Typed Values</span></a> and <a href="#language-tagged-strings" class="sec-ref"><span class="secno">4.3</span> <span class="sec-title">Language-tagged Strings</span></a>
+ for a further discussion of
+ <a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value">expanded values</a>.</p>
+</section>
+
+<section id="grammar-set-list">
+<h3><span class="secno">A.5 </span>List and Set Values</h3>
+
+<p>A <dfn title="list" id="dfn-list">list</dfn> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> having only the <code>@list</code>
+ <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. Its value <em class="rfc2119" title="must">must</em> be an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> of any of the following:</p>
+<ul>
+ <li><a class="tref internalDFN" title="string" href="#dfn-string">string</a>,</li>
+ <li><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>,</li>
+ <li><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>,</li>
+ <li><a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>, or</li>
+ <li><a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged string</a>.</li>
+</ul>
+<p>A <dfn title="set" id="dfn-set">set</dfn> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> having only the <code>@set</code>
+ <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. Its value <em class="rfc2119" title="must">must</em> be an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> of any of the following:</p>
+<ul>
+ <li><a class="tref internalDFN" title="string" href="#dfn-string">string</a>,</li>
+ <li><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>,</li>
+ <li><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>,</li>
+ <li><a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>,</li>
+ <li><a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged string</a>,</li>
+ <li><code>@set</code> or <code>@list</code>
+ definition (see <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>), or</li>
+ <li>an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> zero or more of these.</li>
+</ul>
+<p>See <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a> for a further discussion of List and Set Values.</p>
+</section>
+
+<section id="grammar-context">
+<h3><span class="secno">A.6 </span>Context Definition</h3>
+<p>A <dfn title="context_definition" id="dfn-context_definition">context definition</dfn> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>
+ containing one or more key/value pairs. Keys are non-keyword <a class="tref internalDFN" title="string" href="#dfn-string">strings</a>
+ or the <code>@language</code> or <code>@vocab</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a>.
+ A <a class="tref internalDFN" title="context_definition" href="#dfn-context_definition">context definition</a>
+ <em class="rfc2119" title="should not">should not</em> contain any keys having the lexical form of <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> other than
+ <code>@language</code> or <code>@vocab</code>.</p>
+<p>If the <a class="tref internalDFN" title="context_definition" href="#dfn-context_definition">context definition</a> has a <code>@language</code> key,
+ the value <em class="rfc2119" title="must">must</em> have the lexical form described in [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>] or be <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.</p>
+<p>If the <a class="tref internalDFN" title="context_definition" href="#dfn-context_definition">context definition</a> has a <code>@vocab</code> key,
+ the value <em class="rfc2119" title="must">must</em> have the lexical form of <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> or be <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.</p>
+<p>Other keys are <a class="tref internalDFN" title="term" href="#dfn-term">term</a> definitions. Their values <em class="rfc2119" title="must">must</em> be either a
+ <a class="tref internalDFN" title="string" href="#dfn-string">string</a>, or a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> having the form of an <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term
+ definition</a> (see <a href="#expanded-term-definition" class="sec-ref"><span class="secno">4.5</span> <span class="sec-title">Expanded Term Definition</span></a>).</p>
+<p>An <dfn title="expanded_term_definition" id="dfn-expanded_term_definition">expanded term definition</dfn> is composed of zero or more keys from <code>@id</code>,
+ <code>@type</code>, <code>@language</code> or <code>@container</code>. An
+ <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term definition</a> <em class="rfc2119" title="must not">must not</em> contain any other keys.
+ All values associated with <code>@id</code> <em class="rfc2119" title="must">must</em> expand to an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</p>
+<p>If the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> definition is not a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> or <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
+ the <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term
+ definition</a> <em class="rfc2119" title="must">must</em> include the <code>@id</code> key.</p>
+<p>If the <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term definition</a> contains the <code>@id</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>,
+ it <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> having the lexical form of <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
+ <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined in the defining <a class="tref internalDFN" title="context_definition" href="#dfn-context_definition">context
+ definition</a> or the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>, or an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> composed of any of the previous allowed values.</p>
+<p>If the <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term definition</a> contains the <code>@type</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>,
+ it <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> having the lexical form of <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
+ <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined in the defining <a class="tref internalDFN" title="context_definition" href="#dfn-context_definition">context
+ definition</a> or the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.</p>
+<p>If the <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term definition</a> contains the <code>@language</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>,
+ the value <em class="rfc2119" title="must">must</em> have the lexical form described in [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>] or be <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.</p>
+<p>If the <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term definition</a> contains the <code>@container</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>,
+ the value <em class="rfc2119" title="must">must</em> be either <code>@list</code>, <code>@set</code>, <code>@language</code>, or be <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.
+ If the value is <code>@language</code>, when the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> is used outside of the <code>@context</code>, the
+ associated value <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> whose keys are <a class="tref internalDFN" title="string" href="#dfn-string">string</a>s that are [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>] language identifiers.
+ The values associated with each [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>] language string <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> or an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> of <a class="tref internalDFN" title="string" href="#dfn-string">string</a>s.</p>
+<p>See <a href="#the-context" class="sec-ref"><span class="secno">3.3</span> <span class="sec-title">The Context</span></a> and <a href="#expanded-term-definition" class="sec-ref"><span class="secno">4.5</span> <span class="sec-title">Expanded Term Definition</span></a>
+ for a further discussion of contexts.</p>
+</section>
+<div class="example"><div class="example-title"><span>Example 68</span>: Context definition with simple terms, expanded term definitions and @language</div><pre class="example">{
+ "@language": "en",
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "foaf": "http://xmlns.com/foaf/0.1/",
+ "name": "foaf:name",
+ "depiction": {"@id": "foaf:depiction", "@type": "@id"},
+ "modified": {"@id": "http://purl.org/dc/terms/modified", "@type": "xsd:dateTime"},
+ "homepage": {"@id": "foaf:homepage", "@type": "@id", "@container": "@list"}
+}</pre></div>
+</section>
+
+<section class="appendix informative" id="relationship-to-other-linked-data-formats-and-data-models">
+
+<!--OddPage-->
+<h2><span class="secno">B. </span>Relationship to Other Linked Data Formats and Data Models</h2><p><em>This section is non-normative.</em></p>
+
+<div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">
+The intent of the Working Group and the Editors of this specification is to
+eventually align terminology used in this document with the terminology used
+in the RDF Concepts document [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>] to the extent to which it makes sense to do so.
+In general, if there is an analogue to terminology used in this document in
+the RDF Concepts document, the preference is to use the terminology in the
+RDF Concepts document.
+</p></div>
+
+<p>JSON-LD is a specification for representing <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> in JSON. A common
+ way of working with Linked Data is through <dfn title="rdf" id="dfn-rdf">RDF</dfn>, the Resource Description Framework.
+ RDF can be expressed using JSON-LD by associating JSON-LD concepts such as <code>@id</code>
+ and <code>@type</code> with the equivalent <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s in RDF. Further information about
+ RDF may be found in the [<cite><a class="bibref" href="#bib-RDF-PRIMER">RDF-PRIMER</a></cite>].</p>
+
+<p>The JSON-LD markup examples below demonstrate how JSON-LD can be used to
+ express semantic data marked up in other languages and data models
+ such as RDF, Turtle, RDFa, Microformats,
+ and Microdata. These sections are merely provided as evidence that JSON-LD is
+ very flexible in what it can express across different <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> approaches.
+ Further information on transforming JSON-LD into RDF are detailed in the
+ [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>].</p>
+
+<section id="rdf">
+ <h3><span class="secno">B.1 </span>RDF</h3><p><em>This section is non-normative.</em></p>
+
+ <p>The RDF data model, as outlined in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>], is an abstract
+ syntax for representing a directed graph of information. JSON-LD is
+ capable of serializing any RDF graph, and performing full RDF to
+ JSON-LD to RDF round-tripping. A complete description of how JSON-LD maps
+ to RDF and algorithms detailing how one can convert from RDF to
+ JSON-LD and from JSON-LD to RDF are included in the JSON-LD API
+ [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>] specification.
+ </p>
+
+</section>
+
+<section id="turtle">
+ <h3><span class="secno">B.2 </span>Turtle</h3>
+
+ <p>The following are examples of converting <a class="tref internalDFN" title="rdf" href="#dfn-rdf">RDF</a>
+ expressed in [<cite><a class="bibref" href="#bib-TURTLE-TR">TURTLE-TR</a></cite>] into JSON-LD.</p>
+
+<section id="prefix-definitions">
+<h4><span class="secno">B.2.1 </span>Prefix definitions</h4><p><em>This section is non-normative.</em></p>
+<p>The JSON-LD context has direct equivalents for the Turtle
+ <code>@prefix</code> declaration:</p>
+
+<div class="example"><div class="example-title"><span>Example 69</span></div><pre class="example">@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+
+<http://manu.sporny.org/i/public> a foaf:Person;
+ foaf:name "Manu Sporny";
+ foaf:homepage <http://manu.sporny.org/> .</pre></div>
+
+<div class="example"><div class="example-title"><span>Example 70</span></div><pre class="example">{
+ "@context":
+ {
+ "foaf": "http://xmlns.com/foaf/0.1/"
+ },
+ "@id": "http://manu.sporny.org/i/public",
+ "@type": "foaf:Person",
+ "foaf:name": "Manu Sporny",
+ "foaf:homepage": { "@id": "http://manu.sporny.org/" }
+}</pre></div>
+
+<div class="note"><div class="note-title"><span>Note</span></div><p class="">JSON-LD has no equivalent for the Turtle <code>@base</code> declaration.</p></div>
+
+</section>
+
+<section id="embedding-1">
+<h4><span class="secno">B.2.2 </span>Embedding</h4>
+<p>Both Turtle and JSON-LD allow embedding, although Turtle only allows embedding of
+ <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled nodes</a>.</p>
+</section>
+
+<div class="example"><div class="example-title"><span>Example 71</span></div><pre class="example">@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+
+<http://manu.sporny.org/i/public>
+ a foaf:Person;
+ foaf:name "Manu Sporny";
+ foaf:knows [ a foaf:Person; foaf:name "Gregg Kellogg" ] .</pre></div>
+
+<div class="example"><div class="example-title"><span>Example 72</span></div><pre class="example">{
+ "@context":
+ {
+ "foaf": "http://xmlns.com/foaf/0.1/"
+ },
+ "@id": "http://manu.sporny.org/i/public",
+ "@type": "foaf:Person",
+ "foaf:name": "Manu Sporny",
+ "foaf:knows":
+ {
+ "@type": "foaf:Person",
+ "foaf:name": "Gregg Kellogg"
+ }
+}</pre></div>
+<section id="lists">
+<h4><span class="secno">B.2.3 </span>Lists</h4>
+<p>Both JSON-LD and Turtle can represent sequential lists of values.</p>
+
+<div class="example"><div class="example-title"><span>Example 73</span></div><pre class="example">@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+
+<http://example.org/people#joebob> a foaf:Person;
+ foaf:name "Joe Bob";
+ foaf:nick ( "joe" "bob" "jaybee" ) .</pre></div>
+
+<div class="example"><div class="example-title"><span>Example 74</span></div><pre class="example">{
+ "@context":
+ {
+ "foaf": "http://xmlns.com/foaf/0.1/"
+ },
+ "@id": "http://example.org/people#joebob",
+ "@type": "foaf:Person",
+ "foaf:name": "Joe Bob",
+ "foaf:nick":
+ {
+ "@list": [ "joe", "bob", "jaybee" ]
+ }
+}</pre></div>
+</section>
+
+</section>
+
+<section id="rdfa">
+<h3><span class="secno">B.3 </span>RDFa</h3>
+
+<p>The following example describes three people with their respective names and
+homepages.</p>
+
+<div class="example"><div class="example-title"><span>Example 75</span></div><pre class="example"><div <span class="diff">prefix="foaf: http://xmlns.com/foaf/0.1/"</span>>
+ <ul>
+ <li <span class="diff">typeof="foaf:Person"</span>>
+ <a <span class="diff">rel="foaf:homepage" href="http://example.com/bob/" property="foaf:name" </span>>Bob</a>
+ </li>
+ <li <span class="diff">typeof="foaf:Person"</span>>
+ <a <span class="diff">rel="foaf:homepage" href="http://example.com/eve/" property="foaf:name" </span>>Eve</a>
+ </li>
+ <li <span class="diff">typeof="foaf:Person"</span>>
+ <a <span class="diff">rel="foaf:homepage" href="http://example.com/manu/" property="foaf:name" </span>>Manu</a>
+ </li>
+ </ul>
+</div></pre></div>
+
+<p>An example JSON-LD implementation using a single <a class="tref internalDFN" title="context" href="#dfn-context">context</a> is
+described below.</p>
+
+<div class="example"><div class="example-title"><span>Example 76</span></div><pre class="example">{
+ "@context":
+ {
+ "foaf": "http://xmlns.com/foaf/0.1/"
+ },
+ "@graph":
+ [
+ {
+ "@type": "foaf:Person",
+ "foaf:homepage": "http://example.com/bob/",
+ "foaf:name": "Bob"
+ },
+ {
+ "@type": "foaf:Person",
+ "foaf:homepage": "http://example.com/eve/",
+ "foaf:name": "Eve"
+ },
+ {
+ "@type": "foaf:Person",
+ "foaf:homepage": "http://example.com/manu/",
+ "foaf:name": "Manu"
+ }
+ ]
+}</pre></div>
+
+</section>
+
+<section id="microformats">
+<h3><span class="secno">B.4 </span>Microformats</h3>
+
+<p>The following example uses a simple Microformats hCard example to express
+how the Microformat is represented in JSON-LD.</p>
+
+<div class="example"><div class="example-title"><span>Example 77</span></div><pre class="example"><div class="vcard">
+ <a class="url fn" href="http://tantek.com/">Tantek Çelik</a>
+</div></pre></div>
+
+<p>The representation of the hCard expresses the Microformat terms in the
+<a class="tref internalDFN" title="context" href="#dfn-context">context</a> and uses them directly for the <code>url</code> and <code>fn</code>
+properties. Also note that the Microformat to JSON-LD processor has
+generated the proper URL type for <code>http://tantek.com/</code>.</p>
+
+<div class="example"><div class="example-title"><span>Example 78</span></div><pre class="example">{
+ "@context":
+ {
+ "vcard": "http://microformats.org/profile/hcard#vcard",
+ "url":
+ {
+ "@id": "http://microformats.org/profile/hcard#url",
+ "@type": "@id"
+ },
+ "fn": "http://microformats.org/profile/hcard#fn"
+ },
+ "@type": "vcard",
+ "url": "http://tantek.com/",
+ "fn": "Tantek Çelik"
+}</pre></div>
+
+</section>
+
+<section id="microdata">
+<h3><span class="secno">B.5 </span>Microdata</h3>
+
+<p>The microdata example below expresses book information as a microdata Work
+item.
+</p>
+
+<div class="example"><div class="example-title"><span>Example 79</span></div><pre class="example"><dl itemscope
+ itemtype="http://purl.org/vocab/frbr/core#Work"
+ itemid="http://purl.oreilly.com/works/45U8QJGZSQKDH8N">
+ <dt>Title</dt>
+ <dd><cite itemprop="http://purl.org/dc/terms/title">Just a Geek</cite></dd>
+ <dt>By</dt>
+ <dd><span itemprop="http://purl.org/dc/terms/creator">Wil Wheaton</span></dd>
+ <dt>Format</dt>
+ <dd itemprop="http://purl.org/vocab/frbr/core#realization"
+ itemscope
+ itemtype="http://purl.org/vocab/frbr/core#Expression"
+ itemid="http://purl.oreilly.com/products/9780596007683.BOOK">
+ <link itemprop="http://purl.org/dc/terms/type" href="http://purl.oreilly.com/product-types/BOOK">
+ Print
+ </dd>
+ <dd itemprop="http://purl.org/vocab/frbr/core#realization"
+ itemscope
+ itemtype="http://purl.org/vocab/frbr/core#Expression"
+ itemid="http://purl.oreilly.com/products/9780596802189.EBOOK">
+ <link itemprop="http://purl.org/dc/terms/type" href="http://purl.oreilly.com/product-types/EBOOK">
+ Ebook
+ </dd>
+</dl></pre></div>
+
+<p>Note that the JSON-LD representation of the Microdata information stays
+true to the desires of the Microdata community to avoid contexts and
+instead refer to items by their full <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</p>
+
+<div class="example"><div class="example-title"><span>Example 80</span></div><pre class="example">[
+ {
+ "@id": "http://purl.oreilly.com/works/45U8QJGZSQKDH8N",
+ "@type": "http://purl.org/vocab/frbr/core#Work",
+ "http://purl.org/dc/terms/title": "Just a Geek",
+ "http://purl.org/dc/terms/creator": "Whil Wheaton",
+ "http://purl.org/vocab/frbr/core#realization":
+ [
+ "http://purl.oreilly.com/products/9780596007683.BOOK",
+ "http://purl.oreilly.com/products/9780596802189.EBOOK"
+ ]
+ },
+ {
+ "@id": "http://purl.oreilly.com/products/9780596007683.BOOK",
+ "@type": "http://purl.org/vocab/frbr/core#Expression",
+ "http://purl.org/dc/terms/type": "http://purl.oreilly.com/product-types/BOOK"
+ },
+ {
+ "@id": "http://purl.oreilly.com/products/9780596802189.EBOOK",
+ "@type": "http://purl.org/vocab/frbr/core#Expression",
+ "http://purl.org/dc/terms/type": "http://purl.oreilly.com/product-types/EBOOK"
+ }
+]</pre></div>
+</section>
+</section>
+
+<section class="appendix informative" id="iana-considerations">
+
+<!--OddPage-->
+<h2><span class="secno">C. </span>IANA Considerations</h2><p><em>This section is non-normative.</em></p>
+
+<p>This section is included merely for standards community review and will be
+submitted to the Internet Engineering Steering Group if this specification
+becomes a <abbr title="World Wide Web Consortium">W3C</abbr> Recommendation.</p>
+
+<h2 id="application-ld-json">application/ld+json</h2>
+<dl>
+ <dt>Type name:</dt>
+ <dd>application</dd>
+ <dt>Subtype name:</dt>
+ <dd>ld+json</dd>
+ <dt>Required parameters:</dt>
+ <dd>None</dd>
+ <dt>Optional parameters:</dt>
+ <dd>
+ <dl>
+ <dt><code>form</code></dt>
+ <dd>Determines the serialization form for the JSON-LD document. The only
+ valid value at the moment is <code>expanded</code>. If no form is
+ specified in an HTTP request header to an HTTP server, the server <em class="rfc2119" title="may">may</em>
+ choose any form. If no form is specified in an HTTP response, the form
+ <em class="rfc2119" title="must not">must not</em> be assumed to take any particular form.</dd>
+ </dl>
+ </dd>
+ <dt>Encoding considerations:</dt>
+ <dd>The same as the <code>application/json</code> MIME media type.</dd>
+ <dt>Security considerations:</dt>
+ <dd>Since JSON-LD is intended to be a pure data exchange format for
+ directed graphs, the serialization <em class="rfc2119" title="should not">should not</em> be passed through a
+ code execution mechanism such as JavaScript's <code>eval()</code>
+ function. It is <em class="rfc2119" title="recommended">recommended</em> that a conforming parser does not attempt to
+ directly evaluate the JSON-LD serialization and instead purely parse the
+ input into a language-native data structure. </dd>
+ <dt>Interoperability considerations:</dt>
+ <dd>Not Applicable</dd>
+ <dt>Published specification:</dt>
+ <dd>The <a href="http://json-ld.org/spec/latest/">JSON-LD</a> specification.</dd>
+ <dt>Applications that use this media type:</dt>
+ <dd>Any programming environment that requires the exchange of
+ directed graphs. Implementations of JSON-LD have been created for
+ JavaScript, Python, Ruby, PHP and C++.
+ </dd>
+ <dt>Additional information:</dt>
+ <dd>
+ <dl>
+ <dt>Magic number(s):</dt>
+ <dd>Not Applicable</dd>
+ <dt>File extension(s):</dt>
+ <dd>.jsonld</dd>
+ <dt>Macintosh file type code(s):</dt>
+ <dd>TEXT</dd>
+ </dl>
+ </dd>
+ <dt>Person & email address to contact for further information:</dt>
+ <dd>Manu Sporny <msporny@digitalbazaar.com></dd>
+ <dt>Intended usage:</dt>
+ <dd>Common</dd>
+ <dt>Restrictions on usage:</dt>
+ <dd>None</dd>
+ <dt>Author(s):</dt>
+ <dd>Manu Sporny, Gregg Kellogg, Markus Lanthaler, Dave Longley</dd>
+ <dt>Change controller:</dt>
+ <dd><abbr title="World Wide Web Consortium">W3C</abbr></dd>
+</dl>
+
+<p>Fragment identifiers used with <a href="#application-ld-json">application/ld+json</a>
+ resources <em class="rfc2119" title="may">may</em> identify a node in the <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> expressed in
+ the resource. This idiom, which is also used in RDF [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>], gives a
+ simple way to "mint" new, document-local IRIs to label nodes and therefore contributes
+ considerably to the expressive power of JSON-LD.</p>
+
+</section>
+
+<section class="appendix informative" id="acknowledgements">
+
+<!--OddPage-->
+<h2><span class="secno">D. </span>Acknowledgements</h2><p><em>This section is non-normative.</em></p>
+
+<p>A large amount of thanks goes out to the JSON-LD Community Group
+participants who worked through many of the technical issues on the mailing
+list and the weekly telecons - of special mention are Niklas Lindström,
+François Daoust, and Zdenko 'Denny' Vrandečić.
+The editors would like to thank Mark Birbeck, who provided a great deal of
+the initial push behind the JSON-LD work via his work on RDFj.
+The work of Dave Lehn and Mike Johnson are appreciated for reviewing,
+and performing several implementations of the specification. Ian Davis is
+thanked for this work on RDF/JSON. Thanks also to Nathan Rixham,
+Bradley P. Allen,
+Kingsley Idehen, Glenn McDonald, Alexandre Passant, Danny Ayers, Ted
+Thibodeau Jr., Olivier Grisel, Josh Mandel, Eric Prud'hommeaux,
+David Wood, Guus Schreiber, Pat Hayes, Sandro Hawke, and Richard
+Cyganiak for their input on the specification.
+</p>
+</section>
+
+
+
+<section id="references" class="appendix">
+<!--OddPage-->
+<h2><span class="secno">E. </span>References</h2><section id="normative-references"><h3><span class="secno">E.1 </span>Normative references</h3><dl class="bibliography"><dt id="bib-BCP47">[BCP47]</dt><dd>A. Phillips; M. Davis. <a href="http://tools.ietf.org/html/bcp47"><cite>Tags for Identifying Languages</cite></a> September 2009. IETF Best Current Practice. URL: <a href="http://tools.ietf.org/html/bcp47">http://tools.ietf.org/html/bcp47</a>
+</dd><dt id="bib-RDF-CONCEPTS">[RDF-CONCEPTS]</dt><dd><cite><a href="http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/">RDF 1.1 Concepts and Abstract Syntax</a></cite> Richard Cyganiak, David Wood, Editors. World Wide Web Consortium (work in progress). 30 May 2012. Editor's Draft. This edition of the JSON-LD Syntax specification is http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/. The <a href="http://www.w3.org/TR/rdf11-concepts/">latest edition of the JSON-LD Syntax</a> is available at http://www.w3.org/TR/rdf11-concepts/
+</dd><dt id="bib-RFC3987">[RFC3987]</dt><dd>M. Dürst; M. Suignard. <a href="http://www.ietf.org/rfc/rfc3987.txt"><cite>Internationalized Resource Identifiers (IRIs).</cite></a> January 2005. Internet RFC 3987. URL: <a href="http://www.ietf.org/rfc/rfc3987.txt">http://www.ietf.org/rfc/rfc3987.txt</a>
+</dd><dt id="bib-RFC4627">[RFC4627]</dt><dd>D. Crockford. <a href="http://www.ietf.org/rfc/rfc4627.txt"><cite>The application/json Media Type for JavaScript Object Notation (JSON)</cite></a> July 2006. Internet RFC 4627. URL: <a href="http://www.ietf.org/rfc/rfc4627.txt">http://www.ietf.org/rfc/rfc4627.txt</a>
+</dd><dt id="bib-RFC5988">[RFC5988]</dt><dd><cite><a href="http://tools.ietf.org/rfc/rfc5988">Web Linking</a></cite> M. Nottingham. Editor. October 2010. IETF Standard. URL: <a href="http://tools.ietf.org/rfc/rfc5988.txt">http://tools.ietf.org/rfc/rfc5988.txt</a>
+</dd></dl></section><section id="informative-references"><h3><span class="secno">E.2 </span>Informative references</h3><dl class="bibliography"><dt id="bib-JSON-LD-API">[JSON-LD-API]</dt><dd><cite><a href="http://json-ld.org/spec/ED/json-ld-api/20120524/">The JSON-LD API 1.0</a></cite> Manu Sporny, Gregg Kellogg, Dave Longley, Markus Lanthaler, Editors. World Wide Web Consortium (work in progress). 24 May 2012. Editor's Draft. This edition of the JSON-LD Syntax specification is http://json-ld.org/spec/ED/json-ld-api/20120524/. The <a href="http://json-ld.org/spec/latest/json-ld-api/">latest edition of the JSON-LD Syntax</a> is available at http://json-ld.org/spec/latest/json-ld-api/
+</dd><dt id="bib-RDF-PRIMER">[RDF-PRIMER]</dt><dd>Frank Manola; Eric Miller. <a href="http://www.w3.org/TR/2004/REC-rdf-primer-20040210/"><cite>RDF Primer.</cite></a> 10 February 2004. W3C Recommendation. URL: <a href="http://www.w3.org/TR/2004/REC-rdf-primer-20040210/">http://www.w3.org/TR/2004/REC-rdf-primer-20040210/</a>
+</dd><dt id="bib-RDF-SPARQL-QUERY">[RDF-SPARQL-QUERY]</dt><dd>Andy Seaborne; Eric Prud'hommeaux. <a href="http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115"><cite>SPARQL Query Language for RDF.</cite></a> 15 January 2008. W3C Recommendation. URL: <a href="http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115">http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115</a>
+</dd><dt id="bib-RDFA-CORE">[RDFA-CORE]</dt><dd>Shane McCarron; et al. <a href="http://www.w3.org/TR/2012/REC-rdfa-core-20120607/"><cite>RDFa Core 1.1: Syntax and processing rules for embedding RDF through attributes.</cite></a> 7 June 2012. W3C Recommendation. URL: <a href="http://www.w3.org/TR/2012/REC-rdfa-core-20120607/">http://www.w3.org/TR/2012/REC-rdfa-core-20120607/</a>
+</dd><dt id="bib-TURTLE-TR">[TURTLE-TR]</dt><dd>Eric Prud'hommeaux, Gavin Carothers. <cite><a href="http://www.w3.org/TR/2011/WD-turtle-20110809/">Turtle: Terse RDF Triple Language.</a></cite> 09 August 2011. W3C Working Draft. URL: <a href="http://www.w3.org/TR/2011/WD-turtle-20110809/">http://www.w3.org/TR/2011/WD-turtle-20110809/</a>
+</dd></dl></section></section></body></html>
--- a/spec/latest/json-ld-api/index.html Thu Aug 30 15:06:21 2012 +0200
+++ b/spec/latest/json-ld-api/index.html Thu Aug 30 16:50:04 2012 +0200
@@ -150,20 +150,19 @@
doRDFa: "1.1",
// specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
specStatus: "ED",
- //publishDate: "2012-07-12",
+ // if you wish the publication date to be other than today, set this
+ //publishDate: "2012-08-30",
copyrightStart: "2010",
// the specification's short name, as in http://www.w3.org/TR/short-name/
shortName: "json-ld-api",
subtitle: "An Application Programming Interface for the JSON-LD Syntax",
- // if you wish the publication date to be other than today, set this
- // publishDate: "2009-08-06",
// if there is a previously published draft, uncomment this and set its YYYY-MM-DD date
// and its maturity status
- previousPublishDate: "2012-07-12",
+ previousPublishDate: "2012-08-30",
previousMaturity: "FPWD",
- previousDiffURI: "http://www.w3.org/TR/2012/WD-json-ld-api-20120712/",
+ previousDiffURI: "http://www.w3.org/TR/2012/WD-json-ld-api-20120830/",
diffTool: "http://www.aptest.com/standards/htmldiff/htmldiff.pl",
// if there a publicly available Editor's Draft, this is the link
@@ -265,10 +264,8 @@
<p>This document has been under development for over 18 months in the
JSON for Linking Data Community Group. The document has recently been
transferred to the RDF Working Group for review, improvement, and publication
-along the Recommendation track. While this is a First Public Working Draft
-publication, the specification has undergone significant development, review,
-and changes during the course of the last 18 months and is more mature than
-the First Public Working Draft status implies.
+along the Recommendation track. The specification has undergone significant
+development, review, and changes during the course of the last 18 months.
</p>
<p>
There are currently
--- a/spec/latest/json-ld-framing/index.html Thu Aug 30 15:06:21 2012 +0200
+++ b/spec/latest/json-ld-framing/index.html Thu Aug 30 16:50:04 2012 +0200
@@ -150,20 +150,19 @@
doRDFa: "1.1",
// specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
specStatus: "CG-DRAFT",
- //publishDate: "2010-04-29",
+ // if you wish the publication date to be other than today, set this
+ //publishDate: "2012-08-30",
copyrightStart: "2010",
// the specification's short name, as in http://www.w3.org/TR/short-name/
shortName: "json-ld-framing",
subtitle: "An Application Programming Interface for the JSON-LD Syntax",
- // if you wish the publication date to be other than today, set this
- // publishDate: "2009-08-06",
// if there is a previously published draft, uncomment this and set its YYYY-MM-DD date
// and its maturity status
- previousPublishDate: "2012-05-24",
- previousMaturity: "ED",
- //previousDiffURI: "http://json-ld.org/spec/ED/json-ld-framing/20120524/",
+ previousPublishDate: "2012-08-30",
+ previousMaturity: "unofficial",
+ previousDiffURI: "http://json-ld.org/spec/ED/json-ld-framing/20120830/",
// if there a publicly available Editor's Draft, this is the link
edDraftURI: "http://json-ld.org/spec/latest/json-ld-framing/",
--- a/spec/latest/json-ld-syntax/index.html Thu Aug 30 15:06:21 2012 +0200
+++ b/spec/latest/json-ld-syntax/index.html Thu Aug 30 16:50:04 2012 +0200
@@ -148,20 +148,19 @@
doRDFa: "1.1",
// specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
specStatus: "ED",
- //publishDate: "2012-07-12",
+ // if you wish the publication date to be other than today, set this
+ //publishDate: "2012-08-30",
copyrightStart: "2010",
// the specification's short name, as in http://www.w3.org/TR/short-name/
shortName: "json-ld-syntax",
subtitle: "A Context-based JSON Serialization for Linking Data",
- // if you wish the publication date to be other than today, set this
- // publishDate: "2009-08-06",
// if there is a previously published draft, uncomment this and set its YYYY-MM-DD date
// and its maturity status
- previousPublishDate: "2012-07-12",
+ previousPublishDate: "2012-08-30",
previousMaturity: "FPWD",
- previousDiffURI: "http://www.w3.org/TR/2012/WD-json-ld-syntax-20120712/",
+ previousDiffURI: "http://www.w3.org/TR/2012/WD-json-ld-syntax-20120830/",
diffTool: "http://www.aptest.com/standards/htmldiff/htmldiff.pl",
// if there a publicly available Editor's Draft, this is the link
@@ -262,10 +261,8 @@
<p>This document has been under development for over 18 months in the
JSON for Linking Data Community Group. The document has recently been
transferred to the RDF Working Group for review, improvement, and publication
-along the Recommendation track. While this is a First Public Working Draft
-publication, the specification has undergone significant development, review,
-and changes during the course of the last 18 months and is more mature than
-the First Public Working Draft status implies.
+along the Recommendation track. The specification has undergone significant
+development, review, and changes during the course of the last 18 months.
</p>
<p>
There are currently