--- a/ldpatch.html Fri Nov 21 18:17:47 2014 +0100
+++ b/ldpatch.html Fri Nov 21 14:31:23 2014 -0500
@@ -555,31 +555,37 @@
<section id="update-list-statement">
<h2><dfn>UpdateList</dfn></h2>
<p>
-The UpdateList operation is used to update some members of an <a href="http://www.w3.org/TR/rdf-schema/#ch_collectionvocab">RDF collection</a>. It works in a similar way to <a href="https://docs.python.org/3/reference/expressions.html#slicings">slicing in Python</a> or similar languages: it replaces a slice of a list by another list.
- </p>
-
- <p>
-The <a>UpdateList</a> operation is defined by four components: a <a href="#grammar-production-varOrIRI">variable or IRI</a> <var>s</var>, an <a href="#grammar-production-predicate">predicate</a> <var>p</var>, a <a>slice specification</a> and an argument graph <var>g</var> containing an RDF collection. It MUST fail if the <a>target graph</a> contains no more more than one triple with subject <var>s</var> and object <var>p</var>, or if the object of that triple is not a collection.
+ The <a>UpdateList</a> operation is used to update some members of an <a href="http://www.w3.org/TR/rdf-schema/#ch_collectionvocab">RDF collection</a>. It works in a similar way to <a href="https://docs.python.org/3/reference/expressions.html#slicings">slicing in Python</a> or similar languages: it replaces a slice of a list by another list.
</p>
<p>
-The <dfn>slice specification</dfn> is composed of two positive integers <var>imin</var> and <var>imax</var> separated by "<code>..</code>". An omitted value is interpreted as the length of the collection. The first value <var>imin</var> MUST be less than or equal to <var>imax</var>, which MUST be less than or equal to the lenth of the collection. The slice specification represents the slice of the list being preceded by <var>imin</var> elements and spanning over (<var>imax</var>-<var>imin</var>) elements.
+The <a>UpdateList</a> operation is defined by four components: a <a class="internalDFN" href="#grammar-production-varOrIRI">variable or IRI</a> <var>s</var>, a <a class="internalDFN" href="#grammar-production-predicate">predicate</a> <var>p</var>, a <a>Slice expression</a> and an argument graph <var>g</var> containing an RDF collection.
+ </p>
+
+ <p>
+ The <dfn>Slice expression</dfn> is composed of two optional positive integers <var>i<sub>min</sub></var> and <var>i<sub>max</sub></var> separated by "<code>..</code>". An omitted value is interpreted as the length of the collection. The <a>Slice expression</a> will denote the slice of the list being preceded by <var>i<sub>min</sub></var> elements, and spanning over (<var>i<sub>max</sub></var>-<var>i<sub>min</sub></var>) elements.
</p>
<p>
-For example, in the list <code>( "lorem" "ipsum" "dolor" "sit" "amet" )</code>, the <a>slice specification</a> <code>2..4</code> denotes the slice <code>("dolor" "sit")</code>, <code>3..</code> denotes the slice <code>("sit" "amet")</code>, <code>2..2</code> denotes the empty slice located between <code>"ipsum"</code> and <code>"dolor"</code>, and <code>..</code> denotes the empty slice located at the end of the list.
+ For example, here are some <a>Slice expression</a>s for the list <code>( "lorem" "ipsum" "dolor" "sit" "amet" )</code>:
</p>
+ <ul>
+ <li><code>2..4</code> denotes the slice <code>( "dolor" "sit" )</code></li>
+ <li><code>3..</code> denotes the slice <code>( "sit" "amet" )</code></li>
+ <li><code>2..2</code> denotes the empty slice located between <code>"ipsum"</code> and <code>"dolor"</code></li>
+ <li><code>..</code> denotes the empty slice located at the end of the list</li>
+ </ul>
- <section>
+ <section id="updatelist-algo">
<h3>Algorithm</h3>
<p>
-Below is an algorithm explaining how <a>UpdateList</a> can be processed. The result of this algorithm is illustrated in <a href="#fig-updatelist-result"></a>.
+Below is an algorithm explaining how <a>UpdateList</a> can be processed.
</p>
<ul>
<li>
<b class="algo">Let</b> <var>s<sub>pre</sub></var> be <var>s</var>, <var>p<sub>pre</sub></var> be <var>p</var> and <var>o<sub>pre</sub></var> the object of the triple (<var>s</var>, <var>p</var>, ?) from the <a>target graph</a>.
</li>
<li>
- <b class="algo">Repeat</b> <var>imin</var> times:
+ <b class="algo">Repeat</b> <var>i<sub>min</sub></var> times:
<ul>
<li>
<b class="algo">Set</b> <var>s<sub>pre</sub></var> to <var>o<sub>pre</sub></var>, <var>p<sub>pre</sub></var> to <code>rdf:rest</code> and <var>o<sub>pre</sub></var> to the object of the triple (<var>o<sub>pre</sub></var>, <code>rdf:rest</code>, ?) from the <a>target graph</a>.
@@ -590,13 +596,13 @@
<b class="algo">Let</b> <var>s<sub>post</sub></var> be <var>s<sub>pre</sub></var>, <var>p<sub>post</sub></var> be <var>p<sub>pre</sub></var> and <var>o<sub>post</sub></var> be <var>o<sub>pre</sub></var>.
</li>
<li>
- <b class="algo">Repeat</b> (<var>imax</var>-<var>imin</var>) times:
+ <b class="algo">Repeat</b> (<var>i<sub>max</sub></var>-<var>i<sub>min</sub></var>) times:
<ul>
<li>
Remove from the <a>target graph</a> the arcs (<var>s<sub>post</sub></var>, <var>p<sub>post</sub></var>, <var>o<sub>post</sub></var>).
</li>
<li>
- <b class="algo">Let</b> <var>elt</var> be the object of the triple (<var>o<sub>post</sub></var>, <code>rdf:first</code>, ?). Remove from the <a>target graph</a> the arc (<var>o<sub>post</sub></var>, <code>rdf:first</code>, <var>elt</var>). <b class="algo">If</b> <var>elt</var> is a blank node, <b class="algo">then</b> apply the <a>Cut</a> operation to <var>elt</var>.
+ <b class="algo">Let</b> <var>elt</var> be the object of the triple (<var>o<sub>post</sub></var>, <code>rdf:first</code>, ?). Remove from the <a>target graph</a> the arc (<var>o<sub>post</sub></var>, <code>rdf:first</code>, <var>elt</var>). <b class="algo">If</b> <var>elt</var> is a blank node, <b class="algo">Then</b> apply the <a>Cut</a> operation to <var>elt</var>.
</li>
<li>
<b class="algo">Set</b> <var>s<sub>post</sub></var> to <var>o<sub>post</sub></var>, <var>p<sub>post</sub></var> to <code>rdf:rest</code> and <var>o<sub>post</sub></var> to the object of the triple (<var>o<sub>post</sub></var>, <code>rdf:rest</code>, ?) from the <a>target graph</a>.
@@ -639,7 +645,9 @@
<section>
<h3>Example</h3>
-Consider the graph represented in <a href="#fig-a-graph-containing-a-collection"></a>. <a href="#fig-updatelist-result"></a> shows the result of applying an <a>UpdateList</a> operation on that list.
+ <p>
+ Here is an illustration of the <a href="#updatelist-algo">previously introduced algorithm</a>. Consider the graph represented in <a href="#fig-a-graph-containing-a-collection"></a>. <a href="#fig-updatelist-result"></a> shows the result of applying an <a>UpdateList</a> operation on that list.
+ </p>
<figure>
<img src="fig-alt-update-list.svg" alt="( "e;lorem"e; "e;ipsum"e; "e;dolor"e; "e;sit"e; "e;amet"e; ) ( "e;foo"e; "e;bar"e; "e;baz"e; )">
@@ -765,375 +773,375 @@
<!-- do not edit manually, this is automatically generated -->
<table class="grammar">
<tbody class="grammar-productions">
-<tr id="grammar-production-ldpatch">
+<tr id="grammar-production-// ldpatch">
<td>[1]</td>
- <td><a href="#grammar-production-ldpatch">ldpatch</a></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><a href="#grammar-production-prologue">prologue</a></td>
- <td>::=</td>
- <td><a href="#grammar-production-prefixID">prefixID</a>*</td>
-</tr>
-<tr id="grammar-production-statement">
- <td>[3]</td>
- <td><a href="#grammar-production-statement">statement</a></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><a href="#grammar-production-bind">bind</a></td>
- <td>::=</td>
- <td>("<code class="grammar-literal">Bind</code>" | "<code class="grammar-literal">B</code>") Var <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><a href="#grammar-production-add">add</a></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-graph">graph</a> "<code class="grammar-literal">}</code>" "<code class="grammar-literal">.</code>"</td>
-</tr>
-<tr id="grammar-production-delete">
- <td>[6]</td>
- <td><a href="#grammar-production-delete">delete</a></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-graph">graph</a> "<code class="grammar-literal">}</code>" "<code class="grammar-literal">.</code>"</td>
-</tr>
-<tr id="grammar-production-cut">
- <td>[7]</td>
- <td><a href="#grammar-production-cut">cut</a></td>
+ <td><a href="#grammar-production-// ldpatch">// ldpatch</a></td>
<td>::=</td>
- <td>("<code class="grammar-literal">Cut</code>" | "<code class="grammar-literal">C</code>") <a href="#grammar-production-VAR1">VAR1</a> "<code class="grammar-literal">.</code>"</td>
-</tr>
-<tr id="grammar-production-updateList">
- <td>[8]</td>
- <td><a href="#grammar-production-updateList">updateList</a></td>
- <td>::=</td>
- <td>("<code class="grammar-literal">UpdateList</code>" | "<code class="grammar-literal">UL</code>") <a href="#grammar-production-varOrIRI">varOrIRI</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><a href="#grammar-production-value">value</a></td>
- <td>::=</td>
- <td><a href="#grammar-production-iri">iri</a> | <a href="#grammar-production-literal">literal</a> | Var</td>
-</tr>
-<tr id="grammar-production-path">
- <td>[10]</td>
- <td><a href="#grammar-production-path">path</a></td>
- <td>::=</td>
- <td>('<code class="grammar-literal">/</code>'? <a href="#grammar-production-step">step</a> | <a href="#grammar-production-constraint">constraint</a> )? ( '<code class="grammar-literal">/</code>' <a href="#grammar-production-step">step</a> | <a href="#grammar-production-constraint">constraint</a> )*</td>
+ <td>prologue statement*</td>
</tr>
-<tr id="grammar-production-step">
- <td>[11]</td>
- <td><a href="#grammar-production-step">step</a></td>
- <td>::=</td>
- <td>'<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><a href="#grammar-production-constraint">constraint</a></td>
+<tr id="grammar-production-// prologue">
+ <td>[2]</td>
+ <td><a href="#grammar-production-// prologue">// prologue</a></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>
+ <td>prefixID*</td>
</tr>
-<tr id="grammar-production-slice">
+<tr id="grammar-production-// statement">
+ <td>[3]</td>
+ <td><a href="#grammar-production-// statement">// statement</a></td>
+ <td>::=</td>
+ <td>bind | add | delete | updateList</td>
+</tr>
+<tr id="grammar-production-// bind">
+ <td>[4]</td>
+ <td><a href="#grammar-production-// bind">// bind</a></td>
+ <td>::=</td>
+ <td>("<code class="grammar-literal">Bind</code>" | "<code class="grammar-literal">B</code>") Var value path? "<code class="grammar-literal">.</code>"</td>
+</tr>
+<tr id="grammar-production-// add">
+ <td>[5]</td>
+ <td><a href="#grammar-production-// add">// add</a></td>
+ <td>::=</td>
+ <td>("<code class="grammar-literal">Add</code>" | "<code class="grammar-literal">A</code>") "<code class="grammar-literal">{</code>" graph "<code class="grammar-literal">}</code>" "<code class="grammar-literal">.</code>"</td>
+</tr>
+<tr id="grammar-production-// delete">
+ <td>[6]</td>
+ <td><a href="#grammar-production-// delete">// delete</a></td>
+ <td>::=</td>
+ <td>("<code class="grammar-literal">Delete</code>" | "<code class="grammar-literal">D</code>") "<code class="grammar-literal">{</code>" graph "<code class="grammar-literal">}</code>" "<code class="grammar-literal">.</code>"</td>
+</tr>
+<tr id="grammar-production-// cut">
+ <td>[7]</td>
+ <td><a href="#grammar-production-// cut">// cut</a></td>
+ <td>::=</td>
+ <td>("<code class="grammar-literal">Cut</code>" | "<code class="grammar-literal">C</code>") VAR1 "<code class="grammar-literal">.</code>"</td>
+</tr>
+<tr id="grammar-production-// updateList">
+ <td>[8]</td>
+ <td><a href="#grammar-production-// updateList">// updateList</a></td>
+ <td>::=</td>
+ <td>("<code class="grammar-literal">UpdateList</code>" | "<code class="grammar-literal">UL</code>") varOrIRI predicate slice collection "<code class="grammar-literal">.</code>"</td>
+</tr>
+<tr id="grammar-production-// varOrIRI">
+ <td>[9]</td>
+ <td><a href="#grammar-production-// varOrIRI">// varOrIRI</a></td>
+ <td>::=</td>
+ <td>iri | VAR1</td>
+</tr>
+<tr id="grammar-production-// value">
+ <td>[10]</td>
+ <td><a href="#grammar-production-// value">// value</a></td>
+ <td>::=</td>
+ <td>iri | literal | VAR1</td>
+</tr>
+<tr id="grammar-production-// path">
+ <td>[11]</td>
+ <td><a href="#grammar-production-// path">// path</a></td>
+ <td>::=</td>
+ <td>('<code class="grammar-literal">/</code>'? step | constraint )? ( '<code class="grammar-literal">/</code>' step | constraint )*</td>
+</tr>
+<tr id="grammar-production-// step">
+ <td>[12]</td>
+ <td><a href="#grammar-production-// step">// step</a></td>
+ <td>::=</td>
+ <td>'<code class="grammar-literal">^</code>' iri | iri | INDEX</td>
+</tr>
+<tr id="grammar-production-// constraint">
<td>[13]</td>
- <td><a href="#grammar-production-slice">slice</a></td>
+ <td><a href="#grammar-production-// constraint">// constraint</a></td>
<td>::=</td>
- <td><a href="#grammar-production-INDEX">INDEX</a>? '<code class="grammar-literal">..</code>' <a href="#grammar-production-INDEX">INDEX</a>?</td>
+ <td>'<code class="grammar-literal">[</code>' path ( '<code class="grammar-literal">=</code>' value )? '<code class="grammar-literal">]</code>' | '<code class="grammar-literal">!</code>'</td>
</tr>
-<tr id="grammar-production-INDEX">
+<tr id="grammar-production-// slice">
<td>[14]</td>
- <td><a href="#grammar-production-INDEX">INDEX</a></td>
+ <td><a href="#grammar-production-// slice">// slice</a></td>
+ <td>::=</td>
+ <td>INDEX? '<code class="grammar-literal">..</code>' INDEX?</td>
+</tr>
+<tr id="grammar-production-// INDEX">
+ <td>[15]</td>
+ <td><a href="#grammar-production-// INDEX">// INDEX</a></td>
<td>::=</td>
<td>[0-9]+</td>
</tr>
-<tr id="grammar-production-VAR1">
- <td>[143s]</td>
- <td><a href="#grammar-production-VAR1">VAR1</a></td>
- <td>::=</td>
- <td>'<code class="grammar-literal">?</code>' <a href="#grammar-production-VARNAME">VARNAME</a></td>
-</tr>
-<tr id="grammar-production-VARNAME">
- <td>[166s]</td>
- <td><a href="#grammar-production-VARNAME">VARNAME</a></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>[4t]</td>
- <td><a href="#grammar-production-prefixID">prefixID</a></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-graph">
- <td>[15]</td>
- <td><a href="#grammar-production-graph">graph</a></td>
+<tr id="grammar-production-// [143s] VAR1">
+ <td>[16]</td>
+ <td><a href="#grammar-production-// [143s] VAR1">// [143s] VAR1</a></td>
<td>::=</td>
- <td><a href="#grammar-production-triples">triples</a> ( '<code class="grammar-literal">.</code>' <a href="#grammar-production-triples">triples</a> )* '<code class="grammar-literal">.</code>'?</td>
-</tr>
-<tr id="grammar-production-triples">
- <td>[6t]</td>
- <td><a href="#grammar-production-triples">triples</a></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>[7t]</td>
- <td><a href="#grammar-production-predicateObjectList">predicateObjectList</a></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>[8t]</td>
- <td><a href="#grammar-production-objectList">objectList</a></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>[9t]</td>
- <td><a href="#grammar-production-verb">verb</a></td>
- <td>::=</td>
- <td><a href="#grammar-production-predicate">predicate</a> | '<code class="grammar-literal">a</code>'</td>
+ <td>'<code class="grammar-literal">?</code>' VARNAME</td>
</tr>
-<tr id="grammar-production-subject">
- <td>[10t*]</td>
- <td><a href="#grammar-production-subject">subject</a></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-VAR1">VAR1</a></td>
-</tr>
-<tr id="grammar-production-predicate">
- <td>[11t]</td>
- <td><a href="#grammar-production-predicate">predicate</a></td>
+<tr id="grammar-production-// [166s] VARNAME">
+ <td>[17]</td>
+ <td><a href="#grammar-production-// [166s] VARNAME">// [166s] VARNAME</a></td>
<td>::=</td>
- <td><a href="#grammar-production-iri">iri</a></td>
-</tr>
-<tr id="grammar-production-object">
- <td>[12t*]</td>
- <td><a href="#grammar-production-object">object</a></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> | <a href="#grammar-production-VAR1">VAR1</a></td>
-</tr>
-<tr id="grammar-production-literal">
- <td>[13t]</td>
- <td><a href="#grammar-production-literal">literal</a></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>
+ <td>( PN_CHARS_U | [0-9] ) ( PN_CHARS_U | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )*</td>
</tr>
-<tr id="grammar-production-blankNodePropertyList">
- <td>[14t]</td>
- <td><a href="#grammar-production-blankNodePropertyList">blankNodePropertyList</a></td>
+<tr id="grammar-production-// [4t] prefixID">
+ <td>[18]</td>
+ <td><a href="#grammar-production-// [4t] prefixID">// [4t] prefixID</a></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>[15t]</td>
- <td><a href="#grammar-production-collection">collection</a></td>
- <td>::=</td>
- <td>'<code class="grammar-literal">(</code>' <a href="#grammar-production-object">object</a>* '<code class="grammar-literal">)</code>'</td>
+ <td>"<code class="grammar-literal">@prefix</code>" PNAME_NS IRIREF "<code class="grammar-literal">.</code>"</td>
</tr>
-<tr id="grammar-production-NumericLiteral">
- <td>[16t]</td>
- <td><a href="#grammar-production-NumericLiteral">NumericLiteral</a></td>
+<tr id="grammar-production-// graph">
+ <td>[19]</td>
+ <td><a href="#grammar-production-// graph">// graph</a></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>
+ <td>triples ( '<code class="grammar-literal">.</code>' triples )* '<code class="grammar-literal">.</code>'?</td>
</tr>
-<tr id="grammar-production-RDFLiteral">
- <td>[128s]</td>
- <td><a href="#grammar-production-RDFLiteral">RDFLiteral</a></td>
+<tr id="grammar-production-// [6t] triples">
+ <td>[20]</td>
+ <td><a href="#grammar-production-// [6t] triples">// [6t] triples</a></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>
+ <td>subject predicateObjectList | blankNodePropertyList predicateObjectList?</td>
</tr>
-<tr id="grammar-production-BooleanLiteral">
- <td>[133s]</td>
- <td><a href="#grammar-production-BooleanLiteral">BooleanLiteral</a></td>
+<tr id="grammar-production-// [7t] predicateObjectList">
+ <td>[21]</td>
+ <td><a href="#grammar-production-// [7t] predicateObjectList">// [7t] predicateObjectList</a></td>
+ <td>::=</td>
+ <td>verb objectList ('<code class="grammar-literal">;</code>' (verb objectList)?)*</td>
+</tr>
+<tr id="grammar-production-// [8t] objectList">
+ <td>[22]</td>
+ <td><a href="#grammar-production-// [8t] objectList">// [8t] objectList</a></td>
+ <td>::=</td>
+ <td>object ('<code class="grammar-literal">,</code>' object)*</td>
+</tr>
+<tr id="grammar-production-// [9t] verb">
+ <td>[23]</td>
+ <td><a href="#grammar-production-// [9t] verb">// [9t] verb</a></td>
+ <td>::=</td>
+ <td>predicate | '<code class="grammar-literal">a</code>'</td>
+</tr>
+<tr id="grammar-production-// [10t*] subject">
+ <td>[24]</td>
+ <td><a href="#grammar-production-// [10t*] subject">// [10t*] subject</a></td>
+ <td>::=</td>
+ <td>iri | BlankNode | collection | VAR1</td>
+</tr>
+<tr id="grammar-production-// [11t] predicate">
+ <td>[25]</td>
+ <td><a href="#grammar-production-// [11t] predicate">// [11t] predicate</a></td>
+ <td>::=</td>
+ <td>iri</td>
+</tr>
+<tr id="grammar-production-// [12t*] object">
+ <td>[26]</td>
+ <td><a href="#grammar-production-// [12t*] object">// [12t*] object</a></td>
+ <td>::=</td>
+ <td>iri | BlankNode | collection | blankNodePropertyList | literal | VAR1</td>
+</tr>
+<tr id="grammar-production-// [13t] literal">
+ <td>[27]</td>
+ <td><a href="#grammar-production-// [13t] literal">// [13t] literal</a></td>
+ <td>::=</td>
+ <td>RDFLiteral | NumericLiteral | BooleanLiteral</td>
+</tr>
+<tr id="grammar-production-// [14t] blankNodePropertyList">
+ <td>[28]</td>
+ <td><a href="#grammar-production-// [14t] blankNodePropertyList">// [14t] blankNodePropertyList</a></td>
+ <td>::=</td>
+ <td>'<code class="grammar-literal">[</code>' predicateObjectList '<code class="grammar-literal">]</code>'</td>
+</tr>
+<tr id="grammar-production-// [15t] collection">
+ <td>[29]</td>
+ <td><a href="#grammar-production-// [15t] collection">// [15t] collection</a></td>
+ <td>::=</td>
+ <td>'<code class="grammar-literal">(</code>' object* '<code class="grammar-literal">)</code>'</td>
+</tr>
+<tr id="grammar-production-// [16t] NumericLiteral">
+ <td>[30]</td>
+ <td><a href="#grammar-production-// [16t] NumericLiteral">// [16t] NumericLiteral</a></td>
+ <td>::=</td>
+ <td>INTEGER | DECIMAL | DOUBLE</td>
+</tr>
+<tr id="grammar-production-// [128s] RDFLiteral">
+ <td>[31]</td>
+ <td><a href="#grammar-production-// [128s] RDFLiteral">// [128s] RDFLiteral</a></td>
+ <td>::=</td>
+ <td>String (LANGTAG | '<code class="grammar-literal">^^</code>' iri)?</td>
+</tr>
+<tr id="grammar-production-// [133s] BooleanLiteral">
+ <td>[32]</td>
+ <td><a href="#grammar-production-// [133s] BooleanLiteral">// [133s] BooleanLiteral</a></td>
<td>::=</td>
<td>'<code class="grammar-literal">true</code>' | '<code class="grammar-literal">false</code>'</td>
</tr>
-<tr id="grammar-production-String">
- <td>[17]</td>
- <td><a href="#grammar-production-String">String</a></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>[135s]</td>
- <td><a href="#grammar-production-iri">iri</a></td>
- <td>::=</td>
- <td><a href="#grammar-production-IRIREF">IRIREF</a> | <a href="#grammar-production-PrefixedName">PrefixedName</a></td>
-</tr>
-<tr id="grammar-production-varOrIRI">
- <td>[143s]</td>
- <td><a href="#grammar-production-varOrIRI">varOrIRI</a></td>
- <td>::=</td>
- <td><a href="#grammar-production-iri">iri</a> | <a href="#grammar-production-VAR1">VAR1</a></td>
-</tr>
-<tr id="grammar-production-PrefixedName">
- <td>[136s]</td>
- <td><a href="#grammar-production-PrefixedName">PrefixedName</a></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>[137s]</td>
- <td><a href="#grammar-production-BlankNode">BlankNode</a></td>
+<tr id="grammar-production-// [17] String">
+ <td>[33]</td>
+ <td><a href="#grammar-production-// [17] String">// [17] String</a></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>[18]</td>
- <td><a href="#grammar-production-IRIREF">IRIREF</a></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>[139s]</td>
- <td><a href="#grammar-production-PNAME_NS">PNAME_NS</a></td>
- <td>::=</td>
- <td><a href="#grammar-production-PN_PREFIX">PN_PREFIX</a>? '<code class="grammar-literal">:</code>'</td>
+ <td>STRING_LITERAL_QUOTE | STRING_LITERAL_SINGLE_QUOTE | STRING_LITERAL_LONG_SINGLE_QUOTE | STRING_LITERAL_LONG_QUOTE</td>
</tr>
-<tr id="grammar-production-PNAME_LN">
- <td>[140s]</td>
- <td><a href="#grammar-production-PNAME_LN">PNAME_LN</a></td>
+<tr id="grammar-production-// [135s] iri">
+ <td>[34]</td>
+ <td><a href="#grammar-production-// [135s] iri">// [135s] iri</a></td>
<td>::=</td>
- <td><a href="#grammar-production-PNAME_NS">PNAME_NS</a> <a href="#grammar-production-PN_LOCAL">PN_LOCAL</a></td>
+ <td>IRIREF | PrefixedName</td>
</tr>
-<tr id="grammar-production-BLANK_NODE_LABEL">
- <td>[141s]</td>
- <td><a href="#grammar-production-BLANK_NODE_LABEL">BLANK_NODE_LABEL</a></td>
+<tr id="grammar-production-// [136s] PrefixedName">
+ <td>[35]</td>
+ <td><a href="#grammar-production-// [136s] PrefixedName">// [136s] PrefixedName</a></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>
+ <td>PNAME_LN | PNAME_NS</td>
</tr>
-<tr id="grammar-production-LANGTAG">
- <td>[144s]</td>
- <td><a href="#grammar-production-LANGTAG">LANGTAG</a></td>
+<tr id="grammar-production-// [137s] BlankNode">
+ <td>[36]</td>
+ <td><a href="#grammar-production-// [137s] BlankNode">// [137s] BlankNode</a></td>
+ <td>::=</td>
+ <td>BLANK_NODE_LABEL | ANON</td>
+</tr>
+<tr id="grammar-production-// [18] IRIREF">
+ <td>[37]</td>
+ <td><a href="#grammar-production-// [18] IRIREF">// [18] IRIREF</a></td>
+ <td>::=</td>
+ <td>'<code class="grammar-literal"><</code>' ([^#x00-#x20<>"{}|^`\] | UCHAR)* '<code class="grammar-literal">></code>' /* #x00=NULL #01-#x1F=control codes #x20=space */</td>
+</tr>
+<tr id="grammar-production-// [139s] PNAME_NS">
+ <td>[38]</td>
+ <td><a href="#grammar-production-// [139s] PNAME_NS">// [139s] PNAME_NS</a></td>
+ <td>::=</td>
+ <td>PN_PREFIX? '<code class="grammar-literal">:</code>'</td>
+</tr>
+<tr id="grammar-production-// [140s] PNAME_LN">
+ <td>[39]</td>
+ <td><a href="#grammar-production-// [140s] PNAME_LN">// [140s] PNAME_LN</a></td>
+ <td>::=</td>
+ <td>PNAME_NS PN_LOCAL</td>
+</tr>
+<tr id="grammar-production-// [141s] BLANK_NODE_LABEL">
+ <td>[40]</td>
+ <td><a href="#grammar-production-// [141s] BLANK_NODE_LABEL">// [141s] BLANK_NODE_LABEL</a></td>
+ <td>::=</td>
+ <td>'<code class="grammar-literal">_:</code>' (PN_CHARS_U | [0-9]) ((PN_CHARS | '<code class="grammar-literal">.</code>')* PN_CHARS)?</td>
+</tr>
+<tr id="grammar-production-// [144s] LANGTAG">
+ <td>[41]</td>
+ <td><a href="#grammar-production-// [144s] LANGTAG">// [144s] LANGTAG</a></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>[19]</td>
- <td><a href="#grammar-production-INTEGER">INTEGER</a></td>
+<tr id="grammar-production-// [19] INTEGER">
+ <td>[42]</td>
+ <td><a href="#grammar-production-// [19] INTEGER">// [19] INTEGER</a></td>
<td>::=</td>
<td>[+-]? [0-9]+</td>
</tr>
-<tr id="grammar-production-DECIMAL">
- <td>[20]</td>
- <td><a href="#grammar-production-DECIMAL">DECIMAL</a></td>
+<tr id="grammar-production-// [20] DECIMAL">
+ <td>[43]</td>
+ <td><a href="#grammar-production-// [20] DECIMAL">// [20] DECIMAL</a></td>
<td>::=</td>
<td>[+-]? [0-9]* '<code class="grammar-literal">.</code>' [0-9]+</td>
</tr>
-<tr id="grammar-production-DOUBLE">
- <td>[21]</td>
- <td><a href="#grammar-production-DOUBLE">DOUBLE</a></td>
+<tr id="grammar-production-// [21] DOUBLE">
+ <td>[44]</td>
+ <td><a href="#grammar-production-// [21] DOUBLE">// [21] DOUBLE</a></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>
+ <td>[+-]? ([0-9]+ '<code class="grammar-literal">.</code>' [0-9]* EXPONENT | '<code class="grammar-literal">.</code>' [0-9]+ EXPONENT | [0-9]+ EXPONENT)</td>
</tr>
-<tr id="grammar-production-EXPONENT">
- <td>[154s]</td>
- <td><a href="#grammar-production-EXPONENT">EXPONENT</a></td>
+<tr id="grammar-production-// [154s] EXPONENT">
+ <td>[45]</td>
+ <td><a href="#grammar-production-// [154s] EXPONENT">// [154s] EXPONENT</a></td>
<td>::=</td>
<td>[eE] [+-]? [0-9]+</td>
</tr>
-<tr id="grammar-production-STRING_LITERAL_QUOTE">
- <td>[22]</td>
- <td><a href="#grammar-production-STRING_LITERAL_QUOTE">STRING_LITERAL_QUOTE</a></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>[23]</td>
- <td><a href="#grammar-production-STRING_LITERAL_SINGLE_QUOTE">STRING_LITERAL_SINGLE_QUOTE</a></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>[24]</td>
- <td><a href="#grammar-production-STRING_LITERAL_LONG_SINGLE_QUOTE">STRING_LITERAL_LONG_SINGLE_QUOTE</a></td>
+<tr id="grammar-production-// [22] STRING_LITERAL_QUOTE">
+ <td>[46]</td>
+ <td><a href="#grammar-production-// [22] STRING_LITERAL_QUOTE">// [22] STRING_LITERAL_QUOTE</a></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>[25]</td>
- <td><a href="#grammar-production-STRING_LITERAL_LONG_QUOTE">STRING_LITERAL_LONG_QUOTE</a></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>
+ <td>'<code class="grammar-literal">"</code>' ([^#x22#x5C#xA#xD] | ECHAR | UCHAR)* '<code class="grammar-literal">"</code>' /* #x22=" #x5C=\ #xA=new line #xD=carriage return */</td>
</tr>
-<tr id="grammar-production-UCHAR">
- <td>[26]</td>
- <td><a href="#grammar-production-UCHAR">UCHAR</a></td>
+<tr id="grammar-production-// [23] STRING_LITERAL_SINGLE_QUOTE">
+ <td>[47]</td>
+ <td><a href="#grammar-production-// [23] STRING_LITERAL_SINGLE_QUOTE">// [23] STRING_LITERAL_SINGLE_QUOTE</a></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>
+ <td>"<code class="grammar-literal">'</code>" ([^#x27#x5C#xA#xD] | ECHAR | UCHAR)* "<code class="grammar-literal">'</code>" /* #x27=' #x5C=\ #xA=new line #xD=carriage return */</td>
</tr>
-<tr id="grammar-production-ECHAR">
- <td>[159s]</td>
- <td><a href="#grammar-production-ECHAR">ECHAR</a></td>
+<tr id="grammar-production-// [24] STRING_LITERAL_LONG_SINGLE_QUOTE">
+ <td>[48]</td>
+ <td><a href="#grammar-production-// [24] STRING_LITERAL_LONG_SINGLE_QUOTE">// [24] STRING_LITERAL_LONG_SINGLE_QUOTE</a></td>
+ <td>::=</td>
+ <td>"<code class="grammar-literal">'''</code>" (("<code class="grammar-literal">'</code>" | "<code class="grammar-literal">''</code>")? ([^'\] | ECHAR | UCHAR))* "<code class="grammar-literal">'''</code>"</td>
+</tr>
+<tr id="grammar-production-// [25] STRING_LITERAL_LONG_QUOTE">
+ <td>[49]</td>
+ <td><a href="#grammar-production-// [25] STRING_LITERAL_LONG_QUOTE">// [25] STRING_LITERAL_LONG_QUOTE</a></td>
+ <td>::=</td>
+ <td>'<code class="grammar-literal">"""</code>' (('<code class="grammar-literal">"</code>' | '<code class="grammar-literal">""</code>')? ([^"\] | ECHAR | UCHAR))* '<code class="grammar-literal">"""</code>'</td>
+</tr>
+<tr id="grammar-production-// [26] UCHAR">
+ <td>[50]</td>
+ <td><a href="#grammar-production-// [26] UCHAR">// [26] UCHAR</a></td>
+ <td>::=</td>
+ <td>'<code class="grammar-literal">\\u</code>' HEX HEX HEX HEX | '<code class="grammar-literal">\\U</code>' HEX HEX HEX HEX HEX HEX HEX HEX</td>
+</tr>
+<tr id="grammar-production-// [159s] ECHAR">
+ <td>[51]</td>
+ <td><a href="#grammar-production-// [159s] ECHAR">// [159s] ECHAR</a></td>
<td>::=</td>
<td>'<code class="grammar-literal">\</code>' [tbnrf"'\]</td>
</tr>
-<tr id="grammar-production-WS">
- <td>[161s]</td>
- <td><a href="#grammar-production-WS">WS</a></td>
+<tr id="grammar-production-// [161s] WS">
+ <td>[52]</td>
+ <td><a href="#grammar-production-// [161s] WS">// [161s] WS</a></td>
<td>::=</td>
<td>#x20 | #x9 | #xD | #xA</td>
</tr>
-<tr id="grammar-production-ANON">
- <td>[162s]</td>
- <td><a href="#grammar-production-ANON">ANON</a></td>
+<tr id="grammar-production-// [162s] ANON">
+ <td>[53]</td>
+ <td><a href="#grammar-production-// [162s] ANON">// [162s] ANON</a></td>
<td>::=</td>
- <td>'<code class="grammar-literal">[</code>' <a href="#grammar-production-WS">WS</a>* '<code class="grammar-literal">]</code>'</td>
+ <td>'<code class="grammar-literal">[</code>' WS* '<code class="grammar-literal">]</code>'</td>
</tr>
-<tr id="grammar-production-PN_CHARS_BASE">
- <td>[163s]</td>
- <td><a href="#grammar-production-PN_CHARS_BASE">PN_CHARS_BASE</a></td>
+<tr id="grammar-production-// [163s] PN_CHARS_BASE">
+ <td>[54]</td>
+ <td><a href="#grammar-production-// [163s] PN_CHARS_BASE">// [163s] PN_CHARS_BASE</a></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>[164s]</td>
- <td><a href="#grammar-production-PN_CHARS_U">PN_CHARS_U</a></td>
+<tr id="grammar-production-// [164s] PN_CHARS_U">
+ <td>[55]</td>
+ <td><a href="#grammar-production-// [164s] PN_CHARS_U">// [164s] PN_CHARS_U</a></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>[166s]</td>
- <td><a href="#grammar-production-PN_CHARS">PN_CHARS</a></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>[167s]</td>
- <td><a href="#grammar-production-PN_PREFIX">PN_PREFIX</a></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>
+ <td>PN_CHARS_BASE | '<code class="grammar-literal">_</code>'</td>
</tr>
-<tr id="grammar-production-PN_LOCAL">
- <td>[168s]</td>
- <td><a href="#grammar-production-PN_LOCAL">PN_LOCAL</a></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>[169s]</td>
- <td><a href="#grammar-production-PLX">PLX</a></td>
+<tr id="grammar-production-// [166s] PN_CHARS">
+ <td>[56]</td>
+ <td><a href="#grammar-production-// [166s] PN_CHARS">// [166s] PN_CHARS</a></td>
<td>::=</td>
- <td><a href="#grammar-production-PERCENT">PERCENT</a> | <a href="#grammar-production-PN_LOCAL_ESC">PN_LOCAL_ESC</a></td>
+ <td>PN_CHARS_U | '<code class="grammar-literal">-</code>' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]</td>
</tr>
-<tr id="grammar-production-PERCENT">
- <td>[170s]</td>
- <td><a href="#grammar-production-PERCENT">PERCENT</a></td>
+<tr id="grammar-production-// [167s] PN_PREFIX">
+ <td>[57]</td>
+ <td><a href="#grammar-production-// [167s] PN_PREFIX">// [167s] PN_PREFIX</a></td>
<td>::=</td>
- <td>'<code class="grammar-literal">%</code>' <a href="#grammar-production-HEX">HEX</a> <a href="#grammar-production-HEX">HEX</a></td>
+ <td>PN_CHARS_BASE ((PN_CHARS | '<code class="grammar-literal">.</code>')* PN_CHARS)?</td>
</tr>
-<tr id="grammar-production-HEX">
- <td>[171s]</td>
- <td><a href="#grammar-production-HEX">HEX</a></td>
+<tr id="grammar-production-// [168s] PN_LOCAL">
+ <td>[58]</td>
+ <td><a href="#grammar-production-// [168s] PN_LOCAL">// [168s] PN_LOCAL</a></td>
+ <td>::=</td>
+ <td>(PN_CHARS_U | '<code class="grammar-literal">:</code>' | [0-9] | PLX) ((PN_CHARS | '<code class="grammar-literal">.</code>' | '<code class="grammar-literal">:</code>' | PLX)* (PN_CHARS | '<code class="grammar-literal">:</code>' | PLX))?</td>
+</tr>
+<tr id="grammar-production-// [169s] PLX">
+ <td>[59]</td>
+ <td><a href="#grammar-production-// [169s] PLX">// [169s] PLX</a></td>
+ <td>::=</td>
+ <td>PERCENT | PN_LOCAL_ESC</td>
+</tr>
+<tr id="grammar-production-// [170s] PERCENT">
+ <td>[60]</td>
+ <td><a href="#grammar-production-// [170s] PERCENT">// [170s] PERCENT</a></td>
+ <td>::=</td>
+ <td>'<code class="grammar-literal">%</code>' HEX HEX</td>
+</tr>
+<tr id="grammar-production-// [171s] HEX">
+ <td>[61]</td>
+ <td><a href="#grammar-production-// [171s] HEX">// [171s] HEX</a></td>
<td>::=</td>
<td>[0-9] | [A-F] | [a-f]</td>
</tr>
-<tr id="grammar-production-PN_LOCAL_ESC">
- <td>[172s]</td>
- <td><a href="#grammar-production-PN_LOCAL_ESC">PN_LOCAL_ESC</a></td>
+<tr id="grammar-production-// [172s] PN_LOCAL_ESC">
+ <td>[62]</td>
+ <td><a href="#grammar-production-// [172s] PN_LOCAL_ESC">// [172s] PN_LOCAL_ESC</a></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>
@@ -1142,7 +1150,6 @@
-
</section>
<section class="appendix" id="media-registration">