Merge
authorGavin Carothers <gavin@carothers.name>
Mon, 30 Apr 2012 18:46:37 -0700
changeset 273 aa4d6fe27e25
parent 272 7037c9a89fe4 (current diff)
parent 266 ffc45e068c65 (diff)
child 274 d8fcbd818477
Merge
rdf-turtle/index.html
--- a/rdf-turtle/index.html	Mon Apr 30 18:45:18 2012 -0700
+++ b/rdf-turtle/index.html	Mon Apr 30 18:46:37 2012 -0700
@@ -301,7 +301,7 @@
 
 
 				<p>
-				  Literals in Turtle N-Triples have a lexical form followed by a language tag, a datatype IRI, or neither.
+				  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>.
@@ -342,27 +342,40 @@
 
 				</section>
 				<section id="abbrev">
-				<h3 >Abbreviating Common Datatypes in Turtle</h3>
-				<p>Integer values, arbitrary precision decimal values, double precision floating point values and boolean values may be written without quotes or datatypes as follows:</p>
-				<ul>
-				  <li>
-				    Integer values may be written as an optional sign and a series of digits. Integers match the regular expression "<code>[+-]?[0-9]+</code>".
-				  </li>
+				<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>
+					<thead>
+						<tr>
+							<th>Data Type</th>
+							<th>Abbreviated</th>
+							<th>Lexical</th>
+							<th>Description</th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td><strong>xsd:integer</strong></td>
+							<td><code>-5</code></td>
+							<td><code>"-5"^^xsd:integer</code></td>
+							<td>Integer values may be written as an optional sign and a series of digits. Integers match the regular expression "<code>[+-]?[0-9]+</code>".</td>
+						</tr>
+						<tr>
+							<td><strong>xsd:decimal</strong></td>
+							<td><code>-5.0</code></td>
+							<td><code>"-5.0"^^xsd:decimal</code></td>
+							<td>Arbitrary-precision decimals may be written as an optional sign, zero or more digits, a decimal point and one or more digits. Decimals match the regular expression "<code>[+-]?[0-9]*\.[0-9]+</code>".</td>
+						</tr>
+						<tr>
+							<td><strong>xsd:double</strong></td>
+							<td><code>4.2E9</code></td>
+							<td><code>"4.2E9"^^xsd:double</code></td>
+							<td>Double-precision floating point values may be written as an optionally signed mantissa with an optional decimal point, the letter "e" or "E", and an optionally signed integer exponent. The exponent matches the regular expression "<code>[+-]?[0-9]+</code>" and the mantissa one of these regular expressions: "<code>[+-]?[0-9]+\.[0-9]+</code>", "<code>[+-]?\.[0-9]+</code>" or "<code>[+-]?[0-9]</code>".</td>
+						</tr>
+					</tbody>
+				</table>
 
-				  <li style="padding-top: 1ex;">
-				    Arbitrary-precision decimals may be written as an optional sign, zero or more digits, a decimal point and one or more digits. Decimals match the regular expression "<code>[+-]?[0-9]*\.[0-9]+</code>".
-				  </li>
-				  <li style="padding-top: 1ex;">
-				    Double-precision floating point values may be written as an optionally signed mantissa with an optional decimal point, the letter "e" or "E", and an optionally signed integer exponent.
-				    The exponent matches the regular expression "<code>[+-]?[0-9]+</code>" and the mantissa one of these regular expressions: "<code>[+-]?[0-9]+\.[0-9]+</code>", "<code>[+-]?\.[0-9]+</code>" or "<code>[+-]?[0-9]</code>".
-				  </li>
-
-				  <li style="padding-top: 1ex;">
-				    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>.
-				  </li>
-				</ul>
-
-				<table class="separated">
+<!-- 				<table class="separated">
 				  <caption style="font-weight: bold;">Example numeric representations:</caption>
 				  <tbody>
 				    <tr><th><a href="http://www.w3.org/TR/xmlschema-2/#integer">xsd:integer</a></th>
