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
<p>For every <a href="#defn_AlgebraicQueryExpression">algebraic query expression</a> of the form
9717
-
<a href="#defn_absPath" class="absOp">Path</a>(|X|, |ppe|, |Y|) we write</p>
9716
+
<p>To denote the evaluation of the property path pattern, for every <a href="#defn_AlgebraicQueryExpression">algebraic query expression</a> of the form
9717
+
<a href="#defn_absPath" class="absOp">Path</a>(|X|, |ppe|, |Y|) </p>, we write the following:
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
9762
9765
</pre>
9763
9766
<p>Informally, evaluating a Predicate Property Path is the same as executing a subquery
9764
-
<code>SELECT * { |X||iri||Y|</i> }</code> at that point in the query evaluation.</p>
9767
+
<code>SELECT * { |X| |iri| |Y| }</code> at that point in the query evaluation.</p>
9765
9768
<div class="defn">
9766
9769
<p><b>Definition: <span id="defn_evalPP_inverse">Evaluation of Inverse Property Path</span></b></p>
9767
9770
<p>Let |ppe| be an <a href="#defn_AlgebraicPropertyPathExpression">algebraic property path expression</a>, then:</p>
<p><b>Definition: <span id="defn_evalPP_sequence">Evaluation of Sequence Property Path</span></b></p>
9772
9775
<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>
9776
9779
<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>
<p><b>Definition: <span id="defn_evalPP_alternative">Evaluation of Alternative Property Path</span></b></p>
9789
9792
<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>.
{ (<var>X</var>, <var>xn</var>) (<var>Y</var>, <var>yn</var>) | either (<var>yn</var> in <a href="#defn_nodeSet">nodes</a>(<var>G</var>) and <var>xn</var> = <var>yn</var>) or {(<var>X</var>,<var>xn</var>), (<var>Y</var>,<var>yn</var>)} in ppeval(<var>X</var>,<var>ppe</var>,<var>Y</var>) }</pre>
9829
+
{ (<var>X</var>, <var>xn</var>) (<var>Y</var>, <var>yn</var>) | either (<var>yn</var> in <a href="#defn_nodeSet">nodes</a>(<var>G</var>) and <var>xn</var> = <var>yn</var>) or {(<var>X</var>,<var>xn</var>), (<var>Y</var>,<var>yn</var>)} in ppeval(<var>X</var>,<var>ppe</var>,<var>Y</var>) }</pre>
9827
9830
</div>
9828
9831
<p>We define an auxiliary function, <a href="#defn_evalALP_1">ALP</a>, used in the definitions of <a href="#defn_evalZeroOrMorePath">ZeroOrMorePath</a> and
9829
9832
<a href="#defn_evalOneOrMorePath">OneOrMorePath</a>. Note that the algorithm given here serves to specify the feature. An
9830
-
implementation is free to implement evaluation by any method that produces the same results
9833
+
implementor is free to implement evaluation by any method that produces the same results
9831
9834
for the query overall. The <a href="#defn_ppeZeroOrMorePath" class="ppeOp">ZeroOrMorePath</a> and <a href="#defn_ppeOneOrMorePath" class="ppeOp">OneOrMorePath</a> forms return matches based on
9832
9835
distinct nodes connected by the path.</p>
9833
9836
<p>The matching algorithm is based on following all paths, and detecting when a graph node
Write <var>μ'</var> as the extension of a solution mapping:
9914
9918
<var>μ'</var>(<var>μ</var>, <var>x</var>) = <var>μ</var>(<var>x</var>) if <var>x</var> is a variable
9915
-
<var>μ'</var>(<var>μ</var>, <var>t</var>) = <var>t</var> if <var>t</var> is a RDF term
9919
+
<var>μ'</var>(<var>μ</var>, <var>t</var>) = <var>t</var> if <var>t</var> is an RDF term
9916
9920
</pre>
9917
9921
<pre class="nohighlight">
9918
9922
Let <var>x</var> and <var>y</var> be variables or RDF terms, <var>S</var> a set of IRIs,
9919
9923
and <var>G</var> the <a href="#defn_ActiveGraph">active graph</a>.
9920
9924
9921
-
ppeval(<var>x</var>, <a href="#defn_ppeNPS" class="ppeOp">NPS</a>(<var>S</var>), <var>y</var>) = { <var>μ</var> | ∃ triple(<var>μ'</var>(<var>μ</var>,<var>x</var>), <var>p</var>, <var>μ'</var>(<var>μ</var>,<var>y</var>)) in <var>G</var>, such that the IRI of <var>p</var> ∉ <var>S</var> }
9925
+
ppeval(<var>x</var>, <a href="#defn_ppeNPS" class="ppeOp">NPS</a>(<var>S</var>), <var>y</var>) = { <var>μ</var> | ∃ triple(<var>μ'</var>(<var>μ</var>,<var>x</var>), <var>p</var>, <var>μ'</var>(<var>μ</var>,<var>y</var>)) in <var>G</var>, such that the IRI of <var>p</var> ∉ <var>S</var> }
0 commit comments