mgerge
authorSandro Hawke <sandro@hawke.org>
Mon, 20 Aug 2012 14:57:39 -0400
changeset 502 326de5a9517f
parent 501 d1c5a569d603 (current diff)
parent 499 8ae240eeb13a (diff)
child 503 2858b99aab45
mgerge
--- a/README.markdown	Mon Aug 20 14:56:55 2012 -0400
+++ b/README.markdown	Mon Aug 20 14:57:39 2012 -0400
@@ -10,7 +10,7 @@
 
 ### Other drafts and experimental work
 
-* [RDF Spaces and Datasets (RDF/JSON)](https://dvcs.w3.org/hg/rdf/raw-file/default/rdf-spaces/index.html)
+* [RDF Spaces and Datasets](https://dvcs.w3.org/hg/rdf/raw-file/default/rdf-spaces/index.html)
 * [RDF 1.1 JSON Serialisation (RDF/JSON)](https://dvcs.w3.org/hg/rdf/raw-file/default/rdf-json/index.html)
 
 To download all specifications:
--- a/ReSpec.js/bibref/biblio.js	Mon Aug 20 14:56:55 2012 -0400
+++ b/ReSpec.js/bibref/biblio.js	Mon Aug 20 14:57:39 2012 -0400
@@ -261,7 +261,7 @@
    "IMAGEMAP" : "Ian Graham. <a href=\"http://www.w3.org/TR/NOTE-imagemap\"><cite>Imagemapped Images and Image-Incapable User Agents.</cite></a> 27 November 1996. W3C Note. URL: <a href=\"http://www.w3.org/TR/NOTE-imagemap\">http://www.w3.org/TR/NOTE-imagemap</a> ",
    "INKML" : "Stephen M. Watt; Max Froumentin; Yi-Min Chee. <a href=\"http://www.w3.org/TR/2006/WD-InkML-20061023\"><cite>Ink Markup Language (InkML).</cite></a> 23 October 2006. W3C Working Draft. (Work in progress.) URL: <a href=\"http://www.w3.org/TR/2006/WD-InkML-20061023\">http://www.w3.org/TR/2006/WD-InkML-20061023</a> ",
    "INKREQS" : "Yi-Min Chee; Sai Prasad. <a href=\"http://www.w3.org/TR/2003/NOTE-inkreqs-20030122\"><cite>Requirements for the Ink Markup Language.</cite></a> 22 January 2003. W3C Note. URL: <a href=\"http://www.w3.org/TR/2003/NOTE-inkreqs-20030122\">http://www.w3.org/TR/2003/NOTE-inkreqs-20030122</a> ",
-   "IRI" : "M. Duerst, M. Suignard. <a href=\"http://www.ietf.org/rfc/rfc3987.txt\"><cite>Internationalized Resource Identifiers (IRI).</cite></a> January 2005. Internet RFC 3987. URL: <a href=\"http://www.ietf.org/rfc/rfc3986.txt\">http://www.ietf.org/rfc/rfc3987.txt</a> ",
+   "IRI" : "M. Dürst, M. Suignard. <a href=\"http://www.ietf.org/rfc/rfc3987.txt\"><cite>Internationalized Resource Identifiers (IRI).</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> ",
    "ISO10646" : "<cite>Information Technology - Universal Multiple- Octet Coded CharacterSet (UCS) - Part 1: Architecture and Basic Multilingual Plane.</cite> ISO/IEC10646-1:1993. The current specification also takes into consideration the first five amendments to ISO/IEC 10646-1:1993. Useful &lt;a href=&quot;http://www.egt.ie/standards/iso10646/ucs-roadmap.html&quot;&gt;roadmaps&lt;/a&gt;show which scripts sit at which numeric ranges.",
    "ISO15924" : "<cite>Code for the representation of names of scripts.</cite> International Organization for Standardization. 1998. ISO 15924:1998. Draft International Standard",
     "ISO18033-2": "<cite>Information technology -- Security techniques -- Encryption algorithms -- Part 2: Asymmetric ciphers</cite>, International Organization for Standardization.  18033-2:2006. May 2006. URL: <a href=\"http://www.iso.org/iso/home.htm\">http://www.iso.org/iso/home.htm</a>.",
--- a/ReSpec.js/js/respec.js	Mon Aug 20 14:56:55 2012 -0400
+++ b/ReSpec.js/js/respec.js	Mon Aug 20 14:57:39 2012 -0400
@@ -749,11 +749,24 @@
                 header += "<span" + rn + ">" + pers.name + "</span>";
             }
             if (pers.company) {
-                header += ", ";
-                if (pers.companyURL) {
-                    header += "<a" + rwu + " href='" + pers.companyURL + "'>" + pers.company + "</a>";
+                
+                if (Object.prototype.toString.call(pers.company) === '[object Array]') {
+                    for (var j = 0; j < pers.company.length; j++) {
+                        header += ", ";
+                        var company = pers.company[j];
+                        if (company.url) {
+                            header += "<a" + rwu + " href='" + company.url + "'>" + company.name + "</a>";
+                        } else {
+                            header += company.name;
+                        }
+                    }
                 } else {
-                    header += pers.company;
+                    header += ", ";
+                    if (pers.companyURL) {
+                        header += "<a" + rwu + " href='" + pers.companyURL + "'>" + pers.company + "</a>";
+                    } else {
+                        header += pers.company;
+                    }
                 }
             }
             if (pers.mailto) {
@@ -1228,7 +1241,7 @@
             }
             if (this.appendixMode) secnos[0] = this.alphabet.charAt(current[0] - this.lastNonAppendix);
             var secno = secnos.join(".");
-            if (!/\./.test(secno)) secno = secno + ".";
+            //if (!/\./.test(secno)) secno = secno + "."; -- gjc, the periods in the middle of sentances when using secRef is really bad.
             var df = sn.documentFragment();
             if (!isIntro) sn.element("span", { "class": "secno" }, df, secno + " ");
             // sn.text(" ", df);
--- a/rdf-concepts/index.html	Mon Aug 20 14:56:55 2012 -0400
+++ b/rdf-concepts/index.html	Mon Aug 20 14:57:39 2012 -0400
@@ -730,7 +730,9 @@
     to this abstraction MAY be used in RDF, even if not defined
     in terms of XML Schema. RDF re-uses the XML Schema built-in datatypes,
     and provides two additional built-in datatypes,
-    <code><a>rdf:HTML</a></code> and <code><a>rdf:XMLLiteral</a></code>.</p>
+    <code><a>rdf:HTML</a></code> and <code><a>rdf:XMLLiteral</a></code>.
+    The list of datatypes supported by an implementation is determined
+    by its <a>datatype map</a>.</p>
 
     <p>A <dfn>datatype</dfn> consists of a <a>lexical space</a>,
     a <a>value space</a> and a <a>lexical-to-value mapping</a>, and
@@ -1079,12 +1081,20 @@
     then it MUST be paired with the datatype
     <code><a>rdf:XMLLiteral</a></code>.</p>
 
+    <p>If a <a>datatype map</a> contains the IRI
+    <code>http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML</code>,
+    then it MUST be paired with the datatype
+    <code><a>rdf:HTML</a></code>.</p>
+
     <p>If a <a>datatype map</a> contains an IRI of the form
     <code>http://www.w3.org/2001/XMLSchema#<em>xxx</em></code>,
     then it MUST be paired with the
     <a title="RDF-compatible XSD types">RDF-compatible XSD type</a>
     named <code>xsd:<em>xxx</em></code>.<p>
 
+    <p>Specifications that <a href="#conformance">conform to RDF</a>
+    MAY impose additional constraints on the <a>datatype map</a>,
+    for example, require support for certain datatypes.</p>
 </section>
 
 
@@ -1183,7 +1193,7 @@
     <p class="issue">This section <em>may</em> not yet acknowledge
     <em>all</em> contributions to the RDF 1.1 version.</p>
 
-    </p>The RDF 1.1 editors acknowledge valuable contributions from
+    <p>The RDF 1.1 editors acknowledge valuable contributions from
     Thomas Baker, Dan Brickley, Gavin Carothers, Jeremy Carroll,
     John Cowan, Martin J. Dürst, Alex Hall, Steve Harris, Pat Hayes,
     Ivan Herman, Peter F. Patel-Schneider, Addison Phillips,
@@ -1211,12 +1221,25 @@
   <h2>Changes from RDF 2004</h2>
 
 
+<section class="appendix" id="changes-wd3">
+  <h3>Changes from 05 June 2012 WD to this version</h3>
+
+  <p>This section lists changes from the
+  <a href="http://www.w3.org/TR/2012/WD-rdf11-concepts-20120605/">05 June 2012 Working Draft (WD)</a> to this Editor's Draft of 
+  <em>RDF 1.1 Concepts and Abstract Syntax</em>.</p>
+
+  <ul>
+    <li>2012-08-09: Clarify that all datatypes are optional, but RDF-conformant specifications MAY require specific <a title="datatype map">datatype maps</a></li>
+  </ul>
+</section>
+
+
 <section class="appendix" id="changes-wd2">
-  <h3>Changes from FPWD to this version</h3>
+  <h3>Changes from FPWD to 05 June 2012 WD</h3>
 
   <p>This section lists changes from the
   <a href="http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/">First Public Working Draft (FPWD)</a>
-  to this Working Draft of 
+  to the <a href="http://www.w3.org/TR/2012/WD-rdf11-concepts-20120605/">05 June 2012 Working Draft (WD)</a> of
   <em>RDF 1.1 Concepts and Abstract Syntax</em>.</p>
 
   <ul>
--- a/rdf-turtle/index.html	Mon Aug 20 14:56:55 2012 -0400
+++ b/rdf-turtle/index.html	Mon Aug 20 14:57:39 2012 -0400
@@ -24,7 +24,7 @@
       };
       var respecConfig = {
 	  // specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
-	  specStatus:           "ED",
+	  specStatus:           "LC",
 	  
 	  // the specification's short name, as in http://www.w3.org/TR/short-name/
 	  shortName:            "turtle",
@@ -34,7 +34,7 @@
 	  subtitle   :  "Terse RDF Triple Language",
 
 	  // if you wish the publication date to be other than today, set this
-	  // publishDate:  "2011-08-09",
+	  publishDate:  "2012-06-27",
 
 	  // if the specification's copyright date is a range of years, specify
 	  // the start date here:
@@ -50,7 +50,7 @@
 	  edDraftURI:           "http://dvcs.w3.org/hg/rdf/raw-file/default/rdf-turtle/index.html",
 
 	  // if this is a LCWD, uncomment and set the end of its review period
-	  // lcEnd: "2009-08-05",
+	  lcEnd: "2012-09-15",
 
 	  // if you want to have extra CSS, append them to this list
 	  // it is recommended that the respec.css stylesheet be kept
@@ -62,7 +62,8 @@
 	      { name: "Eric Prud'hommeaux", url: "http://www.w3.org/People/Eric/",
 		company: "W3C", companyURL: "http://www.w3.org/" },
 	      { name: "Gavin Carothers", url: "http://gavin.carothers.name/",
-		company: "TopQuadrant, Inc", companyURL: "http://topquadrant.com/" },
+		company: [{name:"TopQuadrant, Inc", url: "http://topquadrant.com/"},
+				  {name:"Lex Machina, Inc", url: "http://lexmachina.com/"} ] },
 	  ],
 
 	  // authors, add as many as you like. 
@@ -76,7 +77,8 @@
 	      { name: "Eric Prud'hommeaux", url: "http://www.w3.org/People/Eric/",
 		company: "W3C", companyURL: "http://www.w3.org/" },
 	      { name: "Gavin Carothers", url: "http://gavin.carothers.name/",
-		company: "TopQuadrant, Inc", companyURL: "http://topquadrant.com/" },
+		company: [{name:"TopQuadrant, Inc", url: "http://topquadrant.com/"},
+				  {name:"Lex Machina, Inc", url: "http://lexmachina.com/"} ]},
 	  ],
 	  
 	  // name of the WG
@@ -112,11 +114,30 @@
     pre.example script {
         display:block;
     }
+    .separated { border-collapse:collapse; }
     .separated thead tr th { border:1px solid black; padding: .2em; }
     .separated tbody tr td { border:1px solid black; text-align: center; }
     .separated tbody tr td.r { text-align: right; padding: .5em; }
-    .grammar td { font-family: monospace;}
+    .grammar td { font-family: monospace; vertical-align: top; }
     .grammar-literal { color: gray;}
+    .atrisk {
+    padding:    1em;
+    margin: 1em 0em 0em;
+    border: 1px solid #f00;
+    background: #ffc;
+}
+
+.atrisk::before {
+    content:    "Feature At Risk";
+    display:    block;
+    width:  150px;
+    margin: -1.5em 0 0.5em 0;
+    font-weight:    bold;
+    border: 1px solid #f00;
+    background: #fff;
+    padding:    3px 1em;
+}
+
     </style> 
 	
     </head>
@@ -139,19 +160,6 @@
 	</section>
 
     <section id='sotd'>
-      <p>
-      	<strong>The following are the non-editorial changes since last publication:</strong>
-      	<ul>
-      		<li>Local part of prefix names can now include ":"
-			<li>Turtle in HTML
-			<li>Renaming of grammar tokens and rules around IRIs
-			<li>Reserved character escape sequences
-			<li>String escape sequences limited to strings
-			<li>Numeric escape sequences limited to IRIs and Strings
-			<li>Support top-level blank-predicate-object lists
-			<li>Whitespace required between @prefix and prefix label
-      	</ul>
-      </p>
     </section>
 	
 	<section id="sec-intro" class="informative">
@@ -162,38 +170,47 @@
 			</p>
 
 			<p>
-			  A Turtle document is a textual representations of a RDF graph. The following Turtle document describes the relationship between Green Goblin and Spiderman. 
+			  A Turtle document is a textual representations of an RDF graph. The following Turtle document describes the relationship between Green Goblin and Spiderman. 
 			</p>
-			<pre class="example"><script type="text/turtle">@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+			<pre class="example"><script type="text/turtle">@base <http://example.org/> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
 @prefix foaf: <http://xmlns.com/foaf/0.1/> .
 @prefix rel: <http://www.perceive.net/schemas/relationship/> .
 
-<http://example.org/#green-goblin>
-    rel:enemyOf <http://example.org/#spiderman> ;
-    a foaf:Person ;
+<#green-goblin>
+    rel:enemyOf <#spiderman> ;
+    a foaf:Person ;    # in the context of the Marvel universe
     foaf:name "Green Goblin" .
 
-<http://example.org/#spiderman>
-    rel:enemyOf <http://example.org/#green-goblin> ;
+<#spiderman>
+    rel:enemyOf <#green-goblin> ;
     a foaf:Person ;
-    foaf:name "Spiderman", "Spïdermann"@de .</script></pre>
+    foaf:name "Spiderman", "Человек-паук"@ru .</script></pre>
+			<p>
+			  This example introduces many of features of the Turtle language:
+<a href="#relative-iris">@base and Relative IRIs</a>,
+<a href="#turtleIRIs">@prefix and prefixed names</a>,
+<a href="#predicate-lists">predicate lists</a> separated by '<code>;</code>',
+<a href="#object-lists">objects lists</a> separated by '<code>,</code>',
+the token <code><a href="#IRIs">a</a></code>,
+and <a href="#literals">literals</a>.
+			</p>
 
     		<p>
-			  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 Turtle grammar for <a href="#grammar-production-triples"><code>triples</code></a> is a subset of the <a href="http://www.w3.org/TR/sparql11-query/">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.
 			</p>
-			  Comments may be given after a <code>#</code> that is not part of another lexical token and continue to the end of the line.
 
 			<p>
-			  The <a href="#sec-grammar">Turtle Grammar</a> and <a href="#sec-parsing">Parsing</a> sections define the construction of an RDF graph from a Turtle document.
+			  The construction of an RDF graph from a Turtle document is defined in <a href="#sec-grammar" class="sectionRef">Turtle Grammar</a> and <a href="#sec-parsing" class="sectionRef">Parsing</a>.
 			</p>
 
-
 	</section>
-	<section id="triples">
-		<h2>Triples in Turtle</h2>
+	<section id="language-features" class="informative">
+		<h2>Turtle Language</h2>
 		<p>A Turtle document allows writing down an RDF graph in a compact textual form. An RDF graph is made up of <a href="../rdf-concepts/index.html#dfn-rdf-triple">triples</a> consisting of a subject, predicate and object.</p>
+		<p>Comments may be given after a '<code>#</code>'' that is not part of another lexical token and continue to the end of the line.</p>
 		<section id="simple-triples">
 			<h3>Simple Triples</h3>
 			<p>The simplest triple statement is a sequence of (subject, predicate, object) terms, separated by whitespace and terminated by '<code>.</code>' after each triple.</p>
@@ -203,9 +220,9 @@
 		</section>
 		<section id="predicate-lists">
 			<h3>Predicate Lists</h3>
-			<p>Often the same subject will be refrenced by a number of predicates. 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>
+			<p>Often the same subject will be referenced by a number of predicates. 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 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>
 			  <p>These two examples are equivalent ways of writing the triples about Spiderman.</p>
    			<pre class="example"><script type="text/turtle"><http://example.org/#spiderman> <http://www.perceive.net/schemas/relationship/enemyOf> <http://example.org/#green-goblin> ;
 				<http://xmlns.com/foaf/0.1/name> "Spiderman" .
@@ -217,22 +234,18 @@
 		<section id="object-lists">
 			<h3>Object Lists</h3>
 			<p>
-			  As with predicates often objects are repeated with the same 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>
+			  As with predicates often objects are repeated with the same subject and predicate. The <a href="#grammar-production-objectList">objectList production</a> matches a series of objects separated by '<code>,</code>' following a predicate.
+			  This expresses a series of RDF Triples with the corresponding subject and predicate and 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>
 			  <p>These two examples  are equivalent ways of writing Spiderman's name in two languages.<p>
- 			<pre class="example"><script type="text/turtle"><http://example.org/#spiderman> <http://xmlns.com/foaf/0.1/name> "Spiderman", "Spïdermann"@de .
+ 			<pre class="example"><script type="text/turtle"><http://example.org/#spiderman> <http://xmlns.com/foaf/0.1/name> "Spiderman", "Человек-паук"@ru .
 			</script></pre>
  			<pre class="example"><script type="text/turtle"><http://example.org/#spiderman> <http://xmlns.com/foaf/0.1/name> "Spiderman" .
-<http://example.org/#spiderman> <http://xmlns.com/foaf/0.1/name> "Spïdermann"@de .
+<http://example.org/#spiderman> <http://xmlns.com/foaf/0.1/name> "Человек-паук"@ru .
 			</script></pre>
 
 				</section>
 
-	</section>
-	<section id="terms">
-			<h2>RDF Terms in Turtle</h2>
-
 			<p>
 			  There are three types of <em>RDF Term</em> defined in RDF Concepts:
 			  <a href="../rdf-concepts/index.html#dfn-iri">IRIs</a> (Internationalized Resource Identifiers),
@@ -241,19 +254,49 @@
 			  of ways of writing each.
 			</p>
 
-			<section id="IRIs">
+			<section id="sec-iri">
 				<h3>IRIs</h3>
 
 				<p>
 			   		<a href="../rdf-concepts/index.html#dfn-iri">IRIs</a> may be written as relative or absolute IRIs or prefixed names. 
 				  	Relative and absolute IRIs are enclosed in '&lt;' and '&gt;' and may contain <a href="#numeric">numeric escape sequences</a> (described below). For example <code>&lt;http://example.org/#green-goblin&gt;</code>.
 				</p>
+				<p>Relative IRIs like <code>&lt;#green-goblin&gt;</code> are resolved relative to the current base IRI. A new base IRI can be defined using the '<code>@base</code>' directive. Specifics of this operation are defined in <a href="#sec-iri-references" class="sectionRef"></a> </p>
+				<p>
+				  The token '<code>a</code>' in the predicate position of a Turtle triple represents the IRI <code>http://www.w3.org/1999/02/22-rdf-syntax-ns#type</code> .
+				</p>
 
 				<p>
-				  The token <code>a</code> in the predicate position of a Turtle triple represents the IRI <code>http://www.w3.org/1999/02/22-rdf-syntax-ns#type</code> .
-				</p>
+				  A <em id="prefixed-name">prefixed name</em> is a prefix label and a local part, separated by a colon ":".
+				  A prefixed name is turned into an IRI by concatenating the IRI associated with the prefix and the local part. The '<code>@prefix</code>' directive associates a prefix label with an IRI.
+				  Subsequent '<code>@prefix</code>' directives may re-map the same prefix label. </p>
 
-				<p>The following Turtle document contains examples of all the diffrent ways of writting IRIs in Turtle.</p>
+				  <p>
+				  	To write <code>http://www.perceive.net/schemas/relationship/enemyOf</code> using a prefixed name: </p>
+				  	<ol>
+				  		<li>Define a prefix label for the vocabulary IRI <code>http://www.perceive.net/schemas/relationship/</code> as <code>rel</code>
+			  			<li>Then write <code>rel:enemyOf</code> which is equivalent to writing <code>&lt;http://www.perceive.net/schemas/relationship/enemyOf></code></li>
+			  		</ol>
+
+				  <pre class="example"><script type="text/turtle">@prefix rel: <http://www.perceive.net/schemas/relationship/> .
+
+<http://example.org/#green-goblin> rel:enemyOf <http://example.org/#spiderman> .
+				  </script></pre>
+
+
+				<div class="note">
+				  <p>
+				    Prefixed names are a superset of XML QNames.
+				    They differ in that the local part of prefixed names may include:
+				  </p>
+				  <ul>
+				    <li>leading digits, e.g. <code>leg:3032571</code> or <code>isbn13:9780136019701</code></li>
+				    <li>non leading colons, e.g. <code>og:video:height</code></li>
+				    <li><a href="#reserved">reserved character escape sequences</a>, e.g. <code>wgs:lat\-long</code></li>
+				  </ul>
+				</div>
+
+				<p>The following Turtle document contains examples of all the different ways of writing IRIs in Turtle.</p>
 
 							<pre class="example"><script type="text/turtle"># A triple with all absolute IRIs
 <http://one.example/subject1> <http://one.example/predicate1> <http://one.example/object1> .
