Skip to content

Commit 938aa01

Browse files
hartigTallTed
andauthored
Apply suggestions from code review (thanks @TallTed !!)
Co-authored-by: Ted Thibodeau Jr <[email protected]>
1 parent 8a36cfa commit 938aa01

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

spec/index.html

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9713,22 +9713,25 @@ <h3>Property Path Patterns</h3>
97139713
<div id="pp-eval-notation">
97149714
<b>Notation</b>
97159715
</div>
9716-
<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:
97189718
<pre class="nohighlight">ppeval(<var>X</var>, <var>ppe</var>, <var>Y</var>)</pre>
9719-
<p>to denote the evaluation of the property path pattern. This produces a multiset of solution
9719+
<p>This produces a multiset of solution
97209720
mappings, each solution mapping having a binding for variables used (each of |X| and |Y| can
97219721
be a variable). Some operators only produce a set of solution mappings.</p>
9722-
<p>Write</p>
97239722
<table style="border-collapse: collapse; border-color: #000000; border-spacing: 10px ; border-width: 1px">
97249723
<tbody>
9724+
<tr>
9725+
<th>Write</th>
9726+
<th>When <code>|x|</code> is</th>
9727+
</tr>
97259728
<tr>
97269729
<td><code>|x|:term</code></td>
9727-
<td>when <code>|x|</code> is an RDF term</td>
9730+
<td>an RDF term</td>
97289731
</tr>
97299732
<tr>
97309733
<td><code>|x|:var</code></td>
9731-
<td>when <code>|x|</code> is a variable</td>
9734+
<td>a variable</td>
97329735
</tr>
97339736
</tbody>
97349737
</table>
@@ -9761,7 +9764,7 @@ <h3>Property Path Patterns</h3>
97619764
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
97629765
</pre>
97639766
<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&nbsp;*&nbsp;{&nbsp;|X|&nbsp;|iri|&nbsp;|Y|&nbsp;}</code> at that point in the query evaluation.</p>
97659768
<div class="defn">
97669769
<p><b>Definition: <span id="defn_evalPP_inverse">Evaluation of Inverse Property Path</span></b></p>
97679770
<p>Let |ppe| be an <a href="#defn_AlgebraicPropertyPathExpression">algebraic property path expression</a>, then:</p>
@@ -9771,7 +9774,7 @@ <h3>Property Path Patterns</h3>
97719774
<p><b>Definition: <span id="defn_evalPP_sequence">Evaluation of Sequence Property Path</span></b></p>
97729775
<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>
97739776
<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>
9774-
<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>
9777+
<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>
97759778
<p>where |PV| = { |v| ∈ {|X|,|Y|} | |v| is a variable}.</p>
97769779
<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>
97779780
</div>
@@ -9788,7 +9791,7 @@ <h3>Property Path Patterns</h3>
97889791
<p><b>Definition: <span id="defn_evalPP_alternative">Evaluation of Alternative Property Path</span></b></p>
97899792
<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>.
97909793
<pre class="nohighlight">
9791-
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>) =
9794+
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>) =
97929795
<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>) )
97939796
</pre>
97949797
</div>
@@ -9811,23 +9814,23 @@ <h3>Property Path Patterns</h3>
98119814
Let <var>G</var> be the <a href="#defn_ActiveGraph">active graph</a>.</p>
98129815
<pre class="nohighlight">
98139816
ppeval(<var>X</var>:term, <a href="#defn_ppeZeroOrOnePath" class="ppeOp">ZeroOrOnePath</a>(<var>ppe</var>), <var>Y</var>:var) =
9814-
{ (<var>Y</var>, <var>yn</var>) | <var>yn</var> = <var>X</var> or {(<var>Y</var>, <var>yn</var>)} in ppeval(<var>X</var>,<var>ppe</var>,<var>Y</var>) }
9817+
{ (<var>Y</var>, <var>yn</var>) | <var>yn</var> = <var>X</var> or {(<var>Y</var>, <var>yn</var>)} in ppeval(<var>X</var>, <var>ppe</var>, <var>Y</var>) }
98159818
</pre>
98169819
<pre class="nohighlight">
98179820
ppeval(<var>X</var>:var, <a href="#defn_ppeZeroOrOnePath" class="ppeOp">ZeroOrOnePath</a>(<var>ppe</var>), <var>Y</var>:term) =
9818-
{ (<var>X</var>, <var>xn</var>) | <var>xn</var> = <var>Y</var> or {(<var>X</var>, <var>xn</var>)} in ppeval(<var>X</var>,<var>ppe</var>,<var>Y</var>) }
9821+
{ (<var>X</var>, <var>xn</var>) | <var>xn</var> = <var>Y</var> or {(<var>X</var>, <var>xn</var>)} in ppeval(<var>X</var>, <var>ppe</var>, <var>Y</var>) }
98199822
</pre>
98209823
<pre class="nohighlight">
98219824
ppeval(<var>X</var>:term, <a href="#defn_ppeZeroOrOnePath" class="ppeOp">ZeroOrOnePath</a>(<var>ppe</var>), <var>Y</var>:term) =
98229825
{ {} } if <var>X</var> = <var>Y</var> or ppeval(<var>X</var>,<var>ppe</var>,<var>X</var>) is not empty
98239826
{ } otherwise</pre>
98249827
<pre class="nohighlight">
98259828
ppeval(<var>X</var>:var, <a href="#defn_ppeZeroOrOnePath" class="ppeOp">ZeroOrOnePath</a>(<var>ppe</var>), <var>Y</var>:var) =
9826-
{ (<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>
98279830
</div>
98289831
<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
98299832
<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
98319834
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
98329835
distinct nodes connected by the path.</p>
98339836
<p>The matching algorithm is based on following all paths, and detecting when a graph node
@@ -9840,7 +9843,8 @@ <h3>Property Path Patterns</h3>
98409843
<p><b>Definition: <span id="defn_evalALP_1">Function ALP</span></b></p>
98419844
<pre class="nohighlight">
98429845
Let <var>ppe</var> be an <a href="#defn_AlgebraicPropertyPathExpression">algebraic property path expression</a>.
9843-
Let <var>eval</var>(<var>x</var>:term, <var>ppe</var>) be the evaluation of <var>ppe</var>, starting at RDF term <var>x</var>,
9846+
Let <var>eval</var>(<var>x</var>:term, <var>ppe</var>) be the evaluation of <var>ppe</var>,
9847+
starting at RDF term <var>x</var>,
98449848
and returning a multiset of RDF terms reached
98459849
by repeated matches of <var>ppe</var>.
98469850

@@ -9912,13 +9916,13 @@ <h3>Property Path Patterns</h3>
99129916
<pre class="nohighlight">
99139917
Write <var>μ'</var> as the extension of a solution mapping:
99149918
<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
99169920
</pre>
99179921
<pre class="nohighlight">
99189922
Let <var>x</var> and <var>y</var> be variables or RDF terms, <var>S</var> a set of IRIs,
99199923
and <var>G</var> the <a href="#defn_ActiveGraph">active graph</a>.
99209924

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> }
99229926
</pre>
99239927
</div>
99249928
</section>

0 commit comments

Comments
 (0)