You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<div class="ednote">The example at the end of the previous paragraph fits much better into the first paragraph of the section and, thus, should be moved there.</div>
9700
9713
<div class="defn">
9701
9714
<div id="pp-eval-notation">
9702
9715
<b>Notation</b>
9703
9716
</div>
9704
-
<p>Write</p>
9705
-
<pre>eval(Path(X, PP, Y))</pre>
9706
-
<p>for the evaluation of the property path patterns. This produces a multiset of solution
9707
-
mappings μ, each solution mapping having a binding for variables used (each of X and Y can
9717
+
<p>For every <a href="#defn_AlgebraicQueryExpression">algebraic query expression</a> of the form
9718
+
<a href="#defn_absPath" class="absOp">Path</a>(|X|, |ppe|, |Y|) we write</p>
<p>If both X and Y are variables, this is the same as:</p>
9745
-
<pre>
9746
-
eval(Path(X:var, link(iri), Y:var)) = { (X, xn) (Y, yn) | xn and yn are RDF terms and triple (xn iri yn) is in the active graph }</pre>
9747
-
<p>If X is a variable and Y an RDF term:</p>
9748
-
<pre>
9749
-
eval(Path(X:var, link(iri), Y:term)) = { (X, xn) | xn is an RDF term and triple (xn iri Y) is in the active graph
9750
-
}
9751
-
</pre>
9752
-
<p>If X is an RDF term and Y is a variable:</p>
9753
-
<pre>
9754
-
eval(Path(X:term, link(iri), Y:var)) = { (Y, yn) | yn is an RDF term and triple (X iri yn) is in the active graph
9755
-
}
9756
-
</pre>
9757
-
<p>If both X and Y are RDF terms:</p>
9758
-
<pre>
9759
-
eval(Path(X:term, link(iri), Y:term))
9760
-
= { μ<sub>0</sub> } if triple (X iri Y) is in the active graph
9747
+
<p>If both |X| and |Y| are variables, this is the same as:</p>
9748
+
<pre class="nohighlight">
9749
+
ppeval(<var>X</var>:var, <a href="#defn_ppeLink" class="ppeOp">link</a>(<var>iri</var>), <var>Y</var>:var) = { (<var>X</var>, <var>xn</var>) (<var>Y</var>, <var>yn</var>) | <var>xn</var> and <var>yn</var> are RDF terms and triple (<var>xn</var>, <var>iri</var>, <var>yn</var>) is in the active graph }</pre>
9750
+
<p>If |X| is a variable and |Y| an RDF term:</p>
9751
+
<pre class="nohighlight">
9752
+
ppeval(<var>X</var>:var, <a href="#defn_ppeLink" class="ppeOp">link</a>(<var>iri</var>), <var>Y</var>:term) = { (<var>X</var>, <var>xn</var>) | <var>xn</var> is an RDF term and triple (<var>xn</var>, <var>iri</var>, <var>Y</var>) is in the active graph }</pre>
9753
+
<p>If |X| is an RDF term and |Y| is a variable:</p>
9754
+
<pre class="nohighlight">
9755
+
ppeval(<var>X</var>:term, <a href="#defn_ppeLink" class="ppeOp">link</a>(<var>iri</var>), <var>Y</var>:var) = { (<var>Y</var>, <var>yn</var>) | <var>yn</var> is an RDF term and triple (<var>X</var>, <var>iri</var>, <var>yn</var>) is in the active graph }</pre>
= { μ<sub>0</sub> } if triple (<var>X</var>, <var>iri</var>, <var>Y</var>) is in the active graph
9761
9760
= { { } } = Ω<sub>0</sub>
9762
9761
9763
-
eval(Path(X:term, link(iri), Y:term)) = { } if triple (X iri Y) is not in the active graph
9762
+
ppeval(<var>X</var>:term, <a href="#defn_ppeLink" class="ppeOp">link</a>(<var>iri</var>), <var>Y</var>:term) = { } if triple (<var>X</var>, <var>iri</var>, <var>Y</var>) is not in the active graph
9764
9763
</pre>
9765
9764
<p>Informally, evaluating a Predicate Property Path is the same as executing a subquery
9766
-
<code>SELECT * { <i>X P Y</i> }</code> at that point in the query evaluation.</p>
9765
+
<code>SELECT * { |X| |iri| |Y|</i> }</code> at that point in the query evaluation.</p>
9767
9766
<div class="defn">
9768
9767
<p><b>Definition: <span id="defn_evalPP_inverse">Evaluation of Inverse Property Path</span></b></p>
<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>
<p>where |PV| = { |v| ∈ {|X|,|Y|} | |v| is a variable}.</p>
9777
+
<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>
9777
9778
</div>
9779
+
<div class="ednote">Olaf, continue here!</div>
9778
9780
<p>Informally, this is the same as:</p>
9779
9781
<pre>SELECT * { X P _:a . _:a Q Y }</pre>
9780
9782
<p>using the fact that a blank node <code>_:a</code> acts like a variable (under simple
0 commit comments