Updated grammar with Add { triples } ldpatch
authorAlexandre Bertails <alexandre@bertails.org>
Mon, 17 Nov 2014 10:04:44 -0500
branchldpatch
changeset 880 c1500cd2bb5d
parent 823 a71b734bdce3
child 882 1f0c234f4bce
Updated grammar with Add { triples }
ldpatch.html
--- a/ldpatch.html	Thu Sep 11 17:22:25 2014 -0400
+++ b/ldpatch.html	Mon Nov 17 10:04:44 2014 -0500
@@ -444,7 +444,7 @@
       </section>
 
       <section id="bind-statement">
-        <h2><tdef>Bind</tdef></h2>
+        <h2><dfn id="foobar">Bind</dfn></h2>
         <p>
 The Bind operation is used to create a new variable by binding or assigning an RDF Term to the variable. The bound variable has a global scope. Use of a given variable name anywhere in an LD Patch document identifies the same variable, although variables can be overriden in subsequent Bound statements. Following the example above, the Bind operation creates a new variable called <code>event</code>, starting from the RDF Term <code>&lt;#&gt;</code> and following the path expression <code>/schema:performerIn[/schema:url = &lt;http://conferences.ted.com/TED2009/&gt;]</code> in order to identify the RDF Term to which this variable will be bound to -- i.e. <code>_:b2</code>.
         <pre class='example'>
@@ -532,72 +532,373 @@
       <h1>Concrete Syntax</h1>
       <p>
       </p>
