Optional leading / for Path. Other improvements in grammar.
--- a/ldpatch.html Thu Nov 20 13:42:01 2014 -0500
+++ b/ldpatch.html Thu Nov 20 23:25:47 2014 -0500
@@ -458,7 +458,10 @@
<section id="path-expression">
<h2><dfn>Path Expression</dfn></h2>
<p>
-LD Patch uses path expressions to describe possible routes through the <a>target graph</a> between two nodes. The main goal is to allow addressing a blank node by “walking” the arcs of the graph from an already identified node. A path is a sequence of <dfn>Step</dfn>s and <dfn>Constraint</dfn>s, which are applied in order to a set of nodes <var>N</var>. <a>Step</a>s can be of three kinds:
+ A path expression can be used to locate RDF nodes within the <a>target graph</a>. A path expression consists of a series of one or more <a>Step</a>s or <a>Constraint</a>s, separated by "<code>/</code>", and optionally beginning with "<code>/</code>". The main goal is to allow addressing a blank node by “walking” the arcs of the graph from an already identified node.
+ </p>
+ <p>
+ A <dfn>Step</dfn> can be of three kinds:
</p>
<ul>
<li>A <dfn>StepForward</dfn> is defined by an IRI <var>p</var>, and consists in following the corresponding outgoing arcs: <var>N</var> is replaced by the set of the objects of all triples from the <a>target graph</a> with predicate <var>p</a> and their subject in <var>N</var>.</li>
@@ -466,7 +469,7 @@
<li>A <dfn>StepAt</dfn> is defined by an integer <i>n</i>, and consists in following <var>n</var> <code>rdf:rest</code> arcs and one <code>rdf:first</code> arc in order to reach the corresponding member of an RDF collection. It is equivalent to a sequence of <var>n</var>+1 <a>StepForward</a>s with the corresponding IRIs.</li>
</ul>
<p>
-<a>Constraint</a>s can be of two kinds:
+A <dfn>Constraint</dfn> can be of two kinds:
</p>
<ul>
<li>A <dfn>Unicity constraint</dfn>, described by the <em>bang</em> ("<code>!</code>") character, checks that <var>N</var> contains exactly one node. If this is not the case, <var>N</var> is replaced by the empty set (which triggers the Path Expression to fail).</li>
@@ -481,11 +484,6 @@
</pre>
</p>
- <div class="ldp-issue">
- <div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/100">ISSUE-100</a></div>
- Should ld-patch use a slash like sparql does, instead of as it currently does?
- </div>
-
</section>
<section id="patch-operations">
@@ -709,7 +707,7 @@
<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>") <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>
+ <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>
@@ -727,31 +725,31 @@
<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>") (<a href="#grammar-production-iri">iri</a> | <a href="#grammar-production-Var">Var</a>) "<code class="grammar-literal">.</code>"</td>
+ <td>("<code class="grammar-literal">Cut</code>" | "<code class="grammar-literal">C</code>") <a href="#grammar-production-varOrIRI">varOrIRI</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-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>
+ <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> | <a href="#grammar-production-Var">Var</a></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>( <a href="#grammar-production-step">step</a> | <a href="#grammar-production-constraint">constraint</a> )*</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>
</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>' ( '<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>
+ <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>
@@ -771,284 +769,290 @@
<td>::=</td>
<td>[0-9]+</td>
</tr>
-<tr id="grammar-production-Var">
- <td>[15]</td>
- <td><a href="#grammar-production-Var">Var</a></td>
+<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>[16]</td>
+ <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>[17]</td>
+ <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>[18]</td>
+ <td>[15]</td>
<td><a href="#grammar-production-graph">graph</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>[19]</td>
+ <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>[20]</td>
+ <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>[21]</td>
+ <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>[22]</td>
+ <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>
</tr>
<tr id="grammar-production-subject">
- <td>[23]</td>
+ <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-Var">Var</a></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>[24]</td>
+ <td>[11t]</td>
<td><a href="#grammar-production-predicate">predicate</a></td>
<td>::=</td>
<td><a href="#grammar-production-iri">iri</a></td>
</tr>
<tr id="grammar-production-object">
- <td>[25]</td>
+ <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></td>
</tr>
<tr id="grammar-production-literal">
- <td>[26]</td>
+ <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>
</tr>
<tr id="grammar-production-blankNodePropertyList">
- <td>[27]</td>
+ <td>[14t]</td>
<td><a href="#grammar-production-blankNodePropertyList">blankNodePropertyList</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>[28]</td>
+ <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>
</tr>
<tr id="grammar-production-NumericLiteral">
- <td>[29]</td>
+ <td>[16t]</td>
<td><a href="#grammar-production-NumericLiteral">NumericLiteral</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>
</tr>
<tr id="grammar-production-RDFLiteral">
- <td>[30]</td>
+ <td>[128s]</td>
<td><a href="#grammar-production-RDFLiteral">RDFLiteral</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>
</tr>
<tr id="grammar-production-BooleanLiteral">
- <td>[31]</td>
+ <td>[133s]</td>
<td><a href="#grammar-production-BooleanLiteral">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>[32]</td>
+ <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>[33]</td>
+ <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>[34]</td>
+ <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>[35]</td>
+ <td>[137s]</td>
<td><a href="#grammar-production-BlankNode">BlankNode</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>[36]</td>
+ <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>[37]</td>
+ <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>
</tr>
<tr id="grammar-production-PNAME_LN">
- <td>[38]</td>
+ <td>[140s]</td>
<td><a href="#grammar-production-PNAME_LN">PNAME_LN</a></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>[39]</td>
+ <td>[141s]</td>
<td><a href="#grammar-production-BLANK_NODE_LABEL">BLANK_NODE_LABEL</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>
</tr>
<tr id="grammar-production-LANGTAG">
- <td>[40]</td>
+ <td>[144s]</td>
<td><a href="#grammar-production-LANGTAG">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>[41]</td>
+ <td>[19]</td>
<td><a href="#grammar-production-INTEGER">INTEGER</a></td>
<td>::=</td>
<td>[+-]? [0-9]+</td>
</tr>
<tr id="grammar-production-DECIMAL">
- <td>[42]</td>
+ <td>[20]</td>
<td><a href="#grammar-production-DECIMAL">DECIMAL</a></td>
<td>::=</td>
<td>[+-]? [0-9]* '<code class="grammar-literal">.</code>' [0-9]+</td>
</tr>
<tr id="grammar-production-DOUBLE">
- <td>[43]</td>
+ <td>[21]</td>
<td><a href="#grammar-production-DOUBLE">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>
</tr>
<tr id="grammar-production-EXPONENT">
- <td>[44]</td>
+ <td>[154s]</td>
<td><a href="#grammar-production-EXPONENT">EXPONENT</a></td>
<td>::=</td>
<td>[eE] [+-]? [0-9]+</td>
</tr>
<tr id="grammar-production-STRING_LITERAL_QUOTE">
- <td>[45]</td>
+ <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>[46]</td>
+ <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>[47]</td>
+ <td>[24]</td>
<td><a href="#grammar-production-STRING_LITERAL_LONG_SINGLE_QUOTE">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>")? ([^'\] | <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>[48]</td>
+ <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>
</tr>
<tr id="grammar-production-UCHAR">
- <td>[49]</td>
+ <td>[26]</td>
<td><a href="#grammar-production-UCHAR">UCHAR</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>
</tr>
<tr id="grammar-production-ECHAR">
- <td>[50]</td>
+ <td>[159s]</td>
<td><a href="#grammar-production-ECHAR">ECHAR</a></td>
<td>::=</td>
<td>'<code class="grammar-literal">\</code>' [tbnrf"'\]</td>
</tr>
<tr id="grammar-production-WS">
- <td>[51]</td>
+ <td>[161s]</td>
<td><a href="#grammar-production-WS">WS</a></td>
<td>::=</td>
<td>#x20 | #x9 | #xD | #xA</td>
</tr>
<tr id="grammar-production-ANON">
- <td>[52]</td>
+ <td>[162s]</td>
<td><a href="#grammar-production-ANON">ANON</a></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>[53]</td>
+ <td>[163s]</td>
<td><a href="#grammar-production-PN_CHARS_BASE">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>[54]</td>
+ <td>[164s]</td>
<td><a href="#grammar-production-PN_CHARS_U">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>[55]</td>
+ <td>[166s]</td>
<td><a href="#grammar-production-PN_CHARS">PN_CHARS</a></td>
<td>::=</td>
- <td><a href="#grammar-production-PN_CHA_U">PN_CHARS_U</a> | '<code class="grammar-literal">-</code>' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]</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>[56]</td>
+ <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>
</tr>
<tr id="grammar-production-PN_LOCAL">
- <td>[57]</td>
+ <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>[58]</td>
+ <td>[169s]</td>
<td><a href="#grammar-production-PLX">PLX</a></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>[59]</td>
+ <td>[170s]</td>
<td><a href="#grammar-production-PERCENT">PERCENT</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>
</tr>
<tr id="grammar-production-HEX">
- <td>[60]</td>
+ <td>[171s]</td>
<td><a href="#grammar-production-HEX">HEX</a></td>
<td>::=</td>
<td>[0-9] | [A-F] | [a-f]</td>
</tr>
<tr id="grammar-production-PN_LOCAL_ESC">
- <td>[61]</td>
+ <td>[172s]</td>
<td><a href="#grammar-production-PN_LOCAL_ESC">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>