@@ -272,60 +315,11 @@
 
 :subject6 a :subject7 .                 # same as :subject6 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> :subject7 .
 </script></pre>
-
-				<section id="turtleIRIs">
-				  <h3>Prefixed Names in Turtle</h3>
-
-				<p>
-				  A prefixed name is a prefix label and a local part, separated by a colon ":".
-				  A prefixed name is turned into an IRI by concatenating the IRI associated with the prefix and the local part. The <code>@prefix</code> directive associates a prefix label with an IRI.
-				  Subsequent <code>@prefix</code> directives may re-map the same prefix label. </p>
-
-				  <p>
-				  	To write <code>http://www.perceive.net/schemas/relationship/enemyOf</code> using a prefixed name: 
-				  	<ol>
-				  		<li>Define a prefix label for the vocabulary IRI <code>http://www.perceive.net/schemas/relationship/</code> as <code>rel</code>
-			  			<li>Then write <code>rel:enemyOf</code> which is equalivate to writing <code>&lt;http://www.perceive.net/schemas/relationship/enemyOf></code></li>
-			  		</ol>
-
-				  </p>
-				  <pre class="example"><script type="text/turtle">@prefix rel: <http://www.perceive.net/schemas/relationship/> .
-
-<http://example.org/#green-goblin> rel:enemyOf <http://example.org/#spiderman> .
-				  </script></pre>
+	</section>
 
 
-				<div class="note">
-				  <p>
-				    Prefixed names are a superset of XML QNames.
-				    They differ in that the local part of prefixed names may include:
-				  </p>
-				  <ul>
-				    <li>leading digits, e.g. <code>leg:3032571</code> or <code>isbn13:9780136019701</code></li>
-				    <li>non leading colons, e.g. <code>og:video:height</code></li>
-				    <li><a href="#reserved">reserved character escape sequences</a>, e.g. <code>wgs:lat\-long</code></li>
-				  </ul>
-				</div>
-				</section>
-				<section>
-					<h3>Relative IRIs</h3>
-					<p>
-					  Relative IRIs are resolved with base IRIs as per <a href="http://www.ietf.org/rfc/rfc3986.txt" class="norm">Uniform Resource Identifier (URI): Generic Syntax</a> [<a href="#rfc3986">RFC3986</a>] using only the basic algorithm in section 5.2.
-					  Neither Syntax-Based Normalization nor Scheme-Based Normalization (described in sections 6.2.2 and 6.2.3 of RFC3986) are performed.
-					  Characters additionally allowed in IRI references are treated in the same way that unreserved characters are treated in URI references, per section 6.5 of <a href="http://www.ietf.org/rfc/rfc3987.txt" class="norm">Internationalized Resource Identifiers (IRIs)</a> [<a href="#rfc3987">RFC3987</a>].
-					</p>
-					<p>
-					  The <code>@base</code> directive defines the Base IRI used to resolve relative IRIs per RFC3986 section 5.1.1, "Base URI Embedded in Content".
-					  Section 5.1.2, "Base URI from the Encapsulating Entity" defines how the In-Scope Base IRI may come from an encapsulating document, such as a SOAP envelope with an xml:base directive or a mime multipart document with a Content-Location header.
-					  The "Retrieval URI" identified in 5.1.3, Base "URI from the Retrieval URI", is the URL from which a particular SPARQL query was retrieved.
-					  If none of the above specifies the Base URI, the default Base URI (section 5.1.4, "Default Base URI") is used.
-					  Each <code>@base</code> directive sets a new In-Scope Base URI, relative to the previous one.
-					</p>
-				</section>
 
 
-			</section>
-
 			<section id="literals">
 				<h3>RDF Literals</h3>
 
@@ -338,25 +332,22 @@
 <http://example.org/#spiderman> foaf:name "Spiderman" .</script></pre>
 
 
+				<section id="turtle-literals">
+				  <h3>Quoted Literals</h3>
+
 				<p>
-				  Literals in Turtle have a lexical form followed by a language tag, a datatype IRI, or neither.
-				  The representation of the lexical form consists of a delimiting <code>"</code>, a sequence of characters matching the regular expression <code>[^\"\\\n\r]</code> or <a href="#numeric">numeric escape sequence</a> or <a href="#string">string escape sequence</a>, and a final delimiting <code>"</code>.
-				  The corresponding <a href="../rdf-concepts/index.html#dfn-lexical-form">RDF lexical form</a> is the characters between the <code>""</code>s, after processing any escape sequences.
-				  If present, the <a href="../rdf-concepts/index.html#dfn-language-tagged-string">language tag</a> is preceded by a <code>@</code>.
-				  The datatype IRI in Turtle may be written using either an <a href="#iri-summary">absolute IRI, a relative IRI or prefixed name</a>.
-				  If there is no language tag, there may be a <a href="../rdf-concepts/index.html#dfn-datatype-URI">datatype IRI</a>, preceeded by <code>^^</code>.
-				  If there is no datatype IRI and no language tag, the datatype is <code>xsd:string</code>.
+				  Quoted Literals (Grammar production <a href="#grammar-production-RDFLiteral">RDFLiteral</a>) have a lexical form followed by a language tag, a datatype IRI, or neither.
+				  The representation of the lexical form consists of an initial delimiter, e.g. <code>"</code>, a sequence of permitted characters or <a href="#numeric">numeric escape sequence</a> or <a href="#string">string escape sequence</a>, and a final delimiter.
+				  The corresponding <a href="../rdf-concepts/index.html#dfn-lexical-form">RDF lexical form</a> is the characters between the delimiters, after processing any escape sequences.
+				  If present, the <a href="../rdf-concepts/index.html#dfn-language-tagged-string">language tag</a> is preceded by a '<code>@</code>'.
+				  If there is no language tag, there may be a <a href="../rdf-concepts/index.html#dfn-datatype-URI">datatype IRI</a>, preceeded by '<code>^^</code>'. The datatype IRI in Turtle may be written using either an <a href="#sec-iri">absolute IRI</a>, a <a href="#sec-iri">relative IRI</a>, or <a href="#prefixed-name">prefixed name</a>. If there is no datatype IRI and no language tag, the datatype is <code>xsd:string</code>.
 				</p>
-
-				<section id="turtle-literals">
-				  <h3>Other Lexical Representations in Turtle</h3>
-				<p>
-				  Besides the <code>"</code> delimited literal there are three other representations of the lexical form:
-				</p>
+				<p>'<code>\</code>' may not appear in any quoted literal except as part of an escape sequence. Other restrictions depend on the delimiter:</p>
 				<ul>
-				  <li>Literals delimited by <code>'</code>, which contain escape characters and characters matching the pattern <code>[^'\\\n\r]</code>.</li>
-				  <li>Literals delimited by <code>"""</code>, which permit up to two <code>"</code>s, as well as <code>\r</code> and <code>\n</code>.</li>
-				  <li>Literals delimited by <code>'''</code>, which permit up to two <code>'</code>s, as well as <code>\r</code> and <code>\n</code>.</li>
+					<li>Literals delimited by <code>'</code>, may not contain the characters <code>'</code>, <code title="LINE FEED"><sub>LF</sub></code>, or <code title="CARRIAGE RETURN"><sub>CR</sub></code>.
+					<li>Literals delimited by <code>"</code>, may not contain the characters <code>"</code>, <code title="LINE FEED"><sub>LF</sub></code>, or <code title="CARRIAGE RETURN"><sub>CR</sub></code>.
+					<li>Literals delimited by <code>'''</code> may not contain the sequence of characters <code>'''</code>.
+					<li>Literals delimited by <code>"""</code> may not contain the sequence of characters <code>"""</code>.
 				</ul>
 				<pre class="example"><script type="text/turtle">@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
 @prefix show: <http://example.org/vocab/show/> .
@@ -367,14 +358,15 @@
 show:218 show:localName "That Seventies Show"@en .                 # literal with a language tag
 show:218 show:localName 'Cette Série des Années Soixante-dix'@fr . # literal delimited by single quote
 show:218 show:localName "Cette Série des Années Septante"@fr-be .  # literal with a region subtag
-show:218 show:blurb '''This is a
-multi-line, single-quoted literal.''' .                            # literal with embedded new line
+show:218 show:blurb '''This is a multi-line                        # literal with embedded new lines and quotes
+literal with many quotes (""""")
+and up to two sequential apostrophes ('').''' .
 </script></pre>
 				</section>
 				<section id="abbrev">
-				<h3 >Representing Numbers in Turtle</h3>
-				<p>Numbers can be written with lexical form and datatype (Example: <code>"-5.0"^^xsd:decimal</code>) but Turtle has syntax for writing integer values, arbitrary precision decimal values, double precision floating point values and boolean values.</p>
-				<table>
+				<h3>Numbers</h3>
+				<p>Numbers can be written like other literals with lexical form and datatype (e.g. <code>"-5.0"^^xsd:decimal</code>). Turtle has a shorthand syntax for writing integer values, arbitrary precision decimal values, and double precision floating point values.</p>
+				<table class="separated">
 					<thead>
 						<tr>
 							<th>Data Type</th>
@@ -422,12 +414,11 @@
     :censusYear 2007 ;              # xsd:integer
     :birthsPerPerson .0135 ;        # xsd:decimal
     :gdpDollars 14074.2E9 ;         # xsd:double
-    :series "IV"^^my:romanNumeral . # no abbreviation available
 				</script></pre>
 			</section>
 			<section>
-				<h3>Representing Booleans in Turtle</h3>
-				<p>Boolean values may be written as either <code>true</code> or <code>false</code> (case-sensitive) and represent RDF literals with the datatype <a href="http://www.w3.org/TR/xmlschema-2/#boolean">xsd:boolean</a>.</p>
+				<h3>Booleans</h3>
+				<p>Boolean values may be written as either '<code>true</code>' or '<code>false</code>' (case-sensitive) and represent RDF literals with the datatype <a href="http://www.w3.org/TR/xmlschema-2/#boolean">xsd:boolean</a>.</p>
 				<pre class="example"><script type="text/turtle">@prefix : <http://example.org/stats> .
 <http://somecountry.example/census2007>
     :isLandlocked false .           # xsd:boolean</script></pre>
@@ -439,7 +430,7 @@
 				<h3>RDF Blank Nodes</h3>
 				<p>
 				  <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="#grammar-production-PN_CHARS_BASE">PN_CHARS_BASE</a>, liberalized to allow:
+				  The characters in the label are built upon <a href="#grammar-production-PN_CHARS_BASE">PN_CHARS_BASE</a>, liberalized as follows:
 				</p>
 				<ul>
 				  <li>The characters <code>_</code> and digits may appear anywhere in a blank node label.</li>
@@ -455,8 +446,8 @@
 _:alice foaf:knows _:bob .
 _:bob foaf:knows _:alice .
 </script></pre>
-
-				<section id="abbrev">
+	</section>
+				<section id="unlabeled-bnodes">
 				  <h3>Nesting Unlabeled Blank Nodes in Turtle</h3>
 				  <p>
 				    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="#grammar-production-ANON">ANON</a>.
@@ -464,7 +455,7 @@
 				    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="#grammar-production-predicateObjectList">predicateObjectList</a> production embedded in a blankNodePropertyList.
 				    The generation of these triples is described in <a href="#predicate-lists">Predicate  Lists</a>.
-				    Blank nodes are also allocated for <a href="#collections">Collections in Turtle</a> (below).
+				    Blank nodes are also allocated for <a href="#collections">collections</a> described below.
 				  </p>
 				  <pre class="example"><script type="text/turtle">@prefix foaf: <http://xmlns.com/foaf/0.1/> .
 
@@ -501,13 +492,11 @@
 _:b <http://xmlns.com/foaf/0.1/mbox> <bob@example.com> .
 				</script></pre>
 			        </div>
-				<div style="clear:both;"/>
+				<div style="clear:both;"></div>
 
 				</section>
-			</section>
-		      </section>
 				<section id="collections">
-				<h3>Collections in Turtle</h3>
+				<h3>Collections</h3>
 
 				<p>
 				  RDF provides a <a href="http://www.w3.org/TR/rdf-mt/#collections">Collection</a> [[RDF-MT]] structure for lists of RDF nodes.
@@ -530,7 +519,120 @@
 				</script></pre>
 
 			</section>
-		</section>
+	</section>
+	        <section id="sec-examples" class="informative">
+        <h2>Examples</h2>
+
+          <p>This example is a Turtle translation of 
+          <a href="http://www.w3.org/TR/rdf-syntax-grammar/#example7">example 7</a>
+          in the
+          <a href="http://www.w3.org/TR/rdf-syntax-grammar/">RDF/XML Syntax specification</a>
+          (<a href="examples/example1.ttl">example1.ttl</a>):
+          </p>
+
+          <div data-include="examples/example1.ttl" data-oninclude="updateExample"></div>
+
+
+          <p>An example of an RDF collection of two literals.</p>
+          <pre class="example"><script type="text/turtle">
+@prefix : <http://example.org/stuff/1.0/> .
+:a :b ( "apple" "banana" ) .
+          </script></pre>
+          <p>which is short for (<a href="examples/example2.ttl">example2.ttl</a>):</p>
+
+          <div data-include="examples/example2.ttl" data-oninclude="updateExample"></div>
+
+          <p>An example of two identical triples containing literal objects
+          containing newlines, written in plain and long literal forms.
+          Assumes that line feeds in this document are #xA.
+          (<a href="examples/example3.ttl">example3.ttl</a>):</p>
+
+          <div data-include="examples/example3.ttl" data-oninclude="updateExample"></div>
+
+          <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>
+
+          <pre class="example untested"><script type="text/turtle">@prefix : <http://example.org/stuff/1.0/> .
+(1 2.0 3E1) :p "w" .</script></pre>
+
+          <p>is syntactic sugar for (noting that the blank nodes <code>b0</code>, <code>b1</code> and <code>b2</code> do not occur anywhere else in the RDF graph):</p>
+
+<pre class="example untested"><script type="text/turtle">@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+    _:b0  rdf:first  1 ;
+          rdf:rest   _:b1 .
+    _:b1  rdf:first  2.0 ;
+          rdf:rest   _:b2 .
+    _:b2  rdf:first  3E1 ;
+          rdf:rest   rdf:nil .
+    _:b0  :p         "w" . </script></pre>
+
+          <p>RDF collections can be nested and can involve other syntactic forms:</p>
+
+          <pre class="example untested"><script type="text/turtle">@prefix : <http://example.org/stuff/1.0/> .
+(1 [:p :q] ( 2 ) ) .</script></pre>
+
+          <p>is syntactic sugar for:</p><pre class="example untested"><script type="text/turtle">@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+    _:b0  rdf:first  1 ;
+          rdf:rest   _:b1 .
+    _:b1  rdf:first  _:b2 .
+    _:b2  :p         :q .
+    _:b1  rdf:rest   _:b3 .
+    _:b3  rdf:first  _:b4 .
+    _:b4  rdf:first  2 ;
+          rdf:rest   rdf:nil .
+    _:b3  rdf:rest   rdf:nil .</script></pre>
+        </section>        
+
+      <section  id="sec-diff-sparql" class="informative">
+      <h3>Turtle compared to SPARQL</h3>
+
+      <p>The <a href="http://www.w3.org/TR/sparql11-query/">SPARQL Query Language for RDF</a> (<abbr title="SPARQL Protocol And RDF Query Language">SPARQL</abbr>) [[RDF-SPARQL-QUERY]] uses a Turtle style syntax for its <a href="http://www.w3.org/TR/sparql11-query/#rTriplesBlock">TriplesBlock production</a>.
+      This production differs from the Turtle language in that:
+      </p>
+
+      <ol>
+    <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="#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>
+
+      </ol>
+
+      <p>For further information see the
+      <a href="http://www.w3.org/TR/sparql11-query/#QSynIRI">Syntax for IRIs</a>
+      and <a href="http://www.w3.org/TR/sparql11-query/#grammar">SPARQL Grammar</a>
+      sections of the SPARQL query document [[RDF-SPARQL-QUERY]].
+      </p>
+      </section>
+        <section id="conformance">
+        	<p>This specification defines conformance criteria for:</p>
+        			<ul>
+        				<li>Turtle documents
+    					<li>Turtle parsers
+					</ul>
+			<p>A conforming <strong>Turtle document</strong> is a Unicode string that conforms to the grammar and additional constraints defined in <a href="#sec-grammar" class="sectionRef"></a>, starting with the <a href="#grammar-production-turtleDoc"><code>turtleDoc</code> production</a>. A Turtle document serializes an RDF graph.</p>
+
+			<p>A conforming <strong>Turtle parser</strong> is a system capable of reading Turtle documents on behalf of an application. It makes the serialized RDF graph, as defined in <a href="#sec-parsing" class="sectionRef"></a>, available to the application, usually through some form of API.</p>
+
+			<p>The IRI that identifies the Turtle language is: <code>http://www.w3.org/ns/formats/Turtle</code></p>          
+
+			<p class="note">This specification does not define how Turtle parsers handle non-conforming input documents.</p>
+	        <section id="sec-mime">
+	          <h2>Media Type and Content Encoding</h2>
+	          
+	          <p>The media type of Turtle is <code>text/turtle</code>.
+	          The content encoding of Turtle content is always UTF-8. Charset 
+	          parameters on the mime type are required until such time as the 
+	          <code>text/</code> media type tree permits UTF-8 to be sent without a 
+	          charset parameter. See <a href="#sec-mediaReg" class="sectionRef"></a> for the media type 
+	          registration form.
+	          </p>
+	        </section>
+        </section>
+
         <section id="sec-grammar">
           <h2>Turtle Grammar</h2>
 
@@ -544,7 +646,7 @@
             <h3>White Space</h3>
 			<p>White space (production <a href="#grammar-production-WS">WS</a>) is used to separate two terminals which would otherwise be (mis-)recognized as one terminal. Rule names below in capitals indicate where white space is significant; these form a possible choice of terminals for constructing a Turtle parser.</p>
 
-			<p>White space is significant in terminal <a href="#grammar-production-IRIREF">IRIREF</a> and the production <a href="#grammar-production-String">String</a>.</p>
+			<p>White space is significant in the production <a href="#grammar-production-String">String</a>.</p>
           </section>
           <section id="sec-grammar-comments">
             <h3>Comments</h3>
@@ -557,6 +659,22 @@
 
             </p>
           </section>
+          <section id="sec-iri-references">
+          	<h3>IRI References</h3>
+  					<p>
+					  Relative IRIs are resolved with base IRIs as per <a href="http://www.ietf.org/rfc/rfc3986.txt" class="norm">Uniform Resource Identifier (URI): Generic Syntax</a> [<a href="#rfc3986">RFC3986</a>] using only the basic algorithm in section 5.2.
+					  Neither Syntax-Based Normalization nor Scheme-Based Normalization (described in sections 6.2.2 and 6.2.3 of RFC3986) are performed.
+					  Characters additionally allowed in IRI references are treated in the same way that unreserved characters are treated in URI references, per section 6.5 of <a href="http://www.ietf.org/rfc/rfc3987.txt" class="norm">Internationalized Resource Identifiers (IRIs)</a> [<a href="#rfc3987">RFC3987</a>].
+					</p>
+					<p>
+					  The <code>@base</code> directive defines the Base IRI used to resolve relative IRIs per RFC3986 section 5.1.1, "Base URI Embedded in Content".
+					  Section 5.1.2, "Base URI from the Encapsulating Entity" defines how the In-Scope Base IRI may come from an encapsulating document, such as a SOAP envelope with an xml:base directive or a mime multipart document with a Content-Location header.
+					  The "Retrieval URI" identified in 5.1.3, Base "URI from the Retrieval URI", is the URL from which a particular Turtle document was retrieved.
+					  If none of the above specifies the Base URI, the default Base URI (section 5.1.4, "Default Base URI") is used.
+					  Each <code>@base</code> directive sets a new In-Scope Base URI, relative to the previous one.
+					</p>
+			</section>
+
           <section id="sec-escapes">
             <h3>Escape Sequences</h3>
 
@@ -676,7 +794,8 @@
 
 	    </ul>
 
-	    <table id="term2escape" class="separated" style="border-collapse:collapse;">
+	    <table id="term2escape" class="separated">
+		  <caption>Context where each kind of escape sequence can be used</caption>
 	      <thead>
 		<tr>
 		  <th></th>
@@ -706,13 +825,20 @@
 		</tr>
 	      </tbody>
 	    </table>
-	    <p class="note">%-encoded sequences are in the <a href="#grammar-production-IRI_REF">character range for IRIs</a> and are <a href="#grammar-production-PERCENT">explicitly allowed</a> in local names. These appear as a '%' followed by two hex characters and represent that same sequence of three characters. These sequences are <em>not</em> decoded during processing. A term written as <code>&lt;http://a.example/%66oo-bar&gt;</code> in Turtle designates the IRI <code>http://a.example/%66oo-bar</code> and not IRI <code>http://a.example/foo-bar</code>. A term written as <code>ex:%66oo-bar</code> with a prefix <code>@prefix ex: &lt;http://a.example/&gt;</code> also designates the IRI <code>http://a.example/%66oo-bar</code>.</p>
+	    <p class="note">%-encoded sequences are in the <a href="#grammar-production-IRIREF">character range for IRIs</a> and are <a href="#grammar-production-PERCENT">explicitly allowed</a> in local names. These appear as a '%' followed by two hex characters and represent that same sequence of three characters. These sequences are <em>not</em> decoded during processing. A term written as <code>&lt;http://a.example/%66oo-bar&gt;</code> in Turtle designates the IRI <code>http://a.example/%66oo-bar</code> and not IRI <code>http://a.example/foo-bar</code>. A term written as <code>ex:%66oo-bar</code> with a prefix <code>@prefix ex: &lt;http://a.example/&gt;</code> also designates the IRI <code>http://a.example/%66oo-bar</code>.</p>
 
           </section>
           <section id="sec-grammar-grammar">
           <h3>Grammar</h3>
+            <div class="atrisk">
+            	<p>The RDF Working Group proposes to make the following changes to align Turtle with SPARQL.</p>
+            	<ul>
+            	<li>The addition of <a href="#grammar-production-sparqlPrefix">sparqlPrefix</a> and <a href="#grammar-production-sparqlBase">sparqlBase</a> which allow for using SPARQL style <code>BASE</code> and <code>PREFIX</code> directives in a Turtle document.
+            	</ul>
+            	<p>Feedback, both positive and negative, is invited by sending email to mailing list <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>).</p>
+            </div>
             <p>The <abbr title="Extended Backus–Naur Form">EBNF</abbr> used here is defined in XML 1.0
-            [[!EBNF-NOTATION]]. Production labels consisting of a number and a final 's', e.g. [<a href="http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115/#rRDFLiteral"><span class="prodNo">60s</span></a>], reference the production with that number in the <a href="http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115/#sparqlGrammar">SPARQL Query Language for RDF grammar</a> [[RDF-SPARQL-QUERY]].
+            [[!EBNF-NOTATION]]. Production labels consisting of a number and a final 's', e.g. [<a href="http://www.w3.org/TR/sparql11-query/#rRDFLiteral"><span class="prodNo">60s</span></a>], reference the production with that number in the <a href="http://www.w3.org/TR/sparql11-query/#sparqlGrammar">SPARQL Query Language for RDF grammar</a> [[RDF-SPARQL-QUERY]]. When tokenizing the input and choosing grammar rules, the longest match is chosen. The strings <a href="#grammar-production-prefixID"><code>@prefix</code></a> and <a href="#grammar-production-base"><code>@base</code></a> match the pattern for <a href="#grammar-production-LANGTAG">LANGTAG</a>, though neither "prefix" nor "base" are <a href="http://www.iana.org/assignments/language-subtag-registry">registered language tags</a>. This specification does not define whether a quoted literal followed by either of these tokens (e.g. <code>"A"@base</code>) is in the Turtle language.
             </p>
             <div data-include="turtle-bnf.html">
             </div>
@@ -729,20 +855,18 @@
           Literals are composed of a <a href="../rdf-concepts/index.html#dfn-lexical-form">lexical form</a> and an optional <a href="../rdf-concepts/index.html#dfn-language-identifier">language tag</a> or datatype IRI.
           An extra type, <code id="prefix" class="dfn">prefix</code>, is used during parsing to map string identifiers to namespace IRIs.
 
-          <!-- The Turtle grammar uses the same productions and terminals to create these terms as does <a href="http://www.w3.org/TR/rdf-sparql-query/#grammar">SPARQL</a>. --><!-- This set is listed in <a href="http://www.w3.org/TR/rdf-sparql-query/#docTerminology">SPARQL §1.2.4</a>. -->
-
-          This section maps a string conforming to the grammar in <a href="#sec-grammar-grammar">section 4.4</a> to a set of triples by mapping strings matching productions and lexical tokens to RDF terms or their components (e.g. language tags, lexical forms of literals). Some productions change the parser state (base or prefix declarations).</p>
+          This section maps a string conforming to the grammar in <a href="#sec-grammar-grammar" class="sectionRef"></a> to a set of triples by mapping strings matching productions and lexical tokens to RDF terms or their components (e.g. language tags, lexical forms of literals). Grammar productions change the parser state and emit triples.</p>
           <section id="sec-parsing-state">
           <h3>Parser State</h3>
 
-              <p>Parsing Turtle requires a state of four items:</p>
+              <p>Parsing Turtle requires a state of five items:</p>
 
               <ul>
-                <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="baseURI">IRI <code class="dfn">baseURI</code> — When the <a href="#grammar-production-base">base production</a> is reached, the second rule argument, <code>IRIREF</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> -&gt; 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="namespaces">Map[<a class="type prefix" href="#prefix">prefix</a> -&gt; IRI] <code class="dfn">namespaces</code> — The second and third rule arguments (<code>PNAME_NS</code> and <code>IRIREF</code>) in the <a href="#grammar-production-prefixID">prefixID production</a> assign a namespace name (<code>IRIREF</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> -&gt; <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="bnodeLabels">Map[<a class="type string">string</a> -&gt; <a href="../rdf-concepts/index.html#dfn-blank-node">blank node</a>] <code class="dfn">bnodeLabels</code> — A mapping from string to blank node.</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="#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>
@@ -752,22 +876,22 @@
           <section  id="sec-parsing-terms">
           <h3>RDF Term Constructors</h3>
 
-              <p>This table maps productions and lexical tokens to <code>RDF terms</code> or components of <code>RDF terms</code> listed in <a href="#sec-parsing">section 5</a>:</p>
+              <p>This table maps productions and lexical tokens to <code>RDF terms</code> or components of <code>RDF terms</code> listed in <a href="#sec-parsing" class="sectionRef"></a>:</p>
 
-              <table>
+              <table class="separated">
                 <thead>
               <tr>                                  <th>                                                                       production               </th><th>                                                                                       type            </th><th>procedure</th></tr>
                 </thead>
                 <tbody>
-              <tr id="handle-IRIREF"              ><td><a class="type IRI"         href="#grammar-production-IRIREF"              >IRIREF              </a></td><td><a href="../rdf-concepts/index.html#dfn-iri">      IRI         </a></td><td>The characters between "&lt;" and "&gt;" are <a href="#unescape">unescaped¹</a> to form the unicode string of the IRI. Relative IRI resolution is performed per <a href="http://www.w3.org/TR/rdf-sparql-query/#QSynIRI">SPARQL Query section 4.1.1</a>.</td></tr>
+              <tr id="handle-IRIREF"              ><td><a class="type IRI"         href="#grammar-production-IRIREF"              >IRIREF              </a></td><td><a href="../rdf-concepts/index.html#dfn-iri">      IRI         </a></td><td>The characters between "&lt;" and "&gt;" are <a href="#unescape">unescaped¹</a> to form the unicode string of the IRI. Relative IRI resolution is performed per <a href="#sec-iri-references" class="sectionRef"></a>.</td></tr>
               <tr id="handle-PNAME_NS"             ><td><a class="type string"      href="#grammar-production-PNAME_NS"             >PNAME_NS             </a></td><td><a href="#prefix">                                                                     prefix      </a></td><td>The potentially empty unicode string matching the first argument of the rule is a key into the <a href="#namespaces">namespaces map</a>.</td></tr>
-              <tr id="handle-PNAME_LN"             ><td><a class="type IRI"         href="#grammar-production-PNAME_LN"             >PNAME_LN             </a></td><td><a href="../rdf-concepts/index.html#dfn-iri">      IRI         </a></td><td>A <a href="#prefix">prefix</a> is identified by the first argument, <code>PNAME_NS</code>. The <a href="#namespaces">namespaces map</a> has a corresponding <code>namespace</code>. The unicode string of the IRI is formed by concatenating this <code>namespace</code> and the second argument, <code>PN_LOCAL</code>. Relative IRI resolution is performed per <a href="http://www.w3.org/TR/rdf-sparql-query/#QSynIRI">SPARQL Query section 4.1.1</a>.</td></tr>
+              <tr id="handle-PNAME_LN"             ><td><a class="type IRI"         href="#grammar-production-PNAME_LN"             >PNAME_LN             </a></td><td><a href="../rdf-concepts/index.html#dfn-iri">      IRI         </a></td><td>A <a href="#prefix">prefix</a> is identified by the first argument, <code>PNAME_NS</code>. The <a href="#namespaces">namespaces map</a> has a corresponding <code>namespace</code>. The unicode string of the IRI is formed by concatenating this <code>namespace</code> and the second argument, <code>PN_LOCAL</code>.</td></tr>
               <tr id="handle-STRING_LITERAL1"      ><td><a class="type lexicalForm" href="#grammar-production-STRING_LITERAL1"      >STRING_LITERAL1      </a></td><td><a href="../rdf-concepts/index.html#dfn-lexical-form">                         lexical form</a></td><td>The characters between the outermost "'"s are <a href="#unescape">unescaped¹</a> to form the unicode string of a lexical form.</td></tr>
               <tr id="handle-STRING_LITERAL2"      ><td><a class="type lexicalForm" href="#grammar-production-STRING_LITERAL2"      >STRING_LITERAL2      </a></td><td><a href="../rdf-concepts/index.html#dfn-lexical-form">                         lexical form</a></td><td>The characters between the outermost '"'s are <a href="#unescape">unescaped¹</a> to form the unicode string of a lexical form.</td></tr>
               <tr id="handle-STRING_LITERAL_LONG1" ><td><a class="type lexicalForm" href="#grammar-production-STRING_LITERAL_LONG1" >STRING_LITERAL_LONG1 </a></td><td><a href="../rdf-concepts/index.html#dfn-lexical-form">                         lexical form</a></td><td>The characters between the outermost "'''"s are <a href="#unescape">unescaped¹</a> to form the unicode string of a lexical form.</td></tr>
               <tr id="handle-STRING_LITERAL_LONG2" ><td><a class="type lexicalForm" href="#grammar-production-STRING_LITERAL_LONG2" >STRING_LITERAL_LONG2 </a></td><td><a href="../rdf-concepts/index.html#dfn-lexical-form">                         lexical form</a></td><td>The characters between the outermost '"""'s are <a href="#unescape">unescaped¹</a> to form the unicode string of a lexical form.</td></tr>
               <tr id="handle-LANGTAG"              ><td><a class="type langTag"     href="#grammar-production-LANGTAG"              >LANGTAG              </a></td><td><a href="../rdf-concepts/index.html#dfn-language-identifier">language tag</a></td><td>The characters following the "@" form the unicode string of the language tag.</td></tr>