-      <pre>
-<tdef>LDPatch</tdef> ::= Prologue Statement*
-<tdef>Prologue</tdef> ::= <tref>prefixID</tref>*
-<tdef>Statement</tdef> ::= <tref>Bind</tref> | <tref>Add</tref> | <tref>Delete</tref> | <tref>UpdateList</tref>
-<tref>Bind</tref> ::= ("Bind" | "B") <tref>Var</tref> <tref>Value</tref> <tref>Path</tref>? "."
-<tref>Add</tref> ::= ("Add" | "A") <tref>Subject</tref> <tref>Predicate</tref> ( <tref>Object</tref> | <tref>List</tref> ) "."
-<tref>Delete</tref> ::= ("Delete" | "D") <tref>Subject</tref> <tref>Predicate</tref> <tref>Object</tref> "."
-<tref>UpdateList</tref> ::= ("UpdateList" | "UL") <tref>Subject</tref> <tref>Predicate</tref> <tref>Slice</tref> <tref>List</tref> "."
-
-<tdef>Subject</tdef> ::= <tref>iri</tref> | <tref>BlankNode</tref> | <tref>Var</tref>
-<tdef>Predicate</tdef> ::= <tref>iri</tref>
-<tdef>Object</tdef> ::= <tref>iri</tref> | <tref>BlankNode</tref> | <tref>literal</tref> | <tref>Var</tref>
-<tdef>Value</tdef> ::= <tref>iri</tref> | <tref>literal</tref> | <tref>Var</tref>
-<tdef>List</tdef> ::= '(' <tref>Object</tref>* ')'
-
-<tref>Path</tref> ::= ( <tref>Step</tref> | <tref>Constraint</tref> )*
-<tdef>Step</tdef> ::= '/' ( '^' <tref>iri</tref> | <tref>iri</tref> | <tref>INDEX</tref> )
-<tdef>Constraint</tdef> ::= '[' <tref>Path</tref> ( '=' <tref>Value</tref> )? ']' | '!'
-
-<tdef>Slice</tdef> ::= <tref>INDEX</tref>? '..' <tref>INDEX</tref>?
-<tdef>INDEX</tdef> ::= [0-9]+
-
-// copied from SPARQL
-
-// supposed to be `Var ::= VAR1 | VAR2` but here only VAR1
-<tref>Var</tref> ::= '?' <tref>VARNAME</tref>
-<tdef>VARNAME</tdef> ::= ( <tref>PN_CHARS_U</tref> | [0-9] ) ( <tref>PN_CHARS_U</tref> | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )*
-
-// copied from Turtle
+      <!-- do not edit manually, this is automatically generated -->
+<table class="grammar">
+  <tbody class="grammar-productions">
+<tr id="grammar-production-ldpatch">
+    <td>[1]</td>
+    <td><code>ldpatch</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-prologue">prologue</a> <a href="#grammar-production-statement">statement</a>*</td>
+</tr>
+<tr id="grammar-production-prologue">
+    <td>[2]</td>
+    <td><code>prologue</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-prefixID">prefixID</a>*</td>
+</tr>
+<tr id="grammar-production-statement">
+    <td>[3]</td>
+    <td><code>statement</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-bind">bind</a> | <a href="#grammar-production-add">add</a> | <a href="#grammar-production-delete">delete</a> | <a href="#grammar-production-updateList">updateList</a></td>
+</tr>
+<tr id="grammar-production-bind">
+    <td>[4]</td>
+    <td><code>bind</code></td>
+    <td>::=</td>
+    <td>("<code class="grammar-literal">Bind</code>" | "<code class="grammar-literal">B</code>") <a href="#grammar-production-Var">Var</a> <a href="#grammar-production-value">value</a> <a href="#grammar-production-path">path</a>? "<code class="grammar-literal">.</code>"</td>
+</tr>
+<tr id="grammar-production-add">
+    <td>[5]</td>
+    <td><code>add</code></td>
+    <td>::=</td>
+    <td>("<code class="grammar-literal">Add</code>" | "<code class="grammar-literal">A</code>") "<code class="grammar-literal">{</code>" <a href="#grammar-production-triples">triples</a> "<code class="grammar-literal">}</code>" "<code class="grammar-literal">.</code>"</td>
+</tr>
+<tr id="grammar-production-delete">
+    <td>[6]</td>
+    <td><code>delete</code></td>
+    <td>::=</td>
+    <td>("<code class="grammar-literal">Delete</code>" | "<code class="grammar-literal">D</code>") "<code class="grammar-literal">{</code>" <a href="#grammar-production-triples">triples</a> "<code class="grammar-literal">}</code>" "<code class="grammar-literal">.</code>"</td>
+</tr>
+<tr id="grammar-production-cut">
+    <td>[7]</td>
+    <td><code>cut</code></td>
+    <td>::=</td>
+    <td>("<code class="grammar-literal">Cut</code>" | "<code class="grammar-literal">C</code>") (<a href="#grammar-production-iri">iri</a> | <a href="#grammar-production-Var">Var</a>) "<code class="grammar-literal">.</code>"</td>
+</tr>
+<tr id="grammar-production-updateList">
+    <td>[8]</td>
+    <td><code>updateList</code></td>
+    <td>::=</td>
+    <td>("<code class="grammar-literal">UpdateList</code>" | "<code class="grammar-literal">UL</code>") <a href="#grammar-production-subject">subject</a> <a href="#grammar-production-predicate">predicate</a> <a href="#grammar-production-slice">slice</a> <a href="#grammar-production-collection">collection</a> "<code class="grammar-literal">.</code>"</td>
+</tr>
+<tr id="grammar-production-value">
+    <td>[9]</td>
+    <td><code>value</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-iri">iri</a> | <a href="#grammar-production-literal">literal</a> | <a href="#grammar-production-Var">Var</a></td>
+</tr>
+<tr id="grammar-production-path">
+    <td>[10]</td>
+    <td><code>path</code></td>
+    <td>::=</td>
+    <td>( <a href="#grammar-production-step">step</a> | <a href="#grammar-production-constraint">constraint</a> )*</td>
+</tr>
+<tr id="grammar-production-step">
+    <td>[11]</td>
+    <td><code>step</code></td>
+    <td>::=</td>
+    <td>'<code class="grammar-literal">/</code>' ( '<code class="grammar-literal">^</code>' <a href="#grammar-production-iri">iri</a> | <a href="#grammar-production-iri">iri</a> | <a href="#grammar-production-INDEX">INDEX</a> )</td>
+</tr>
+<tr id="grammar-production-constraint">
+    <td>[12]</td>
+    <td><code>constraint</code></td>
+    <td>::=</td>
+    <td>'<code class="grammar-literal">[</code>' <a href="#grammar-production-path">path</a> ( '<code class="grammar-literal">=</code>' <a href="#grammar-production-value">value</a> )? '<code class="grammar-literal">]</code>' | '<code class="grammar-literal">!</code>'</td>
+</tr>
+<tr id="grammar-production-slice">
+    <td>[13]</td>
+    <td><code>slice</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-INDEX">INDEX</a>? '<code class="grammar-literal">..</code>' <a href="#grammar-production-INDEX">INDEX</a>?</td>
+</tr>
+<tr id="grammar-production-INDEX">
+    <td>[14]</td>
+    <td><code>INDEX</code></td>
+    <td>::=</td>
+    <td>[0-9]+</td>
+</tr>
+<tr id="grammar-production-Var">
+    <td>[15]</td>
+    <td><code>Var</code></td>
+    <td>::=</td>
+    <td>'<code class="grammar-literal">?</code>' <a href="#grammar-production-VARNAME">VARNAME</a></td>
+</tr>
+<tr id="grammar-production-VARNAME">
+    <td>[16]</td>
+    <td><code>VARNAME</code></td>
+    <td>::=</td>
+    <td>( <a href="#grammar-production-PN_CHARS_U">PN_CHARS_U</a> | [0-9] ) ( <a href="#grammar-production-PN_CHARS_U">PN_CHARS_U</a> | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )*</td>
+</tr>
+<tr id="grammar-production-prefixID">
+    <td>[17]</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> "<code class="grammar-literal">.</code>"</td>
+</tr>
+<tr id="grammar-production-triples">
+    <td>[18]</td>
+    <td><code>triples</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-subject">subject</a> <a href="#grammar-production-predicateObjectList">predicateObjectList</a> | <a href="#grammar-production-blankNodePropertyList">blankNodePropertyList</a> <a href="#grammar-production-predicateObjectList">predicateObjectList</a>?</td>
+</tr>
+<tr id="grammar-production-predicateObjectList">
+    <td>[19]</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-verb">verb</a> <a href="#grammar-production-objectList">objectList</a>)?)*</td>
+</tr>
+<tr id="grammar-production-objectList">
+    <td>[20]</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>)*</td>
+</tr>
+<tr id="grammar-production-verb">
+    <td>[21]</td>
+    <td><code>verb</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-predicate">predicate</a> | '<code class="grammar-literal">a</code>'</td>
+</tr>
+<tr id="grammar-production-subject">
+    <td>[22]</td>
+    <td><code>subject</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-iri">iri</a> | <a href="#grammar-production-BlankNode">BlankNode</a> | <a href="#grammar-production-collection">collection</a> | <a href="#grammar-production-Var">Var</a></td>
+</tr>
+<tr id="grammar-production-predicate">
+    <td>[23]</td>
+    <td><code>predicate</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-iri">iri</a></td>
+</tr>
+<tr id="grammar-production-object">
+    <td>[24]</td>
+    <td><code>object</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-iri">iri</a> | <a href="#grammar-production-BlankNode">BlankNode</a> | <a href="#grammar-production-collection">collection</a> | <a href="#grammar-production-blankNodePropertyList">blankNodePropertyList</a> | <a href="#grammar-production-literal">literal</a></td>
+</tr>
+<tr id="grammar-production-literal">
+    <td>[25]</td>
+    <td><code>literal</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-RDFLiteral">RDFLiteral</a> | <a href="#grammar-production-NumericLiteral">NumericLiteral</a> | <a href="#grammar-production-BooleanLiteral">BooleanLiteral</a></td>
+</tr>
+<tr id="grammar-production-blankNodePropertyList">
+    <td>[26]</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">
+    <td>[27]</td>
+    <td><code>collection</code></td>
+    <td>::=</td>
+    <td>'<code class="grammar-literal">(</code>' <a href="#grammar-production-object">object</a>* '<code class="grammar-literal">)</code>'</td>
+</tr>
+<tr id="grammar-production-NumericLiteral">
+    <td>[28]</td>
+    <td><code>NumericLiteral</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-INTEGER">INTEGER</a> | <a href="#grammar-production-DECIMAL">DECIMAL</a> | <a href="#grammar-production-DOUBLE">DOUBLE</a></td>
+</tr>
+<tr id="grammar-production-RDFLiteral">
+    <td>[29]</td>
+    <td><code>RDFLiteral</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-String">String</a> (<a href="#grammar-production-LANGTAG">LANGTAG</a> | '<code class="grammar-literal">^^</code>' <a href="#grammar-production-iri">iri</a>)?</td>
+</tr>
+<tr id="grammar-production-BooleanLiteral">
+    <td>[30]</td>
+    <td><code>BooleanLiteral</code></td>
+    <td>::=</td>
+    <td>'<code class="grammar-literal">true</code>' | '<code class="grammar-literal">false</code>'</td>
+</tr>
+<tr id="grammar-production-String">
+    <td>[31]</td>
+    <td><code>String</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-STRING_LITERAL_QUOTE">STRING_LITERAL_QUOTE</a> | <a href="#grammar-production-STRING_LITERAL_SINGLE_QUOTE">STRING_LITERAL_SINGLE_QUOTE</a> | <a href="#grammar-production-STRING_LITERAL_LONG_SINGLE_QUOTE">STRING_LITERAL_LONG_SINGLE_QUOTE</a> | <a href="#grammar-production-STRING_LITERAL_LONG_QUOTE">STRING_LITERAL_LONG_QUOTE</a></td>
+</tr>
+<tr id="grammar-production-iri">
+    <td>[32]</td>
+    <td><code>iri</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-IRIREF">IRIREF</a> | <a href="#grammar-production-PrefixedName">PrefixedName</a></td>
+</tr>
+<tr id="grammar-production-PrefixedName">
+    <td>[33]</td>
+    <td><code>PrefixedName</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-PNAME_LN">PNAME_LN</a> | <a href="#grammar-production-PNAME_NS">PNAME_NS</a></td>
+</tr>
+<tr id="grammar-production-BlankNode">
+    <td>[34]</td>
+    <td><code>BlankNode</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-BLANK_NODE_LABEL">BLANK_NODE_LABEL</a> | <a href="#grammar-production-ANON">ANON</a></td>
+</tr>
+<tr id="grammar-production-IRIREF">
+    <td>[35]</td>
+    <td><code>IRIREF</code></td>
+    <td>::=</td>
+    <td>'<code class="grammar-literal"><</code>' ([^#x00-#x20<>"{}|^`\] | <a href="#grammar-production-UCHAR">UCHAR</a>)* '<code class="grammar-literal">></code>' /* #x00=NULL #01-#x1F=control codes #x20=space */</td>
+</tr>
+<tr id="grammar-production-PNAME_NS">
+    <td>[36]</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">
+    <td>[37]</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">
+    <td>[38]</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> | [0-9]) ((<a href="#grammar-production-PN_CHARS">PN_CHARS</a> | '<code class="grammar-literal">.</code>')* <a href="#grammar-production-PN_CHARS">PN_CHARS</a>)?</td>
+</tr>
+<tr id="grammar-production-LANGTAG">
+    <td>[39]</td>
+    <td><code>LANGTAG</code></td>
+    <td>::=</td>
+    <td>'<code class="grammar-literal">@</code>' [a-zA-Z]+ ('<code class="grammar-literal">-</code>' [a-zA-Z0-9]+)*</td>
+</tr>
+<tr id="grammar-production-INTEGER">
+    <td>[40]</td>
+    <td><code>INTEGER</code></td>
+    <td>::=</td>
+    <td>[+-]? [0-9]+</td>
+</tr>
+<tr id="grammar-production-DECIMAL">
+    <td>[41]</td>
+    <td><code>DECIMAL</code></td>
+    <td>::=</td>
+    <td>[+-]? [0-9]* '<code class="grammar-literal">.</code>' [0-9]+</td>
+</tr>
+<tr id="grammar-production-DOUBLE">
+    <td>[42]</td>
+    <td><code>DOUBLE</code></td>
+    <td>::=</td>
+    <td>[+-]? ([0-9]+ '<code class="grammar-literal">.</code>' [0-9]* <a href="#grammar-production-EXPONENT">EXPONENT</a> | '<code class="grammar-literal">.</code>' [0-9]+ <a href="#grammar-production-EXPONENT">EXPONENT</a> | [0-9]+ <a href="#grammar-production-EXPONENT">EXPONENT</a>)</td>
+</tr>
+<tr id="grammar-production-EXPONENT">
+    <td>[43]</td>
+    <td><code>EXPONENT</code></td>
+    <td>::=</td>
+    <td>[eE] [+-]? [0-9]+</td>
+</tr>
+<tr id="grammar-production-STRING_LITERAL_QUOTE">
+    <td>[44]</td>
+    <td><code>STRING_LITERAL_QUOTE</code></td>
+    <td>::=</td>
+    <td>'<code class="grammar-literal">"</code>' ([^#x22#x5C#xA#xD] | <a href="#grammar-production-ECHAR">ECHAR</a> | <a href="#grammar-production-UCHAR">UCHAR</a>)* '<code class="grammar-literal">"</code>'      /* #x22=" #x5C=\ #xA=new line #xD=carriage return */</td>
+</tr>
+<tr id="grammar-production-STRING_LITERAL_SINGLE_QUOTE">
+    <td>[45]</td>
+    <td><code>STRING_LITERAL_SINGLE_QUOTE</code></td>
+    <td>::=</td>
+    <td>"<code class="grammar-literal">'</code>" ([^#x27#x5C#xA#xD] | <a href="#grammar-production-ECHAR">ECHAR</a> | <a href="#grammar-production-UCHAR">UCHAR</a>)* "<code class="grammar-literal">'</code>"      /* #x27=' #x5C=\ #xA=new line #xD=carriage return */</td>
+</tr>
+<tr id="grammar-production-STRING_LITERAL_LONG_SINGLE_QUOTE">
+    <td>[46]</td>
+    <td><code>STRING_LITERAL_LONG_SINGLE_QUOTE</code></td>
+    <td>::=</td>
+    <td>"<code class="grammar-literal">'''</code>" (("<code class="grammar-literal">'</code>" | "<code class="grammar-literal">''</code>")? ([^'\] | <a href="#grammar-production-ECHAR">ECHAR</a> | <a href="#grammar-production-UCHAR">UCHAR</a>))* "<code class="grammar-literal">'''</code>"</td>
+</tr>
+<tr id="grammar-production-STRING_LITERAL_LONG_QUOTE">
+    <td>[47]</td>
+    <td><code>STRING_LITERAL_LONG_QUOTE</code></td>
+    <td>::=</td>
+    <td>'<code class="grammar-literal">"""</code>' (('<code class="grammar-literal">"</code>' | '<code class="grammar-literal">""</code>')? ([^"\] | <a href="#grammar-production-ECHAR">ECHAR</a> | <a href="#grammar-production-UCHAR">UCHAR</a>))* '<code class="grammar-literal">"""</code>'</td>
+</tr>
+<tr id="grammar-production-UCHAR">
+    <td>[48]</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 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">
+    <td>[49]</td>
+    <td><code>ECHAR</code></td>
+    <td>::=</td>
+    <td>'<code class="grammar-literal">\</code>' [tbnrf"'\]</td>
+</tr>
+<tr id="grammar-production-WS">
+    <td>[50]</td>
+    <td><code>WS</code></td>
+    <td>::=</td>
+    <td>#x20 | #x9 | #xD | #xA</td>
+</tr>
+<tr id="grammar-production-ANON">
+    <td>[51]</td>
+    <td><code>ANON</code></td>
+    <td>::=</td>
+    <td>'<code class="grammar-literal">[</code>' <a href="#grammar-production-WS">WS</a>* '<code class="grammar-literal">]</code>'</td>
+</tr>
+<tr id="grammar-production-PN_CHARS_BASE">
+    <td>[52]</td>
+    <td><code>PN_CHARS_BASE</code></td>
+    <td>::=</td>
+    <td>[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]</td>
+</tr>
+<tr id="grammar-production-PN_CHARS_U">
+    <td>[53]</td>
+    <td><code>PN_CHARS_U</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-PN_CHARS_BASE">PN_CHARS_BASE</a> | '<code class="grammar-literal">_</code>'</td>
+</tr>
+<tr id="grammar-production-PN_CHARS">
+    <td>[54]</td>
+    <td><code>PN_CHARS</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-PN_CHARS_U">PN_CHARS_U</a> | '<code class="grammar-literal">-</code>' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]</td>
+</tr>
+<tr id="grammar-production-PN_PREFIX">
+    <td>[55]</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 class="grammar-literal">.</code>')* <a href="#grammar-production-PN_CHARS">PN_CHARS</a>)?</td>
+</tr>
+<tr id="grammar-production-PN_LOCAL">
+    <td>[56]</td>
+    <td><code>PN_LOCAL</code></td>
+    <td>::=</td>
+    <td>(<a href="#grammar-production-PN_CHARS_U">PN_CHARS_U</a> | '<code class="grammar-literal">:</code>' | [0-9] | <a href="#grammar-production-PLX">PLX</a>) ((<a href="#grammar-production-PN_CHARS">PN_CHARS</a> | '<code class="grammar-literal">.</code>' | '<code class="grammar-literal">:</code>' | <a href="#grammar-production-PLX">PLX</a>)* (<a href="#grammar-production-PN_CHARS">PN_CHARS</a> | '<code class="grammar-literal">:</code>' | <a href="#grammar-production-PLX">PLX</a>))?</td>
+</tr>
+<tr id="grammar-production-PLX">
+    <td>[57]</td>
+    <td><code>PLX</code></td>
+    <td>::=</td>
+    <td><a href="#grammar-production-PERCENT">PERCENT</a> | <a href="#grammar-production-PN_LOCAL_ESC">PN_LOCAL_ESC</a></td>
+</tr>
+<tr id="grammar-production-PERCENT">
+    <td>[58]</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">
+    <td>[59]</td>
+    <td><code>HEX</code></td>
+    <td>::=</td>
+    <td>[0-9] | [A-F] | [a-f]</td>
+</tr>
+<tr id="grammar-production-PN_LOCAL_ESC">
+    <td>[60]</td>
+    <td><code>PN_LOCAL_ESC</code></td>
+    <td>::=</td>
+    <td>'<code class="grammar-literal">\</code>' ('<code class="grammar-literal">_</code>' | '<code class="grammar-literal">~</code>' | '<code class="grammar-literal">.</code>' | '<code class="grammar-literal">-</code>' | '<code class="grammar-literal">!</code>' | '<code class="grammar-literal">$</code>' | '<code class="grammar-literal">&</code>' | "<code class="grammar-literal">'</code>" | '<code class="grammar-literal">(</code>' | '<code class="grammar-literal">)</code>' | '<code class="grammar-literal">*</code>' | '<code class="grammar-literal">+</code>' | '<code class="grammar-literal">,</code>' | '<code class="grammar-literal">;</code>' | '<code class="grammar-literal">=</code>' | '<code class="grammar-literal">/</code>' | '<code class="grammar-literal">?</code>' | '<code class="grammar-literal">#</code>' | '<code class="grammar-literal">@</code>' | '<code class="grammar-literal">%</code>')</td>
+</tr>
+  </tbody>
+</table>
 
-<tdef>prefixID</tdef> ::= "@prefix" PNAME_NS IRIREF "."
-<tref>Literal</tref> ::= <tref>RDFLiteral</tref> | <tref>NumericLiteral</tref> | <tref>BooleanLiteral</tref>
-<tdef>NumericLiteral</tdef> ::= <tref>INTEGER</tref> | <tref>DECIMAL</tref> | <tref>DOUBLE</tref>
-<tdef>RDFLiteral</tdef> ::= <tref>String</tref> (<tref>LANGTAG</tref> | '^^' <tref>iri</tref>)?
-<tdef>BooleanLiteral</tdef> ::= 'true' | 'false'
-<tref>String</tref> ::= <tref>STRING_LITERAL_QUOTE</tref> | <tref>STRING_LITERAL_SINGLE_QUOTE</tref> | <tref>STRING_LITERAL_LONG_SINGLE_QUOTE</tref> | <tref>STRING_LITERAL_LONG_QUOTE</tref>
-<tref>iri</tref> ::= <tref>IRIREF</tref> | <tref>PrefixedName</tref>
-<tdef>PrefixedName</tdef> ::= <tref>PNAME_LN</tref> | <tref>PNAME_NS</tref>
-<tref>BlankNode</tref> ::= <tref>BLANK_NODE_LABEL</tref> | <tref>ANON</tref>
-<tdef>IRIREF</tdef> ::= '&lt;' ([^#x00-#x20&lt;&gt;"{}|^`\] | <tref>UCHAR</tref>)* '&gt;' /* #x00=NULL #01-#x1F=control codes #x20=space */
-<tdef>PNAME_NS</tdef> ::= <tref>PN_PREFIX</tref>? ':'
-<tdef>PNAME_LN</tdef> ::= <tref>PNAME_NS</tref> <tref>PN_LOCAL</tref>
-<tdef>BLANK_NODE_LABEL</tdef> ::= '_:' (<tref>PN_CHARS_U</tref> | [0-9]) ((<tref>PN_CHARS</tref> | '.')* <tref>PN_CHARS</tref>)?
-<tdef>LANGTAG</tdef> ::= '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)*
-<tdef>INTEGER</tdef> ::= [+-]? [0-9]+
-<tdef>DECIMAL</tdef> ::= [+-]? [0-9]* '.' [0-9]+
-<tdef>DOUBLE</tdef> ::= [+-]? ([0-9]+ '.' [0-9]* <tref>EXPONENT</tref> | '.' [0-9]+ <tref>EXPONENT</tref> | [0-9]+ <tref>EXPONENT</tref>)
-<tdef>EXPONENT</tdef> ::= [eE] [+-]? [0-9]+
-<tdef>STRING_LITERAL_QUOTE</tdef> ::= '"' ([^#x22#x5C#xA#xD] | <tref>ECHAR</tref> | <tref>UCHAR</tref>)* '"'      /* #x22=" #x5C=\ #xA=new line #xD=carriage return */
-<tdef>STRING_LITERAL_SINGLE_QUOTE</tdef> ::= "'" ([^#x27#x5C#xA#xD] | <tref>ECHAR</tref> | <tref>UCHAR</tref>)* "'"      /* #x27=' #x5C=\ #xA=new line #xD=carriage return */
-<tdef>STRING_LITERAL_LONG_SINGLE_QUOTE</tdef> ::= "'''" (("'" | "''")? ([^'\] | <tref>ECHAR</tref> | <tref>UCHAR</tref>))* "'''"
-<tdef>STRING_LITERAL_LONG_QUOTE</tdef> ::= '"""' (('"' | '""')? ([^"\] | <tref>ECHAR</tref> | <tref>UCHAR</tref>))* '"""'
-<tdef>UCHAR</tdef> ::= '\\u' <tref>HEX</tref> <tref>HEX</tref> <tref>HEX</tref> <tref>HEX</tref> | '\\U' <tref>HEX</tref> <tref>HEX</tref> <tref>HEX</tref> <tref>HEX</tref> <tref>HEX</tref> <tref>HEX</tref> <tref>HEX</tref> <tref>HEX</tref>
-<tdef>ECHAR</tdef> ::= '\' [tbnrf"'\]
-<tdef>WS</tdef> ::= #x20 | #x9 | #xD | #xA /* #x20=space #x9=character tabulation #xD=carriage return #xA=new line */
-<tdef>ANON</tdef> ::= '[' <tref>WS</tref>* ']'
-<tdef>PN_CHARS_BASE</tdef> ::= [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]
-<tdef>PN_CHARS_U</tdef> ::= <tref>PN_CHARS_BASE</tref> | '_'
-<tdef>PN_CHARS</tdef> ::= <tref>PN_CHARS_U</tref> | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]
-<tdef>PN_PREFIX</tdef> ::= <tref>PN_CHARS_BASE</tref> ((<tref>PN_CHARS</tref> | '.')* <tref>PN_CHARS</tref>)?
-<tdef>PN_LOCAL</tdef> ::= (<tref>PN_CHARS_U</tref> | ':' | [0-9] | <tref>PLX</tref>) ((<tref>PN_CHARS</tref> | '.' | ':' | <tref>PLX</tref>)* (<tref>PN_CHARS</tref> | ':' | <tref>PLX</tref>))?
-<tdef>PLX</tdef> ::= <tref>PERCENT</tref> | <tref>PN_LOCAL_ESC</tref>
-<tdef>PERCENT</tdef> ::= '%' <tref>HEX</tref> <tref>HEX</tref>
-<tdef>HEX</tdef> ::= [0-9] | [A-F] | [a-f]
-<tdef>PN_LOCAL_ESC</tdef> ::= '\' ('_' | '~' | '.' | '-' | '!' | '$' | '&amp;' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#' | '@' | '%')
-      </pre>
+
     </section>
 
     <section id='abstract-syntax'>
@@ -612,7 +913,7 @@
 <tref>Add</tref>       ::= (<tref>Subject</tref>, <tref>Predicate</tref>, <tref>Object</tref>)
 <tdef>AddList</tdef>   ::= (<tref>Subject</tref>, <tref>Predicate</tref>, <tref>List</tref>(<tref>Object</tref>))
 <tref>Delete</tref>    ::= (<tref>Subject</tref>, <tref>Predicate</tref>, <tref>Object</tref>)
-<tref>Bind</tref>      ::= (<tref>Var</tref>, <tref>Value</tref>, <tref>Path</tref>)
+<tref id="my-bind">Bind</tref>      ::= (<tref>Var</tref>, <tref>Value</tref>, <tref>Path</tref>)
 <tref>UpdateList</tref>   ::= (<tref>Subject</tref>, <tref>Predicate</tref>, <tref>Slice</tref>, <tref>List</tref>(<tref>Object</tref>))
 
 <tdef>Path</tdef>         ::= <tref>List</tref>(<tref>PathElement</tref>)