@@ -373,17 +386,23 @@
 				    <td><code>-.5e1</code></td> <td><code>0E0</code></td> <td><code>1.234567890E0</code></td> <td><code>01e1</code></td> <td><code>+10e0</code></td></tr>
 				  </tbody>
 				</table>
-
-				<pre class="example"><script type="text/turtle">
[email protected] : <http://example.org/stats> .
+ -->
+				<pre class="example"><script type="text/turtle">@prefix : <http://example.org/stats> .
 <http://somecountry.example/census2007>
     :censusYear 2007 ;              # xsd:integer
     :birthsPerPerson .0135 ;        # xsd:decimal
     :gdpDollars 14074.2E9 ;         # xsd:double
-    :isLandlocked false .           # xsd:boolean
     :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>
+				<pre class="example"><script type="text/turtle">@prefix : <http://example.org/stats> .
+<http://somecountry.example/census2007>
+    :isLandlocked false .           # xsd:boolean</script></pre>
+
+			</section>
 			</section>
 
 			<section id="BNodes">
@@ -903,7 +922,8 @@
 
           <p>For example,</p>
 
-          <pre class="example untested"><script type="text/turtle">(1 2.0 3E1) :p "w" .</script></pre>
+          <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>
 
@@ -918,7 +938,8 @@
 
           <p>RDF collections can be nested and can involve other syntactic forms:</p>
 
-          <pre class="example untested">(1 [:p :q] ( 2 ) ) .</pre>
+          <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 ;
@@ -935,19 +956,7 @@
           <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>
-
-          <p>The XML (Namespace name, Local name) pair that identifies
-          the Turtle language is:<br />
-          Namespace: <code>http://www.w3.org/ns/formats/Turtle</code><br />
-          Local name: <code>turtle</code><br />
-          The suggested namespace prefix is <code>ttl</code> (informative)
-          which would make this <code>ttl:turtle</code> as an XML QName.
-          </p>
-          <p class="issue">Previous versions of the Turtle specified 
-          <code>http://www.w3.org/2008/turtle#turtle</code> as the IRI for the Turtle language. 
-          This change aligns Turtle with identifiers for RDF/XML, N3, POWDER, etc</p>
-          
+          </p>          
         </section>
         <section id="sec-conformance">
           <h2>Conformance</h2>
@@ -986,8 +995,7 @@
         <h2>Turtle in HTML</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">
+        <pre class="example">&lt;script type="text/turtle">
 @prefix dc: &lt;http://purl.org/dc/terms/> .
 @prefix frbr: &lt;http://purl.org/vocab/frbr/core#> .
 
@@ -1014,8 +1022,7 @@
           Like JavaScript, Turtle authored for HTML (<code>text/html</code>) can break when used in an XHTML 
           (<code>application/xhtml+xml</code>). The solution is the same one used for JavaScript.
           </p>
-        <pre class="example">
-&lt;script type="text/turtle">
+        <pre class="example">&lt;script type="text/turtle">
 <strong># &lt;![CDATA[</strong>
 @prefix frbr: &lt;http://purl.org/vocab/frbr/core#> .
 
@@ -1033,8 +1040,7 @@
           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'] {
