@@ -8704,7 +8704,7 @@ <h3>Algebraic Syntax</h3>
87048704 is defined recursively as follows:</p>
87058705 <ul>
87068706 <li id="defn_ppeLink">
8707- <a href="#defn_ppeLink" class="ppeOp">link </a>(|iri|)
8707+ <a href="#defn_ppeLink" class="ppeOp">Link </a>(|iri|)
87088708 is an algebraic property path expression if
87098709 |iri| is an <a data-cite="RDF12-CONCEPTS#dfn-iri">IRI</a>.</li>
87108710 <li id="defn_ppeNPS">
@@ -8713,15 +8713,15 @@ <h3>Algebraic Syntax</h3>
87138713 |I| is a nonempty set of <a data-cite="RDF12-CONCEPTS#dfn-iri">IRIs</a>.
87148714 NPS is an acronym for <em>negated property set</em>.</i>
87158715 <li id="defn_ppeSeq">
8716- <a href="#defn_ppeSeq" class="ppeOp">seq </a>(<var>ppe<sub>1</sub></var>, <var>ppe<sub>2</sub></var>)
8716+ <a href="#defn_ppeSeq" class="ppeOp">Seq </a>(<var>ppe<sub>1</sub></var>, <var>ppe<sub>2</sub></var>)
87178717 is an algebraic property path expression if
87188718 <var>ppe<sub>1</sub></var> and <var>ppe<sub>2</sub></var> are algebraic property path expressions.</li>
87198719 <li id="defn_ppeAlt">
8720- <a href="#defn_ppeAlt" class="ppeOp">alt </a>(<var>ppe<sub>1</sub></var>, <var>ppe<sub>2</sub></var>)
8720+ <a href="#defn_ppeAlt" class="ppeOp">Alt </a>(<var>ppe<sub>1</sub></var>, <var>ppe<sub>2</sub></var>)
87218721 is an algebraic property path expression if
87228722 <var>ppe<sub>1</sub></var> and <var>ppe<sub>2</sub></var> are algebraic property path expressions.</li>
87238723 <li id="defn_ppeInv">
8724- <a href="#defn_ppeInv" class="ppeOp">inv </a>(|ppe|)
8724+ <a href="#defn_ppeInv" class="ppeOp">Inv </a>(|ppe|)
87258725 is an algebraic property path expression if
87268726 |ppe| is an algebraic property path expression.</li>
87278727 <li id="defn_ppeZeroOrOnePath">
@@ -9031,34 +9031,34 @@ <h5>Translate Property Path Expressions</h5>
90319031 </tr>
90329032 <tr>
90339033 <td><code>iri</code></td>
9034- <td><code><a href="#defn_ppeLink" class="ppeOp">link </a>(iri)</code></td>
9034+ <td><code><a href="#defn_ppeLink" class="ppeOp">Link </a>(iri)</code></td>
90359035 </tr>
90369036 <tr>
90379037 <td><code>^path</code></td>
9038- <td><code><a href="#defn_ppeInv" class="ppeOp">inv </a>(path)</code></td>
9038+ <td><code><a href="#defn_ppeInv" class="ppeOp">Inv </a>(path)</code></td>
90399039 </tr>
90409040 <tr>
90419041 <td><code>!(:iri<sub>1</sub>|...|:iri<sub>n</sub>)</code></td>
90429042 <td><code><a href="#defn_ppeNPS" class="ppeOp">NPS</a>({:iri<sub>1</sub> ... :iri<sub>n</sub>})</code></td>
90439043 </tr>
90449044 <tr>
90459045 <td><code>!(^:iri<sub>1</sub>|...|^:iri<sub>n</sub>)</code></td>
9046- <td><code><a href="#defn_ppeInv" class="ppeOp">inv </a>( <a href="#defn_ppeNPS" class="ppeOp">NPS</a>({:iri<sub>1</sub> ... :iri<sub>n</sub>}) )</code></td>
9046+ <td><code><a href="#defn_ppeInv" class="ppeOp">Inv </a>( <a href="#defn_ppeNPS" class="ppeOp">NPS</a>({:iri<sub>1</sub> ... :iri<sub>n</sub>}) )</code></td>
90479047 </tr>
90489048 <tr>
90499049 <td>
90509050 <code>!(:iri<sub>1</sub>|...|:iri<sub>i</sub>|^:iri<sub>i+1</sub>|...|^:iri<sub>m</sub>)</code> </td>
9051- <td><code><a href="#defn_ppeAlt" class="ppeOp">alt </a>( <a href="#defn_ppeNPS" class="ppeOp">NPS</a>({:iri<sub>1</sub> ...:iri<sub>i</sub>}),<br>
9052- <a href="#defn_ppeInv" class="ppeOp">inv </a>(<a href="#defn_ppeNPS" class="ppeOp">NPS</a>({:iri<sub>i+1</sub>, ..., :iri<sub>m</sub>}))
9051+ <td><code><a href="#defn_ppeAlt" class="ppeOp">Alt </a>( <a href="#defn_ppeNPS" class="ppeOp">NPS</a>({:iri<sub>1</sub> ...:iri<sub>i</sub>}),<br>
9052+ <a href="#defn_ppeInv" class="ppeOp">Inv </a>(<a href="#defn_ppeNPS" class="ppeOp">NPS</a>({:iri<sub>i+1</sub>, ..., :iri<sub>m</sub>}))
90539053 )</code></td>
90549054 </tr>
90559055 <tr>
90569056 <td><code>path1 / path2</code></td>
9057- <td><code><a href="#defn_ppeSeq" class="ppeOp">seq </a>(path1, path2)</code></td>
9057+ <td><code><a href="#defn_ppeSeq" class="ppeOp">Seq </a>(path1, path2)</code></td>
90589058 </tr>
90599059 <tr>
90609060 <td><code>path1 | path2</code></td>
9061- <td><code><a href="#defn_ppeAlt" class="ppeOp">alt </a>(path1, path2)</code></td>
9061+ <td><code><a href="#defn_ppeAlt" class="ppeOp">Alt </a>(path1, path2)</code></td>
90629062 </tr>
90639063 <tr>
90649064 <td><code>path*</code></td>
@@ -9106,15 +9106,15 @@ <h5>Translate Property Path Patterns</h5>
91069106 <th>Translation</th>
91079107 </tr>
91089108 <tr>
9109- <td>|x| <a href="#defn_ppeLink" class="ppeOp">link </a>(|iri|) |y|</td>
9109+ <td>|x| <a href="#defn_ppeLink" class="ppeOp">Link </a>(|iri|) |y|</td>
91109110 <td>|x| |iri| |y|</td>
91119111 </tr>
91129112 <tr>
9113- <td>|x| <a href="#defn_ppeInv" class="ppeOp">inv </a>(|iri|) |y|</td>
9113+ <td>|x| <a href="#defn_ppeInv" class="ppeOp">Inv </a>(|iri|) |y|</td>
91149114 <td>|y| |iri| |x|</td>
91159115 </tr>
91169116 <tr>
9117- <td>|x| <a href="#defn_ppeSeq" class="ppeOp">seq </a>(<var>ppe<sub>1</sub></var>, <var>ppe<sub>2</sub></var>) |y|</td>
9117+ <td>|x| <a href="#defn_ppeSeq" class="ppeOp">Seq </a>(<var>ppe<sub>1</sub></var>, <var>ppe<sub>2</sub></var>) |y|</td>
91189118 <td>|x| <var>ppe<sub>1</sub></var> |var| . |var| <var>ppe<sub>2</sub></var> |y|</td>
91199119 </tr>
91209120 <tr>
@@ -9126,7 +9126,7 @@ <h5>Translate Property Path Patterns</h5>
91269126<div class="issue" data-number="226">
91279127 I assume that the translation rules in this table are meant to be applied recursively,
91289128 but the section doesn't say anything about that. In particular, for the
9129- "|x| <a href="#defn_ppeSeq" class="ppeOp">seq </a>(<var>ppe<sub>1</sub></var>, <var>ppe<sub>2</sub></var>) |y|"
9129+ "|x| <a href="#defn_ppeSeq" class="ppeOp">Seq </a>(<var>ppe<sub>1</sub></var>, <var>ppe<sub>2</sub></var>) |y|"
91309130 case: <var>ppe<sub>1</sub></var> and <var>ppe<sub>2</sub></var> in the resulting translation
91319131 may still be arbitrary algebraic property path expressions and, thus,
91329132 the translation should be applied again for each of the two resulting property path patterns
@@ -9147,15 +9147,15 @@ <h5>Translate Property Path Patterns</h5>
91479147 ?s :p* ?o
91489148 </div>
91499149 <div class="algExample2">
9150- <a href="#defn_absPath" class="absOp">Path</a>(?s, <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>(<a href="#defn_ppeLink" class="ppeOp">link </a>(:p)), ?o)
9150+ <a href="#defn_absPath" class="absOp">Path</a>(?s, <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>(<a href="#defn_ppeLink" class="ppeOp">Link </a>(:p)), ?o)
91519151 </div>
91529152 </div>
91539153 <div class="algExample">
91549154 <div class="algExample1">
91559155 :list rdf:rest*/rdf:first ?member
91569156 </div>
91579157 <div class="algExample2">
9158- <a href="#defn_absPath" class="absOp">Path</a>(:list, <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>(<a href="#defn_ppeLink" class="ppeOp">link </a>(rdf:rest)), ?_V) .<br>
9158+ <a href="#defn_absPath" class="absOp">Path</a>(:list, <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>(<a href="#defn_ppeLink" class="ppeOp">Link </a>(rdf:rest)), ?_V) .<br>
91599159 ?_V rdf:first ?member
91609160 </div>
91619161 </div>
@@ -9806,13 +9806,13 @@ <h3>Property Path Patterns</h3>
98069806 For example, the property path expression <code>(:p/:q)*</code>
98079807 is a ZeroOrMorePath expression involving a sequence property path,
98089808 and is translated into the algebraic property path expression
9809- <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>( <a href="#defn_ppeSeq" class="ppeOp">seq </a>(<a href="#defn_ppeLink" class="ppeOp">link </a>(:p), <a href="#defn_ppeLink" class="ppeOp">link </a>(:q)) ).</p>
9809+ <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>( <a href="#defn_ppeSeq" class="ppeOp">Seq </a>(<a href="#defn_ppeLink" class="ppeOp">Link </a>(:p), <a href="#defn_ppeLink" class="ppeOp">Link </a>(:q)) ).</p>
98109810 <p>Thereafter, the <a href="#sparqlTranslatePathPatterns">translation of property path patterns</a>
98119811 converts some of these algebraic property path expressions
98129812 to other SPARQL graph patterns, such as converting property paths of length one to triple
98139813 patterns, which in turn are combined into basic graph patterns.
98149814 This leaves algebraic property path expressions with the operators
9815- <a href="#defn_ppeAlt" class="ppeOp">alt </a>,
9815+ <a href="#defn_ppeAlt" class="ppeOp">Alt </a>,
98169816 <a href="#defn_ppeZeroOrOnePath" class="ppeOp">ZeroOrOnePath</a>,
98179817 <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>,
98189818 <a href="#defn_ppeOneOrMorePath" class="ppeOp">OneOrMorePath</a>,
@@ -9858,42 +9858,42 @@ <h3>Property Path Patterns</h3>
98589858 <p><b>Definition: <span id="defn_evalPP_predicate">Evaluation of Predicate Property Path</span></b></p>
98599859 <p>Let |iri| be an IRI.</p>
98609860 <pre class="nohighlight">
9861- ppeval(<var>X</var>, <a href="#defn_ppeLink" class="ppeOp">link </a>(<var>iri</var>), <var>Y</var>) = <a href="#BasicGraphPattern">evaluation of basic graph pattern</a> {<var>X</var> <var>iri</var> <var>Y</var>}
9861+ ppeval(<var>X</var>, <a href="#defn_ppeLink" class="ppeOp">Link </a>(<var>iri</var>), <var>Y</var>) = <a href="#BasicGraphPattern">evaluation of basic graph pattern</a> {<var>X</var> <var>iri</var> <var>Y</var>}
98629862 </pre>
98639863 </div>
98649864 <p>If both |X| and |Y| are variables, this is the same as:</p>
98659865 <pre class="nohighlight">
9866- ppeval(<var>X</var>:var, <a href="#defn_ppeLink" class="ppeOp">link </a>(<var>iri</var>), <var>Y</var>:var) =
9866+ ppeval(<var>X</var>:var, <a href="#defn_ppeLink" class="ppeOp">Link </a>(<var>iri</var>), <var>Y</var>:var) =
98679867 { (<var>X</var>, <var>xn</var>:term) (<var>Y</var>, <var>yn</var>:term) | triple (<var>xn</var>, <var>iri</var>, <var>yn</var>) is in the active graph }</pre>
98689868 <p>If |X| is a variable and |Y| an RDF term:</p>
98699869 <pre class="nohighlight">
9870- ppeval(<var>X</var>:var, <a href="#defn_ppeLink" class="ppeOp">link </a>(<var>iri</var>), <var>Y</var>:term) =
9870+ ppeval(<var>X</var>:var, <a href="#defn_ppeLink" class="ppeOp">Link </a>(<var>iri</var>), <var>Y</var>:term) =
98719871 { (<var>X</var>, <var>xn</var>:term) | triple (<var>xn</var>, <var>iri</var>, <var>Y</var>) is in the active graph }</pre>
98729872 <p>If |X| is an RDF term and |Y| is a variable:</p>
98739873 <pre class="nohighlight">
9874- ppeval(<var>X</var>:term, <a href="#defn_ppeLink" class="ppeOp">link </a>(<var>iri</var>), <var>Y</var>:var) =
9874+ ppeval(<var>X</var>:term, <a href="#defn_ppeLink" class="ppeOp">Link </a>(<var>iri</var>), <var>Y</var>:var) =
98759875 { (<var>Y</var>, <var>yn</var>:term) | triple (<var>X</var>, <var>iri</var>, <var>yn</var>) is in the active graph }</pre>
98769876 <p>If both |X| and |Y| are RDF terms:</p>
98779877 <pre class="nohighlight">
9878- ppeval(<var>X</var>:term, <a href="#defn_ppeLink" class="ppeOp">link </a>(<var>iri</var>), <var>Y</var>:term)
9878+ ppeval(<var>X</var>:term, <a href="#defn_ppeLink" class="ppeOp">Link </a>(<var>iri</var>), <var>Y</var>:term)
98799879 = { μ<sub>0</sub> } if triple (<var>X</var>, <var>iri</var>, <var>Y</var>) is in the active graph
98809880 = { { } } = Ω<sub>0</sub>
98819881
9882- ppeval(<var>X</var>:term, <a href="#defn_ppeLink" class="ppeOp">link </a>(<var>iri</var>), <var>Y</var>:term) =
9882+ ppeval(<var>X</var>:term, <a href="#defn_ppeLink" class="ppeOp">Link </a>(<var>iri</var>), <var>Y</var>:term) =
98839883 { } if triple (<var>X</var>, <var>iri</var>, <var>Y</var>) is not in the active graph
98849884 </pre>
98859885 <p>Informally, evaluating a Predicate Property Path is the same as executing a subquery
98869886 <code>SELECT * { |X| |iri| |Y| }</code> at that point in the query evaluation.</p>
98879887 <div class="defn">
98889888 <p><b>Definition: <span id="defn_evalPP_inverse">Evaluation of Inverse Property Path</span></b></p>
98899889 <p>Let |ppe| be an <a href="#defn_AlgebraicPropertyPathExpression">algebraic property path expression</a>, then:</p>
9890- <pre class="nohighlight">ppeval(<var>X</var>, <a href="#defn_ppeInv" class="ppeOp">inv </a>(<var>ppe</var>), <var>Y</var>) = ppeval(<var>Y</var>, <var>ppe</var>, <var>X</var>)</pre>
9890+ <pre class="nohighlight">ppeval(<var>X</var>, <a href="#defn_ppeInv" class="ppeOp">Inv </a>(<var>ppe</var>), <var>Y</var>) = ppeval(<var>Y</var>, <var>ppe</var>, <var>X</var>)</pre>
98919891 </div>
98929892 <div class="defn">
98939893 <p><b>Definition: <span id="defn_evalPP_sequence">Evaluation of Sequence Property Path</span></b></p>
98949894 <p>Let <var>ppe<sub>1</sub></var> and <var>ppe<sub>2</sub></var> be <a href="#defn_AlgebraicPropertyPathExpression">algebraic property path expressions</a>. Let |V| be a fresh variable.</p>
98959895 <pre class="nohighlight"><var>A</var> = <a href="#defn_algJoin" class="algFct">Join</a>( ppeval(<var>X</var>, <var>ppe<sub>1</sub></var>, <var>V</var>), ppeval(<var>V</var>, <var>ppe<sub>2</sub></var>, <var>Y</var>) )</pre>
9896- <pre class="nohighlight">ppeval(<var>X</var>, <a href="#defn_ppeSeq" class="ppeOp">seq </a>(<var>ppe<sub>1</sub></var>, <var>ppe<sub>2</sub></var>), <var>Y</var>) = <a href="#defn_algProject" class="algFct">Project</a>(<var>A</var>, <var>PV</var>)</pre>
9896+ <pre class="nohighlight">ppeval(<var>X</var>, <a href="#defn_ppeSeq" class="ppeOp">Seq </a>(<var>ppe<sub>1</sub></var>, <var>ppe<sub>2</sub></var>), <var>Y</var>) = <a href="#defn_algProject" class="algFct">Project</a>(<var>A</var>, <var>PV</var>)</pre>
98979897 <p>where |PV| = { |v| ∈ {|X|,|Y|} | |v| is a variable}.</p>
98989898<div class="issue" data-number="266"><a href="#defn_algJoin" class="algFct">Join</a> produces a multiset of solution mappings but <a href="#defn_algProject" class="algFct">Project</a> expects a sequence as its first argument. Moreover, <a href="#defn_algProject" class="algFct">Project</a> produces a sequence but ppeval(..) should be a multiset.</div>
98999899 </div>
@@ -9910,7 +9910,7 @@ <h3>Property Path Patterns</h3>
99109910 <p><b>Definition: <span id="defn_evalPP_alternative">Evaluation of Alternative Property Path</span></b></p>
99119911 <p>Let <var>ppe<sub>1</sub></var> and <var>ppe<sub>2</sub></var> be <a href="#defn_AlgebraicPropertyPathExpression">algebraic property path expressions</a>.
99129912 <pre class="nohighlight">
9913- ppeval(<var>X</var>, <a href="#defn_ppeAlt" class="ppeOp">alt </a>(<var>ppe<sub>1</sub></var>, <var>ppe<sub>2</sub></var>), <var>Y</var>) =
9913+ ppeval(<var>X</var>, <a href="#defn_ppeAlt" class="ppeOp">Alt </a>(<var>ppe<sub>1</sub></var>, <var>ppe<sub>2</sub></var>), <var>Y</var>) =
99149914 <a href="#defn_algUnion" class="algFct">Union</a>( ppeval(<var>X</var>, <var>ppe<sub>1</sub></var>, <var>Y</var>), ppeval(<var>X</var>, <var>ppe<sub>2</sub></var>, <var>Y</var>) )
99159915 </pre>
99169916 </div>
@@ -9997,7 +9997,7 @@ <h3>Property Path Patterns</h3>
99979997 <var>t</var> in <a href="#defn_nodeSet">nodes</a>(<var>G</var>), (<var>vy</var>, <var>n</var>) in ppeval(<var>t</var>, <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>(<var>ppe</var>), <var>vy</var>) }
99989998
99999999ppeval(<var>vx</var>:var, <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>(<var>ppe</var>), <var>y</var>:term) =
10000- ppeval(<var>y</var>:term, <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>(<a href="#defn_ppeInv" class="ppeOp">inv </a>(<var>ppe</var>)), <var>vx</var>:var)
10000+ ppeval(<var>y</var>:term, <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>(<a href="#defn_ppeInv" class="ppeOp">Inv </a>(<var>ppe</var>)), <var>vx</var>:var)
1000110001
1000210002ppeval(<var>x</var>:term, <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>(<var>ppe</var>), <var>y</var>:term) =
1000310003 { { } } if { (<var>vy</var>:var,<var>y</var>) } in ppeval(<var>x</var>, <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a>(<var>ppe</var>), <var>vy</var>)
@@ -10025,7 +10025,7 @@ <h3>Property Path Patterns</h3>
1002510025 <var>t</var> in <a href="#defn_nodeSet">nodes</a>(<var>G</var>), (<var>vy</var>, <var>n</var>) in ppeval(<var>t</var>, <a href="#defn_ppeOneOrMorePath" class="ppeOp">OneOrMorePath</a>(<var>ppe</var>), <var>vy</var>) }
1002610026
1002710027ppeval(<var>vx</var>:var, <a href="#defn_ppeOneOrMorePath" class="ppeOp">OneOrMorePath</a>(<var>ppe</var>), <var>y</var>:term) =
10028- ppeval(<var>y</var>:term, <a href="#defn_ppeOneOrMorePath" class="ppeOp">OneOrMorePath</a>(<a href="#defn_ppeInv" class="ppeOp">inv </a>(<var>ppe</var>)), <var>vx</var>)
10028+ ppeval(<var>y</var>:term, <a href="#defn_ppeOneOrMorePath" class="ppeOp">OneOrMorePath</a>(<a href="#defn_ppeInv" class="ppeOp">Inv </a>(<var>ppe</var>)), <var>vx</var>)
1002910029
1003010030ppeval(<var>x</var>:term, <a href="#defn_ppeOneOrMorePath" class="ppeOp">OneOrMorePath</a>(<var>ppe</var>), <var>y</var>:term) =
1003110031 { { } } if { (<var>vy</var>:var, <var>y</var>) } in ppeval(<var>x</var>, <a href="#defn_ppeOneOrMorePath" class="ppeOp">OneOrMorePath</a>(<var>ppe</var>), <var>vy</var>)
0 commit comments