N-Triples grammar cleanup
authorGavin Carothers <gavin@carothers.name>
Sat, 09 Mar 2013 14:01:59 -0800
changeset 639 d0925d86f2cd
parent 638 9869126a7c20
child 640 71cdb31b7ee4
N-Triples grammar cleanup
rdf-turtle/n-prime-bnf.html
rdf-turtle/n-prime.bnf
--- a/rdf-turtle/n-prime-bnf.html	Sat Mar 09 08:58:11 2013 -0800
+++ b/rdf-turtle/n-prime-bnf.html	Sat Mar 09 14:01:59 2013 -0800
@@ -1,108 +1,112 @@
-<table id="n-triples" class="grammar">
+<table  class="grammar">
     <tbody class="grammar-productions">
-            <tr id="n-triples-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='#n-triples-grammar-production-triple'>triple</a>)? (<a href='#n-triples-grammar-production-EOL'>EOL</a> <a href='#n-triples-grammar-production-triple'>triple</a>)<code class='grammar-star'>*</code> (<a href='#n-triples-grammar-production-EOL'>EOL</a>)?</td>
-</tr>
-            <tr id="n-triples-grammar-production-triple" data-grammar-original="[2]  triple             ::= subject predicate object &#x27;.&#x27;" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;subject&#x27;), (&#x27;id&#x27;, &#x27;predicate&#x27;), (&#x27;id&#x27;, &#x27;object&#x27;), (&quot;&#x27;&quot;, &#x27;.&#x27;)])" >
-    <td>[2]<td>
-    <td><code>triple</code><td>
-    <td>::=</td>
-    <td><a href='#n-triples-grammar-production-subject'>subject</a> <a href='#n-triples-grammar-production-predicate'>predicate</a> <a href='#n-triples-grammar-production-object'>object</a> '<code class='grammar-literal'>.</code>'</td>
-</tr>
-            <tr id="n-triples-grammar-production-subject" data-grammar-original="[3]  subject           ::= IRIREF | BLANK_NODE_LABEL" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;IRIREF&#x27;), (&#x27;id&#x27;, &#x27;BLANK_NODE_LABEL&#x27;)])" >
-    <td>[3]<td>
-    <td><code>subject</code><td>
-    <td>::=</td>
-    <td>(<a href='#n-triples-grammar-production-IRIREF'>IRIREF</a> <code>|</code> <a href='#n-triples-grammar-production-BLANK_NODE_LABEL'>BLANK_NODE_LABEL</a>)</td>
-</tr>
-            <tr id="n-triples-grammar-production-predicate" data-grammar-original="[4]  predicate          ::= IRIREF" data-grammar-expression="(&#x27;id&#x27;, &#x27;IRIREF&#x27;)" >
-    <td>[4]<td>
-    <td><code>predicate</code><td>
+            <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='#n-triples-grammar-production-IRIREF'>IRIREF</a></td>
-</tr>
-            <tr id="n-triples-grammar-production-object" data-grammar-original="[5]  object             ::= IRIREF | BLANK_NODE_LABEL | literal" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;IRIREF&#x27;), (&#x27;id&#x27;, &#x27;BLANK_NODE_LABEL&#x27;), (&#x27;id&#x27;, &#x27;literal&#x27;)])" >
-    <td>[5]<td>
-    <td><code>object</code><td>
-    <td>::=</td>
-    <td>(<a href='#n-triples-grammar-production-IRIREF'>IRIREF</a> <code>|</code> <a href='#n-triples-grammar-production-BLANK_NODE_LABEL'>BLANK_NODE_LABEL</a> <code>|</code> <a href='#n-triples-grammar-production-literal'>literal</a>)</td>
-</tr>
-            <tr id="n-triples-grammar-production-literal" data-grammar-original="[6]  literal            ::= STRING_LITERAL2 (&#x27;^^&#x27; IRIREF | (&#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;IRIREF&#x27;)]), (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;@&#x27;), (&#x27;id&#x27;, &#x27;LANG&#x27;)])]))])" >
-    <td>[6]<td>
-    <td><code>literal</code><td>
-    <td>::=</td>
-    <td><a href='#n-triples-grammar-production-STRING_LITERAL2'>STRING_LITERAL2</a> (('<code class='grammar-literal'>^^</code>' <a href='#n-triples-grammar-production-IRIREF'>IRIREF</a> <code>|</code> '<code class='grammar-literal'>@</code>' <a href='#n-triples-grammar-production-LANG'>LANG</a>))?</td>
-</tr>
-    </tbody>
-    <tbody class="grammar-terminals">
-            <tr id="n-triples-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="n-triples-grammar-production-EOL" data-grammar-original="[8]  EOL                ::= [#xD#xA]+" data-grammar-expression="(&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;#xD#xA&#x27;))" class='grammar-token'>
-    <td>[8]<td>
-    <td><code>EOL</code><td>
-    <td>::=</td>
-    <td>([<code class='grammar-chars'>#xD#xA</code>])<code class='grammar-plus'>+</code></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="n-triples-grammar-production-IRIREF" data-grammar-original="[132s] IRIREF           ::= &#x27;&lt;&#x27; ([^&lt;&gt;&quot;{}|^`\]-[#x00-#x20])* | UCHAR &#x27;&gt;&#x27;" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;&lt;&#x27;), (&#x27;*&#x27;, (&#x27;-&#x27;, [(&#x27;[&#x27;, &#x27;^&lt;&gt;&quot;{}|^`\\&#x27;), (&#x27;[&#x27;, &#x27;#x00-#x20&#x27;)]))]), (&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;UCHAR&#x27;), (&quot;&#x27;&quot;, &#x27;&gt;&#x27;)])])" class='grammar-token'>
-    <td>[132s]<td>
-    <td><code>IRIREF</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 class='grammar-star'>*</code> <code>|</code> <a href='#n-triples-grammar-production-UCHAR'>UCHAR</a> '<code class='grammar-literal'>&gt;</code>')</td>
-</tr>
-            <tr id="n-triples-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>
-    <td>::=</td>
-    <td>'<code class='grammar-literal'>_:</code>' (<a href='#n-triples-grammar-production-PN_CHARS_U'>PN_CHARS_U</a> <code>|</code> [<code class='grammar-chars'>0-9</code>]) (((<a href='#n-triples-grammar-production-PN_CHARS'>PN_CHARS</a> <code>|</code> '<code class='grammar-literal'>.</code>'))<code class='grammar-star'>*</code> <a href='#n-triples-grammar-production-PN_CHARS'>PN_CHARS</a>)?</td>
-</tr>
-            <tr id="n-triples-grammar-production-STRING_LITERAL2" data-grammar-original="[150s] STRING_LITERAL2  ::= &#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>[150s]<td>
-    <td><code>STRING_LITERAL2</code><td>
-    <td>::=</td>
-    <td>'<code class='grammar-literal'>&quot;</code>' (([<code class='grammar-chars'>^#x22#x5C#xA#xD</code>] <code>|</code> <a href='#n-triples-grammar-production-ECHAR'>ECHAR</a> <code>|</code> <a href='#n-triples-grammar-production-UCHAR'>UCHAR</a>))<code class='grammar-star'>*</code> '<code class='grammar-literal'>&quot;</code>'</td>
-</tr>
-            <tr id="n-triples-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='#n-triples-grammar-production-HEX'>HEX</a> <a href='#n-triples-grammar-production-HEX'>HEX</a> <a href='#n-triples-grammar-production-HEX'>HEX</a> <a href='#n-triples-grammar-production-HEX'>HEX</a> <code>|</code> '<code class='grammar-literal'>\U</code>' <a href='#n-triples-grammar-production-HEX'>HEX</a> <a href='#n-triples-grammar-production-HEX'>HEX</a> <a href='#n-triples-grammar-production-HEX'>HEX</a> <a href='#n-triples-grammar-production-HEX'>HEX</a> <a href='#n-triples-grammar-production-HEX'>HEX</a> <a href='#n-triples-grammar-production-HEX'>HEX</a> <a href='#n-triples-grammar-production-HEX'>HEX</a> <a href='#n-triples-grammar-production-HEX'>HEX</a>)</td>
-</tr>
-            <tr id="n-triples-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>
+            <tr id="grammar-production-triple" data-grammar-original="[2]  triple             ::= WS* subject WS+ predicate WS+ object WS* &#x27;.&#x27; WS*" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;*&#x27;, (&#x27;id&#x27;, &#x27;WS&#x27;)), (&#x27;id&#x27;, &#x27;subject&#x27;), (&#x27;+&#x27;, (&#x27;id&#x27;, &#x27;WS&#x27;)), (&#x27;id&#x27;, &#x27;predicate&#x27;), (&#x27;+&#x27;, (&#x27;id&#x27;, &#x27;WS&#x27;)), (&#x27;id&#x27;, &#x27;object&#x27;), (&#x27;*&#x27;, (&#x27;id&#x27;, &#x27;WS&#x27;)), (&quot;&#x27;&quot;, &#x27;.&#x27;), (&#x27;*&#x27;, (&#x27;id&#x27;, &#x27;WS&#x27;))])" >
+    <td>[2]</td>
+    <td><code>triple</code></td>
     <td>::=</td>
-    <td>'<code class='grammar-literal'>\</code>' [<code class='grammar-chars'>tbnrf\"'</code>]</td>
-</tr>
-            <tr id="n-triples-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>
-</tr>
-            <tr id="n-triples-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='#n-triples-grammar-production-PN_CHARS_BASE'>PN_CHARS_BASE</a> <code>|</code> '<code class='grammar-literal'>_</code>' <code>|</code> '<code class='grammar-literal'>:</code>')</td>
+    <td><a href='#grammar-production-WS'>WS</a><code class='grammar-star'>*</code> <a href='#grammar-production-subject'>subject</a> <a href='#grammar-production-WS'>WS</a><code class='grammar-plus'>+</code> <a href='#grammar-production-predicate'>predicate</a> <a href='#grammar-production-WS'>WS</a><code class='grammar-plus'>+</code> <a href='#grammar-production-object'>object</a> <a href='#grammar-production-WS'>WS</a><code class='grammar-star'>*</code> '<code class='grammar-literal'>.</code>' <a href='#grammar-production-WS'>WS</a><code class='grammar-star'>*</code></td>
 </tr>
-            <tr id="n-triples-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>
+            <tr id="grammar-production-subject" data-grammar-original="[3]  subject            ::= IRIREF | BLANK_NODE_LABEL" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;IRIREF&#x27;), (&#x27;id&#x27;, &#x27;BLANK_NODE_LABEL&#x27;)])" >
+    <td>[3]</td>
+    <td><code>subject</code></td>
     <td>::=</td>
-    <td>(<a href='#n-triples-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>
+    <td><a href='#grammar-production-IRIREF'>IRIREF</a> <code>| </code> <a href='#grammar-production-BLANK_NODE_LABEL'>BLANK_NODE_LABEL</a></td>
 </tr>
-            <tr id="n-triples-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>
+            <tr id="grammar-production-predicate" data-grammar-original="[4]  predicate          ::= IRIREF" data-grammar-expression="(&#x27;id&#x27;, &#x27;IRIREF&#x27;)" >
+    <td>[4]</td>
+    <td><code>predicate</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><a href='#grammar-production-IRIREF'>IRIREF</a></td>
 </tr>
-    </tbody>
+            <tr id="grammar-production-object" data-grammar-original="[5]  object             ::= IRIREF | BLANK_NODE_LABEL | literal" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;id&#x27;, &#x27;IRIREF&#x27;), (&#x27;id&#x27;, &#x27;BLANK_NODE_LABEL&#x27;), (&#x27;id&#x27;, &#x27;literal&#x27;)])" >
+    <td>[5]</td>
+    <td><code>object</code></td>
+    <td>::=</td>
+    <td><a href='#grammar-production-IRIREF'>IRIREF</a> <code>| </code> <a href='#grammar-production-BLANK_NODE_LABEL'>BLANK_NODE_LABEL</a> <code>| </code> <a href='#grammar-production-literal'>literal</a></td>
+</tr>
+            <tr id="grammar-production-literal" data-grammar-original="[6]  literal            ::= STRING_LITERAL_QUOTE (&#x27;^^&#x27; IRIREF | (&#x27;@&#x27; LANG) )?" data-grammar-expression="(&#x27;,&#x27;, [(&#x27;id&#x27;, &#x27;STRING_LITERAL_QUOTE&#x27;), (&#x27;?&#x27;, (&#x27;|&#x27;, [(&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;^^&#x27;), (&#x27;id&#x27;, &#x27;IRIREF&#x27;)]), (&#x27;,&#x27;, [(&quot;&#x27;&quot;, &#x27;@&#x27;), (&#x27;id&#x27;, &#x27;LANG&#x27;)])]))])" >
+    <td>[6]</td>
+    <td><code>literal</code></td>
+    <td>::=</td>
+    <td><a href='#grammar-production-STRING_LITERAL_QUOTE'>STRING_LITERAL_QUOTE</a> ('<code class='grammar-literal'>^^</code>' <a href='#grammar-production-IRIREF'>IRIREF</a> <code>| </code> '<code class='grammar-literal'>@</code>' <a href='#grammar-production-LANG'>LANG</a>)?</td>
+</tr>
+<tr><td colspan="5"><h4 id="terminals">Productions for terminals</h4></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                ::= [#xD#xA]+" data-grammar-expression="(&#x27;+&#x27;, (&#x27;[&#x27;, &#x27;#xD#xA&#x27;))" class='grammar-token'>
+    <td>[8]</td>
+    <td><code>EOL</code></td>
+    <td>::=</td>
+    <td>[<code class='grammar-chars'>#xD#xA</code>]<code class='grammar-plus'>+</code></td>
+</tr>
+            <tr id="grammar-production-WS" data-grammar-original="[9]  WS                 ::= [#x20#x9]" data-grammar-expression="(&#x27;[&#x27;, &#x27;#x20#x9&#x27;)" class='grammar-token'>
+    <td>[9]</td>
+    <td><code>WS</code></td>
+    <td>::=</td>
+    <td>[<code class='grammar-chars'>#x20#x9</code>]</td>
+</tr>
+            <tr id="grammar-production-IRIREF" data-grammar-original="[10] 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>[10]</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-STRING_LITERAL_QUOTE" data-grammar-original="[11] 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>[11]</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-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>
+</tr>
+            <tr id="grammar-production-UCHAR" data-grammar-original="[12] 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>[12]</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>::=</td>
+    <td>'<code class='grammar-literal'>\</code>' [<code class='grammar-chars'>tbnrf&quot;&#x27;</code>]</td>
+</tr>
+            <tr id="grammar-production-PN_CHARS_BASE" data-grammar-original="[157s] PN_CHARS_BASE    ::= [A-Z]| [a-z]| [#x00C0-#x00D6]| [#x00D8-#x00F6]| [#x00F8-#x02FF]| [#x0370-#x037D]| [#x037F-#x1FFF]| [#x200C-#x200D]| [#x2070-#x218F]| [#x2C00-#x2FEF]| [#x3001-#xD7FF]| [#xF900-#xFDCF]| [#xFDF0-#xFFFD]| [#x10000-#xEFFFF]" data-grammar-expression="(&#x27;|&#x27;, [(&#x27;[&#x27;, &#x27;A-Z&#x27;), (&#x27;[&#x27;, &#x27;a-z&#x27;), (&#x27;[&#x27;, &#x27;#x00C0-#x00D6&#x27;), (&#x27;[&#x27;, &#x27;#x00D8-#x00F6&#x27;), (&#x27;[&#x27;, &#x27;#x00F8-#x02FF&#x27;), (&#x27;[&#x27;, &#x27;#x0370-#x037D&#x27;), (&#x27;[&#x27;, &#x27;#x037F-#x1FFF&#x27;), (&#x27;[&#x27;, &#x27;#x200C-#x200D&#x27;), (&#x27;[&#x27;, &#x27;#x2070-#x218F&#x27;), (&#x27;[&#x27;, &#x27;#x2C00-#x2FEF&#x27;), (&#x27;[&#x27;, &#x27;#x3001-#xD7FF&#x27;), (&#x27;[&#x27;, &#x27;#xF900-#xFDCF&#x27;), (&#x27;[&#x27;, &#x27;#xFDF0-#xFFFD&#x27;), (&#x27;[&#x27;, &#x27;#x10000-#xEFFFF&#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'>#x00C0-#x00D6</code>] <code>| </code> [<code class='grammar-chars'>#x00D8-#x00F6</code>] <code>| </code> [<code class='grammar-chars'>#x00F8-#x02FF</code>] <code>| </code> [<code class='grammar-chars'>#x0370-#x037D</code>] <code>| </code> [<code class='grammar-chars'>#x037F-#x1FFF</code>] <code>| </code> [<code class='grammar-chars'>#x200C-#x200D</code>] <code>| </code> [<code class='grammar-chars'>#x2070-#x218F</code>] <code>| </code> [<code class='grammar-chars'>#x2C00-#x2FEF</code>] <code>| </code> [<code class='grammar-chars'>#x3001-#xD7FF</code>] <code>| </code> [<code class='grammar-chars'>#xF900-#xFDCF</code>] <code>| </code> [<code class='grammar-chars'>#xFDF0-#xFFFD</code>] <code>| </code> [<code class='grammar-chars'>#x10000-#xEFFFF</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]| #x00B7| [#x0300-#x036F]| [#x203F-#x2040]" 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;#x00B7&#x27;), (&#x27;[&#x27;, &#x27;#x0300-#x036F&#x27;), (&#x27;[&#x27;, &#x27;#x203F-#x2040&#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'>#x00B7</code> <code>| </code> [<code class='grammar-chars'>#x0300-#x036F</code>] <code>| </code> [<code class='grammar-chars'>#x203F-#x2040</code>]</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>
 </table>
--- a/rdf-turtle/n-prime.bnf	Sat Mar 09 08:58:11 2013 -0800
+++ b/rdf-turtle/n-prime.bnf	Sat Mar 09 14:01:59 2013 -0800
@@ -1,42 +1,45 @@
 [1]  ntriplesDoc        ::= triple? (EOL triple)* EOL?
-[2]  triple             ::= subject predicate object '.'
-[3]  subject           ::= IRIREF | BLANK_NODE_LABEL
+[2]  triple             ::= WS* subject WS+ predicate WS+ object WS* '.' WS*
+[3]  subject            ::= IRIREF | BLANK_NODE_LABEL
 [4]  predicate          ::= IRIREF 
 [5]  object             ::= IRIREF | BLANK_NODE_LABEL | literal
-[6]  literal            ::= STRING_LITERAL2 ('^^' IRIREF | ('@' LANG) )?
+[6]  literal            ::= STRING_LITERAL_QUOTE ('^^' IRIREF | ('@' LANG) )?
 
 @terminals
+
 [7]  LANG               ::= [a-zA-Z]+ ( "-" [a-zA-Z0-9]+ )*
 
 [8]  EOL                ::= [#xD#xA]+
+[9]  WS                 ::= [#x20#x9]
 
-[132s] IRIREF           ::= '<' ([^<>"{}|^`\]-[#x00-#x20])* | UCHAR '>'
-[135s] BLANK_NODE_LABEL ::= '_:' ( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)?
-[150s] STRING_LITERAL2  ::= '"' ( ( [^#x22#x5C#xA#xD]) | ECHAR | UCHAR )* '"' 
-[19] UCHAR ::= ( "\u" HEX HEX HEX HEX ) 
+[10] IRIREF ::=  '<' ([^#x00-#x20<>\"{}|^`\] | UCHAR)* '>'
+[11] STRING_LITERAL_QUOTE ::= '"' ( [^#x22#x5C#xA#xD] | ECHAR | UCHAR )* '"' 
+
+[141s] BLANK_NODE_LABEL ::= '_:' ( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)?
+[12] UCHAR ::= ( "\u" HEX HEX HEX HEX ) 
  | ( "\U" HEX HEX HEX HEX HEX HEX HEX HEX ) 
-[153s] ECHAR ::= "\" [tbnrf\"'] 
+[153s] ECHAR ::= "\" [tbnrf"'] 
 [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] 
+                        | [#x00C0-#x00D6] 
+                        | [#x00D8-#x00F6] 
+                        | [#x00F8-#x02FF] 
+                        | [#x0370-#x037D] 
+                        | [#x037F-#x1FFF] 
+                        | [#x200C-#x200D] 
+                        | [#x2070-#x218F] 
+                        | [#x2C00-#x2FEF] 
+                        | [#x3001-#xD7FF] 
+                        | [#xF900-#xFDCF] 
+                        | [#xFDF0-#xFFFD] 
+                        | [#x10000-#xEFFFF] 
 [158s] PN_CHARS_U       ::=  PN_CHARS_BASE 
                         | '_' 
                         | ':'
 [160s] PN_CHARS         ::= PN_CHARS_U 
                         | "-" 
                         | [0-9] 
-                        | #00B7 
-                        | [#0300-#036F] 
-                        | [#203F-#2040] 
+                        | #x00B7 
+                        | [#x0300-#x036F] 
+                        | [#x203F-#x2040] 
 [162s] HEX              ::= [0-9] | [A-F] | [a-f]
\ No newline at end of file