-              <tr id="handle-RDFLiteral"           ><td><a class="type literal"     href="#grammar-production-RDFLiteral"           >RDFLiteral           </a></td><td><a href="../rdf-concepts/index.html#dfn-literal">            literal     </a></td><td>The literal has a lexical form of the first rule argument (<code>String</code>) and either a language tag of <code>LANGTAG</code> or a datatype IRI of <code>IRIref</code>, depending on which rule matched the input.</td></tr>
+              <tr id="handle-RDFLiteral"           ><td><a class="type literal"     href="#grammar-production-RDFLiteral"           >RDFLiteral           </a></td><td><a href="../rdf-concepts/index.html#dfn-literal">            literal     </a></td><td>The literal has a lexical form of the first rule argument (<code>String</code>) and either a language tag of <code>LANGTAG</code> or a datatype IRI of <code>iri</code>, depending on which rule matched the input. if neither a language tag nor a datatype IRI is provided, the literal has a datatype of xsd:string.</td></tr>
               <tr id="handle-INTEGER"              ><td><a class="type integer"     href="#grammar-production-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="#grammar-production-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="#grammar-production-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>
@@ -779,7 +903,7 @@
                 </tbody>
               </table>
 
-              <p><a id="unescape">¹</a> <a href="#sec-escapes">Escape Sequences</a> defines a mapping from <code>escaped unicode strings</code> to <code>unicode strings</code>. The following lexical tokens are unescaped to produce <code>unicode strings</code>: <a class="type IRI" href="#grammar-production-IRI_REF">IRI_REF</a>, <!-- <a class="type PNAME_NS" href="#grammar-production-PNAME_NS">PNAME_NS</a>, --><!-- <a class="type IRI"          href="#grammar-production-PNAME_LN">PNAME_LN</a>, --><a class="type lexicalForm"  href="#grammar-production-STRING_LITERAL1">STRING_LITERAL1</a>, <a class="type lexicalForm"  href="#grammar-production-STRING_LITERAL2">STRING_LITERAL2</a>, <a class="type lexicalForm"  href="#grammar-production-STRING_LITERAL_LONG1">STRING_LITERAL_LONG1</a> and <a class="type lexicalForm"  href="#grammar-production-STRING_LITERAL_LONG2">STRING_LITERAL_LONG2</a><!-- and <a class="type langTag"      href="#grammar-production-LANGTAG">LANGTAG</a> --><!-- and <a class="type bNode"        href="#grammar-production-BLANK_NODE_LABEL">BLANK_NODE_LABEL</a> -->.</p>
+              <p><a id="unescape">¹</a> <a href="#sec-escapes" class="sectionRef">Escape Sequences</a> defines a mapping from <code>escaped unicode strings</code> to <code>unicode strings</code>. The following lexical tokens are unescaped to produce <code>unicode strings</code>: <a class="type IRI" href="#grammar-production-IRIREF">IRIREF</a>, <!-- <a class="type PNAME_NS" href="#grammar-production-PNAME_NS">PNAME_NS</a>, --><!-- <a class="type IRI"          href="#grammar-production-PNAME_LN">PNAME_LN</a>, --><a class="type lexicalForm"  href="#grammar-production-STRING_LITERAL1">STRING_LITERAL1</a>, <a class="type lexicalForm"  href="#grammar-production-STRING_LITERAL2">STRING_LITERAL2</a>, <a class="type lexicalForm"  href="#grammar-production-STRING_LITERAL_LONG1">STRING_LITERAL_LONG1</a> and <a class="type lexicalForm"  href="#grammar-production-STRING_LITERAL_LONG2">STRING_LITERAL_LONG2</a><!-- and <a class="type langTag"      href="#grammar-production-LANGTAG">LANGTAG</a> --><!-- and <a class="type bNode"        href="#grammar-production-BLANK_NODE_LABEL">BLANK_NODE_LABEL</a> -->.</p>
           </section>
           <section id="sec-parsing-triples">
           <h3>RDF Triples Constructors</h3>
@@ -797,7 +921,7 @@
 
           <p>
           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>.
+          Each object <code>object</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="#grammar-production-collection">collection</a></code> is the blank node <code>B<sub>head</sub></code>.
@@ -840,102 +964,8 @@
               </ul>
           </section>
         </section>
-        <section id="sec-examples" class="informative">
-        <h2>Examples</h2>
-
-          <p>This example is a Turtle translation of 
-          <a href="http://www.w3.org/TR/rdf-syntax-grammar/#example7">example 7</a>
-          in the
-          <a href="http://www.w3.org/TR/rdf-syntax-grammar/">RDF/XML Syntax specification</a>
-          (<a href="examples/example1.ttl">example1.ttl</a>):
-          </p>
-
-          <div data-include="examples/example1.ttl" data-oninclude="updateExample"></div>
-
-
-          <p>An example of an RDF collection of two literals.</p>
-          <pre class="example"><script type="text/turtle">
-@prefix : <http://example.org/stuff/1.0/> .
-:a :b ( "apple" "banana" ) .
-          </script></pre>
-          <p>which is short for (<a href="examples/example2.ttl">example2.ttl</a>):</p>
-
-          <div data-include="examples/example2.ttl" data-oninclude="updateExample"></div>
-
-          <p>An example of two identical triples containing literal objects
-          containing newlines, written in plain and long literal forms.
-          Assumes that line feeds in this document are #xA.
-          (<a href="examples/example3.ttl">example3.ttl</a>):</p>
-
-          <div data-include="examples/example3.ttl" data-oninclude="updateExample"></div>
-
-          <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>
-
-          <pre class="example untested"><script type="text/turtle">@prefix : <http://example.org/stuff/1.0/> .
-(1 2.0 3E1) :p "w" .</script></pre>
-
-          <p>is syntactic sugar for (noting that the blank nodes <code>b0</code>, <code>b1</code> and <code>b2</code> do not occur anywhere else in the RDF graph):</p>
-
-<pre class="example untested"><script type="text/turtle">@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-    _:b0  rdf:first  1 ;
-          rdf:rest   _:b1 .
-    _:b1  rdf:first  2.0 ;
-          rdf:rest   _:b2 .
-    _:b2  rdf:first  3E1 ;
-          rdf:rest   rdf:nil .
-    _:b0  :p         "w" . </script></pre>
-
-          <p>RDF collections can be nested and can involve other syntactic forms:</p>
-
-          <pre class="example untested">@prefix : <http://example.org/stuff/1.0/> .
-(1 [:p :q] ( 2 ) ) .</pre>
-
-          <p>is syntactic sugar for:</p><pre class="example untested"><script type="text/turtle">@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-    _:b0  rdf:first  1 ;
-          rdf:rest   _:b1 .
-    _:b1  rdf:first  _:b2 .
-    _:b2  :p         :q .
-    _:b1  rdf:rest   _:b3 .
-    _:b3  rdf:first  _:b4 .
-    _:b4  rdf:first  2 ;
-          rdf:rest   rdf:nil .
-    _:b3  rdf:rest   rdf:nil .</script></pre>
-        </section>
-        <section id="sec-identifiers">
-          <h2>Identifiers for the Turtle Language</h2>
-          <p>The IRI that identifies the Turtle language is:<br />
-          <code>http://www.w3.org/ns/formats/Turtle</code>
-          </p>          
-        </section>
-        <section id="conformance">
-        	<p>This specification defines conformance criteria for:</p>
-        			<ul>
-        				<li>Turtle documents
-    					<li>Turtle parsers
-					</ul>
-			<p>A conforming <strong>Turtle document</strong> is a Unicode string that conforms to the grammar and additional constraints defined in <a href="#sec-grammar">Turtle Grammar</a>, starting with the <a href="#grammar-production-turtleDoc"><code>turtleDoc</code> production</a>. A Turtle document serializes an RDF graph.</p>
-
-			<p>A conforming <strong>Turtle parser</strong> is a system capable of reading Turtle documents on behalf of an application. It makes the serialized RDF graph, as defined in <a href="#sec-parsing">Parsing</a>, available to the application, usually through some form of API.</p>
-
-			<p class="note">This specification does not define how Turtle parsers handle non-conforming input documents.</p>
-        </section>
-        <section id="sec-mime">
-          <h2>Media Type and Content Encoding</h2>
-          
-          <p>The media type of Turtle is <code>text/turtle</code>.
-          The content encoding of Turtle content is always UTF-8. Charset 
-          parameters on the mime type are required until such time as the 
-          <code>text/</code> media type tree permits UTF-8 to be sent without a 
-          charset parameter. See <a href="#sec-mediaReg">B. Internet Media 
-          Type, File Extension and Macintosh File Type</a> for the media type 
-          registration form.
-          </p>
-        </section>
-        
-      <section id="in-html" class="informative">
-        <h2>Turtle in HTML</h2>
+      <section id="in-html" class="appendix informative">
+        <h2>Embedding Turtle in HTML documents</h2>
         <p>HTML ([[!HTML5]]) <code>script</code> <a href="http://dev.w3.org/html5/spec/Overview.html#scripting-1">tags</a> 
         can be used to embed data blocks in documents. Turtle can be easily embedded in HTML this way.</p>
         <pre class="example">&lt;script type="text/turtle">
@@ -958,11 +988,11 @@
         <p>Turtle content should be placed in a <code>script</code> tag with the 
         <code>type</code> attribute set to <code>text/turtle</code>. <code>&lt;</code> and <code>&gt;</code> symbols
         do not need to be escaped inside of script tags. The character encoding of the embedded Turtle
-        MUST match the HTML documents encoding.</p>
+        will match the HTML documents encoding.</p>
         <section class="informative">
           <h3>XHTML</h3>
           <p>
-          Like JavaScript, Turtle authored for HTML (<code>text/html</code>) can break when used in an XHTML 
+          Like JavaScript, Turtle authored for HTML (<code>text/html</code>) can break when used in XHTML 
           (<code>application/xhtml+xml</code>). The solution is the same one used for JavaScript.
           </p>
         <pre class="example">&lt;script type="text/turtle">
@@ -973,109 +1003,19 @@
 <strong># ]]></strong>
 &lt;/script>
         </pre>
-          <p>When embedded in XHTML Turtle data blocks MUST be enclosed in CDATA sections. Those CDATA markers MUST be in Turtle comments. If the character sequence "<code>]]></code>" occurs in the document it MUST be escaped using strings escapes (<code>\u005d\u0054\u003e</code>). This will also make Turtle safe in polyglot documents served as both <code>text/html</code>
-          and <code>application/xhtml+xml</code>.</p>
-        </section>
-        <section class="informative">
-          <h3>Displaying Examples</h3>
-          <p>
-          It is possible to display the contents of script tags containing Turtle for use in examples or other guides
-          using Cascading Style Sheets Selectors Level 3 ([[SELECT]]).
-          </p>
-<pre class="example">script[type='text/turtle'] {
-  display:block;
-  white-space: pre;
-  font-family: monospace;
-}
-</pre>
-		  <p>
-          However, this creates issues with polyglot documents. If you wish to display Turtle from script tags you 
-          SHOULD only use <code>text/html</code>.
-          </p>
+          <p>When embedded in XHTML Turtle data blocks must be enclosed in CDATA sections. Those CDATA markers must be in Turtle comments. If the character sequence "<code>]]></code>" occurs in the document it must be escaped using strings escapes (<code>\u005d\u0054\u003e</code>). This will also make Turtle safe in polyglot documents served as both <code>text/html</code>
+          and <code>application/xhtml+xml</code>. Failing to use CDATA sections or escape "<code>]]></code>" may result in a non well-formed XML document.</p>
         </section>
         <section id="in-html-parsing" class="informative">
           <h3>Parsing Turtle in HTML</h3>
           <p>There are no syntactic or grammar differences between parsing Turtle that has been embedded 
