--- a/rdf-turtle/index.html Mon Apr 30 19:24:22 2012 -0700
+++ b/rdf-turtle/index.html Mon Apr 30 19:43:41 2012 -0700
@@ -178,7 +178,7 @@
foaf:name "Spiderman" .</script></pre>
<p>
- The Turtle grammar for <a href="#prod-turtle2-triples"><code>triples</code></a> is a subset of the <a href="http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115/">SPARQL Query Language for RDF</a> [[RDF-SPARQL-QUERY]] grammar for <a href="http://www.w3.org/TR/sparql11-query/#rTriplesBlock"><code>TriplesBlock</code></a>.
+ The Turtle grammar for <a href="#grammar-production-triples"><code>triples</code></a> is a subset of the <a href="http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115/">SPARQL Query Language for RDF</a> [[RDF-SPARQL-QUERY]] grammar for <a href="http://www.w3.org/TR/sparql11-query/#rTriplesBlock"><code>TriplesBlock</code></a>.
The two grammars share production and terminal names where possible.
Likewise, the N-Triples grammar re-uses some productions and terminals from Turtle.
</p>
@@ -402,23 +402,8 @@
<section id="BNodes">
<h3>RDF Blank Nodes</h3>
-
- <div class="issue">
- <p>
- documented presuming we remove %XX and \C escapes from blank node labels:
- </p>
- <pre>
--[73s] BLANK_NODE_LABEL ::= "_:" PN_LOCAL
-+[73s] BLANK_NODE_LABEL ::= "_:" ( PN_CHARS_U | [0-9] ) ( ( PN_CHARS | '.' )* PN_CHARS ) ? # no PLX
- [100s] PN_LOCAL ::= ( PN_CHARS_U | [0-9] | PLX ) ( ( PN_CHARS | '.' | PLX )* ( PN_CHARS | PLX ) ) ?
- [160s] PLX ::= PERCENT | PN_LOCAL_ESC
- [161s] PERCENT ::= '%' HEX HEX
- [163s] PN_LOCAL_ESC ::= '\\' ( '_' | '~' | '.' | '-' | '!' | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | ':' | '/' | '?' | '#' | '@' | '%' )
- </pre>
- </div>
-
<p>
- <a href="../rdf-concepts/index.html#dfn-blank-node">RDF blank nodes</a> in N-Triples are expressed as <code>_:</code> followed by a blank node label which is a series of name characters.
+ <a href="../rdf-concepts/index.html#dfn-blank-node">RDF blank nodes</a> in Turtle are expressed as <code>_:</code> followed by a blank node label which is a series of name characters.
The characters in the label are built upon <a href="#term-turtle2-PN_CHARS_BASE">PN_CHARS_BASE</a>, liberalized to allow:
</p>
<ul>
@@ -427,7 +412,7 @@
<li>The characters <code>-</code>, <code>\uB7</code>, <code>\u300</code> to <code>\u36F</code> and <code>\u203F</code> to <code>2040</code> are permitted anywhere except the first character.</li>
</ul>
<p>
- A fresh RDF blank node is allocated for each unique blank node label in a Turtle or N-Triples document.
+ A fresh RDF blank node is allocated for each unique blank node label in a document.
Repeated use of the same blank node label identifies the same RDF blank node.
</p>
<pre class="example"><script type="text/turtle">@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@@ -439,10 +424,10 @@
<section id="abbrev">
<h3>Nesting Unlabeled Blank Nodes in Turtle</h3>
<p>
- In Turtle, fresh RDF blank nodes are also allocated when matching the production <a href="#prod-turtle2-blankNodePropertyList">blankNodePropertyList</a> and the terminal <a href="#term-turtle2-ANON">ANON</a>.
- Both of these may appear in the <a href="#prod-turtle2-subject">subject</a> or <a href="#prod-turtle2-object">object</a> position of a triple (see the Turtle Grammar).
+ In Turtle, fresh RDF blank nodes are also allocated when matching the production <a href="#grammar-production-blankNodePropertyList">blankNodePropertyList</a> and the terminal <a href="#term-turtle2-ANON">ANON</a>.
+ Both of these may appear in the <a href="#grammar-production-subject">subject</a> or <a href="#grammar-production-object">object</a> position of a triple (see the Turtle Grammar).
That subject or object is a fresh RDF blank node.
- This blank node also serves as the subject of the triples produced by matching the <a href="#prod-turtle2-predicateObjectList">predicateObjectList</a> production embedded in a blankNodePropertyList.
+ This blank node also serves as the subject of the triples produced by matching the <a href="#grammar-production-predicateObjectList">predicateObjectList</a> production embedded in a blankNodePropertyList.
The generation of these triples is described below in <a href="#groups">Predicate Object Lists in Turtle</a>.
Blank nodes are also allocated for <a href="#collections">Collections in Turtle</a> (below).
</p>
@@ -453,8 +438,8 @@
</script></pre>
<p>
- The Turtle grammar allows <a href="#prod-turtle2-blankNodePropertyList">blankNodePropertyList</a>s to be nested.
- In this case, each inner <code>[</code> establishes a new subject blank node which reverts to the outer node at the <code>]</code>, and serves as the current subject for <a href="#prod-turtle2-predicateObjectList">predicate object lists</a>.
+ The Turtle grammar allows <a href="#grammar-production-blankNodePropertyList">blankNodePropertyList</a>s to be nested.
+ In this case, each inner <code>[</code> establishes a new subject blank node which reverts to the outer node at the <code>]</code>, and serves as the current subject for <a href="#grammar-production-predicateObjectList">predicate object lists</a>.
This is described below in <a href="#groups">Predicate Object Lists in Turtle</a>.
</p>
</section>
@@ -464,7 +449,7 @@
<h3>Predicate Object Lists in Turtle</h3>
<p>
- The <a href="#prod-turtle2-objectList">objectList production</a> matches a series of objects, separated by <code>,</code>, following a subject and predicate.
+ The <a href="#grammar-production-objectList">objectList production</a> matches a series of objects, separated by <code>,</code>, following a subject and predicate.
This expresses a series of RDF Triples with that subject and predicate and a each object allocated to one triple.
Thus, the <code>,</code> symbol is used to repeat the subject and predicate of triples that only differ in the object RDF term.</p>
<pre class="example"><script type="text/plain">
@@ -474,7 +459,7 @@
</script></pre>
<p>
- The <a href="#prod-turtle2-predicateObjectList">predicateObjectList production</a> matches a series of predicates and objects, separated by <code>;</code>, following a subject.
+ The <a href="#grammar-production-predicateObjectList">predicateObjectList production</a> matches a series of predicates and objects, separated by <code>;</code>, following a subject.
This expresses a series of RDF Triples with that subject and a each predicate and object allocated to one triple.
Thus, the <code>;</code> symbol is used to repeat the subject of triples that vary only in predicate and object RDF terms.</p>
<pre class="example"><script type="text/plain">
@@ -485,7 +470,7 @@
<div class="note">
<p>
- The use of <a href="#prod-turtle2-predicateObjectList">predicateObjectList</a> within a <a href="#prod-turtle2-blankNodePropertyList">blankNodePropertyList</a> is a common idiom for representing a series of properties of a node.
+ The use of <a href="predicateObjectList">predicateObjectList</a> within a <a href="#grammar-production-blankNodePropertyList">blankNodePropertyList</a> is a common idiom for representing a series of properties of a node.
</p>
<div style="float:left;">
<p class="idlAttrName" style="padding-left:2em;">Abbreviated Turtle:</p>
@@ -522,7 +507,7 @@
</p>
<p>
- The <code>(…)</code> syntax MUST appear in the <a href="#prod-turtle2-subject">subject</a> or <a href="#prod-turtle2-object">object</a> position of a triple (see the Turtle Grammar).
+ The <code>(…)</code> syntax MUST appear in the <a href="#grammar-production-subject">subject</a> or <a href="#grammar-production-object">object</a> position of a triple (see the Turtle Grammar).
The blank node at the head of the list is the subject or object of the containing triple.
</p>
@@ -581,20 +566,20 @@
<section id="sec-grammar-ws">
<h3>White Space</h3>
- <p>White space (production <a href="#prod-turtle2-WS">ws</a>) is used to separate
+ <p>White space (production <a href="#grammar-production-WS">ws</a>) is used to separate
two tokens which would otherwise be (mis-)recognized as one token.
</p>
<p>White space is significant in tokens
- <a href="#prod-turtle2-IRI_REF">IRI_REF</a> and <a href="#prod-turtle2-String">string</a>.
+ <a href="#grammar-production-IRI_REF">IRI_REF</a> and <a href="#grammar-production-String">string</a>.
</p>
</section>
<section id="sec-grammar-comments">
<h3>Comments</h3>
<p>Comments in Turtle take the form of '#', outside an
- <a href="#prod-turtle2-IRI_REF">IRI_REF</a> or strings,
+ <a href="#grammar-production-IRI_REF">IRI_REF</a> or strings,
and continue to the end of line (marked by characters U+000D or U+000A)
or end of file if there is no end of line after the comment
marker. Comments are treated as white space.
@@ -731,7 +716,7 @@
</thead>
<tbody>
<tr>
- <td class="r"><span style="font-weight:bold;">IRI</span>s, used as <a href="#prod-turtle2-IRIref">RDF terms</a> or as in <a href="#prod-turtle2-prefixID">@prefix</a> or <a href="#prod-turtle2-base">@base</a> declarations</td>
+ <td class="r"><span style="font-weight:bold;">IRI</span>s, used as <a href="#grammar-production-IRIref">RDF terms</a> or as in <a href="#grammar-production-prefixID">@prefix</a> or <a href="#grammar-production-base">@base</a> declarations</td>
<td style="background-color: green; border:1px solid black;">yes</td>
<td>no</td>
<td>no</td>
@@ -782,14 +767,14 @@
<p>Parsing Turtle requires a state of four items:</p>
<ul>
- <li id="baseURI">IRI <code class="dfn">baseURI</code> — When the <a href="#prod-turtle2-base">base production</a> is reached, the second rule argument, <code>IRI_REF</code>, is the base URI used for relative IRI resolution <span class="testrefs">(test: <a href="tests/#base1">base1</a> <a href="tests/#base2">base2</a>)</span>.</li>
+ <li id="baseURI">IRI <code class="dfn">baseURI</code> — When the <a href="#grammar-production-base">base production</a> is reached, the second rule argument, <code>IRI_REF</code>, is the base URI used for relative IRI resolution <span class="testrefs">(test: <a href="tests/#base1">base1</a> <a href="tests/#base2">base2</a>)</span>.</li>
- <li id="namespaces">Map[<a class="type prefix" href="#prefix">prefix</a> -> IRI] <code class="dfn">namespaces</code> — The second and third rule arguments (<code>PNAME_NS</code> and <code>IRI_REF</code>) in the <a href="#prod-turtle2-prefixID">prefixID production</a> assign a namespace name (<code>IRI_REF</code>) for the prefix (<code>PNAME_NS</code>). Outside of a <code>prefixID</code> production, any <code>PNAME_NS</code> is substituted with the namespace <span class="testrefs">(test: <a href="tests/#prefix1">prefix1</a> <!-- a href="tests/#escapedPrefix1">escapedPrefix1</a --> <a href="tests/#escapedNamespace1">escapedNamespace1</a>)</span>. Note that the prefix may be an empty string, per the <code>PNAME_NS,</code> production: <code>(PN_PREFIX)? ":"</code> <span class="testrefs">(test: <a href="tests/#default1">default1</a>)</span>.</li>
+ <li id="namespaces">Map[<a class="type prefix" href="#prefix">prefix</a> -> IRI] <code class="dfn">namespaces</code> — The second and third rule arguments (<code>PNAME_NS</code> and <code>IRI_REF</code>) in the <a href="#grammar-production-prefixID">prefixID production</a> assign a namespace name (<code>IRI_REF</code>) for the prefix (<code>PNAME_NS</code>). Outside of a <code>prefixID</code> production, any <code>PNAME_NS</code> is substituted with the namespace <span class="testrefs">(test: <a href="tests/#prefix1">prefix1</a> <!-- a href="tests/#escapedPrefix1">escapedPrefix1</a --> <a href="tests/#escapedNamespace1">escapedNamespace1</a>)</span>. Note that the prefix may be an empty string, per the <code>PNAME_NS,</code> production: <code>(PN_PREFIX)? ":"</code> <span class="testrefs">(test: <a href="tests/#default1">default1</a>)</span>.</li>
<li id="bnodeLabels">Map[<a class="type string">string</a> -> <a href="../rdf-concepts/index.html#dfn-blank-node">blank node</a>] <code class="dfn">bnodeLabels</code> — A mapping from string to blank node label.</li>
- <li id="curSubject">RDF_Term <code class="dfn">curSubject</code> — The <code class="curSubject">curSubject</code> is bound to the <code><a href="#prod-turtle2-subject">subject</a></code> production.</li>
+ <li id="curSubject">RDF_Term <code class="dfn">curSubject</code> — The <code class="curSubject">curSubject</code> is bound to the <code><a href="#grammar-production-subject">subject</a></code> production.</li>
- <li id="curPredicate">RDF_Term <code class="dfn">curPredicate</code> — The <code class="curPredicate">curPredicate</code> is bound to the <code><a href="#prod-turtle2-verb">verb</a></code> production. If token matched was "<code>a</code>", <code class="curPredicate">curPredicate</code> is bound to the IRI <code>http://www.w3.org/1999/02/22-rdf-syntax-ns#type</code> <span class="testrefs">(test: <a href="tests/#type">type</a>)</span>.</li>
+ <li id="curPredicate">RDF_Term <code class="dfn">curPredicate</code> — The <code class="curPredicate">curPredicate</code> is bound to the <code><a href="#grammar-production-verb">verb</a></code> production. If token matched was "<code>a</code>", <code class="curPredicate">curPredicate</code> is bound to the IRI <code>http://www.w3.org/1999/02/22-rdf-syntax-ns#type</code> <span class="testrefs">(test: <a href="tests/#type">type</a>)</span>.</li>
</ul>
</section>
@@ -815,11 +800,11 @@
<tr id="handle-INTEGER" ><td><a class="type integer" href="#term-turtle2-INTEGER" >INTEGER </a></td><td><a href="../rdf-concepts/index.html#dfn-literal"> literal </a></td><td>The literal has a lexical form of the input string, and a datatype of xsd:integer.</td></tr>
<tr id="handle-DECIMAL" ><td><a class="type decimal" href="#term-turtle2-DECIMAL" >DECIMAL </a></td><td><a href="../rdf-concepts/index.html#dfn-literal"> literal </a></td><td>The literal has a lexical form of the input string, and a datatype of xsd:decimal.</td></tr>
<tr id="handle-DOUBLE" ><td><a class="type double" href="#term-turtle2-DOUBLE" >DOUBLE </a></td><td><a href="../rdf-concepts/index.html#dfn-literal"> literal </a></td><td>The literal has a lexical form of the input string, and a datatype of xsd:double.</td></tr>
- <tr id="handle-BooleanLiteral" ><td><a class="type boolean" href="#prod-turtle2-BooleanLiteral" >BooleanLiteral </a></td><td><a href="../rdf-concepts/index.html#dfn-literal"> literal </a></td><td>The literal has a lexical form of the "true" or "false", depending on which matched the input, and a datatype of xsd:boolean.</td></tr>
+ <tr id="handle-BooleanLiteral" ><td><a class="type boolean" href="#grammar-production-BooleanLiteral" >BooleanLiteral </a></td><td><a href="../rdf-concepts/index.html#dfn-literal"> literal </a></td><td>The literal has a lexical form of the "true" or "false", depending on which matched the input, and a datatype of xsd:boolean.</td></tr>
<tr id="handle-BLANK_NODE_LABEL" ><td><a class="type bNode" href="#term-turtle2-BLANK_NODE_LABEL" >BLANK_NODE_LABEL </a></td><td><a href="../rdf-concepts/index.html#dfn-blank-node"> blank node </a></td><td>The string matching the second argument, <code>PN_LOCAL</code>, is a key in <a href="#bnodeLabels">bnodeLabels</a>. If there is no corresponding blank node in the map, one is allocated.</td></tr>
<tr id="handle-ANON" ><td><a class="type bNode" href="#term-turtle2-ANON" >ANON </a></td><td><a href="../rdf-concepts/index.html#dfn-blank-node"> blank node </a></td><td>A blank node is generated.</td></tr>
- <tr id="handle-blankNodePropertyList"><td><a class="type bNode" href="#prod-turtle2-blankNodePropertyList">blankNodePropertyList</a></td><td><a href="../rdf-concepts/index.html#dfn-blank-node"> blank node </a></td><td>A blank node is generated. Note the rules for <code>blankNodePropertyList</code> in the next section.</td></tr>
- <tr id="handle-collection" ><td><a class="type bNode" href="#prod-turtle2-collection" >collection </a></td><td><a href="../rdf-concepts/index.html#dfn-blank-node"> blank node </a></td><td>A blank node is generated. Note the rules for <code>collection</code> in the next section.</td></tr>
+ <tr id="handle-blankNodePropertyList"><td><a class="type bNode" href="#grammar-production-blankNodePropertyList">blankNodePropertyList</a></td><td><a href="../rdf-concepts/index.html#dfn-blank-node"> blank node </a></td><td>A blank node is generated. Note the rules for <code>blankNodePropertyList</code> in the next section.</td></tr>
+ <tr id="handle-collection" ><td><a class="type bNode" href="#grammar-production-collection" >collection </a></td><td><a href="../rdf-concepts/index.html#dfn-blank-node"> blank node </a></td><td>A blank node is generated. Note the rules for <code>collection</code> in the next section.</td></tr>
</tbody>
</table>
@@ -828,23 +813,23 @@
<section id="sec-parsing-triples">
<h3>RDF Triples Constructors</h3>
<p>A Turtle document defines an <a href="../rdf-concepts/index.html#dfn-rdf-graph">RDF graph</a> composed of set of <a href="../rdf-concepts/index.html#dfn-rdf-triple">RDF triple</a>s.
- Each <a tabindex="30" class="grammarRef" href="#prod-turtle2-object">object</a> <code>N</code> in the document produces an RDF triple: <span class="ntriple"><code class="curSubject">curSubject</code> <code class="curPredicate">curPredicate</code> <code>N</code> .</span>
+ Each <a tabindex="30" class="grammarRef" href="#grammar-production-object">object</a> <code>N</code> in the document produces an RDF triple: <span class="ntriple"><code class="curSubject">curSubject</code> <code class="curPredicate">curPredicate</code> <code>N</code> .</span>
</p>
<p>
- Beginning the <code><a href="#prod-turtle2-blankNodePropertyList">blankNodePropertyList</a></code> production records the <code class="curSubject">curSubject</code> and <code class="curPredicate">curPredicate</code>, and sets <code class="curSubject">curSubject</code> to a novel <code>blank node</code> <code>B</code>.
- Finishing the <code><a href="#prod-turtle2-blankNodePropertyList">blankNodePropertyList</a></code> production restores <code class="curSubject">curSubject</code> and <code class="curPredicate">curPredicate</code>.
- The node produced by matching <code><a href="#prod-turtle2-blankNodePropertyList">blankNodePropertyList</a></code> is the blank node <code>B</code>.
+ Beginning the <code><a href="#grammar-production-blankNodePropertyList">blankNodePropertyList</a></code> production records the <code class="curSubject">curSubject</code> and <code class="curPredicate">curPredicate</code>, and sets <code class="curSubject">curSubject</code> to a novel <code>blank node</code> <code>B</code>.
+ Finishing the <code><a href="#grammar-production-blankNodePropertyList">blankNodePropertyList</a></code> production restores <code class="curSubject">curSubject</code> and <code class="curPredicate">curPredicate</code>.
+ The node produced by matching <code><a href="#grammar-production-blankNodePropertyList">blankNodePropertyList</a></code> is the blank node <code>B</code>.
</p>
<p>
- Beginning the <code><a href="#prod-turtle2-collection">collection</a></code> production records the <code class="curSubject">curSubject</code> and <code class="curPredicate">curPredicate</code>, sets <code class="curSubject">curSubject</code> to a novel <code>blank node</code> <code>B<sub>head</sub></code> and sets <code class="curSubject">curSubject</code> and <code class="curPredicate">curPredicate</code> to <code>B<sub>head</sub></code> and <code>rdf:first</code> respectively.
- Each object <code>O</code> in <code><a href="#prod-turtle2-collection">collection</a></code> allocates a novel <code>blank node</code> <code>B<sub>n</sub></code>, creates an additional triple <span class="ntriple"><code>curSubject rdf:rest B<sub>n</sub></code> .</span> and sets <code>curSubject</code> to <code>B<sub>n</sub></code>.
- Finishing the <code><a href="#prod-turtle2-collection">collection</a></code> production creates an additional triple <span class="ntriple"><code>curSubject rdf:rest rdf:nil</code> .</span> and restores <code class="curSubject">curSubject</code> and <code class="curPredicate">curPredicate</code>
+ Beginning the <code><a href="#grammar-production-collection">collection</a></code> production records the <code class="curSubject">curSubject</code> and <code class="curPredicate">curPredicate</code>, sets <code class="curSubject">curSubject</code> to a novel <code>blank node</code> <code>B<sub>head</sub></code> and sets <code class="curSubject">curSubject</code> and <code class="curPredicate">curPredicate</code> to <code>B<sub>head</sub></code> and <code>rdf:first</code> respectively.
+ Each object <code>O</code> in <code><a href="#grammar-production-collection">collection</a></code> allocates a novel <code>blank node</code> <code>B<sub>n</sub></code>, creates an additional triple <span class="ntriple"><code>curSubject rdf:rest B<sub>n</sub></code> .</span> and sets <code>curSubject</code> to <code>B<sub>n</sub></code>.
+ Finishing the <code><a href="#grammar-production-collection">collection</a></code> production creates an additional triple <span class="ntriple"><code>curSubject rdf:rest rdf:nil</code> .</span> and restores <code class="curSubject">curSubject</code> and <code class="curPredicate">curPredicate</code>
- The node produced by matching <code><a href="#prod-turtle2-collection">collection</a></code> is the blank node <code>B<sub>head</sub></code>.
+ The node produced by matching <code><a href="#grammar-production-collection">collection</a></code> is the blank node <code>B<sub>head</sub></code>.
</p>
</section>
<section id="sec-parsing-example" class="informative">
@@ -913,7 +898,7 @@
<div data-include="examples/example3.ttl" data-oninclude="updateExample"></div>
- <p>As indicated by the grammar, a <a href="#prod-turtle2-collection">collection</a> can be either a <a href="#prod-turtle2-subject">subject</a> or an <a href="#prod-turtle2-object">object</a>. This subject or object will be the novel blank node for the first object, if the collection has one or more objects, or <code>rdf:nil</code> if the collection is empty.</p>
+ <p>As indicated by the grammar, a <a href="#grammar-production-collection">collection</a> can be either a <a href="#grammar-production-subject">subject</a> or an <a href="#grammar-production-object">object</a>. This subject or object will be the novel blank node for the first object, if the collection has one or more objects, or <code>rdf:nil</code> if the collection is empty.</p>
<p>For example,</p>
@@ -1315,7 +1300,7 @@
<li>SPARQL permits RDF Literals as the subject of RDF triples (per <a href="http://www.w3.org/TR/sparql11-query/#rGraphTerm">Last Call draft</a>)</li>
<li>SPARQL permits variables (<code>?</code><em>name</em> or <code>$</code><em>name</em>) in any part of the triple of the form</li>
- <li>Turtle allows <a href="#prod-turtle2-directive">prefix and base declarations</a> anywhere outside of a triple. In SPARQL, they are only allowed in the <a href="http://www.w3.org/TR/sparql11-query/#rPrologue">Prologue</a> (at the start of the SPARQL query).</li>
+ <li>Turtle allows <a href="#grammar-production-directive">prefix and base declarations</a> anywhere outside of a triple. In SPARQL, they are only allowed in the <a href="http://www.w3.org/TR/sparql11-query/#rPrologue">Prologue</a> (at the start of the SPARQL query).</li>
<li>SPARQL uses case insensitive keywords, except for <code>a</code>. Turtle's prefix and base declarations are case sensitive.</li>
<li><code>true</code> and <code>false</code> are case insensitive in SPARQL and case sensitive in Turtle. <code>TrUe</code> is not a valid boolean value in Turtle.</li>