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>
9711
+
<a href="#defn_absPath" class="absOp">Path</a>(|X|, |ppe|, |X|) for endpoints |X| and |Y|.</p>
<p>where |PV| = { |v| ∈ {|X|,|Y|} | |v| is a variable}.</p>
9777
9776
<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>
9778
9777
</div>
9779
-
<div class="ednote">Olaf, continue here!</div>
9780
9778
<p>Informally, this is the same as:</p>
9781
-
<pre>SELECT * { X P _:a . _:a Q Y }</pre>
9782
-
<p>using the fact that a blank node <code>_:a</code> acts like a variable (under simple
and <var>P<sub>2</sub></var> can be translated into <var>ppe<sub>2</sub></var>.
9785
+
This observation is based on the fact that a blank node <code>_:a</code> acts like a variable (under simple
9783
9786
entailment) except it does not appear in the results from <code>SELECT *</code>.</p>
9784
9787
<div class="defn">
9785
9788
<p><b>Definition: <span id="defn_evalPP_alternative">Evaluation of Alternative Property Path</span></b></p>
9786
-
<p>Let P and Q be property path expressions.</p>
9787
-
<pre>
9788
-
eval(Path(X, alt(P,Q), Y)) =
9789
-
Union(eval(Path(X, P, Y)), eval(Path(X, Q, Y)))
9789
+
<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>
9817
9827
</div>
9818
-
<p>We define an auxillary function, ALP, used in the definitions of ZeroOrMorePath and
9819
-
OneOrMorePath. Note that the algorithm given here serves to specify the feature. An
9828
+
<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
+
<a href="#defn_evalOneOrMorePath">OneOrMorePath</a>. Note that the algorithm given here serves to specify the feature. An
9820
9830
implementation is free to implement evaluation by any method that produces the same results
9821
-
for the query overall. The ZeroOrMorePath and OneOrMorePath forms return matches based on
9831
+
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
9822
9832
distinct nodes connected by the path.</p>
9823
9833
<p>The matching algorithm is based on following all paths, and detecting when a graph node
9824
9834
(subject or object), has been already visited on the path.</p>
9825
9835
<p>Informally, this algorithm attempts to extend the multiset of results by one application
9826
-
of <code>path</code> at each step, noting which nodes it has visited for this particular path. If
9836
+
of the given <a href="#defn_AlgebraicPropertyPathExpression">algebraic property path expression</a> |ppe| at each step, noting which nodes it has visited for this particular path. If
9827
9837
a node has been visited for the path under consideration, it is not a candidate for another
{ { } } 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>)
9898
9907
{ } otherwise
9899
9908
</pre>
9900
9909
</div>
9901
9910
<div class="defn">
9902
9911
<p><b>Definition: <span id="eval_negatedPropertySet">Evaluation of NegatedPropertySet</span></b></p>
9903
-
<pre class="code nohighlight">
9904
-
Write μ' as the extension of a solution mapping:
9905
-
μ'(μ,x) = μ(x) if x is a variable
9906
-
μ'(μ,t) = t if t is a RDF term
9912
+
<pre class="nohighlight">
9913
+
Write <var>μ'</var> as the extension of a solution mapping:
9914
+
<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
9907
9916
</pre>
9908
-
<pre class="code nohighlight">
9909
-
Let x and y be variables or RDF terms, and S a set of IRIs:
9917
+
<pre class="nohighlight">
9918
+
Let <var>x</var> and <var>y</var> be variables or RDF terms, <var>S</var> a set of IRIs,
9919
+
and <var>G</var> the <a href="#defn_ActiveGraph">active graph</a>.
9910
9920
9911
-
eval(Path(x, NPS(S), y)) = { μ | ∃ triple(μ'(μ,x), p, μ'(μ,y)) in G, such that the IRI of p ∉ S }
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> }
0 commit comments