-          and normal Turtle documents. Each <code>script</code> data block is considered to be it's own 
-          Turtle document. <code>@prefix</code>, <code>@base</code> declarations MUST NOT effect other
-          data blocks. All Turtle data blocks in a HTML document share the same document base URI as the HTML 
-          document. THe HTML <code>lang</code> attribute or XHTML <code>xml:lang</code> attribute have
-          no effect on the parsing of the data blocks.</p>
-        </section>
-      </section>
-
-      <section id="sec-compared">
-        <h2>Turtle compared</h2>
-        <p>Turtle is related to a number of other languages.</p>
-      <section id="sec-diff-n3" class="informative">
-        <h3>Turtle compared to Notation 3</h3>
-
-        <p>Turtle is similar to and inspired by Notation 3 (<abbr title="Notation 3">N3</abbr>).
-	Please see the most recent Notation3 specification for comparison with Turtle.</p>
-<!-- 
-        While the syntax played a role in the creation of Turtle
-        they are not strictly compatible. There are a number of differences in 
-        escaping, encoding and structure. N3 triples are a superset of RDF triples. 
-        In particular, N3 formulae (graphs) may be the subject or object of N3 triples.
-        For example here, the formula with <code>_:Bob a foaf:Person</code> is the object of another arc:</p>
-        <pre>_:Bob ex:said { _:Bob a foaf:Person } .</pre> 
-        
-        <p>In addition, Literals are allowed in the subject position. For example:</p>
-        <pre>"Bob" ex:said "Hi Bob" .</pre>
-
-        <p>Following is a partial list of syntactic features in N3 which are not in Turtle:</p>
-
-        <ol>
-          <li><code>{</code> ... <code>}</code></li>
-          <li><code>is</code> <code>of</code></li>
-
-          <li>paths like <code>:a.:b.:c</code> and <code>:a^:b^:c</code></li>
-          <li><code>@keywords</code></li>
-          <li><code>=&gt;</code> implies</li>
-          <li><code>=</code>  equivalence</li>
+          and normal Turtle documents. A Turtle document parsed from an HTML DOM will be a stream of character data rather than a stream of UTF-8 encoded bytes. No decoding is necessary if the HTML document has already been parsed into DOM. Each <code>script</code> data block is considered to be it's own Turtle document. <code>@prefix</code> and <code>@base</code> declarations in a Turtle data bloc are scoped to that data block and do not effect other data blocks.
+The HTML <code>lang</code> attribute or XHTML <code>xml:lang</code> attribute have no effect on the parsing of the data blocks.
+The base URI of the encapsulating HTML document provides a "Base URI Embedded in Content" per RFC3986 section 5.1.1.
 
-          <li><code>@forAll</code></li>
-          <li><code>@forSome</code></li>
-          <li>&lt;=</li>
-        </ol>
--->
-      </section>
-      <section id="sec-diff-rdfxml" class="informative">
-        <h3>Turtle compared to RDF/XML</h3>
-        <p>
-            <a href="http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/">RDF/XML</a>
-            ([[RDF-SYNTAX-GRAMMAR]])
-            has certain restrictions imposed by XML and the use of XML Namespaces
-            that prevent it encoding all RDF graphs (some predicate URIs are
-            forbidden and XML 1.0 forbids encoding some Unicode codepoints).
-            These restrictions do not apply to Turtle.</p>
-      </section>
-      <section  id="sec-diff-sparql" class="informative">
-      <h3>Turtle compared to SPARQL</h3>
 
-      <p>The <a href="http://www.w3.org/TR/sparql11-query/">SPARQL Query Language for RDF</a> (<abbr title="SPARQL Protocol And RDF Query Language">SPARQL</abbr>) [[RDF-SPARQL-QUERY]] uses a Turtle style syntax for its <a href="http://www.w3.org/TR/sparql11-query/#rTriplesBlock">TriplesBlock production</a>.
-      This production differs from the Turtle language in that:
-      </p>
-
-      <ol>
-    <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="#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>
-
-      </ol>
-
-      <p>For further information see the
-      <a href="http://www.w3.org/TR/sparql11-query/#QSynIRI">Syntax for IRIs</a>
-      and <a href="http://www.w3.org/TR/sparql11-query/#grammar">SPARQL Grammar</a>
-      sections of the SPARQL query document [[RDF-SPARQL-QUERY]].
-      </p>
-      </section>
-      
-      </section>
-      
+        </section>
+      </section>      
       <section id="sec-mediaReg" class="appendix">
         <h2>Internet Media Type, File Extension and Macintosh File Type</h2>
         <dl>
@@ -1104,7 +1044,7 @@
 
           <dt>Encoding considerations:</dt>
           <dd>The syntax of Turtle is expressed over code points in Unicode [[!UNICODE]]. The encoding is always UTF-8 [[!UTF-8]].</dd>
-          <dd>Unicode code points may also be expressed using an \uXXXX (U+0 to U+FFFF) or \UXXXXXXXX syntax (for U+10000 onwards) where X is a hexadecimal digit [0-9A-F]</dd>
+          <dd>Unicode code points may also be expressed using an \uXXXX (U+0 to U+FFFF) or \UXXXXXXXX syntax (for U+10000 onwards) where X is a hexadecimal digit [0-9A-Fa-f]</dd>
           <dt>Security considerations:</dt>
           <dd>Turtle is a general-purpose assertion language; applications may evaluate given data to infer more assertions or to dereference IRIs, invoking the security considerations of the scheme for that IRI. Note in particular, the privacy issues in [[!RFC3023]] section 10 for HTTP IRIs. Data obtained from an inaccurate or malicious data source may lead to inaccurate or misleading conclusions, as well as the dereferencing of unintended IRIs. Care must be taken to align the trust in consulted resources with the sensitivity of the intended use of the data; inferences of potential medical treatments would likely require different trust than inferences for trip planning.</dd>
 
@@ -1182,9 +1122,21 @@
 
       </section>
       <section id="sec-changelog" class="appendix">
-      <h2>Changes</h2>
+      <h2>Changes since the last publication of this document</h2>
 
-      <p>Changes since the last publication of this document
+      <ul>
+      		<li>Renaming for STRING_* productions to STRING_LITERAL_QUOTE sytle names rather than numbers
+      		<li>Local part of prefix names can now include ":"
+			<li>Turtle in HTML
+			<li>Renaming of grammar tokens and rules around IRIs
+			<li>Reserved character escape sequences
+			<li>String escape sequences limited to strings
+			<li>Numeric escape sequences limited to IRIs and Strings
+			<li>Support top-level blank-predicate-object lists
+			<li>Whitespace required between @prefix and prefix label
+	  </ul>
+
+      <p>Other changes since the Team Submission
       <a href="http://www.w3.org/TeamSubmission/2008/SUBM-turtle-20080114">W3C Turtle Submission 2008-01-14</a>
       .  See the
       <a href="http://www.w3.org/TeamSubmission/2008/SUBM-turtle-20080114#sec-changelog">Previous changelog for further information</a>
@@ -1201,12 +1153,9 @@
 
             <li>digits in the first character of the <a href="http://www.w3.org/TR/rdf-sparql-query/#rPN_LOCAL">PN_LOCAL</a> lexical token, e.g. <code>ex:7tm</code>.</li>
           </ul></li>
-          <li>Made <a href="#sec-syntax">syntax section</a> normative.
-          <ul>
             <li>adopted SPARQL's IRI resolution and prefix substitution text.</li>
 
             <li>explicitly allowed re-use of the same prefix.</li>
-          </ul></li>
           <li>Added <a href="#sec-parsing">parsing rules</a>.</li>
             </ul>
       </section>
--- a/rdf-turtle/turtle-bnf.html	Mon Aug 20 14:56:55 2012 -0400
+++ b/rdf-turtle/turtle-bnf.html	Mon Aug 20 14:57:39 2012 -0400
@@ -1,324 +1,316 @@
 <table  class="grammar">
     <tbody class="grammar-productions">
-            <tr id="grammar-production-turtleDoc" data-grammar-original="[1] turtleDoc ::= (statement)*" data-grammar-expression="(&#x27;*&#x27;, (&#x27;id&#x27;, &#x27;statement&#x27;))" >
-    <td>[1]<td>
-    <td><code>turtleDoc</code><td>
+            <tr id="grammar-production-turtleDoc" data-grammar-original="[1] turtleDoc ::= statement*" data-grammar-expression="(&#x27;*&#x27;, (&#x27;id&#x27;, &#x27;statement&#x27;))" >
+    <td>[1]</td>
+    <td><code>turtleDoc</code></td>
     <td>::=</td>
-    <td>(<a href='#grammar-production-statement'>statement</a>)<code class='grammar-star'>*</code></td>
-</tr>
-            <tr id="grammar-production-statement" data-grammar-original="[2] statement ::= directive &quot;.&quot;| triples &quot;.&quot;" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;directive&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;)]), (&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;triples&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;)])])" >
-    <td>[2]<td>
-    <td><code>statement</code><td>
-    <td>::=</td>
-    <td>(<a href='#grammar-production-directive'>directive</a> '<code class='grammar-literal'>.</code>') <code>|</code> (<a href='#grammar-production-triples'>triples</a> '<code class='grammar-literal'>.</code>')</td>
-</tr>
-            <tr id="grammar-production-directive" data-grammar-original="[3] directive ::= prefixID| base" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;prefixID&#x27;), (&#x27;id&#x27;, &#x27;base&#x27;)])" >
-    <td>[3]<td>
-    <td><code>directive</code><td>
-    <td>::=</td>
-    <td><a href='#grammar-production-prefixID'>prefixID</a> <code>|</code> <a href='#grammar-production-base'>base</a></td>
+    <td><a href='#grammar-production-statement'>statement</a><code class='grammar-star'>*</code></td>
 </tr>
-            <tr id="grammar-production-prefixID" data-grammar-original="[4] prefixID ::= &#x27;@prefix&#x27; PNAME_NS IRIREF" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;@prefix&#x27;), (&#x27;id&#x27;, &#x27;PNAME_NS&#x27;), (&#x27;id&#x27;, &#x27;IRIREF&#x27;)])" >
-    <td>[4]<td>
-    <td><code>prefixID</code><td>
-    <td>::=</td>
-    <td>'<code class='grammar-literal'>@prefix</code>' <a href='#grammar-production-PNAME_NS'>PNAME_NS</a> <a href='#grammar-production-IRIREF'>IRIREF</a></td>
-</tr>
-            <tr id="grammar-production-base" data-grammar-original="[5] base ::= &#x27;@base&#x27; IRIREF" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;@base&#x27;), (&#x27;id&#x27;, &#x27;IRIREF&#x27;)])" >
-    <td>[5]<td>
-    <td><code>base</code><td>
+            <tr id="grammar-production-statement" data-grammar-original="[2] statement ::= directive| triples &quot;.&quot;" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;directive&#x27;), (&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;triples&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;)])])" >
+    <td>[2]</td>
+    <td><code>statement</code></td>
     <td>::=</td>
-    <td>'<code class='grammar-literal'>@base</code>' <a href='#grammar-production-IRIREF'>IRIREF</a></td>
+    <td><a href='#grammar-production-directive'>directive</a> <code>| </code> <a href='#grammar-production-triples'>triples</a> '<code class='grammar-literal'>.</code>'</td>
 </tr>
-            <tr id="grammar-production-triples" data-grammar-original="[6] triples ::= (subject predicateObjectList) |(blankNodePropertyList predicateObjectList?)" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;subject&#x27;), (&#x27;id&#x27;, &#x27;predicateObjectList&#x27;)]), (&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;blankNodePropertyList&#x27;), (&#x27;?&#x27;, (&#x27;id&#x27;, &#x27;predicateObjectList&#x27;))])])" >
-    <td>[6]<td>
-    <td><code>triples</code><td>
+            <tr id="grammar-production-directive" data-grammar-original="[3] directive ::= prefixID| base | sparqlPrefix | sparqlBase" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;prefixID&#x27;), (&#x27;id&#x27;, &#x27;base&#x27;), (&#x27;id&#x27;, &#x27;sparqlPrefix&#x27;), (&#x27;id&#x27;, &#x27;sparqlBase&#x27;)])" >
+    <td>[3]</td>
+    <td><code>directive</code></td>
     <td>::=</td>
-    <td>(<a href='#grammar-production-subject'>subject</a> <a href='#grammar-production-predicateObjectList'>predicateObjectList</a>) <code>|</code> (<a href='#grammar-production-blankNodePropertyList'>blankNodePropertyList</a> (<a href='#grammar-production-predicateObjectList'>predicateObjectList</a>)?)</td>
+    <td><a href='#grammar-production-prefixID'>prefixID</a> <code>| </code> <a href='#grammar-production-base'>base</a> <code>| </code> <a href='#grammar-production-sparqlPrefix'>sparqlPrefix</a> <code>| </code> <a href='#grammar-production-sparqlBase'>sparqlBase</a></td>
 </tr>
-            <tr id="grammar-production-predicateObjectList" data-grammar-original="[7] predicateObjectList ::= verb objectList ( &quot;;&quot; verb objectList )* (&quot;;&quot;)?" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;verb&#x27;), (&#x27;id&#x27;, &#x27;objectList&#x27;), (&#x27;*&#x27;, (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;;&#x27;), (&#x27;id&#x27;, &#x27;verb&#x27;), (&#x27;id&#x27;, &#x27;objectList&#x27;)])), (&#x27;?&#x27;, (&quot;&#x27;&quot;, &#x27;;&#x27;))])" >
-    <td>[7]<td>
-    <td><code>predicateObjectList</code><td>
+            <tr id="grammar-production-prefixID" data-grammar-original="[4] prefixID ::= &#x27;@prefix&#x27; PNAME_NS IRIREF &quot;.&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;@prefix&#x27;), (&#x27;id&#x27;, &#x27;PNAME_NS&#x27;), (&#x27;id&#x27;, &#x27;IRIREF&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;)])" >
+    <td>[4]</td>
+    <td><code>prefixID</code></td>
     <td>::=</td>
