--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/spec/latest/json-ld-connect/index.html Tue Oct 02 02:34:58 2012 +0200
@@ -0,0 +1,497 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>JSON-LD Connect 1.0</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
+<!--
+ === 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,
+ -->
+<script type="text/javascript" src="../respec-w3c-common.js" class="remove"></script>
+<script type="text/javascript" src="../respec-w3c-extensions.js" class="remove"></script>
+<script type="text/javascript" class="remove">
+//<![CDATA[
+
+ var respecConfig = {
+ doRDFa: "1.1",
+ // specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
+ specStatus: "CG-DRAFT",
+ // if you wish the publication date to be other than today, set this
+ //publishDate: "2012-08-30",
+ copyrightStart: "2012",
+
+ // the specification's short name, as in http://www.w3.org/TR/short-name/
+ shortName: "json-ld-connect",
+ subtitle: "An Algorithm for Turning JSON-LD Data into Graphs",
+
+ // if there is a previously published draft, uncomment this and set its YYYY-MM-DD date
+ // and its maturity status
+ //previousPublishDate: "2012-09-27",
+ //previousMaturity: "unofficial",
+ //previousDiffURI: "http://json-ld.org/spec/ED/json-ld-connect/YYYMMDD/",
+
+ // if there a publicly available Editor's Draft, this is the link
+ edDraftURI: "http://json-ld.org/spec/latest/json-ld-connect/",
+
+ // if this is a LCWD, uncomment and set the end of its review period
+ // lcEnd: "2009-08-05",
+
+ // if you want to have extra CSS, append them to this list
+ // it is recommended that the respec.css stylesheet be kept
+ // extraCSS: [],
+
+ issueBase: "https://github.com/json-ld/json-ld.org/issues/",
+
+ // editors, add as many as you like
+ // only "name" is required
+ editors: [
+ { name: " Niklas Lindström", url: "http://neverspace.net/id#self" }
+ ],
+
+ // authors, add as many as you like.
+ // This is optional, uncomment if you have authors as well as editors.
+ // only "name" is required. Same format as editors.
+
+ authors: [
+ { name: " Niklas Lindström", url: "http://neverspace.net/id#self" }
+ ],
+
+ // name of the WG
+ wg: "Linking Data in JSON Community Group",
+
+ // URI of the public WG page
+ wgURI: "http://json-ld.org/",
+
+ // name (with the @w3c.org) of the public mailing to which comments are due
+ wgPublicList: "public-linked-json@w3c.org",
+
+ // URI of the patent status for this WG, for Rec-track documents
+ // !!!! IMPORTANT !!!!
+ // This is important for Rec-track documents, do not copy a patent URI from a random
+ // document unless you know what you're doing. If in doubt ask your friendly neighbourhood
+ // Team Contact.
+ wgPatentURI: "",
+ maxTocLevel: 4,
+ preProcess: [ preProc ],
+ //alternateFormats: [ {uri: "diff-20120524.html", label: "diff to previous version"} ],
+ };
+
+//]]>
+ </script>
+<style type="text/css">
+.diff { font-weight:bold; color:#0a3; }
+</style>
+</head>
+
+<body>
+<section id="abstract">
+<p>JSON-LD Connect is a way of turning a JSON-LD document into a live graph of
+interconnected and indexed objects.</p>
+</section>
+
+<section id='sotd'>
+<p>This document is an experimental work in progress.</p>
+</section>
+
+<section>
+<h1>Introduction</h1>
+<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 wanting to work with interconnected
+ <tref>JSON object</tref>s,
+ can use the connect algorithm described here to "stich together"
+ <tref>node definition</tref>s
+ and creating an index of important values mapped to each node. This enables
+ navigation between node definitions via interlinking keys (representing arcs
+ in graph nomenclature).
+</p>
+<p>
+ Technically, connect works by replacing each <tref>node reference</tref> in
+ the input data with a real, programmatic object reference, to one, merged
+ node definition. This results in the creation of a simple in-memory graph.
+</p>
+<p>
+ Out of the box, the connect process creates an index mapping node
+ <code>@id</code> values to the <tref>node definition</tref>. It is also
+ possible to configure the process to create additional indexes, as well as
+ adding a local <tref>reverse key map</tref> to each node definition.
+</p>
+
+<!-- COMMON -->
+<section>
+<h2>How to Read this Document</h2>
+
+<p>
+This document is a detailed specification for Linked Data in JSON. The document
+is primarily intended for the following audiences:
+</p>
+
+<ul>
+ <li>Software developers that want to implement processors and APIs for
+ JSON-LD.</li>
+ <li>Web developers who want to navigate JSON-LD documents as interconnected
+ nodes.</li>
+</ul>
+
+<p>
+To understand the basics in this specification you must first be familiar with
+JSON, which is detailed in [[!RFC4627]]. You must also understand the
+JSON-LD Syntax [[!JSON-LD]], which is the base syntax used by all of the
+algorithms in this document,
+and the JSON-LD API [[!JSON-LD-API]]. 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 [[ECMA-262]] and
+WebIDL [[!WEBIDL]]. To understand how JSON-LD maps to RDF, it is helpful to be
+familiar with the basic RDF concepts [[!RDF-CONCEPTS]].</p>
+
+</section>
+
+<!-- COMMON -->
+<section>
+ <h3>General Terminology</h3>
+
+ <p class="issue">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>
+
+ <p>The following is an explanation of the general terminology used in this
+ document:</p>
+
+ <dl>
+ <dt><tdef>JSON object</tdef></dt>
+ <dd>An object structure is represented as a pair of curly brackets surrounding zero or
+ more name-value pairs. A name is a <tref>string</tref>. 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 SHOULD be unique.</dd>
+ <dt><tdef>array</tdef></dt>
+ <dd>An array is represented as square brackets surrounding zero or more
+ values that are separated by commas.</dd>
+ <dt><tdef>string</tdef></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><tdef>number</tdef></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><tdef>true</tdef> and <tdef>false</tdef></dt>
+ <dd>Values that are used to express one of two possible boolean states.</dd>
+ <dt><tdef>null</tdef></dt>
+ <dd>The use of the <tref>null</tref> value within JSON-LD is used to ignore or reset values.</dd>
+ <dt><tdef>keyword</tdef></dt>
+ <dd>A JSON key that is specific to JSON-LD, specified in the JSON-LD Syntax specification [[!JSON-LD]]
+ in the section titled <cite><a href="../json-ld-syntax/#syntax-tokens-and-keywords">Syntax Tokens and Keywords</a></cite>.</dd>
+ <dt><tdef>context</tdef></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 [[JSON-LD]] specification.</dd>
+ <dt><tdef><abbr title="Internationalized Resource Identifier">IRI</abbr></tdef></dt>
+ <dd>An Internationalized Resource Identifier as described in [[!RFC3987]].</dd>
+ <dt><tdef>Linked Data</tdef></dt>
+ <dd>A technique for creating a network of inter-connected data across different documents and Web sites.</dd>
+ <dt><tdef>JSON-LD graph</tdef></dt>
+ <dd>An unordered labeled directed graph, where <tref title="node">nodes</tref> are
+ <tref title="IRI">IRIs</tref> or <tref title="Blank Node">Blank Nodes</tref>, or other values.
+ A <tref>JSON-LD graph</tref> 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 [[!RDF-CONCEPTS]].</dd>
+ <dt><tdef>named graph</tdef></dt>
+ <dd>A <tref>JSON-LD graph</tref> that is identified by an <tref>IRI</tref>.</dd>
+ <dt><tdef>graph name</tdef></dt>
+ <dd>The <tref>IRI</tref> identifying a <tref>named graph</tref>.</dd>
+ <dt><tdef>default graph</tdef></dt>
+ <dd>When executing an algorithm, the graph where data should be placed
+ if a <tref>named graph</tref> is not specified.</dd>
+ <dt><tdef>node</tdef></dt>
+ <dd>A piece of information that is represented in a <tref>JSON-LD graph</tref>.</dd>
+ <dt><tdef>node definition</tdef></dt>
+ <dd>A <tref>JSON object</tref> used to represent a <tref>node</tref> and
+ one or more properties of that node. A <tref>JSON object</tref> is a
+ node definition if it does not contain the 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><tdef>node reference</tdef></dt>
+ <dd>A <tref>JSON object</tref> used to reference a node having only the
+ <code>@id</code> key.</dd>
+ <dt><tdef>blank node</tdef></dt>
+ <dd>A <tref>node</tref> in a <tref>JSON-LD graph</tref> 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 JSON-LD graph. A blank node is assigned an identifier starting with
+ the prefix <code>_:</code>.</dd>
+ <dt><tdef>property</tdef></dt>
+ <dd>The <tref>IRI</tref> label of an edge in a <tref>JSON-LD graph</tref>.</dd>
+ <dt><tdef>subject</tdef></dt>
+ <dd>A <tref>node</tref> in a <tref>JSON-LD graph</tref> with at least one outgoing edge, related to an <tref>object</tref> node through a <tref>property</tref>.</dd>
+ <dt><tdef>object</tdef></dt>
+ <dd>A <tref>node</tref> in a <tref>JSON-LD graph</tref> with at least one incoming edge.</dd>
+ <dt><tdef>quad</tdef></dt>
+ <dd>A piece of information that contains four items; a <tref>subject</tref>, a <tref>property</tref>,
+ an <tref>object</tref>, and a <tref>graph name</tref>.</dd>
+ <dt><tdef>literal</tdef></dt>
+ <dd>An <tref>object</tref> expressed as a value such as a string, number or in expanded form.</dd>
+ </dl>
+ </section>
+
+</section>
+
+<!-- COMMON -->
+<section>
+ <h2>Contributing</h2>
+
+ <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>
+<h1>Algorithm</h1>
+
+<p>The algorithm described in this section is 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, and language-native data
+structures MUST be used where applicable.</p>
+
+<section>
+ <h2>Syntax Tokens and Keywords</h2>
+
+ <dl>
+ <dt><code>@rev</code></dt>
+ <dd>Used in <a href="#connect">Connect</a> to set the default key for
+ the <tref>reverse key map</tref>.</dd>
+ </dl>
+
+ <p>All JSON-LD tokens and keywords are case-sensitive.</p>
+</section>
+
+<section>
+<h2>Connect</h2>
+<p>
+ Connecting is the process of turning an input JSON-LD document into an
+ interconnected and indexed data structure.
+</p>
+
+<section>
+<h3>Connect Algorithm Terms</h3>
+
+<dl>
+ <dt><tdef>current result object</tdef></td>
+ <dd>
+ A merged <tref>node definition</tref>.
+ </dd>
+ <dt><tdef>map of result objects</tdef></dt>
+ <dd>
+ a map of resulting <tref>node definition</tref>s that is the result of
+ this algorithm.
+ </dd>
+ <dt><tdef>type map</tdef></dt>
+ <dd>
+ A map of types to sets (represented by arrays) of result objects.
+ </dd>
+ <dt><tdef>reverse key map</tdef></dt>
+ <dd>
+ a map of keys with arrays of subjects that link to the current node using
+ that key.
+ </dd>
+ <dt><tdef>connected output</tdef></dt>
+ <dd>
+ The resulting object containing the <tref>map of result objects</tref>.
+ </dd>
+</dl>
+</section>
+
+<section>
+<h3>Connect Algorithm</h3>
+
+<p>
+ Create an <code>idMap</code> and a <code>typeMap</code>, being the
+ <tref>map of result objects</tref> and <tref>type map</tref> of the
+ <tref>connected output</tref> respectively.
+</p>
+
+<p>For each object, do the following series of steps:</p>
+
+<ol class="algorithm">
+ <li>
+ If the object has a key whose resolved meaning is <code>@id</code>,
+ find an existing object indexed by that id from the <code>idMap</code>. If
+ one is found, use that as the <tref>current result object</tref>.
+ </li>
+ <li>
+ Otherwise (on no key or no existing), create a new object and use that as
+ the result object.
+ </li>
+ <li>
+ For each key, value pair in the current object, do the following:
+ <ol class="algorithm">
+ <li>
+ If the resolved key meaning is <code>@id</code>, add the result object
+ under that key to the <code>idMap</code>.
+ </li>
+ <li>
+ Else if the resolved key meaning is <code>@type</code>, add the result
+ object under that key to the <code>typeMap</code>.
+ </li>
+ <li>
+ If the value is an object, create a new value by using the result of
+ running these steps recursively with the value as input.
+ </li>
+ <li>
+ Otherwise, if the value is an array, create a new array. Then apply
+ these steps recursively to each object in the array, appending each
+ result to the new array.
+ </li>
+ <li>
+ Otherwise, use the value as the new value.
+ </li>
+ <li>
+ Add the key and the new value to the result object.
+ </li>
+ </ol>
+ </li>
+ <li>
+ Return the result object.
+ </li>
+</ol>
+
+<p>
+ If the <code>@rev</code> flag is used, pass the current key (called reverse
+ link) and current object (called linking object) to each recursive call in
+ the process above. At the end of the process, get or create a
+ <em>revMap</em> from the current object. Get or create a list for the
+ reverse link key from the revMap, and append the linking object to that.
+ Then set that revMap on the current object.
+</p>
+
+<p>
+ The resulting <code>idMap</code> and <code>typeMap</code> are added to the
+ final <tref>connected output</tref>.
+</p>
+
+<p class="issue">
+ This algorithm is a work in progress. It is currently undefined whether the
+ creation of typeMaps and revMaps should be optional. It is also still
+ undefined which keys will label these in the connected output.
+</p>
+
+</section>
+</section>
+
+</section>
+
+<section>
+ <h2>The Application Programming Interface</h2>
+
+ <section>
+ <!-- COMMON {{{ -->
+ <h3>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 [[JSON-LD-API]].</p>
+
+ <p class="note">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 MAY
+ implement processor with a synchronous interface instead. In that case, the <code>callback</code>
+ parameter MUST NOT be included and the result MUST be returned as return value instead.</p>
+ <!-- >}}}-->
+
+ <dl title="[NoInterfaceObject] interface JsonLdProcessor" class="idl">
+
+ <dt>void connect()</dt>
+ <dd>
+ <a href="#connect">Connects</a> the given <code>input</code> according
+ to the steps in the
+ <a href="#connect-algorithm">Connect Algorithm</a>. The <code>input</code>
+ is used to build the <tref>connected output</tref> and is returned if there are no errors.
+ Exceptions MUST be thrown if there are errors.
+
+ <dl class="parameters">
+ <dt>object or object[] or IRI input</dt>
+ <dd>The JSON-LD object or array of JSON-LD objects to perform the connecting upon or an
+ <tref>IRI</tref> referencing the JSON-LD document to connect.</dd>
+ <dt>object or IRI? context</dt>
+ <dd>An optional external context to use additionally to the context embedded in
+ <code>input</code> when expanding the <code>input</code>.</dd>
+ <dt>JsonLdCallback callback</dt>
+ <dd>A callback that is called when processing is complete on
+ the given <code>input</code>.</dd>
+ <dt>optional JsonLdOptions? options</dt>
+ <dd>A set of options that MAY affect the connect algorithm such as, e.g., the
+ input document's base <tref>IRI</tref>.</dd>
+ </dl>
+ </dd>
+
+ </dl>
+
+ </section>
+
+ <section>
+ <h3>Callbacks</h3>
+ <section>
+ <h3>JsonLdCallback</h3>
+ <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 <dtref>JsonLdCallback</dtref> definition in [[!JSON-LD-API]].</p>
+ </section>
+ </section>
+
+ <section>
+ <h3>Data Structures</h3>
+ <p>This section describes datatype definitions used within the JSON-LD API.</p>
+
+ <section>
+ <h3>JsonLdOptions</h3>
+ <p>The <a>JsonLdOptions</a> type is used to convert a set of options to an
+ interface method.</p>
+ <p>See <dtref>JsonLdOptions</dtref> definition in [[!JSON-LD-API]].</p>
+ </section>
+ </section>
+
+</section>
+
+<section class="appendix informative">
+ <h1>Acknowledgements</h1>
+ <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
+ <!-- TODO: maintain this -->
+ Manu Sporny, Dave Longley, Gregg Kellogg, Markus Lanthaler, 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>
+
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/spec/latest/respec-w3c-extensions.js Tue Oct 02 02:34:58 2012 +0200
@@ -0,0 +1,150 @@
+var preProc = {
+ apply: function(c) {
+ // extend the bibliography entries
+ berjon.biblio["MICRODATA"] = "<cite><a href=\"http://www.w3.org/TR/2012/WD-microdata-20120329/\">HTML Microdata</a></cite> Ian Hickson Editor. World Wide Web Consortium (work in progress). 29 March 2012. This edition of the HTML Microdata specification is http://www.w3.org/TR/2012/WD-microdata-20120329/. The <a href=\"http://www.w3.org/TR/microdata/\">latest edition of HTML Microdata</a> is available at http://www.w3.org/TR/microdata/";
+ berjon.biblio["JSON-LD"] = "<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/";
+ berjon.biblio["JSON-LD-API"] = "<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/";
+ berjon.biblio["JSON-POINTER"] = "<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>";
+ berjon.biblio["RDF-NORMALIZATION"] = "<cite><a href=\"http://json-ld.org/spec/ED/rdf-graph-normalization/20111016/\">RDF Graph Normalization</a></cite> Manu Sporny, Dave Longley Editors. World Wide Web Consortium (work in progress). 16 October 2011. Editor's Draft. This edition of the RDF Graph Normalization specification is http://json-ld.org/spec/ED/rdf-graph-normalization/20111016/. The <a href=\"http://json-ld.org/spec/latest/rdf-graph-normalization/\">latest edition of RDF Graph Normalization</a> is available at http://json-ld.org/spec/latest/rdf-graph-normalization/";
+ berjon.biblio["IEEE-754-1985"] = "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>";
+ berjon.biblio["RDF-CONCEPTS"] = "<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/";
+ berjon.biblio["WEBIDL"] = "<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/";
+
+ // process the document before anything else is done
+ var refs = document.querySelectorAll('adef') ;
+ for (var i = 0; i < refs.length; i++) {
+ var item = refs[i];
+ var p = item.parentNode ;
+ var con = item.innerHTML ;
+ var sp = document.createElement( 'dfn' ) ;
+ var tit = item.getAttribute('title') ;
+ if (!tit) {
+ tit = con;
+ }
+ sp.className = 'adef' ;
+ sp.title=tit ;
+ sp.innerHTML = con ;
+ p.replaceChild(sp, item) ;
+ }
+ refs = document.querySelectorAll('aref') ;
+ for (var i = 0; i < refs.length; i++) {
+ var item = refs[i];
+ var p = item.parentNode ;
+ var con = item.innerHTML ;
+ var sp = document.createElement( 'a' ) ;
+ sp.className = 'aref' ;
+ sp.setAttribute('title', con);
+ sp.innerHTML = '@'+con ;
+ p.replaceChild(sp, item) ;
+ }
+ // local datatype references
+ refs = document.querySelectorAll('ldtref') ;
+ for (var i = 0; i < refs.length; i++) {
+ var item = refs[i];
+ if (!item) continue ;
+ var p = item.parentNode ;
+ var con = item.innerHTML ;
+ var ref = item.getAttribute('title') ;
+ if (!ref) {
+ ref = item.textContent ;
+ }
+ if (ref) {
+ ref = ref.replace(/\s+/g, '_') ;
+ }
+ var sp = document.createElement( 'a' ) ;
+ sp.className = 'datatype idlType';
+ sp.title = ref ;
+ sp.setAttribute('href', '#idl-def-' + ref);
+ sp.innerHTML = '<code>' + con + '</code>';
+ p.replaceChild(sp, item) ;
+ }
+ // external datatype references
+ refs = document.querySelectorAll('dtref') ;
+ for (var i = 0; i < refs.length; i++) {
+ var item = refs[i];
+ if (!item) continue ;
+ var p = item.parentNode ;
+ var con = item.innerHTML ;
+ var ref = item.getAttribute('title') ;
+ if (!ref) {
+ ref = item.textContent ;
+ }
+ if (ref) {
+ ref = ref.replace(/\s+/g, '_') ;
+ }
+ var sp = document.createElement( 'a' ) ;
+ sp.className = 'externalDFN';
+ sp.title = ref ;
+ sp.innerHTML = con ;
+ p.replaceChild(sp, item) ;
+ }
+ // now do terms
+ refs = document.querySelectorAll('tdef') ;
+ var tdefs = [];
+ for (var i = 0; i < refs.length; i++) {
+ var item = refs[i];
+ if (!item) continue ;
+ var p = item.parentNode ;
+ var con = item.innerHTML ;
+ var ref = item.getAttribute('title') ;
+ if (!ref) {
+ ref = item.textContent ;
+ }
+ if (ref) {
+ ref = ref.replace(/\s+/g, '_').toLowerCase() ;
+ }
+
+ if ( tdefs[ref]) {
+ throw "Duplicate definition of term '" + ref + "'" ;
+ }
+
+ var sp = document.createElement( 'dfn' ) ;
+ tdefs[ref] = sp ;
+ sp.title = ref ;
+ sp.innerHTML = con ;
+ p.replaceChild(sp, item) ;
+ }
+ // now term references
+ refs = document.querySelectorAll('tref') ;
+ for (var i = 0; i < refs.length; i++) {
+ var item = refs[i];
+ if (!item) continue ;
+ var p = item.parentNode ;
+ var con = item.innerHTML ;
+ var ref = item.getAttribute('title') ;
+ if (!ref) {
+ ref = item.textContent ;
+ }
+ if (ref) {
+ ref = ref.replace(/\s+/g, '_').toLowerCase() ;
+ }
+
+ if ( !tdefs[ref]) {
+ throw "Reference to undefined term '" + ref + "'" ;
+ }
+ var sp = document.createElement( 'a' ) ;
+ var id = item.textContent ;
+ sp.className = 'tref' ;
+ sp.title = ref ;
+ sp.innerHTML = con ;
+ p.replaceChild(sp, item) ;
+ }
+ }
+ } ;
+
+function _esc(s) {
+ s = s.replace(/&/g,'&');
+ s = s.replace(/>/g,'>');
+ s = s.replace(/"/g,'"');
+ s = s.replace(/</g,'<');
+ return s;
+}
+
+function updateExample(doc, content) {
+ // perform transformations to make it render and prettier
+ content = content.replace(/<!--/, '');
+ content = content.replace(/-->/, '');
+ content = _esc(content);
+ content = content.replace(/\*\*\*\*([^*]*)\*\*\*\*/g, '<span class="diff">$1</span>') ;
+ return content ;
+}