+<pre class="example">script[type='text/turtle'] {
   display:block;
   white-space: pre;
   font-family: monospace;
@@ -1070,7 +1076,7 @@
 			  N-Triples triples are a sequence of RDF terms representing the subject, predicate and object of an RDF Triple. This sequence is terminated by a '.' and a new line (optional at the end of a document).
 			</p>
 
-			<pre class="example"><script type="text/plain">
+			<pre class="example"><script type="application/n-triples">
 _:subject1 <http://an.example/predicate1> "object1" .
 _:subject2 <http://an.example/predicate2> "object2" .
 </script></pre>
@@ -1133,7 +1139,7 @@
 		  <td class="r">prefixed name</td>
 		  <td style="background-color: green; border:1px solid black;">yes</td>
 		  <td>no</td>
-		  <td><code>foo:bar\=baz</code></td>
+		  <td><code>rdfs:label</code></td>
 		</tr>
 		<tr>
 		  <td class="r"><code>a</code> for the predicate <code>rdf:type</code></td>
@@ -1250,8 +1256,8 @@
           <p>A N-Triples document is a Unicode[[!UNICODE]] character string encoded in UTF-8.
           Unicode codepoints only in the range U+0 to U+10FFFF inclusive are allowed.</p>
           <p><a href="#sec-strings">Escape sequence rules</a> are the same as Turtle. However, as only the <code>STRING_LITERAL2</code> production is allowed new lines in literals MUST be escaped.</p>
-          <pre data-include="n-prime.bnf" data-oninclude="esc">
-          </pre>
+          <div data-include="n-prime-bnf.html">
+          </div>
         </section>
       </section>
 
@@ -1264,7 +1270,7 @@
         <h3>Turtle compared to Notation 3 (Informative)</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.
+	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 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rdf-turtle/n-prime-bnf.html	Mon Apr 30 18:46:37 2012 -0700
@@ -0,0 +1,112 @@
+<table class="grammar">
+    <tbody>
+            <tr id="grammar-production-ntriplesDoc" data-grammar-original="[1]  ntriplesDoc             ::= triple? (EOL triple)* EOL?" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;?&#x27;, (&#x27;id&#x27;, &#x27;triple&#x27;)), (&#x27;*&#x27;, (&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;EOL&#x27;), (&#x27;id&#x27;, &#x27;triple&#x27;)])), (&#x27;?&#x27;, (&#x27;id&#x27;, &#x27;EOL&#x27;))])" >
+    <td>[1]<td>
+    <td><code>ntriplesDoc</code><td>
+    <td>::=</td>
+    <td>(<a href='#grammar-production-triple'>triple</a>)? (<a href='#grammar-production-EOL'>EOL</a> <a href='#grammar-production-triple'>triple</a>)<code class='grammar-star'>*</code> (<a href='#grammar-production-EOL'>EOL</a>)?</td>
+</tr>
+            <tr id="grammar-production-triple" data-grammar-original="[2]  triple                  ::= subj pred obj &#x27;.&#x27;" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;subj&#x27;), (&#x27;id&#x27;, &#x27;pred&#x27;), (&#x27;id&#x27;, &#x27;obj&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;)])" >
+    <td>[2]<td>
+    <td><code>triple</code><td>
+    <td>::=</td>
+    <td><a href='#grammar-production-subj'>subj</a> <a href='#grammar-production-pred'>pred</a> <a href='#grammar-production-obj'>obj</a> '<code class='grammar-literal'>.</code>'</td>
+</tr>
+            <tr id="grammar-production-subj" data-grammar-original="[3]  subj                    ::= IRI_REF | BLANK_NODE_LABEL" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;IRI_REF&#x27;), (&#x27;id&#x27;, &#x27;BLANK_NODE_LABEL&#x27;)])" >
+    <td>[3]<td>
+    <td><code>subj</code><td>
+    <td>::=</td>
+    <td>(<a href='#grammar-production-IRI_REF'>IRI_REF</a> <code>|</code> <a href='#grammar-production-BLANK_NODE_LABEL'>BLANK_NODE_LABEL</a>)</td>
+</tr>
+            <tr id="grammar-production-pred" data-grammar-original="[4]  pred                    ::= IRI_REF" data-grammar-expression="(&#x27;id&#x27;, &#x27;IRI_REF&#x27;)" >
+    <td>[4]<td>
+    <td><code>pred</code><td>
+    <td>::=</td>
+    <td><a href='#grammar-production-IRI_REF'>IRI_REF</a></td>
+</tr>
+            <tr id="grammar-production-obj" data-grammar-original="[5]  obj                     ::= IRI_REF | BLANK_NODE_LABEL | lit" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;IRI_REF&#x27;), (&#x27;id&#x27;, &#x27;BLANK_NODE_LABEL&#x27;), (&#x27;id&#x27;, &#x27;lit&#x27;)])" >
+    <td>[5]<td>
+    <td><code>obj</code><td>
+    <td>::=</td>
+    <td>(<a href='#grammar-production-IRI_REF'>IRI_REF</a> <code>|</code> <a href='#grammar-production-BLANK_NODE_LABEL'>BLANK_NODE_LABEL</a> <code>|</code> <a href='#grammar-production-lit'>lit</a>)</td>
+</tr>
+            <tr id="grammar-production-lit" data-grammar-original="[6]  lit                     ::= STRING_LITERAL2 (&#x27;^^&#x27; IRI_REF | (&#x27;@&#x27; LANG) )?" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;STRING_LITERAL2&#x27;), (&#x27;?&#x27;, (&#x27;|&#x27;, [(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;^^&#x27;), (&#x27;id&#x27;, &#x27;IRI_REF&#x27;)]), (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;@&#x27;), (&#x27;id&#x27;, &#x27;LANG&#x27;)])]))])" >
+    <td>[6]<td>
+    <td><code>lit</code><td>
+    <td>::=</td>
+    <td><a href='#grammar-production-STRING_LITERAL2'>STRING_LITERAL2</a> (('<code class='grammar-literal'>^^</code>' <a href='#grammar-production-IRI_REF'>IRI_REF</a> <code>|</code> '<code class='grammar-literal'>@</code>' <a href='#grammar-production-LANG'>LANG</a>))?</td>
+</tr>
+            <tr id="grammar-production-LANG" data-grammar-original="[7]  LANG                    ::= [a-zA-Z]+ ( &quot;-&quot; [a-zA-Z0-9]+ )*" data-grammar-expression="(&#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>[7]<td>
+    <td><code>LANG</code><td>
+    <td>::=</td>
+    <td>([<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-EOL" data-grammar-original="[8]  EOL                     ::= [\r\n]+" data-grammar-expression="(&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;\\r\\n&#x27;))" class='grammar-token'>
+    <td>[8]<td>
+    <td><code>EOL</code><td>
+    <td>::=</td>
+    <td>([<code class='grammar-chars'>\r\n</code>])<code class='grammar-plus'>+</code></td>
+</tr>
+            <tr id="grammar-production-IRI_REF" data-grammar-original="[70s] IRI_REF           ::= &#x27;&lt;&#x27; ([^&lt;&gt;&quot;{}|^`\]-[#x00-#x20] | UCHAR )* &#x27;&gt;&#x27;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;&lt;&#x27;), (&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;-&#x27;, [(&#x27;[&#x27;, &#x27;^&lt;&gt;&quot;{}|^`\\&#x27;), (&#x27;[&#x27;, &#x27;#x00-#x20&#x27;)]), (&#x27;id&#x27;, &#x27;UCHAR&#x27;)])), (&quot;&#x27;&quot;, &#x27;&gt;&#x27;)])" class='grammar-token'>
+    <td>[70s]<td>
+    <td><code>IRI_REF</code><td>
+    <td>::=</td>
+    <td>'<code class='grammar-literal'>&lt;</code>' (([<code class='grammar-chars'>^<>"{}|^`\</code>]<code class='grammar-diff'>-</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>
+</tr>
+            <tr id="grammar-production-BLANK_NODE_LABEL" data-grammar-original="[73s] BLANK_NODE_LABEL  ::= &quot;_:&quot; PN_LOCAL" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;_:&#x27;), (&#x27;id&#x27;, &#x27;PN_LOCAL&#x27;)])" class='grammar-token'>
+    <td>[73s]<td>
+    <td><code>BLANK_NODE_LABEL</code><td>
+    <td>::=</td>
+    <td>'<code class='grammar-literal'>_:</code>' <a href='#grammar-production-PN_LOCAL'>PN_LOCAL</a></td>
+</tr>
+            <tr id="grammar-production-STRING_LITERAL2" data-grammar-original="[88s] STRING_LITERAL2   ::= &#x27;&quot;&#x27; ( ( [^\&quot;\\\n\r] ) | ECHAR | UCHAR )* &#x27;&quot;&#x27;" data-grammar-expression="(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;&quot;&#x27;), (&#x27;*&#x27;, (&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;^\\&quot;\\\\\\n\\r&#x27;), (&#x27;id&#x27;, &#x27;ECHAR&#x27;), (&#x27;id&#x27;, &#x27;UCHAR&#x27;)])), (&quot;&#x27;&quot;, &#x27;&quot;&#x27;)])" class='grammar-token'>
+    <td>[88s]<td>
+    <td><code>STRING_LITERAL2</code><td>
+    <td>::=</td>
+    <td>'<code class='grammar-literal'>&quot;</code>' (([<code class='grammar-chars'>^\"\\\n\r</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-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="[91s] 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>[91s]<td>
+    <td><code>ECHAR</code><td>
+    <td>::=</td>
+    <td>'<code class='grammar-literal'>\\</code>' [<code class='grammar-chars'>tbnrf\\\"'</code>]</td>
+</tr>
+            <tr id="grammar-production-PN_CHARS_BASE" data-grammar-original="[95s] 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>[95s]<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="[96s] PN_CHARS_U        ::= PN_CHARS_BASE| &quot;_&quot;" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;PN_CHARS_BASE&#x27;), (&quot;&#x27;&quot;, &#x27;_&#x27;)])" class='grammar-token'>
+    <td>[96s]<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="[98s] 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>[98s]<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_LOCAL" data-grammar-original="[100s] PN_LOCAL         ::= ( PN_CHARS_U | [0-9] ) ( ( PN_CHARS | &quot;.&quot; )* PN_CHARS )?" data-grammar-expression="(&#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>[100s]<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>]) (((<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-HEX" data-grammar-original="[162s] 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>[162s]<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>
+</tr>
+    </tbody>
+</table>
--- a/rdf-turtle/n-prime.bnf	Mon Apr 30 18:45:18 2012 -0700
+++ b/rdf-turtle/n-prime.bnf	Mon Apr 30 18:46:37 2012 -0700
@@ -1,16 +1,15 @@
-ntriplesDoc             ::= triple? (EOL triple)* EOL?
-triple                  ::= subj pred obj '.'
-subj                    ::= IRI_REF | BLANK_NODE_LABEL
-pred                    ::= IRI_REF 
-obj                     ::= IRI_REF | BLANK_NODE_LABEL | lit
-lit                     ::= STRING_LITERAL2 ('^^' IRI_REF | ('@' LANG) )?
+[1]  ntriplesDoc             ::= triple? (EOL triple)* EOL?
+[2]  triple                  ::= subj pred obj '.'
+[3]  subj                    ::= IRI_REF | BLANK_NODE_LABEL
+[4]  pred                    ::= IRI_REF 
+[5]  obj                     ::= IRI_REF | BLANK_NODE_LABEL | lit
+[6]  lit                     ::= STRING_LITERAL2 ('^^' IRI_REF | ('@' LANG) )?
 
 @terminals
-LANG                    ::= [a-zA-Z]+ ( "-" [a-zA-Z0-9]+ )*
+[7]  LANG                    ::= [a-zA-Z]+ ( "-" [a-zA-Z0-9]+ )*
 
-EOL                     ::= [\r\n]+
+[8]  EOL                     ::= [\r\n]+
 
-/* From Turtle */
 [70s] IRI_REF           ::= '<' ([^<>"{}|^`\]-[#x00-#x20] | UCHAR )* '>'
 [73s] BLANK_NODE_LABEL  ::= "_:" PN_LOCAL 
 [88s] STRING_LITERAL2   ::= '"' ( ( [^\"\\\n\r] ) | ECHAR | UCHAR )* '"' 
@@ -40,6 +39,4 @@
                           | [#0300-#036F] 
                           | [#203F-#2040] 
 [100s] PN_LOCAL         ::= ( PN_CHARS_U | [0-9] ) ( ( PN_CHARS | "." )* PN_CHARS )?
-[162s] HEX              ::= [0-9] | [A-F] | [a-f]
-
[email protected]                   ::= [ \t]+ | "#" [^\r\n]* [\r\n]
\ No newline at end of file
+[162s] HEX              ::= [0-9] | [A-F] | [a-f]
\ No newline at end of file