-    <td><a href='#grammar-production-verb'>verb</a> <a href='#grammar-production-objectList'>objectList</a> ('<code class='grammar-literal'>;</code>' <a href='#grammar-production-verb'>verb</a> <a href='#grammar-production-objectList'>objectList</a>)<code class='grammar-star'>*</code> ('<code class='grammar-literal'>;</code>')?</td>
+    <td>'<code class='grammar-literal'>@prefix</code>' <a href='#grammar-production-PNAME_NS'>PNAME_NS</a> <a href='#grammar-production-IRIREF'>IRIREF</a> '<code class='grammar-literal'>.</code>'</td>
+</tr>
+            <tr id="grammar-production-base" data-grammar-original="[5] base ::= &#x27;@base&#x27; IRIREF &quot;.&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;@base&#x27;), (&#x27;id&#x27;, &#x27;IRIREF&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;)])" >
+    <td>[5]</td>
+    <td><code>base</code></td>
+    <td>::=</td>
+    <td>'<code class='grammar-literal'>@base</code>' <a href='#grammar-production-IRIREF'>IRIREF</a> '<code class='grammar-literal'>.</code>'</td>
+</tr>
+            <tr id="grammar-production-sparqlPrefix" data-grammar-original="[28*] sparqlPrefix ::= [Pp][Rr][Ee][Ff][Ii][Xx] PNAME_NS IRIREF" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;[&#x27;, &#x27;Pp&#x27;), (&#x27;[&#x27;, &#x27;Rr&#x27;), (&#x27;[&#x27;, &#x27;Ee&#x27;), (&#x27;[&#x27;, &#x27;Ff&#x27;), (&#x27;[&#x27;, &#x27;Ii&#x27;), (&#x27;[&#x27;, &#x27;Xx&#x27;), (&#x27;id&#x27;, &#x27;PNAME_NS&#x27;), (&#x27;id&#x27;, &#x27;IRIREF&#x27;)])" >
+    <td>[28*]</td>
+    <td><code>sparqlPrefix</code></td>
+    <td>::=</td>
+    <td>[<code class='grammar-chars'>Pp</code>] [<code class='grammar-chars'>Rr</code>] [<code class='grammar-chars'>Ee</code>] [<code class='grammar-chars'>Ff</code>] [<code class='grammar-chars'>Ii</code>] [<code class='grammar-chars'>Xx</code>] <a href='#grammar-production-PNAME_NS'>PNAME_NS</a> <a href='#grammar-production-IRIREF'>IRIREF</a></td>
+</tr>
+            <tr id="grammar-production-sparqlBase" data-grammar-original="[29*] sparqlBase ::= [Bb][Aa][Ss][Ee] IRIREF" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;[&#x27;, &#x27;Bb&#x27;), (&#x27;[&#x27;, &#x27;Aa&#x27;), (&#x27;[&#x27;, &#x27;Ss&#x27;), (&#x27;[&#x27;, &#x27;Ee&#x27;), (&#x27;id&#x27;, &#x27;IRIREF&#x27;)])" >
+    <td>[29*]</td>
+    <td><code>sparqlBase</code></td>
+    <td>::=</td>
+    <td>[<code class='grammar-chars'>Bb</code>] [<code class='grammar-chars'>Aa</code>] [<code class='grammar-chars'>Ss</code>] [<code class='grammar-chars'>Ee</code>] <a href='#grammar-production-IRIREF'>IRIREF</a></td>
+</tr>
+            <tr id="grammar-production-triples" data-grammar-original="[6] triples ::= subject predicateObjectList |blankNodePropertyList predicateObjectList?" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;subject&#x27;), (&#x27;id&#x27;, &#x27;predicateObjectList&#x27;)]), (&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;blankNodePropertyList&#x27;), (&#x27;?&#x27;, (&#x27;id&#x27;, &#x27;predicateObjectList&#x27;))])])" >
+    <td>[6]</td>
+    <td><code>triples</code></td>
+    <td>::=</td>
+    <td><a href='#grammar-production-subject'>subject</a> <a href='#grammar-production-predicateObjectList'>predicateObjectList</a> <code>| </code> <a href='#grammar-production-blankNodePropertyList'>blankNodePropertyList</a> <a href='#grammar-production-predicateObjectList'>predicateObjectList</a>?</td>
+</tr>
+            <tr id="grammar-production-predicateObjectList" data-grammar-original="[7] predicateObjectList ::= verb objectList (&quot;;&quot; (predicateObjectList)?)*" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;verb&#x27;), (&#x27;id&#x27;, &#x27;objectList&#x27;), (&#x27;*&#x27;, (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;;&#x27;), (&#x27;?&#x27;, (&#x27;id&#x27;, &#x27;predicateObjectList&#x27;))]))])" >
+    <td>[7]</td>
+    <td><code>predicateObjectList</code></td>
+    <td>::=</td>
+    <td><a href='#grammar-production-verb'>verb</a> <a href='#grammar-production-objectList'>objectList</a> ('<code class='grammar-literal'>;</code>' <a href='#grammar-production-predicateObjectList'>predicateObjectList</a>?)<code class='grammar-star'>*</code></td>
 </tr>
             <tr id="grammar-production-objectList" data-grammar-original="[8] objectList ::= object ( &quot;,&quot; object )*" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;object&#x27;), (&#x27;*&#x27;, (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;,&#x27;), (&#x27;id&#x27;, &#x27;object&#x27;)]))])" >
-    <td>[8]<td>
-    <td><code>objectList</code><td>
+    <td>[8]</td>
+    <td><code>objectList</code></td>
     <td>::=</td>
     <td><a href='#grammar-production-object'>object</a> ('<code class='grammar-literal'>,</code>' <a href='#grammar-production-object'>object</a>)<code class='grammar-star'>*</code></td>
 </tr>
             <tr id="grammar-production-verb" data-grammar-original="[9] verb ::= predicate| &quot;a&quot;" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;predicate&#x27;), (&quot;&#x27;&quot;, &#x27;a&#x27;)])" >
-    <td>[9]<td>
-    <td><code>verb</code><td>
+    <td>[9]</td>
+    <td><code>verb</code></td>
     <td>::=</td>
-    <td><a href='#grammar-production-predicate'>predicate</a> <code>|</code> '<code class='grammar-literal'>a</code>'</td>
+    <td><a href='#grammar-production-predicate'>predicate</a> <code>| </code> '<code class='grammar-literal'>a</code>'</td>
 </tr>
             <tr id="grammar-production-subject" data-grammar-original="[10] subject ::= iri| blank" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;iri&#x27;), (&#x27;id&#x27;, &#x27;blank&#x27;)])" >
-    <td>[10]<td>
-    <td><code>subject</code><td>
+    <td>[10]</td>
+    <td><code>subject</code></td>
     <td>::=</td>
-    <td><a href='#grammar-production-iri'>iri</a> <code>|</code> <a href='#grammar-production-blank'>blank</a></td>
+    <td><a href='#grammar-production-iri'>iri</a> <code>| </code> <a href='#grammar-production-blank'>blank</a></td>
 </tr>
             <tr id="grammar-production-predicate" data-grammar-original="[11] predicate ::= iri" data-grammar-expression="(&#x27;id&#x27;, &#x27;iri&#x27;)" >
-    <td>[11]<td>
-    <td><code>predicate</code><td>
+    <td>[11]</td>
+    <td><code>predicate</code></td>
     <td>::=</td>
     <td><a href='#grammar-production-iri'>iri</a></td>
 </tr>
-            <tr id="grammar-production-object" data-grammar-original="[12] object ::= iri| blank| literal" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;iri&#x27;), (&#x27;id&#x27;, &#x27;blank&#x27;), (&#x27;id&#x27;, &#x27;literal&#x27;)])" >
-    <td>[12]<td>
-    <td><code>object</code><td>
+            <tr id="grammar-production-object" data-grammar-original="[12] object ::= iri| blank| blankNodePropertyList| literal" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;iri&#x27;), (&#x27;id&#x27;, &#x27;blank&#x27;), (&#x27;id&#x27;, &#x27;blankNodePropertyList&#x27;), (&#x27;id&#x27;, &#x27;literal&#x27;)])" >
+    <td>[12]</td>
+    <td><code>object</code></td>
     <td>::=</td>
-    <td><a href='#grammar-production-iri'>iri</a> <code>|</code> <a href='#grammar-production-blank'>blank</a> <code>|</code> <a href='#grammar-production-literal'>literal</a></td>
+    <td><a href='#grammar-production-iri'>iri</a> <code>| </code> <a href='#grammar-production-blank'>blank</a> <code>| </code> <a href='#grammar-production-blankNodePropertyList'>blankNodePropertyList</a> <code>| </code> <a href='#grammar-production-literal'>literal</a></td>
 </tr>
             <tr id="grammar-production-literal" data-grammar-original="[13] literal ::= RDFLiteral| NumericLiteral| BooleanLiteral" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;RDFLiteral&#x27;), (&#x27;id&#x27;, &#x27;NumericLiteral&#x27;), (&#x27;id&#x27;, &#x27;BooleanLiteral&#x27;)])" >
-    <td>[13]<td>
-    <td><code>literal</code><td>
+    <td>[13]</td>
+    <td><code>literal</code></td>
     <td>::=</td>
-    <td><a href='#grammar-production-RDFLiteral'>RDFLiteral</a> <code>|</code> <a href='#grammar-production-NumericLiteral'>NumericLiteral</a> <code>|</code> <a href='#grammar-production-BooleanLiteral'>BooleanLiteral</a></td>
+    <td><a href='#grammar-production-RDFLiteral'>RDFLiteral</a> <code>| </code> <a href='#grammar-production-NumericLiteral'>NumericLiteral</a> <code>| </code> <a href='#grammar-production-BooleanLiteral'>BooleanLiteral</a></td>
 </tr>
-            <tr id="grammar-production-blank" data-grammar-original="[14] blank ::= BlankNode| blankNodePropertyList| collection" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;BlankNode&#x27;), (&#x27;id&#x27;, &#x27;blankNodePropertyList&#x27;), (&#x27;id&#x27;, &#x27;collection&#x27;)])" >
-    <td>[14]<td>
-    <td><code>blank</code><td>
+            <tr id="grammar-production-blank" data-grammar-original="[14] blank ::= BlankNode| collection" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;BlankNode&#x27;), (&#x27;id&#x27;, &#x27;collection&#x27;)])" >
+    <td>[14]</td>
+    <td><code>blank</code></td>
     <td>::=</td>
-    <td><a href='#grammar-production-BlankNode'>BlankNode</a> <code>|</code> <a href='#grammar-production-blankNodePropertyList'>blankNodePropertyList</a> <code>|</code> <a href='#grammar-production-collection'>collection</a></td>
+    <td><a href='#grammar-production-BlankNode'>BlankNode</a> <code>| </code> <a href='#grammar-production-collection'>collection</a></td>
 </tr>
             <tr id="grammar-production-blankNodePropertyList" data-grammar-original="[15] blankNodePropertyList ::= &quot;[&quot; predicateObjectList &quot;]&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;[&#x27;), (&#x27;id&#x27;, &#x27;predicateObjectList&#x27;), (&quot;&#x27;&quot;, &#x27;]&#x27;)])" >
-    <td>[15]<td>
-    <td><code>blankNodePropertyList</code><td>
+    <td>[15]</td>
+    <td><code>blankNodePropertyList</code></td>
     <td>::=</td>
     <td>'<code class='grammar-literal'>[</code>' <a href='#grammar-production-predicateObjectList'>predicateObjectList</a> '<code class='grammar-literal'>]</code>'</td>
 </tr>
             <tr id="grammar-production-collection" data-grammar-original="[16] collection ::= &quot;(&quot; object* &quot;)&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;(&#x27;), (&#x27;*&#x27;, (&#x27;id&#x27;, &#x27;object&#x27;)), (&quot;&#x27;&quot;, &#x27;)&#x27;)])" >
-    <td>[16]<td>
-    <td><code>collection</code><td>
-    <td>::=</td>
-    <td>'<code class='grammar-literal'>(</code>' (<a href='#grammar-production-object'>object</a>)<code class='grammar-star'>*</code> '<code class='grammar-literal'>)</code>'</td>
-</tr>
-            <tr id="grammar-production-RDFLiteral" data-grammar-original="[60s] RDFLiteral ::= String ( LANGTAG | ( &quot;^^&quot; iri ) )?" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;String&#x27;), (&#x27;?&#x27;, (&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;LANGTAG&#x27;), (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;^^&#x27;), (&#x27;id&#x27;, &#x27;iri&#x27;)])]))])" >
-    <td>[60s]<td>
-    <td><code>RDFLiteral</code><td>
-    <td>::=</td>
-    <td><a href='#grammar-production-String'>String</a> (<a href='#grammar-production-LANGTAG'>LANGTAG</a> <code>|</code> ('<code class='grammar-literal'>^^</code>' <a href='#grammar-production-iri'>iri</a>))?</td>
-</tr>
-            <tr id="grammar-production-NumericLiteral" data-grammar-original="[61s] NumericLiteral ::= NumericLiteralUnsigned| NumericLiteralPositive| NumericLiteralNegative" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;NumericLiteralUnsigned&#x27;), (&#x27;id&#x27;, &#x27;NumericLiteralPositive&#x27;), (&#x27;id&#x27;, &#x27;NumericLiteralNegative&#x27;)])" >
-    <td>[61s]<td>
-    <td><code>NumericLiteral</code><td>
+    <td>[16]</td>
+    <td><code>collection</code></td>
     <td>::=</td>
-    <td><a href='#grammar-production-NumericLiteralUnsigned'>NumericLiteralUnsigned</a> <code>|</code> <a href='#grammar-production-NumericLiteralPositive'>NumericLiteralPositive</a> <code>|</code> <a href='#grammar-production-NumericLiteralNegative'>NumericLiteralNegative</a></td>
-</tr>
-            <tr id="grammar-production-NumericLiteralUnsigned" data-grammar-original="[62s] NumericLiteralUnsigned ::= INTEGER| DECIMAL| DOUBLE" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;INTEGER&#x27;), (&#x27;id&#x27;, &#x27;DECIMAL&#x27;), (&#x27;id&#x27;, &#x27;DOUBLE&#x27;)])" >
-    <td>[62s]<td>
-    <td><code>NumericLiteralUnsigned</code><td>
-    <td>::=</td>
-    <td><a href='#grammar-production-INTEGER'>INTEGER</a> <code>|</code> <a href='#grammar-production-DECIMAL'>DECIMAL</a> <code>|</code> <a href='#grammar-production-DOUBLE'>DOUBLE</a></td>
-</tr>
-            <tr id="grammar-production-NumericLiteralPositive" data-grammar-original="[63s] NumericLiteralPositive ::= INTEGER_POSITIVE| DECIMAL_POSITIVE| DOUBLE_POSITIVE" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;INTEGER_POSITIVE&#x27;), (&#x27;id&#x27;, &#x27;DECIMAL_POSITIVE&#x27;), (&#x27;id&#x27;, &#x27;DOUBLE_POSITIVE&#x27;)])" >
-    <td>[63s]<td>
-    <td><code>NumericLiteralPositive</code><td>
-    <td>::=</td>
-    <td><a href='#grammar-production-INTEGER_POSITIVE'>INTEGER_POSITIVE</a> <code>|</code> <a href='#grammar-production-DECIMAL_POSITIVE'>DECIMAL_POSITIVE</a> <code>|</code> <a href='#grammar-production-DOUBLE_POSITIVE'>DOUBLE_POSITIVE</a></td>
-</tr>
-            <tr id="grammar-production-NumericLiteralNegative" data-grammar-original="[64s] NumericLiteralNegative ::= INTEGER_NEGATIVE| DECIMAL_NEGATIVE| DOUBLE_NEGATIVE" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;INTEGER_NEGATIVE&#x27;), (&#x27;id&#x27;, &#x27;DECIMAL_NEGATIVE&#x27;), (&#x27;id&#x27;, &#x27;DOUBLE_NEGATIVE&#x27;)])" >
-    <td>[64s]<td>
-    <td><code>NumericLiteralNegative</code><td>
-    <td>::=</td>
-    <td><a href='#grammar-production-INTEGER_NEGATIVE'>INTEGER_NEGATIVE</a> <code>|</code> <a href='#grammar-production-DECIMAL_NEGATIVE'>DECIMAL_NEGATIVE</a> <code>|</code> <a href='#grammar-production-DOUBLE_NEGATIVE'>DOUBLE_NEGATIVE</a></td>
-</tr>
-            <tr id="grammar-production-BooleanLiteral" data-grammar-original="[65s] BooleanLiteral ::= &quot;true&quot;| &quot;false&quot;" data-grammar-expression="(&#x27;|&#x27;, [(&quot;&#x27;&quot;, &#x27;true&#x27;), (&quot;&#x27;&quot;, &#x27;false&#x27;)])" >
-    <td>[65s]<td>
-    <td><code>BooleanLiteral</code><td>
-    <td>::=</td>
-    <td>'<code class='grammar-literal'>true</code>' <code>|</code> '<code class='grammar-literal'>false</code>'</td>
+    <td>'<code class='grammar-literal'>(</code>' <a href='#grammar-production-object'>object</a><code class='grammar-star'>*</code> '<code class='grammar-literal'>)</code>'</td>
 </tr>
-            <tr id="grammar-production-String" data-grammar-original="[66s] String ::= STRING_LITERAL1| STRING_LITERAL2| STRING_LITERAL_LONG1| STRING_LITERAL_LONG2" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;STRING_LITERAL1&#x27;), (&#x27;id&#x27;, &#x27;STRING_LITERAL2&#x27;), (&#x27;id&#x27;, &#x27;STRING_LITERAL_LONG1&#x27;), (&#x27;id&#x27;, &#x27;STRING_LITERAL_LONG2&#x27;)])" >
-    <td>[66s]<td>
-    <td><code>String</code><td>
+            <tr id="grammar-production-NumericLiteral" data-grammar-original="[17] NumericLiteral ::= INTEGER | DECIMAL | DOUBLE" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;INTEGER&#x27;), (&#x27;id&#x27;, &#x27;DECIMAL&#x27;), (&#x27;id&#x27;, &#x27;DOUBLE&#x27;)])" >
+    <td>[17]</td>
+    <td><code>NumericLiteral</code></td>
     <td>::=</td>
-    <td><a href='#grammar-production-STRING_LITERAL1'>STRING_LITERAL1</a> <code>|</code> <a href='#grammar-production-STRING_LITERAL2'>STRING_LITERAL2</a> <code>|</code> <a href='#grammar-production-STRING_LITERAL_LONG1'>STRING_LITERAL_LONG1</a> <code>|</code> <a href='#grammar-production-STRING_LITERAL_LONG2'>STRING_LITERAL_LONG2</a></td>
-</tr>
-            <tr id="grammar-production-iri" data-grammar-original="[67s] iri ::= IRIREF| PrefixedName" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;IRIREF&#x27;), (&#x27;id&#x27;, &#x27;PrefixedName&#x27;)])" >
-    <td>[67s]<td>
-    <td><code>iri</code><td>
-    <td>::=</td>
-    <td><a href='#grammar-production-IRIREF'>IRIREF</a> <code>|</code> <a href='#grammar-production-PrefixedName'>PrefixedName</a></td>
-</tr>
-            <tr id="grammar-production-PrefixedName" data-grammar-original="[68s] PrefixedName ::= PNAME_LN| PNAME_NS" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PNAME_LN&#x27;), (&#x27;id&#x27;, &#x27;PNAME_NS&#x27;)])" >
-    <td>[68s]<td>
-    <td><code>PrefixedName</code><td>
-    <td>::=</td>
-    <td><a href='#grammar-production-PNAME_LN'>PNAME_LN</a> <code>|</code> <a href='#grammar-production-PNAME_NS'>PNAME_NS</a></td>
+    <td><a href='#grammar-production-INTEGER'>INTEGER</a> <code>| </code> <a href='#grammar-production-DECIMAL'>DECIMAL</a> <code>| </code> <a href='#grammar-production-DOUBLE'>DOUBLE</a></td>
 </tr>
-            <tr id="grammar-production-BlankNode" data-grammar-original="[69s] BlankNode ::= BLANK_NODE_LABEL| ANON" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;BLANK_NODE_LABEL&#x27;), (&#x27;id&#x27;, &#x27;ANON&#x27;)])" >
-    <td>[69s]<td>
-    <td><code>BlankNode</code><td>
+            <tr id="grammar-production-RDFLiteral" data-grammar-original="[128s] RDFLiteral ::= String ( LANGTAG | ( &quot;^^&quot; iri ) )?" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;String&#x27;), (&#x27;?&#x27;, (&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;LANGTAG&#x27;), (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;^^&#x27;), (&#x27;id&#x27;, &#x27;iri&#x27;)])]))])" >
+    <td>[128s]</td>
+    <td><code>RDFLiteral</code></td>
     <td>::=</td>
-    <td><a href='#grammar-production-BLANK_NODE_LABEL'>BLANK_NODE_LABEL</a> <code>|</code> <a href='#grammar-production-ANON'>ANON</a></td>
+    <td><a href='#grammar-production-String'>String</a> (<a href='#grammar-production-LANGTAG'>LANGTAG</a> <code>| </code> '<code class='grammar-literal'>^^</code>' <a href='#grammar-production-iri'>iri</a>)?</td>
 </tr>
-    </tbody>
-    <tbody class="grammar-terminals">
-            <tr id="grammar-production-IRIREF" data-grammar-original="[132s] IRIREF ::=  &#x27;&lt;&#x27; ([^#x00-#x20&lt;&gt;\&quot;{}|^`\\] | UCHAR)* &#x27;&gt;&#x27;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;&lt;&#x27;), (&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;^#x00-#x20&lt;&gt;\\&quot;{}|^`\\\\&#x27;), (&#x27;id&#x27;, &#x27;UCHAR&#x27;)])), (&quot;&#x27;&quot;, &#x27;&gt;&#x27;)])" class='grammar-token'>
-    <td>[132s]<td>
-    <td><code>IRIREF</code><td>
+            <tr id="grammar-production-BooleanLiteral" data-grammar-original="[133s] BooleanLiteral ::= &quot;true&quot;| &quot;false&quot;" data-grammar-expression="(&#x27;|&#x27;, [(&quot;&#x27;&quot;, &#x27;true&#x27;), (&quot;&#x27;&quot;, &#x27;false&#x27;)])" >
+    <td>[133s]</td>
+    <td><code>BooleanLiteral</code></td>
     <td>::=</td>
-    <td>'<code class='grammar-literal'>&lt;</code>' ([<code class='grammar-chars'>^#x00-#x20<>\"{}|^`\\</code>] <code>|</code> <a href='#grammar-production-UCHAR'>UCHAR</a>)<code class='grammar-star'>*</code> '<code class='grammar-literal'>&gt;</code>'</td>
+    <td>'<code class='grammar-literal'>true</code>' <code>| </code> '<code class='grammar-literal'>false</code>'</td>
 </tr>
-            <tr id="grammar-production-PNAME_NS" data-grammar-original="[133s] PNAME_NS ::= PN_PREFIX? &quot;:&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;?&#x27;, (&#x27;id&#x27;, &#x27;PN_PREFIX&#x27;)), (&quot;&#x27;&quot;, &#x27;:&#x27;)])" class='grammar-token'>
-    <td>[133s]<td>
-    <td><code>PNAME_NS</code><td>
+            <tr id="grammar-production-String" data-grammar-original="[18] String ::= STRING_LITERAL_QUOTE| STRING_LITERAL_SINGLE_QUOTE| STRING_LITERAL_LONG_SINGLE_QUOTE| STRING_LITERAL_LONG_QUOTE" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;STRING_LITERAL_QUOTE&#x27;), (&#x27;id&#x27;, &#x27;STRING_LITERAL_SINGLE_QUOTE&#x27;), (&#x27;id&#x27;, &#x27;STRING_LITERAL_LONG_SINGLE_QUOTE&#x27;), (&#x27;id&#x27;, &#x27;STRING_LITERAL_LONG_QUOTE&#x27;)])" >
+    <td>[18]</td>
+    <td><code>String</code></td>
     <td>::=</td>
-    <td>(<a href='#grammar-production-PN_PREFIX'>PN_PREFIX</a>)? '<code class='grammar-literal'>:</code>'</td>
+    <td><a href='#grammar-production-STRING_LITERAL_QUOTE'>STRING_LITERAL_QUOTE</a> <code>| </code> <a href='#grammar-production-STRING_LITERAL_SINGLE_QUOTE'>STRING_LITERAL_SINGLE_QUOTE</a> <code>| </code> <a href='#grammar-production-STRING_LITERAL_LONG_SINGLE_QUOTE'>STRING_LITERAL_LONG_SINGLE_QUOTE</a> <code>| </code> <a href='#grammar-production-STRING_LITERAL_LONG_QUOTE'>STRING_LITERAL_LONG_QUOTE</a></td>
 </tr>
-            <tr id="grammar-production-PNAME_LN" data-grammar-original="[134s] PNAME_LN ::= PNAME_NS PN_LOCAL" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;PNAME_NS&#x27;), (&#x27;id&#x27;, &#x27;PN_LOCAL&#x27;)])" class='grammar-token'>
-    <td>[134s]<td>
-    <td><code>PNAME_LN</code><td>
+            <tr id="grammar-production-iri" data-grammar-original="[135s] iri ::= IRIREF| PrefixedName" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;IRIREF&#x27;), (&#x27;id&#x27;, &#x27;PrefixedName&#x27;)])" >
+    <td>[135s]</td>
+    <td><code>iri</code></td>
+    <td>::=</td>
+    <td><a href='#grammar-production-IRIREF'>IRIREF</a> <code>| </code> <a href='#grammar-production-PrefixedName'>PrefixedName</a></td>
+</tr>
+            <tr id="grammar-production-PrefixedName" data-grammar-original="[136s] PrefixedName ::= PNAME_LN| PNAME_NS" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PNAME_LN&#x27;), (&#x27;id&#x27;, &#x27;PNAME_NS&#x27;)])" >
+    <td>[136s]</td>
+    <td><code>PrefixedName</code></td>
+    <td>::=</td>
+    <td><a href='#grammar-production-PNAME_LN'>PNAME_LN</a> <code>| </code> <a href='#grammar-production-PNAME_NS'>PNAME_NS</a></td>
+</tr>
+            <tr id="grammar-production-BlankNode" data-grammar-original="[137s] BlankNode ::= BLANK_NODE_LABEL| ANON" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;BLANK_NODE_LABEL&#x27;), (&#x27;id&#x27;, &#x27;ANON&#x27;)])" >
+    <td>[137s]</td>
+    <td><code>BlankNode</code></td>
+    <td>::=</td>
+    <td><a href='#grammar-production-BLANK_NODE_LABEL'>BLANK_NODE_LABEL</a> <code>| </code> <a href='#grammar-production-ANON'>ANON</a></td>
+</tr>
+<tr><td colspan="5"><h4 id="terminals">Productions for terminals</h4></td></tr>
+            <tr id="grammar-production-IRIREF" data-grammar-original="[19] IRIREF ::=  &#x27;&lt;&#x27; ([^#x00-#x20&lt;&gt;\&quot;{}|^`\] | UCHAR)* &#x27;&gt;&#x27;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;&lt;&#x27;), (&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;^#x00-#x20&lt;&gt;\\&quot;{}|^`\\&#x27;), (&#x27;id&#x27;, &#x27;UCHAR&#x27;)])), (&quot;&#x27;&quot;, &#x27;&gt;&#x27;)])" class='grammar-token'>
+    <td>[19]</td>
+    <td><code>IRIREF</code></td>
+    <td>::=</td>
+    <td>'<code class='grammar-literal'>&lt;</code>' ([<code class='grammar-chars'>^#x00-#x20&lt;&gt;\&quot;{}|^`\</code>] <code>| </code> <a href='#grammar-production-UCHAR'>UCHAR</a>)<code class='grammar-star'>*</code> '<code class='grammar-literal'>&gt;</code>'</td>
+</tr>
+            <tr id="grammar-production-PNAME_NS" data-grammar-original="[139s] PNAME_NS ::= PN_PREFIX? &quot;:&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;?&#x27;, (&#x27;id&#x27;, &#x27;PN_PREFIX&#x27;)), (&quot;&#x27;&quot;, &#x27;:&#x27;)])" class='grammar-token'>
+    <td>[139s]</td>
+    <td><code>PNAME_NS</code></td>
+    <td>::=</td>
+    <td><a href='#grammar-production-PN_PREFIX'>PN_PREFIX</a>? '<code class='grammar-literal'>:</code>'</td>
+</tr>
+            <tr id="grammar-production-PNAME_LN" data-grammar-original="[140s] PNAME_LN ::= PNAME_NS PN_LOCAL" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;PNAME_NS&#x27;), (&#x27;id&#x27;, &#x27;PN_LOCAL&#x27;)])" class='grammar-token'>
+    <td>[140s]</td>
+    <td><code>PNAME_LN</code></td>
     <td>::=</td>
     <td><a href='#grammar-production-PNAME_NS'>PNAME_NS</a> <a href='#grammar-production-PN_LOCAL'>PN_LOCAL</a></td>
 </tr>
-            <tr id="grammar-production-BLANK_NODE_LABEL" data-grammar-original="[135s] BLANK_NODE_LABEL ::= &#x27;_:&#x27; ( PN_CHARS_U | [0-9] ) ((PN_CHARS|&#x27;.&#x27;)* PN_CHARS)?" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;_:&#x27;), (&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS_U&#x27;), (&#x27;[&#x27;, &#x27;0-9&#x27;)]), (&#x27;?&#x27;, (&#x27;,&#x27;, [(&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;)])), (&#x27;id&#x27;, &#x27;PN_CHARS&#x27;)]))])" class='grammar-token'>
-    <td>[135s]<td>
-    <td><code>BLANK_NODE_LABEL</code><td>
+            <tr id="grammar-production-BLANK_NODE_LABEL" data-grammar-original="[141s] BLANK_NODE_LABEL ::= &#x27;_:&#x27; ( PN_CHARS_U | [0-9] ) ((PN_CHARS|&#x27;.&#x27;)* PN_CHARS)?" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;_:&#x27;), (&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS_U&#x27;), (&#x27;[&#x27;, &#x27;0-9&#x27;)]), (&#x27;?&#x27;, (&#x27;,&#x27;, [(&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;)])), (&#x27;id&#x27;, &#x27;PN_CHARS&#x27;)]))])" class='grammar-token'>
+    <td>[141s]</td>
+    <td><code>BLANK_NODE_LABEL</code></td>
     <td>::=</td>
-    <td>'<code class='grammar-literal'>_:</code>' <a href='#grammar-production-PN_CHARS_U'>PN_CHARS_U</a> <code>|</code> [<code class='grammar-chars'>0-9</code>] ((<a href='#grammar-production-PN_CHARS'>PN_CHARS</a> <code>|</code> '<code class='grammar-literal'>.</code>')<code class='grammar-star'>*</code> <a href='#grammar-production-PN_CHARS'>PN_CHARS</a>)?</td>
+    <td>'<code class='grammar-literal'>_:</code>' (<a href='#grammar-production-PN_CHARS_U'>PN_CHARS_U</a> <code>| </code> [<code class='grammar-chars'>0-9</code>]) ((<a href='#grammar-production-PN_CHARS'>PN_CHARS</a> <code>| </code> '<code class='grammar-literal'>.</code>')<code class='grammar-star'>*</code> <a href='#grammar-production-PN_CHARS'>PN_CHARS</a>)?</td>
 </tr>
-            <tr id="grammar-production-LANGTAG" data-grammar-original="[19] LANGTAG ::= &quot;@&quot; [a-zA-Z]+ ( &quot;-&quot; [a-zA-Z0-9]+ )*" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;@&#x27;), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;a-zA-Z&#x27;)), (&#x27;*&#x27;, (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;-&#x27;), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;a-zA-Z0-9&#x27;))]))])" class='grammar-token'>
-    <td>[19]<td>
-    <td><code>LANGTAG</code><td>
+            <tr id="grammar-production-LANGTAG" data-grammar-original="[144s] LANGTAG ::= &quot;@&quot; [a-zA-Z]+ ( &quot;-&quot; [a-zA-Z0-9]+ )*" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;@&#x27;), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;a-zA-Z&#x27;)), (&#x27;*&#x27;, (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;-&#x27;), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;a-zA-Z0-9&#x27;))]))])" class='grammar-token'>
+    <td>[144s]</td>
+    <td><code>LANGTAG</code></td>
     <td>::=</td>
-    <td>'<code class='grammar-literal'>@</code>' ([<code class='grammar-chars'>a-zA-Z</code>])<code class='grammar-plus'>+</code> ('<code class='grammar-literal'>-</code>' ([<code class='grammar-chars'>a-zA-Z0-9</code>])<code class='grammar-plus'>+</code>)<code class='grammar-star'>*</code></td>
+    <td>'<code class='grammar-literal'>@</code>' [<code class='grammar-chars'>a-zA-Z</code>]<code class='grammar-plus'>+</code> ('<code class='grammar-literal'>-</code>' [<code class='grammar-chars'>a-zA-Z0-9</code>]<code class='grammar-plus'>+</code>)<code class='grammar-star'>*</code></td>
 </tr>
             <tr id="grammar-production-INTEGER" data-grammar-original="[20] INTEGER ::= [+-]? [0-9]+" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;?&#x27;, (&#x27;[&#x27;, &#x27;+-&#x27;)), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;))])" class='grammar-token'>
-    <td>[20]<td>
-    <td><code>INTEGER</code><td>
-    <td>::=</td>
-    <td>([<code class='grammar-chars'>+-</code>])? ([<code class='grammar-chars'>0-9</code>])<code class='grammar-plus'>+</code></td>
-</tr>
-            <tr id="grammar-production-DECIMAL" data-grammar-original="[21] DECIMAL ::= [+-]? [0-9]+ &quot;.&quot; [0-9]+| &quot;.&quot; [0-9]+" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;,&#x27;, [(&#x27;?&#x27;, (&#x27;[&#x27;, &#x27;+-&#x27;)), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;)), (&quot;&#x27;&quot;, &#x27;.&#x27;), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;))]), (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;.&#x27;), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;))])])" class='grammar-token'>
-    <td>[21]<td>
-    <td><code>DECIMAL</code><td>
-    <td>::=</td>
-    <td>(([<code class='grammar-chars'>+-</code>])? ([<code class='grammar-chars'>0-9</code>])<code class='grammar-plus'>+</code> '<code class='grammar-literal'>.</code>' ([<code class='grammar-chars'>0-9</code>])<code class='grammar-plus'>+</code>) <code>|</code> ('<code class='grammar-literal'>.</code>' ([<code class='grammar-chars'>0-9</code>])<code class='grammar-plus'>+</code>)</td>
-</tr>
-            <tr id="grammar-production-DOUBLE" data-grammar-original="[22] DOUBLE ::= [+-]? [0-9]+ &quot;.&quot; [0-9]+ EXPONENT| &quot;.&quot; ( [0-9] )+ EXPONENT| ( [0-9] )+ EXPONENT" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;,&#x27;, [(&#x27;?&#x27;, (&#x27;[&#x27;, &#x27;+-&#x27;)), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;)), (&quot;&#x27;&quot;, &#x27;.&#x27;), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;)), (&#x27;id&#x27;, &#x27;EXPONENT&#x27;)]), (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;.&#x27;), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;)), (&#x27;id&#x27;, &#x27;EXPONENT&#x27;)]), (&#x27;,&#x27;, [(&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;)), (&#x27;id&#x27;, &#x27;EXPONENT&#x27;)])])" class='grammar-token'>
-    <td>[22]<td>
-    <td><code>DOUBLE</code><td>
-    <td>::=</td>
-    <td>(([<code class='grammar-chars'>+-</code>])? ([<code class='grammar-chars'>0-9</code>])<code class='grammar-plus'>+</code> '<code class='grammar-literal'>.</code>' ([<code class='grammar-chars'>0-9</code>])<code class='grammar-plus'>+</code> <a href='#grammar-production-EXPONENT'>EXPONENT</a>) <code>|</code> ('<code class='grammar-literal'>.</code>' ([<code class='grammar-chars'>0-9</code>])<code class='grammar-plus'>+</code> <a href='#grammar-production-EXPONENT'>EXPONENT</a>) <code>|</code> (([<code class='grammar-chars'>0-9</code>])<code class='grammar-plus'>+</code> <a href='#grammar-production-EXPONENT'>EXPONENT</a>)</td>
-</tr>
-            <tr id="grammar-production-EXPONENT" data-grammar-original="[148s] EXPONENT ::= [eE] [+-]? [0-9]+" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;[&#x27;, &#x27;eE&#x27;), (&#x27;?&#x27;, (&#x27;[&#x27;, &#x27;+-&#x27;)), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;))])" class='grammar-token'>
-    <td>[148s]<td>
-    <td><code>EXPONENT</code><td>
-    <td>::=</td>
-    <td>[<code class='grammar-chars'>eE</code>] ([<code class='grammar-chars'>+-</code>])? ([<code class='grammar-chars'>0-9</code>])<code class='grammar-plus'>+</code></td>
-</tr>
-            <tr id="grammar-production-STRING_LITERAL1" data-grammar-original="[149s] STRING_LITERAL1 ::= &#x27;&quot;&#x27; ( ( [^#x27#x5C#xA#xD]) | ECHAR | UCHAR )* &#x27;&quot;&#x27;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;&quot;&#x27;), (&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;^#x27#x5C#xA#xD&#x27;), (&#x27;id&#x27;, &#x27;ECHAR&#x27;), (&#x27;id&#x27;, &#x27;UCHAR&#x27;)])), (&quot;&#x27;&quot;, &#x27;&quot;&#x27;)])" class='grammar-token'>
-    <td>[149s]<td>
-    <td><code>STRING_LITERAL1</code><td>
-    <td>::=</td>
-    <td>'<code class='grammar-literal'>&quot;</code>' ([<code class='grammar-chars'>^#x27#x5C#xA#xD</code>] <code>|</code> <a href='#grammar-production-ECHAR'>ECHAR</a> <code>|</code> <a href='#grammar-production-UCHAR'>UCHAR</a>)<code class='grammar-star'>*</code> '<code class='grammar-literal'>&quot;</code>'</td>
-</tr>
-            <tr id="grammar-production-STRING_LITERAL2" data-grammar-original="[150s] STRING_LITERAL2 ::= &quot;&#x27;&quot; ( ( [^#x22#x5C#xA#xD]) | ECHAR | UCHAR )* &quot;&#x27;&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &quot;&#x27;&quot;), (&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;^#x22#x5C#xA#xD&#x27;), (&#x27;id&#x27;, &#x27;ECHAR&#x27;), (&#x27;id&#x27;, &#x27;UCHAR&#x27;)])), (&quot;&#x27;&quot;, &quot;&#x27;&quot;)])" class='grammar-token'>
-    <td>[150s]<td>
-    <td><code>STRING_LITERAL2</code><td>
-    <td>::=</td>
-    <td>"<code class="grammar-literal">&#x27;</code>" ([<code class='grammar-chars'>^#x22#x5C#xA#xD</code>] <code>|</code> <a href='#grammar-production-ECHAR'>ECHAR</a> <code>|</code> <a href='#grammar-production-UCHAR'>UCHAR</a>)<code class='grammar-star'>*</code> "<code class="grammar-literal">&#x27;</code>"</td>
-</tr>
-            <tr id="grammar-production-STRING_LITERAL_LONG1" data-grammar-original="[151s] STRING_LITERAL_LONG1 ::= &quot;&#x27;&#x27;&#x27;&quot; ( ( &quot;&#x27;&quot; | &quot;&#x27;&#x27;&quot; )? ( [^&#x27;\] | ECHAR | UCHAR ) )* &quot;&#x27;&#x27;&#x27;&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &quot;&#x27;&#x27;&#x27;&quot;), (&#x27;*&#x27;, (&#x27;,&#x27;, [(&#x27;?&#x27;, (&#x27;|&#x27;, [(&quot;&#x27;&quot;, &quot;&#x27;&quot;), (&quot;&#x27;&quot;, &quot;&#x27;&#x27;&quot;)])), (&#x27;|&#x27;, [(&#x27;[&#x27;, &quot;^&#x27;\\&quot;), (&#x27;id&#x27;, &#x27;ECHAR&#x27;), (&#x27;id&#x27;, &#x27;UCHAR&#x27;)])])), (&quot;&#x27;&quot;, &quot;&#x27;&#x27;&#x27;&quot;)])" class='grammar-token'>
-    <td>[151s]<td>
-    <td><code>STRING_LITERAL_LONG1</code><td>
-    <td>::=</td>
-    <td>"<code class="grammar-literal">&#x27;&#x27;&#x27;</code>" (("<code class="grammar-literal">&#x27;</code>" <code>|</code> "<code class="grammar-literal">&#x27;&#x27;</code>")? [<code class='grammar-chars'>^'\</code>] <code>|</code> <a href='#grammar-production-ECHAR'>ECHAR</a> <code>|</code> <a href='#grammar-production-UCHAR'>UCHAR</a>)<code class='grammar-star'>*</code> "<code class="grammar-literal">&#x27;&#x27;&#x27;</code>"</td>
-</tr>
-            <tr id="grammar-production-STRING_LITERAL_LONG2" data-grammar-original="[152s] STRING_LITERAL_LONG2 ::= &#x27;&quot;&quot;&quot;&#x27; ( ( &#x27;&quot;&#x27; | &#x27;&quot;&quot;&#x27; )? ( [^&quot;\] | ECHAR | UCHAR ) )* &#x27;&quot;&quot;&quot;&#x27;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;&quot;&quot;&quot;&#x27;), (&#x27;*&#x27;, (&#x27;,&#x27;, [(&#x27;?&#x27;, (&#x27;|&#x27;, [(&quot;&#x27;&quot;, &#x27;&quot;&#x27;), (&quot;&#x27;&quot;, &#x27;&quot;&quot;&#x27;)])), (&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;^&quot;\\&#x27;), (&#x27;id&#x27;, &#x27;ECHAR&#x27;), (&#x27;id&#x27;, &#x27;UCHAR&#x27;)])])), (&quot;&#x27;&quot;, &#x27;&quot;&quot;&quot;&#x27;)])" class='grammar-token'>
-    <td>[152s]<td>
-    <td><code>STRING_LITERAL_LONG2</code><td>
-    <td>::=</td>
-    <td>'<code class='grammar-literal'>&quot;&quot;&quot;</code>' (('<code class='grammar-literal'>&quot;</code>' <code>|</code> '<code class='grammar-literal'>&quot;&quot;</code>')? [<code class='grammar-chars'>^"\</code>] <code>|</code> <a href='#grammar-production-ECHAR'>ECHAR</a> <code>|</code> <a href='#grammar-production-UCHAR'>UCHAR</a>)<code class='grammar-star'>*</code> '<code class='grammar-literal'>&quot;&quot;&quot;</code>'</td>
-</tr>
-            <tr id="grammar-production-UCHAR" data-grammar-original="[19] UCHAR ::= ( &quot;\u&quot; HEX HEX HEX HEX )| ( &quot;\U&quot; HEX HEX HEX HEX HEX HEX HEX HEX )" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;\\u&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;)]), (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;\\U&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;)])])" class='grammar-token'>
-    <td>[19]<td>
-    <td><code>UCHAR</code><td>
-    <td>::=</td>
-    <td>('<code class='grammar-literal'>\u</code>' <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a>) <code>|</code> ('<code class='grammar-literal'>\U</code>' <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a>)</td>
-</tr>
-            <tr id="grammar-production-ECHAR" data-grammar-original="[153s] ECHAR ::= &quot;\&quot; [tbnrf\&quot;&#x27;]" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;\\&#x27;), (&#x27;[&#x27;, &#x27;tbnrf\\&quot;\&#x27;&#x27;)])" class='grammar-token'>
-    <td>[153s]<td>
-    <td><code>ECHAR</code><td>
+    <td>[20]</td>
+    <td><code>INTEGER</code></td>
     <td>::=</td>
-    <td>'<code class='grammar-literal'>\</code>' [<code class='grammar-chars'>tbnrf\"'</code>]</td>
-</tr>
-            <tr id="grammar-production-NIL" data-grammar-original="[154s] NIL ::= &quot;(&quot; (WS)* &quot;)&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;(&#x27;), (&#x27;*&#x27;, (&#x27;id&#x27;, &#x27;WS&#x27;)), (&quot;&#x27;&quot;, &#x27;)&#x27;)])" class='grammar-token'>
-    <td>[154s]<td>
-    <td><code>NIL</code><td>
-    <td>::=</td>
-    <td>'<code class='grammar-literal'>(</code>' (<a href='#grammar-production-WS'>WS</a>)<code class='grammar-star'>*</code> '<code class='grammar-literal'>)</code>'</td>
-</tr>
-            <tr id="grammar-production-WS" data-grammar-original="[155s] WS ::= #x20 | #x9 | #xD | #xA" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;#&#x27;, &#x27;#x20&#x27;), (&#x27;#&#x27;, &#x27;#x9&#x27;), (&#x27;#&#x27;, &#x27;#xD&#x27;), (&#x27;#&#x27;, &#x27;#xA&#x27;)])" class='grammar-token'>
-    <td>[155s]<td>
-    <td><code>WS</code><td>
-    <td>::=</td>
-    <td><code class='grammar-char-escape'>#x20</code> <code>|</code> <code class='grammar-char-escape'>#x9</code> <code>|</code> <code class='grammar-char-escape'>#xD</code> <code>|</code> <code class='grammar-char-escape'>#xA</code></td>
-</tr>
-            <tr id="grammar-production-ANON" data-grammar-original="[156s] ANON ::= &quot;[&quot; (WS)* &quot;]&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;[&#x27;), (&#x27;*&#x27;, (&#x27;id&#x27;, &#x27;WS&#x27;)), (&quot;&#x27;&quot;, &#x27;]&#x27;)])" class='grammar-token'>
-    <td>[156s]<td>
-    <td><code>ANON</code><td>
-    <td>::=</td>
-    <td>'<code class='grammar-literal'>[</code>' (<a href='#grammar-production-WS'>WS</a>)<code class='grammar-star'>*</code> '<code class='grammar-literal'>]</code>'</td>
-</tr>
-            <tr id="grammar-production-PN_CHARS_BASE" data-grammar-original="[157s] PN_CHARS_BASE ::= [A-Z]| [a-z]| [#00C0-#00D6]| [#00D8-#00F6]| [#00F8-#02FF]| [#0370-#037D]| [#037F-#1FFF]| [#200C-#200D]| [#2070-#218F]| [#2C00-#2FEF]| [#3001-#D7FF]| [#F900-#FDCF]| [#FDF0-#FFFD]| [#10000-#EFFFF]" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;A-Z&#x27;), (&#x27;[&#x27;, &#x27;a-z&#x27;), (&#x27;[&#x27;, &#x27;#00C0-#00D6&#x27;), (&#x27;[&#x27;, &#x27;#00D8-#00F6&#x27;), (&#x27;[&#x27;, &#x27;#00F8-#02FF&#x27;), (&#x27;[&#x27;, &#x27;#0370-#037D&#x27;), (&#x27;[&#x27;, &#x27;#037F-#1FFF&#x27;), (&#x27;[&#x27;, &#x27;#200C-#200D&#x27;), (&#x27;[&#x27;, &#x27;#2070-#218F&#x27;), (&#x27;[&#x27;, &#x27;#2C00-#2FEF&#x27;), (&#x27;[&#x27;, &#x27;#3001-#D7FF&#x27;), (&#x27;[&#x27;, &#x27;#F900-#FDCF&#x27;), (&#x27;[&#x27;, &#x27;#FDF0-#FFFD&#x27;), (&#x27;[&#x27;, &#x27;#10000-#EFFFF&#x27;)])" class='grammar-token'>
-    <td>[157s]<td>
-    <td><code>PN_CHARS_BASE</code><td>
-    <td>::=</td>
-    <td>[<code class='grammar-chars'>A-Z</code>] <code>|</code> [<code class='grammar-chars'>a-z</code>] <code>|</code> [<code class='grammar-chars'>#00C0-#00D6</code>] <code>|</code> [<code class='grammar-chars'>#00D8-#00F6</code>] <code>|</code> [<code class='grammar-chars'>#00F8-#02FF</code>] <code>|</code> [<code class='grammar-chars'>#0370-#037D</code>] <code>|</code> [<code class='grammar-chars'>#037F-#1FFF</code>] <code>|</code> [<code class='grammar-chars'>#200C-#200D</code>] <code>|</code> [<code class='grammar-chars'>#2070-#218F</code>] <code>|</code> [<code class='grammar-chars'>#2C00-#2FEF</code>] <code>|</code> [<code class='grammar-chars'>#3001-#D7FF</code>] <code>|</code> [<code class='grammar-chars'>#F900-#FDCF</code>] <code>|</code> [<code class='grammar-chars'>#FDF0-#FFFD</code>] <code>|</code> [<code class='grammar-chars'>#10000-#EFFFF</code>]</td>
+    <td>[<code class='grammar-chars'>+-</code>]? [<code class='grammar-chars'>0-9</code>]<code class='grammar-plus'>+</code></td>
 </tr>
-            <tr id="grammar-production-PN_CHARS_U" data-grammar-original="[158s] PN_CHARS_U  ::=  PN_CHARS_BASE| &#x27;_&#x27;| &#x27;:&#x27;" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS_BASE&#x27;), (&quot;&#x27;&quot;, &#x27;_&#x27;), (&quot;&#x27;&quot;, &#x27;:&#x27;)])" class='grammar-token'>
-    <td>[158s]<td>
-    <td><code>PN_CHARS_U</code><td>
-    <td>::=</td>
-    <td><a href='#grammar-production-PN_CHARS_BASE'>PN_CHARS_BASE</a> <code>|</code> '<code class='grammar-literal'>_</code>' <code>|</code> '<code class='grammar-literal'>:</code>'</td>
-</tr>
-            <tr id="grammar-production-PN_CHARS" data-grammar-original="[160s] PN_CHARS ::= PN_CHARS_U| &quot;-&quot;| [0-9]| #00B7| [#0300-#036F]| [#203F-#2040]" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS_U&#x27;), (&quot;&#x27;&quot;, &#x27;-&#x27;), (&#x27;[&#x27;, &#x27;0-9&#x27;), (&#x27;#&#x27;, &#x27;#00B7&#x27;), (&#x27;[&#x27;, &#x27;#0300-#036F&#x27;), (&#x27;[&#x27;, &#x27;#203F-#2040&#x27;)])" class='grammar-token'>
-    <td>[160s]<td>
-    <td><code>PN_CHARS</code><td>
-    <td>::=</td>
-    <td><a href='#grammar-production-PN_CHARS_U'>PN_CHARS_U</a> <code>|</code> '<code class='grammar-literal'>-</code>' <code>|</code> [<code class='grammar-chars'>0-9</code>] <code>|</code> <code class='grammar-char-escape'>#00B7</code> <code>|</code> [<code class='grammar-chars'>#0300-#036F</code>] <code>|</code> [<code class='grammar-chars'>#203F-#2040</code>]</td>
-</tr>
-            <tr id="grammar-production-PN_PREFIX" data-grammar-original="[161s] PN_PREFIX ::= PN_CHARS_BASE ( ( PN_CHARS | &quot;.&quot; )* PN_CHARS )?" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS_BASE&#x27;), (&#x27;?&#x27;, (&#x27;,&#x27;, [(&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;)])), (&#x27;id&#x27;, &#x27;PN_CHARS&#x27;)]))])" class='grammar-token'>
-    <td>[161s]<td>
-    <td><code>PN_PREFIX</code><td>
+            <tr id="grammar-production-DECIMAL" data-grammar-original="[21] DECIMAL ::= [+-]?  ( ([0-9])* &#x27;.&#x27; ([0-9])+  )" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;?&#x27;, (&#x27;[&#x27;, &#x27;+-&#x27;)), (&#x27;,&#x27;, [(&#x27;*&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;)), (&quot;&#x27;&quot;, &#x27;.&#x27;), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;))])])" class='grammar-token'>
+    <td>[21]</td>
+    <td><code>DECIMAL</code></td>
     <td>::=</td>
-    <td><a href='#grammar-production-PN_CHARS_BASE'>PN_CHARS_BASE</a> ((<a href='#grammar-production-PN_CHARS'>PN_CHARS</a> <code>|</code> '<code class='grammar-literal'>.</code>')<code class='grammar-star'>*</code> <a href='#grammar-production-PN_CHARS'>PN_CHARS</a>)?</td>
-</tr>
-            <tr id="grammar-production-PN_LOCAL" data-grammar-original="[162s] PN_LOCAL ::= ( PN_CHARS_U | [0-9] | PLX ) ( ( PN_CHARS | &#x27;.&#x27; | PLX )*  ( PN_CHARS | PLX ) ) ?" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS_U&#x27;), (&#x27;[&#x27;, &#x27;0-9&#x27;), (&#x27;id&#x27;, &#x27;PLX&#x27;)]), (&#x27;?&#x27;, (&#x27;,&#x27;, [(&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;), (&#x27;id&#x27;, &#x27;PLX&#x27;)])), (&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS&#x27;), (&#x27;id&#x27;, &#x27;PLX&#x27;)])]))])" class='grammar-token'>
-    <td>[162s]<td>
-    <td><code>PN_LOCAL</code><td>
-    <td>::=</td>
-    <td><a href='#grammar-production-PN_CHARS_U'>PN_CHARS_U</a> <code>|</code> [<code class='grammar-chars'>0-9</code>] <code>|</code> <a href='#grammar-production-PLX'>PLX</a> ((<a href='#grammar-production-PN_CHARS'>PN_CHARS</a> <code>|</code> '<code class='grammar-literal'>.</code>' <code>|</code> <a href='#grammar-production-PLX'>PLX</a>)<code class='grammar-star'>*</code> <a href='#grammar-production-PN_CHARS'>PN_CHARS</a> <code>|</code> <a href='#grammar-production-PLX'>PLX</a>)?</td>
+    <td>[<code class='grammar-chars'>+-</code>]? ([<code class='grammar-chars'>0-9</code>]<code class='grammar-star'>*</code> '<code class='grammar-literal'>.</code>' [<code class='grammar-chars'>0-9</code>]<code class='grammar-plus'>+</code>)</td>
 </tr>
-            <tr id="grammar-production-PLX" data-grammar-original="[163s] PLX ::= PERCENT | PN_LOCAL_ESC" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PERCENT&#x27;), (&#x27;id&#x27;, &#x27;PN_LOCAL_ESC&#x27;)])" class='grammar-token'>
-    <td>[163s]<td>
-    <td><code>PLX</code><td>
+            <tr id="grammar-production-DOUBLE" data-grammar-original="[22] DOUBLE ::= [+-]? ( [0-9]+ &#x27;.&#x27; [0-9]* EXPONENT | &#x27;.&#x27; ([0-9])+ EXPONENT | ([0-9])+EXPONENT )" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;?&#x27;, (&#x27;[&#x27;, &#x27;+-&#x27;)), (&#x27;|&#x27;, [(&#x27;,&#x27;, [(&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;)), (&quot;&#x27;&quot;, &#x27;.&#x27;), (&#x27;*&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;)), (&#x27;id&#x27;, &#x27;EXPONENT&#x27;)]), (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;.&#x27;), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;)), (&#x27;id&#x27;, &#x27;EXPONENT&#x27;)]), (&#x27;,&#x27;, [(&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;)), (&#x27;id&#x27;, &#x27;EXPONENT&#x27;)])])])" class='grammar-token'>
+    <td>[22]</td>
+    <td><code>DOUBLE</code></td>
     <td>::=</td>
-    <td><a href='#grammar-production-PERCENT'>PERCENT</a> <code>|</code> <a href='#grammar-production-PN_LOCAL_ESC'>PN_LOCAL_ESC</a></td>
+    <td>[<code class='grammar-chars'>+-</code>]? ([<code class='grammar-chars'>0-9</code>]<code class='grammar-plus'>+</code> '<code class='grammar-literal'>.</code>' [<code class='grammar-chars'>0-9</code>]<code class='grammar-star'>*</code> <a href='#grammar-production-EXPONENT'>EXPONENT</a> <code>| </code> '<code class='grammar-literal'>.</code>' [<code class='grammar-chars'>0-9</code>]<code class='grammar-plus'>+</code> <a href='#grammar-production-EXPONENT'>EXPONENT</a> <code>| </code> [<code class='grammar-chars'>0-9</code>]<code class='grammar-plus'>+</code> <a href='#grammar-production-EXPONENT'>EXPONENT</a>)</td>
 </tr>
-            <tr id="grammar-production-PERCENT" data-grammar-original="[164s] PERCENT ::= &#x27;%&#x27; HEX HEX" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;%&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;)])" class='grammar-token'>
-    <td>[164s]<td>
-    <td><code>PERCENT</code><td>
+            <tr id="grammar-production-EXPONENT" data-grammar-original="[154s] EXPONENT ::= [eE] [+-]? [0-9]+" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;[&#x27;, &#x27;eE&#x27;), (&#x27;?&#x27;, (&#x27;[&#x27;, &#x27;+-&#x27;)), (&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;0-9&#x27;))])" class='grammar-token'>
+    <td>[154s]</td>
+    <td><code>EXPONENT</code></td>
+    <td>::=</td>
+    <td>[<code class='grammar-chars'>eE</code>] [<code class='grammar-chars'>+-</code>]? [<code class='grammar-chars'>0-9</code>]<code class='grammar-plus'>+</code></td>
+</tr>
+            <tr id="grammar-production-STRING_LITERAL_QUOTE" data-grammar-original="[23] STRING_LITERAL_QUOTE ::= &#x27;&quot;&#x27; ( [^#x22#x5C#xA#xD] | ECHAR | UCHAR )* &#x27;&quot;&#x27;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;&quot;&#x27;), (&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;^#x22#x5C#xA#xD&#x27;), (&#x27;id&#x27;, &#x27;ECHAR&#x27;), (&#x27;id&#x27;, &#x27;UCHAR&#x27;)])), (&quot;&#x27;&quot;, &#x27;&quot;&#x27;)])" class='grammar-token'>
+    <td>[23]</td>
+    <td><code>STRING_LITERAL_QUOTE</code></td>
+    <td>::=</td>
+    <td>'<code class='grammar-literal'>&quot;</code>' ([<code class='grammar-chars'>^#x22#x5C#xA#xD</code>] <code>| </code> <a href='#grammar-production-ECHAR'>ECHAR</a> <code>| </code> <a href='#grammar-production-UCHAR'>UCHAR</a>)<code class='grammar-star'>*</code> '<code class='grammar-literal'>&quot;</code>'</td>
+</tr>
+            <tr id="grammar-production-STRING_LITERAL_SINGLE_QUOTE" data-grammar-original="[24] STRING_LITERAL_SINGLE_QUOTE ::= &quot;&#x27;&quot; ( [^#x27#x5C#xA#xD] | ECHAR | UCHAR )* &quot;&#x27;&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &quot;&#x27;&quot;), (&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;^#x27#x5C#xA#xD&#x27;), (&#x27;id&#x27;, &#x27;ECHAR&#x27;), (&#x27;id&#x27;, &#x27;UCHAR&#x27;)])), (&quot;&#x27;&quot;, &quot;&#x27;&quot;)])" class='grammar-token'>
+    <td>[24]</td>
+    <td><code>STRING_LITERAL_SINGLE_QUOTE</code></td>
+    <td>::=</td>
+    <td>"<code class="grammar-literal">&#x27;</code>" ([<code class='grammar-chars'>^#x27#x5C#xA#xD</code>] <code>| </code> <a href='#grammar-production-ECHAR'>ECHAR</a> <code>| </code> <a href='#grammar-production-UCHAR'>UCHAR</a>)<code class='grammar-star'>*</code> "<code class="grammar-literal">&#x27;</code>"</td>
+</tr>
+            <tr id="grammar-production-STRING_LITERAL_LONG_SINGLE_QUOTE" data-grammar-original="[25] STRING_LITERAL_LONG_SINGLE_QUOTE ::= &quot;&#x27;&#x27;&#x27;&quot; ( ( &quot;&#x27;&quot; | &quot;&#x27;&#x27;&quot; )? ( [^&#x27;\] | ECHAR | UCHAR ) )* &quot;&#x27;&#x27;&#x27;&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &quot;&#x27;&#x27;&#x27;&quot;), (&#x27;*&#x27;, (&#x27;,&#x27;, [(&#x27;?&#x27;, (&#x27;|&#x27;, [(&quot;&#x27;&quot;, &quot;&#x27;&quot;), (&quot;&#x27;&quot;, &quot;&#x27;&#x27;&quot;)])), (&#x27;|&#x27;, [(&#x27;[&#x27;, &quot;^&#x27;\\&quot;), (&#x27;id&#x27;, &#x27;ECHAR&#x27;), (&#x27;id&#x27;, &#x27;UCHAR&#x27;)])])), (&quot;&#x27;&quot;, &quot;&#x27;&#x27;&#x27;&quot;)])" class='grammar-token'>
+    <td>[25]</td>
+    <td><code>STRING_LITERAL_LONG_SINGLE_QUOTE</code></td>
+    <td>::=</td>
+    <td>"<code class="grammar-literal">&#x27;&#x27;&#x27;</code>" (("<code class="grammar-literal">&#x27;</code>" <code>| </code> "<code class="grammar-literal">&#x27;&#x27;</code>")? [<code class='grammar-chars'>^&#x27;\</code>] <code>| </code> <a href='#grammar-production-ECHAR'>ECHAR</a> <code>| </code> <a href='#grammar-production-UCHAR'>UCHAR</a>)<code class='grammar-star'>*</code> "<code class="grammar-literal">&#x27;&#x27;&#x27;</code>"</td>
+</tr>
+            <tr id="grammar-production-STRING_LITERAL_LONG_QUOTE" data-grammar-original="[26] STRING_LITERAL_LONG_QUOTE ::= &#x27;&quot;&quot;&quot;&#x27; ( ( &#x27;&quot;&#x27; | &#x27;&quot;&quot;&#x27; )? ( [^&quot;\] | ECHAR | UCHAR ) )* &#x27;&quot;&quot;&quot;&#x27;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;&quot;&quot;&quot;&#x27;), (&#x27;*&#x27;, (&#x27;,&#x27;, [(&#x27;?&#x27;, (&#x27;|&#x27;, [(&quot;&#x27;&quot;, &#x27;&quot;&#x27;), (&quot;&#x27;&quot;, &#x27;&quot;&quot;&#x27;)])), (&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;^&quot;\\&#x27;), (&#x27;id&#x27;, &#x27;ECHAR&#x27;), (&#x27;id&#x27;, &#x27;UCHAR&#x27;)])])), (&quot;&#x27;&quot;, &#x27;&quot;&quot;&quot;&#x27;)])" class='grammar-token'>
+    <td>[26]</td>
+    <td><code>STRING_LITERAL_LONG_QUOTE</code></td>
+    <td>::=</td>
+    <td>'<code class='grammar-literal'>&quot;&quot;&quot;</code>' (('<code class='grammar-literal'>&quot;</code>' <code>| </code> '<code class='grammar-literal'>&quot;&quot;</code>')? [<code class='grammar-chars'>^&quot;\</code>] <code>| </code> <a href='#grammar-production-ECHAR'>ECHAR</a> <code>| </code> <a href='#grammar-production-UCHAR'>UCHAR</a>)<code class='grammar-star'>*</code> '<code class='grammar-literal'>&quot;&quot;&quot;</code>'</td>
+</tr>
+            <tr id="grammar-production-UCHAR" data-grammar-original="[27] UCHAR ::= ( &quot;\u&quot; HEX HEX HEX HEX )| ( &quot;\U&quot; HEX HEX HEX HEX HEX HEX HEX HEX )" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;\\u&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;)]), (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;\\U&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;)])])" class='grammar-token'>
+    <td>[27]</td>
+    <td><code>UCHAR</code></td>
+    <td>::=</td>
+    <td>'<code class='grammar-literal'>\u</code>' <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <code>| </code> '<code class='grammar-literal'>\U</code>' <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a></td>
+</tr>
+            <tr id="grammar-production-ECHAR" data-grammar-original="[159s] ECHAR ::= &quot;\&quot; [tbnrf\&quot;&#x27;]" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;\\&#x27;), (&#x27;[&#x27;, &#x27;tbnrf\\&quot;\&#x27;&#x27;)])" class='grammar-token'>
+    <td>[159s]</td>
+    <td><code>ECHAR</code></td>
+    <td>::=</td>
+    <td>'<code class='grammar-literal'>\</code>' [<code class='grammar-chars'>tbnrf\&quot;&#x27;</code>]</td>
+</tr>
+            <tr id="grammar-production-NIL" data-grammar-original="[160s] NIL ::= &quot;(&quot; WS* &quot;)&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;(&#x27;), (&#x27;*&#x27;, (&#x27;id&#x27;, &#x27;WS&#x27;)), (&quot;&#x27;&quot;, &#x27;)&#x27;)])" class='grammar-token'>
+    <td>[160s]</td>
+    <td><code>NIL</code></td>
+    <td>::=</td>
+    <td>'<code class='grammar-literal'>(</code>' <a href='#grammar-production-WS'>WS</a><code class='grammar-star'>*</code> '<code class='grammar-literal'>)</code>'</td>
+</tr>
+            <tr id="grammar-production-WS" data-grammar-original="[161s] WS ::= #x20 | #x9 | #xD | #xA" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;#&#x27;, &#x27;#x20&#x27;), (&#x27;#&#x27;, &#x27;#x9&#x27;), (&#x27;#&#x27;, &#x27;#xD&#x27;), (&#x27;#&#x27;, &#x27;#xA&#x27;)])" class='grammar-token'>
+    <td>[161s]</td>
+    <td><code>WS</code></td>
+    <td>::=</td>
+    <td><code class='grammar-char-escape'>#x20</code> <code>| </code> <code class='grammar-char-escape'>#x9</code> <code>| </code> <code class='grammar-char-escape'>#xD</code> <code>| </code> <code class='grammar-char-escape'>#xA</code></td>
+</tr>
+            <tr id="grammar-production-ANON" data-grammar-original="[162s] ANON ::= &quot;[&quot; WS* &quot;]&quot;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;[&#x27;), (&#x27;*&#x27;, (&#x27;id&#x27;, &#x27;WS&#x27;)), (&quot;&#x27;&quot;, &#x27;]&#x27;)])" class='grammar-token'>
+    <td>[162s]</td>
+    <td><code>ANON</code></td>
+    <td>::=</td>
+    <td>'<code class='grammar-literal'>[</code>' <a href='#grammar-production-WS'>WS</a><code class='grammar-star'>*</code> '<code class='grammar-literal'>]</code>'</td>
+</tr>
+            <tr id="grammar-production-PN_CHARS_BASE" data-grammar-original="[163s] PN_CHARS_BASE ::= [A-Z]| [a-z]| [#00C0-#00D6]| [#00D8-#00F6]| [#00F8-#02FF]| [#0370-#037D]| [#037F-#1FFF]| [#200C-#200D]| [#2070-#218F]| [#2C00-#2FEF]| [#3001-#D7FF]| [#F900-#FDCF]| [#FDF0-#FFFD]| [#10000-#EFFFF]" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;A-Z&#x27;), (&#x27;[&#x27;, &#x27;a-z&#x27;), (&#x27;[&#x27;, &#x27;#00C0-#00D6&#x27;), (&#x27;[&#x27;, &#x27;#00D8-#00F6&#x27;), (&#x27;[&#x27;, &#x27;#00F8-#02FF&#x27;), (&#x27;[&#x27;, &#x27;#0370-#037D&#x27;), (&#x27;[&#x27;, &#x27;#037F-#1FFF&#x27;), (&#x27;[&#x27;, &#x27;#200C-#200D&#x27;), (&#x27;[&#x27;, &#x27;#2070-#218F&#x27;), (&#x27;[&#x27;, &#x27;#2C00-#2FEF&#x27;), (&#x27;[&#x27;, &#x27;#3001-#D7FF&#x27;), (&#x27;[&#x27;, &#x27;#F900-#FDCF&#x27;), (&#x27;[&#x27;, &#x27;#FDF0-#FFFD&#x27;), (&#x27;[&#x27;, &#x27;#10000-#EFFFF&#x27;)])" class='grammar-token'>
+    <td>[163s]</td>
+    <td><code>PN_CHARS_BASE</code></td>
+    <td>::=</td>
+    <td>[<code class='grammar-chars'>A-Z</code>] <code>| </code> [<code class='grammar-chars'>a-z</code>] <code>| </code> [<code class='grammar-chars'>#00C0-#00D6</code>] <code>| </code> [<code class='grammar-chars'>#00D8-#00F6</code>] <code>| </code> [<code class='grammar-chars'>#00F8-#02FF</code>] <code>| </code> [<code class='grammar-chars'>#0370-#037D</code>] <code>| </code> [<code class='grammar-chars'>#037F-#1FFF</code>] <code>| </code> [<code class='grammar-chars'>#200C-#200D</code>] <code>| </code> [<code class='grammar-chars'>#2070-#218F</code>] <code>| </code> [<code class='grammar-chars'>#2C00-#2FEF</code>] <code>| </code> [<code class='grammar-chars'>#3001-#D7FF</code>] <code>| </code> [<code class='grammar-chars'>#F900-#FDCF</code>] <code>| </code> [<code class='grammar-chars'>#FDF0-#FFFD</code>] <code>| </code> [<code class='grammar-chars'>#10000-#EFFFF</code>]</td>
+</tr>
+            <tr id="grammar-production-PN_CHARS_U" data-grammar-original="[164s] PN_CHARS_U  ::=  PN_CHARS_BASE| &#x27;_&#x27;" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS_BASE&#x27;), (&quot;&#x27;&quot;, &#x27;_&#x27;)])" class='grammar-token'>
+    <td>[164s]</td>
+    <td><code>PN_CHARS_U</code></td>
+    <td>::=</td>
+    <td><a href='#grammar-production-PN_CHARS_BASE'>PN_CHARS_BASE</a> <code>| </code> '<code class='grammar-literal'>_</code>'</td>
+</tr>
+            <tr id="grammar-production-PN_CHARS" data-grammar-original="[166s] PN_CHARS ::= PN_CHARS_U| &quot;-&quot;| [0-9]| #00B7| [#0300-#036F]| [#203F-#2040]" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS_U&#x27;), (&quot;&#x27;&quot;, &#x27;-&#x27;), (&#x27;[&#x27;, &#x27;0-9&#x27;), (&#x27;#&#x27;, &#x27;#00B7&#x27;), (&#x27;[&#x27;, &#x27;#0300-#036F&#x27;), (&#x27;[&#x27;, &#x27;#203F-#2040&#x27;)])" class='grammar-token'>
+    <td>[166s]</td>
+    <td><code>PN_CHARS</code></td>
+    <td>::=</td>
+    <td><a href='#grammar-production-PN_CHARS_U'>PN_CHARS_U</a> <code>| </code> '<code class='grammar-literal'>-</code>' <code>| </code> [<code class='grammar-chars'>0-9</code>] <code>| </code> <code class='grammar-char-escape'>#00B7</code> <code>| </code> [<code class='grammar-chars'>#0300-#036F</code>] <code>| </code> [<code class='grammar-chars'>#203F-#2040</code>]</td>
+</tr>
+            <tr id="grammar-production-PN_PREFIX" data-grammar-original="[167s] PN_PREFIX ::= PN_CHARS_BASE ( ( PN_CHARS | &quot;.&quot; )* PN_CHARS )?" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS_BASE&#x27;), (&#x27;?&#x27;, (&#x27;,&#x27;, [(&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;)])), (&#x27;id&#x27;, &#x27;PN_CHARS&#x27;)]))])" class='grammar-token'>
+    <td>[167s]</td>
+    <td><code>PN_PREFIX</code></td>
+    <td>::=</td>
+    <td><a href='#grammar-production-PN_CHARS_BASE'>PN_CHARS_BASE</a> ((<a href='#grammar-production-PN_CHARS'>PN_CHARS</a> <code>| </code> '<code class='grammar-literal'>.</code>')<code class='grammar-star'>*</code> <a href='#grammar-production-PN_CHARS'>PN_CHARS</a>)?</td>
+</tr>
+            <tr id="grammar-production-PN_LOCAL" data-grammar-original="[168s] PN_LOCAL ::= ( PN_CHARS_U | &#x27;:&#x27; | [0-9] | PLX ) ( ( PN_CHARS | &#x27;.&#x27; | &#x27;:&#x27; | PLX )*  ( PN_CHARS | &#x27;:&#x27; | PLX ) ) ?" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS_U&#x27;), (&quot;&#x27;&quot;, &#x27;:&#x27;), (&#x27;[&#x27;, &#x27;0-9&#x27;), (&#x27;id&#x27;, &#x27;PLX&#x27;)]), (&#x27;?&#x27;, (&#x27;,&#x27;, [(&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;), (&quot;&#x27;&quot;, &#x27;:&#x27;), (&#x27;id&#x27;, &#x27;PLX&#x27;)])), (&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS&#x27;), (&quot;&#x27;&quot;, &#x27;:&#x27;), (&#x27;id&#x27;, &#x27;PLX&#x27;)])]))])" class='grammar-token'>
+    <td>[168s]</td>
+    <td><code>PN_LOCAL</code></td>
+    <td>::=</td>
+    <td>(<a href='#grammar-production-PN_CHARS_U'>PN_CHARS_U</a> <code>| </code> '<code class='grammar-literal'>:</code>' <code>| </code> [<code class='grammar-chars'>0-9</code>] <code>| </code> <a href='#grammar-production-PLX'>PLX</a>) ((<a href='#grammar-production-PN_CHARS'>PN_CHARS</a> <code>| </code> '<code class='grammar-literal'>.</code>' <code>| </code> '<code class='grammar-literal'>:</code>' <code>| </code> <a href='#grammar-production-PLX'>PLX</a>)<code class='grammar-star'>*</code> <a href='#grammar-production-PN_CHARS'>PN_CHARS</a> <code>| </code> '<code class='grammar-literal'>:</code>' <code>| </code> <a href='#grammar-production-PLX'>PLX</a>)?</td>
+</tr>
+            <tr id="grammar-production-PLX" data-grammar-original="[169s] PLX ::= PERCENT | PN_LOCAL_ESC" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PERCENT&#x27;), (&#x27;id&#x27;, &#x27;PN_LOCAL_ESC&#x27;)])" class='grammar-token'>
+    <td>[169s]</td>
+    <td><code>PLX</code></td>
+    <td>::=</td>
+    <td><a href='#grammar-production-PERCENT'>PERCENT</a> <code>| </code> <a href='#grammar-production-PN_LOCAL_ESC'>PN_LOCAL_ESC</a></td>
+</tr>
+            <tr id="grammar-production-PERCENT" data-grammar-original="[170s] PERCENT ::= &#x27;%&#x27; HEX HEX" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;%&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;), (&#x27;id&#x27;, &#x27;HEX&#x27;)])" class='grammar-token'>
+    <td>[170s]</td>
+    <td><code>PERCENT</code></td>
     <td>::=</td>
     <td>'<code class='grammar-literal'>%</code>' <a href='#grammar-production-HEX'>HEX</a> <a href='#grammar-production-HEX'>HEX</a></td>
 </tr>
-            <tr id="grammar-production-HEX" data-grammar-original="[165s] HEX ::= [0-9] | [A-F] | [a-f]" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;0-9&#x27;), (&#x27;[&#x27;, &#x27;A-F&#x27;), (&#x27;[&#x27;, &#x27;a-f&#x27;)])" class='grammar-token'>
-    <td>[165s]<td>
-    <td><code>HEX</code><td>
+            <tr id="grammar-production-HEX" data-grammar-original="[171s] HEX ::= [0-9] | [A-F] | [a-f]" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;0-9&#x27;), (&#x27;[&#x27;, &#x27;A-F&#x27;), (&#x27;[&#x27;, &#x27;a-f&#x27;)])" class='grammar-token'>
+    <td>[171s]</td>
+    <td><code>HEX</code></td>
     <td>::=</td>
-    <td>[<code class='grammar-chars'>0-9</code>] <code>|</code> [<code class='grammar-chars'>A-F</code>] <code>|</code> [<code class='grammar-chars'>a-f</code>]</td>
+    <td>[<code class='grammar-chars'>0-9</code>] <code>| </code> [<code class='grammar-chars'>A-F</code>] <code>| </code> [<code class='grammar-chars'>a-f</code>]</td>
 </tr>
-            <tr id="grammar-production-PN_LOCAL_ESC" data-grammar-original="[166s] PN_LOCAL_ESC ::= &#x27;\&#x27; ( &#x27;_&#x27; | &#x27;~&#x27; | &#x27;.&#x27; | &#x27;-&#x27; | &#x27;!&#x27; | &#x27;$&#x27; | &#x27;&amp;&#x27; | &quot;&#x27;&quot; | &#x27;(&#x27; | &#x27;)&#x27; | &#x27;*&#x27; | &#x27;+&#x27; | &#x27;,&#x27; | &#x27;;&#x27; | &#x27;=&#x27; | &#x27;/&#x27; | &#x27;?&#x27; | &#x27;#&#x27; | &#x27;@&#x27; | &#x27;%&#x27; )" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;\\&#x27;), (&#x27;|&#x27;, [(&quot;&#x27;&quot;, &#x27;_&#x27;), (&quot;&#x27;&quot;, &#x27;~&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;), (&quot;&#x27;&quot;, &#x27;-&#x27;), (&quot;&#x27;&quot;, &#x27;!&#x27;), (&quot;&#x27;&quot;, &#x27;$&#x27;), (&quot;&#x27;&quot;, &#x27;&amp;&#x27;), (&quot;&#x27;&quot;, &quot;&#x27;&quot;), (&quot;&#x27;&quot;, &#x27;(&#x27;), (&quot;&#x27;&quot;, &#x27;)&#x27;), (&quot;&#x27;&quot;, &#x27;*&#x27;), (&quot;&#x27;&quot;, &#x27;+&#x27;), (&quot;&#x27;&quot;, &#x27;,&#x27;), (&quot;&#x27;&quot;, &#x27;;&#x27;), (&quot;&#x27;&quot;, &#x27;=&#x27;), (&quot;&#x27;&quot;, &#x27;/&#x27;), (&quot;&#x27;&quot;, &#x27;?&#x27;), (&quot;&#x27;&quot;, &#x27;#&#x27;), (&quot;&#x27;&quot;, &#x27;@&#x27;), (&quot;&#x27;&quot;, &#x27;%&#x27;)])])" class='grammar-token'>
-    <td>[166s]<td>
-    <td><code>PN_LOCAL_ESC</code><td>
+            <tr id="grammar-production-PN_LOCAL_ESC" data-grammar-original="[172s] PN_LOCAL_ESC ::= &#x27;\&#x27; ( &#x27;_&#x27; | &#x27;~&#x27; | &#x27;.&#x27; | &#x27;-&#x27; | &#x27;!&#x27; | &#x27;$&#x27; | &#x27;&amp;&#x27; | &quot;&#x27;&quot; | &#x27;(&#x27; | &#x27;)&#x27; | &#x27;*&#x27; | &#x27;+&#x27; | &#x27;,&#x27; | &#x27;;&#x27; | &#x27;=&#x27; | &#x27;/&#x27; | &#x27;?&#x27; | &#x27;#&#x27; | &#x27;@&#x27; | &#x27;%&#x27; )" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;\\&#x27;), (&#x27;|&#x27;, [(&quot;&#x27;&quot;, &#x27;_&#x27;), (&quot;&#x27;&quot;, &#x27;~&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;), (&quot;&#x27;&quot;, &#x27;-&#x27;), (&quot;&#x27;&quot;, &#x27;!&#x27;), (&quot;&#x27;&quot;, &#x27;$&#x27;), (&quot;&#x27;&quot;, &#x27;&amp;&#x27;), (&quot;&#x27;&quot;, &quot;&#x27;&quot;), (&quot;&#x27;&quot;, &#x27;(&#x27;), (&quot;&#x27;&quot;, &#x27;)&#x27;), (&quot;&#x27;&quot;, &#x27;*&#x27;), (&quot;&#x27;&quot;, &#x27;+&#x27;), (&quot;&#x27;&quot;, &#x27;,&#x27;), (&quot;&#x27;&quot;, &#x27;;&#x27;), (&quot;&#x27;&quot;, &#x27;=&#x27;), (&quot;&#x27;&quot;, &#x27;/&#x27;), (&quot;&#x27;&quot;, &#x27;?&#x27;), (&quot;&#x27;&quot;, &#x27;#&#x27;), (&quot;&#x27;&quot;, &#x27;@&#x27;), (&quot;&#x27;&quot;, &#x27;%&#x27;)])])" class='grammar-token'>
+    <td>[172s]</td>
+    <td><code>PN_LOCAL_ESC</code></td>
     <td>::=</td>
-    <td>'<code class='grammar-literal'>\</code>' '<code class='grammar-literal'>_</code>' <code>|</code> '<code class='grammar-literal'>~</code>' <code>|</code> '<code class='grammar-literal'>.</code>' <code>|</code> '<code class='grammar-literal'>-</code>' <code>|</code> '<code class='grammar-literal'>!</code>' <code>|</code> '<code class='grammar-literal'>$</code>' <code>|</code> '<code class='grammar-literal'>&amp;</code>' <code>|</code> "<code class="grammar-literal">&#x27;</code>" <code>|</code> '<code class='grammar-literal'>(</code>' <code>|</code> '<code class='grammar-literal'>)</code>' <code>|</code> '<code class='grammar-literal'>*</code>' <code>|</code> '<code class='grammar-literal'>+</code>' <code>|</code> '<code class='grammar-literal'>,</code>' <code>|</code> '<code class='grammar-literal'>;</code>' <code>|</code> '<code class='grammar-literal'>=</code>' <code>|</code> '<code class='grammar-literal'>/</code>' <code>|</code> '<code class='grammar-literal'>?</code>' <code>|</code> '<code class='grammar-literal'>#</code>' <code>|</code> '<code class='grammar-literal'>@</code>' <code>|</code> '<code class='grammar-literal'>%</code>'</td>
+    <td>'<code class='grammar-literal'>\</code>' ('<code class='grammar-literal'>_</code>' <code>| </code> '<code class='grammar-literal'>~</code>' <code>| </code> '<code class='grammar-literal'>.</code>' <code>| </code> '<code class='grammar-literal'>-</code>' <code>| </code> '<code class='grammar-literal'>!</code>' <code>| </code> '<code class='grammar-literal'>$</code>' <code>| </code> '<code class='grammar-literal'>&amp;</code>' <code>| </code> "<code class="grammar-literal">&#x27;</code>" <code>| </code> '<code class='grammar-literal'>(</code>' <code>| </code> '<code class='grammar-literal'>)</code>' <code>| </code> '<code class='grammar-literal'>*</code>' <code>| </code> '<code class='grammar-literal'>+</code>' <code>| </code> '<code class='grammar-literal'>,</code>' <code>| </code> '<code class='grammar-literal'>;</code>' <code>| </code> '<code class='grammar-literal'>=</code>' <code>| </code> '<code class='grammar-literal'>/</code>' <code>| </code> '<code class='grammar-literal'>?</code>' <code>| </code> '<code class='grammar-literal'>#</code>' <code>| </code> '<code class='grammar-literal'>@</code>' <code>| </code> '<code class='grammar-literal'>%</code>')</td>
 </tr>
-    </tbody>
 </table>
--- a/rdf-turtle/turtle.bnf	Mon Aug 20 14:56:55 2012 -0400
+++ b/rdf-turtle/turtle.bnf	Mon Aug 20 14:57:39 2012 -0400
@@ -1,17 +1,20 @@
-[1] turtleDoc ::= (statement)* 
+[1] turtleDoc ::= statement* 
  
-[2] statement ::= directive "." 
+[2] statement ::= directive 
  | triples "." 
 [3] directive ::= prefixID 
- | base 
-[4] prefixID ::= '@prefix' PNAME_NS IRIREF 
+ | base | sparqlPrefix | sparqlBase
+[4] prefixID ::= '@prefix' PNAME_NS IRIREF "."
  
-[5] base ::= '@base' IRIREF 
+[5] base ::= '@base' IRIREF "."
+
+[28*] sparqlPrefix ::= [Pp][Rr][Ee][Ff][Ii][Xx] PNAME_NS IRIREF
+[29*] sparqlBase ::= [Bb][Aa][Ss][Ee] IRIREF
  
-[6] triples ::= (subject predicateObjectList) |
-(blankNodePropertyList predicateObjectList?) 
+[6] triples ::= subject predicateObjectList |
+blankNodePropertyList predicateObjectList? 
  
-[7] predicateObjectList ::= verb objectList ( ";" verb objectList )* (";")? 
+[7] predicateObjectList ::= verb objectList (";" (predicateObjectList)?)* 
  
 [8] objectList ::= object ( "," object )* 
  
@@ -23,85 +26,72 @@
  
 [12] object ::= iri 
  | blank 
+ | blankNodePropertyList
  | literal 
 [13] literal ::= RDFLiteral 
  | NumericLiteral 
  | BooleanLiteral 
 [14] blank ::= BlankNode 
- | blankNodePropertyList 
  | collection 
 [15] blankNodePropertyList ::= "[" predicateObjectList "]" 
  
 [16] collection ::= "(" object* ")" 
- 
-[60s] RDFLiteral ::= String ( LANGTAG | ( "^^" iri ) )? 
+[17] NumericLiteral ::= INTEGER | DECIMAL | DOUBLE 
+
+[128s] RDFLiteral ::= String ( LANGTAG | ( "^^" iri ) )? 
  
-[61s] NumericLiteral ::= NumericLiteralUnsigned 
- | NumericLiteralPositive 
- | NumericLiteralNegative 
-[62s] NumericLiteralUnsigned ::= INTEGER 
- | DECIMAL 
- | DOUBLE 
-[63s] NumericLiteralPositive ::= INTEGER_POSITIVE 
- | DECIMAL_POSITIVE 
- | DOUBLE_POSITIVE 
-[64s] NumericLiteralNegative ::= INTEGER_NEGATIVE 
- | DECIMAL_NEGATIVE 
- | DOUBLE_NEGATIVE 
-[65s] BooleanLiteral ::= "true" 
+[133s] BooleanLiteral ::= "true" 
  | "false" 
-[66s] String ::= STRING_LITERAL1 
- | STRING_LITERAL2 
- | STRING_LITERAL_LONG1 
- | STRING_LITERAL_LONG2 
-[67s] iri ::= IRIREF 
+[18] String ::= STRING_LITERAL_QUOTE 
+ | STRING_LITERAL_SINGLE_QUOTE 
+ | STRING_LITERAL_LONG_SINGLE_QUOTE 
+ | STRING_LITERAL_LONG_QUOTE 
+[135s] iri ::= IRIREF 
  | PrefixedName 
-[68s] PrefixedName ::= PNAME_LN 
+[136s] PrefixedName ::= PNAME_LN 
  | PNAME_NS 
-[69s] BlankNode ::= BLANK_NODE_LABEL 
+[137s] BlankNode ::= BLANK_NODE_LABEL 
  | ANON 
 
 @terminals
 
-[132s] IRIREF ::=  '<' ([^#x00-#x20<>\"{}|^`\\] | UCHAR)* '>'
- 
-[133s] PNAME_NS ::= PN_PREFIX? ":" 
+[19] IRIREF ::=  '<' ([^#x00-#x20<>\"{}|^`\] | UCHAR)* '>'
  
-[134s] PNAME_LN ::= PNAME_NS PN_LOCAL 
+[139s] PNAME_NS ::= PN_PREFIX? ":" 
  
-[135s] BLANK_NODE_LABEL ::= '_:' ( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)?
+[140s] PNAME_LN ::= PNAME_NS PN_LOCAL 
  
-[19] LANGTAG ::= "@" [a-zA-Z]+ ( "-" [a-zA-Z0-9]+ )* 
+[141s] BLANK_NODE_LABEL ::= '_:' ( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)?
+ 
+[144s] LANGTAG ::= "@" [a-zA-Z]+ ( "-" [a-zA-Z0-9]+ )* 
 [20] INTEGER ::= [+-]? [0-9]+
  
-[21] DECIMAL ::= [+-]? [0-9]+ "." [0-9]+ 
- | "." [0-9]+ 
-[22] DOUBLE ::= [+-]? [0-9]+ "." [0-9]+ EXPONENT 
- | "." ( [0-9] )+ EXPONENT 
- | ( [0-9] )+ EXPONENT 
+[21] DECIMAL ::= [+-]?  ( ([0-9])* '.' ([0-9])+  )
+[22] DOUBLE ::= [+-]? ( [0-9]+ '.' [0-9]* EXPONENT | '.' ([0-9])+ EXPONENT | ([0-9])+ 
+EXPONENT )
   
-[148s] EXPONENT ::= [eE] [+-]? [0-9]+ 
+[154s] EXPONENT ::= [eE] [+-]? [0-9]+ 
  
-[149s] STRING_LITERAL1 ::= '"' ( ( [^#x27#x5C#xA#xD]) | ECHAR | UCHAR )* '"' 
- 
-[150s] STRING_LITERAL2 ::= "'" ( ( [^#x22#x5C#xA#xD]) | ECHAR | UCHAR )* "'" 
+[23] STRING_LITERAL_QUOTE ::= '"' ( [^#x22#x5C#xA#xD] | ECHAR | UCHAR )* '"' 
  
-[151s] STRING_LITERAL_LONG1 ::= "'''" ( ( "'" | "''" )? ( [^'\] | ECHAR | UCHAR ) )* "'''" 
+[24] STRING_LITERAL_SINGLE_QUOTE ::= "'" ( [^#x27#x5C#xA#xD] | ECHAR | UCHAR )* "'" 
  
-[152s] STRING_LITERAL_LONG2 ::= '"""' ( ( '"' | '""' )? ( [^"\] | ECHAR | UCHAR ) )* '"""' 
+[25] STRING_LITERAL_LONG_SINGLE_QUOTE ::= "'''" ( ( "'" | "''" )? ( [^'\] | ECHAR | UCHAR ) )* "'''" 
  
-[19] UCHAR ::= ( "\u" HEX HEX HEX HEX ) 
+[26] STRING_LITERAL_LONG_QUOTE ::= '"""' ( ( '"' | '""' )? ( [^"\] | ECHAR | UCHAR ) )* '"""' 
+ 
+[27] UCHAR ::= ( "\u" HEX HEX HEX HEX ) 
  | ( "\U" HEX HEX HEX HEX HEX HEX HEX HEX ) 
 
-[153s] ECHAR ::= "\" [tbnrf\"'] 
- 
-[154s] NIL ::= "(" (WS)* ")" 
+[159s] ECHAR ::= "\" [tbnrf\"'] 
  
-[155s] WS ::= #x20 | #x9 | #xD | #xA
+[160s] NIL ::= "(" WS* ")" 
+ 
+[161s] WS ::= #x20 | #x9 | #xD | #xA
 
-[156s] ANON ::= "[" (WS)* "]" 
+[162s] ANON ::= "[" WS* "]" 
  
-[157s] PN_CHARS_BASE ::= [A-Z] 
+[163s] PN_CHARS_BASE ::= [A-Z] 
  | [a-z] 
  | [#00C0-#00D6] 
  | [#00D8-#00F6] 
@@ -115,23 +105,22 @@
  | [#F900-#FDCF] 
  | [#FDF0-#FFFD] 
  | [#10000-#EFFFF] 
-[158s] PN_CHARS_U  ::=  PN_CHARS_BASE 
+[164s] PN_CHARS_U  ::=  PN_CHARS_BASE 
  | '_' 
- | ':'
-[160s] PN_CHARS ::= PN_CHARS_U 
+[166s] PN_CHARS ::= PN_CHARS_U 
  | "-" 
  | [0-9] 
  | #00B7 
  | [#0300-#036F] 
  | [#203F-#2040] 
-[161s] PN_PREFIX ::= PN_CHARS_BASE ( ( PN_CHARS | "." )* PN_CHARS )? 
+[167s] PN_PREFIX ::= PN_CHARS_BASE ( ( PN_CHARS | "." )* PN_CHARS )? 
  
-[162s] PN_LOCAL ::= ( PN_CHARS_U | [0-9] | PLX ) ( ( PN_CHARS | '.' | PLX )*  ( PN_CHARS | PLX ) ) ?
+[168s] PN_LOCAL ::= ( PN_CHARS_U | ':' | [0-9] | PLX ) ( ( PN_CHARS | '.' | ':' | PLX )*  ( PN_CHARS | ':' | PLX ) ) ?
 
-[163s] PLX ::= PERCENT | PN_LOCAL_ESC
+[169s] PLX ::= PERCENT | PN_LOCAL_ESC
 
-[164s] PERCENT ::= '%' HEX HEX
+[170s] PERCENT ::= '%' HEX HEX
 
-[165s] HEX ::= [0-9] | [A-F] | [a-f]
+[171s] HEX ::= [0-9] | [A-F] | [a-f]
 
-[166s] PN_LOCAL_ESC ::= '\' ( '_' | '~' | '.' | '-' | '!' | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#' | '@' | '%' )
\ No newline at end of file
+[172s] PN_LOCAL_ESC ::= '\' ( '_' | '~' | '.' | '-' | '!' | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#' | '@' | '%' )
\ No newline at end of file