Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 78 additions & 36 deletions spec/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4694,6 +4694,15 @@ <h3>Operand Data Types</h3>
<section id="expression-evaluation">
<span id="evaluation"><!-- Legacy name --></span>
<h3>Expression Evaluation</h3>
<p>
A SPARQL expression is evaluated
with respect to a <a href="#defn_sparqlSolutionMapping">solution mapping</a>
and in the context of an <a href="#sparqlDataset">RDF dataset</a>
with an <a href="#defn_ActiveGraph">active graph</a>.
The result of such an evaluation is either
an <a data-cite="RDF12-CONCEPTS#dfn-rdf-term">RDF term</a> or
an [=error=].
</p>
<p>
SPARQL provides a subset of the functions and operators defined by
<a data-cite="XPATH-FUNCTIONS-31#">XPath and XQuery Functions and Operators</a>.
Expand Down Expand Up @@ -10048,16 +10057,18 @@ <h3>SPARQL Algebra</h3>
|D| be a <a href="#sparqlDataset">dataset</a>,
and |G| be the <a href="#defn_ActiveGraph">active graph</a>.
We define:</p>
<p><a href="#defn_algFilter" class="algFct">Filter</a>(<var>expr</var>, <var>Ω</var>, |D|, |G|) = { <var>μ</var> in <var>Ω</var> | <var>expr</var>(<var>μ</var>) is an expression that has an
[=effective boolean value=] of true }</p>
<div class="issue" data-number="254">
It is not clear what <var>expr</var>(<var>μ</var>) is, and it is not apparent in the formula that the expression |expr| is meant to be evaluated not only with respect to <var>μ</var> but also with respect to |D| with active graph |G|.</div>
<p><a href="#defn_algFilter" class="algFct">Filter</a>(<var>expr</var>, <var>Ω</var>, |D|, |G|) =
{ <var>μ</var> in <var>Ω</var> |
|expr|(<var>μ</var>, |D|, |G|) is an RDF term |t|
such that <a href="#func-ebv">EBV</a>(|t|) is `"true"^^xsd:boolean` }</p>
<p><a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <a href="#defn_algFilter" class="algFct">Filter</a>(<var>expr</var>, <var>Ω</var>, |D|, |G|) )
= <a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <var>Ω</var> )</p>
<blockquote>
Note that evaluating an <code>exists(pattern)</code> expression uses the dataset |D| and
active graph |G|. See the <a href="#defn_evalFilter">evaluation of filter</a>.
</blockquote>
<p>
where, for every solution mapping <var>μ</var>,
|expr|(<var>μ</var>, |D|, |G|) is the result of
<a href="#expression-evaluation">evaluating</a> expression |expr|
with respect to <var>μ</var>, in the context of dataset |D| with active graph |G|.
</p>
</div>
<div class="defn">
<p><b>Definition: <span id="defn_algJoin">Join</span></b></p>
Expand All @@ -10077,29 +10088,43 @@ <h3>SPARQL Algebra</h3>
of <var>μ</var> is the sum of the multiplicities from all possibilities.</p>
<div class="defn">
<p><b>Definition: <span id="defn_algDiff">Diff</span></b></p>
<p>Let <var>Ω<sub>1</sub></var> and <var>Ω<sub>2</sub></var> be multisets of solution mappings and <var>expr</var> be an
<a href="#expressions">expression</a>. We define:</p>
<p><a href="#defn_algDiff" class="algFct">Diff</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>) = { <var>μ</var> | <var>μ</var> in <var>Ω<sub>1</sub></var> such that ∀ <var>μ'</var> in
<var>Ω<sub>2</sub></var>, either <var>μ</var> and <var>μ'</var> are not <a href="#defn_algCompatibleMapping">compatible</a> or <var>μ</var> and <var>μ'</var> are <a href="#defn_algCompatibleMapping">compatible</a> and
<var>expr</var>(merge(<var>μ</var>, <var>μ'</var>)) does not have an [=effective boolean value=] of true }</p>
<div class="issue" data-number="254">
It is not clear what <var>expr</var>(<var>μ</var>) is, and it is not apparent in the formula that the expression |expr| is meant to be evaluated not only with respect to <var>μ</var> but also with respect to |D| with active graph |G|.</div>
<p><a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <a href="#defn_algDiff" class="algFct">Diff</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>) ) =
<p>Let <var>Ω<sub>1</sub></var> and <var>Ω<sub>2</sub></var> be multisets of solution mappings,
<var>expr</var> be an <a href="#expressions">expression</a>,
|D| be a <a href="#sparqlDataset">dataset</a>,
and |G| be the <a href="#defn_ActiveGraph">active graph</a>.
We define:</p>
<p><a href="#defn_algDiff" class="algFct">Diff</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>, |D|, |G|) = { <var>μ</var> | <var>μ</var> in <var>Ω<sub>1</sub></var> such that ∀ <var>μ'</var> in
<var>Ω<sub>2</sub></var>, either i)&nbsp;<var>μ</var> and <var>μ'</var> are not <a href="#defn_algCompatibleMapping">compatible</a>,
or
ii)&nbsp;<var>μ</var> and <var>μ'</var> are <a href="#defn_algCompatibleMapping">compatible</a> and
|expr|(merge(<var>μ</var>, <var>μ'</var>), |D|, |G|) is an [=error=],
or
iii)&nbsp;<var>μ</var> and <var>μ'</var> are <a href="#defn_algCompatibleMapping">compatible</a> and
|expr|(merge(<var>μ</var>, <var>μ'</var>), |D|, |G|) is an RDF term |t| for which
<a href="#func-ebv">EBV</a>(|t|) is not `"true"^^xsd:boolean` }</p>
<p><a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <a href="#defn_algDiff" class="algFct">Diff</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>, |D|, |G|) ) =
<a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <var>Ω<sub>1</sub></var> )</p>
<p>
where, for every solution mapping <var>μ</var>,
|expr|(<var>μ</var>, |D|, |G|) is the result of
<a href="#expression-evaluation">evaluating</a> expression |expr|
with respect to <var>μ</var>, in the context of dataset |D| with active graph |G|.
</p>
Comment on lines 10091 to 10115
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems likely that this section (and likely others I'm not seeing right now) will benefit from HTML markup that delivers to the spec reader something like the subparagraphs which have been produced within the HTML markup. Perfect world, the lowercase Roman numerals could be reproduced in an ordered list, but these would be OK as a unordered list (to which I would suggest it be changed if there's no importance to the i/ii/iii) following the either (which I would suggest be changed to one of the following).

This is a rough suggestion (I have no HTML preview, at present), and it may itself need substantial change, if not a full rewrite, before merging.

Suggested change
<p>Let <var>Ω<sub>1</sub></var> and <var>Ω<sub>2</sub></var> be multisets of solution mappings,
<var>expr</var> be an <a href="#expressions">expression</a>,
|D| be a <a href="#sparqlDataset">dataset</a>,
and |G| be the <a href="#defn_ActiveGraph">active graph</a>.
We define:</p>
<p><a href="#defn_algDiff" class="algFct">Diff</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>, |D|, |G|) = { <var>μ</var> | <var>μ</var> in <var>Ω<sub>1</sub></var> such that ∀ <var>μ'</var> in
<var>Ω<sub>2</sub></var>, either i)&nbsp;<var>μ</var> and <var>μ'</var> are not <a href="#defn_algCompatibleMapping">compatible</a>,
or
ii)&nbsp;<var>μ</var> and <var>μ'</var> are <a href="#defn_algCompatibleMapping">compatible</a> and
|expr|(merge(<var>μ</var>, <var>μ'</var>), |D|, |G|) is an [=error=],
or
iii)&nbsp;<var>μ</var> and <var>μ'</var> are <a href="#defn_algCompatibleMapping">compatible</a> and
|expr|(merge(<var>μ</var>, <var>μ'</var>), |D|, |G|) is an RDF term |t| for which
<a href="#func-ebv">EBV</a>(|t|) is not `"true"^^xsd:boolean` }</p>
<p><a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <a href="#defn_algDiff" class="algFct">Diff</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>, |D|, |G|) ) =
<a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <var>Ω<sub>1</sub></var> )</p>
<p>
where, for every solution mapping <var>μ</var>,
|expr|(<var>μ</var>, |D|, |G|) is the result of
<a href="#expression-evaluation">evaluating</a> expression |expr|
with respect to <var>μ</var>, in the context of dataset |D| with active graph |G|.
</p>
<p>Let <var>Ω<sub>1</sub></var> and <var>Ω<sub>2</sub></var>
be multisets of solution mappings,
<var>expr</var> be an <a href="#expressions">expression</a>,
|D| be a <a href="#sparqlDataset">dataset</a>,
and |G| be the <a href="#defn_ActiveGraph">active graph</a>.
We define the following:</p>
<ul>
<li><a href="#defn_algDiff"
class="algFct">Diff</a>(<var>Ω<sub>1</sub></var>,
<var>Ω<sub>2</sub></var>, <var>expr</var>, |D|, |G|) =
{ <var>μ</var> | <var>μ</var> in <var>Ω<sub>1</sub></var>
such that ∀ <var>μ'</var> in
<var>Ω<sub>2</sub></var>, either of the following
<ol type="i">
<li><var>μ</var> and <var>μ'</var> are not
<a href="#defn_algCompatibleMapping">compatible</a></li>
<li><var>μ</var> and <var>μ'</var> are
<a href="#defn_algCompatibleMapping">compatible</a> and
|expr|(merge(<var>μ</var>, <var>μ'</var>), |D|, |G|)
is an [=error=]</li>
<li><var>μ</var> and <var>μ'</var> are
<a href="#defn_algCompatibleMapping">compatible</a> </li>
</ol>
<p>and |expr|(merge(<var>μ</var>, <var>μ'</var>), |D|, |G|)
is an RDF term |t| for which
<a href="#func-ebv">EBV</a>(|t|)
is not `"true"^^xsd:boolean` }</p></li>
<li><a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <a href="#defn_algDiff" class="algFct">Diff</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>, |D|, |G|) ) =
<a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <var>Ω<sub>1</sub></var> )</li></ul>
<p>
where, for every solution mapping <var>μ</var>,
|expr|(<var>μ</var>, |D|, |G|) is the result of
<a href="#expression-evaluation">evaluating</a> expression |expr|
with respect to <var>μ</var>, in the context of dataset |D| with active graph |G|.
</p>

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea. I have implemented it in commit 0c316c4

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great! Similar should be applied to the other blocks that are similarly prettified as HTML, without prettifying their rendering in the browser.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great! Similar should be applied to the other blocks that are similarly prettified as HTML, without prettifying their rendering in the browser.

There are no other such blocks within the scope of this PR (whose purpose is to fix issues in the formalization of algebra operators that involve expressions).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did look before posting the above ... but apparently I was hallucinating at the time. Sorry!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No worries Ted.

So, you are okay now with this PR?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Merge away. :-)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Merge away. :-)

Thanks Ted!

I will still wait for @afs' review.

</div>
<p>The evaluation of <var>expr</var>(merge(<var>μ</var>, <var>μ'</var>)) does not have an
[=effective boolean value=] of true if it evaluates to false or if it raises an error.</p>
<p><a href="#defn_algDiff" class="algFct">Diff</a> is used internally for the definition of <a href="#defn_algLeftJoin" class="algFct">LeftJoin</a>.</p>
<div class="defn">
<p><b>Definition: <span id="defn_algLeftJoin">LeftJoin</span></b></p>
<p>Let <var>Ω<sub>1</sub></var> and <var>Ω<sub>2</sub></var> be multisets of solution mappings and <var>expr</var> be an
<a href="#expressions">expression</a>. We define:</p>
<p><a href="#defn_algLeftJoin" class="algFct">LeftJoin</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>) = <a href="#defn_algFilter" class="algFct">Filter</a>(<var>expr</var>, <a href="#defn_algJoin" class="algFct">Join</a>(<var>Ω<sub>1</sub></var>,
<var>Ω<sub>2</sub></var>)) ∪ <a href="#defn_algDiff" class="algFct">Diff</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>)</p>
<p><a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <a href="#defn_algLeftJoin" class="algFct">LeftJoin</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>) ) =
<a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <a href="#defn_algFilter" class="algFct">Filter</a>(<var>expr</var>, <a href="#defn_algJoin" class="algFct">Join</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>)) ) +
<p>Let <var>Ω<sub>1</sub></var> and <var>Ω<sub>2</sub></var> be multisets of solution mappings,
<var>expr</var> be an <a href="#expressions">expression</a>,
|D| be a <a href="#sparqlDataset">dataset</a>,
and |G| be the <a href="#defn_ActiveGraph">active graph</a>.
We define:</p>
<p><a href="#defn_algLeftJoin" class="algFct">LeftJoin</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>, |D|, |G|) = <a href="#defn_algFilter" class="algFct">Filter</a>(<var>expr</var>, <a href="#defn_algJoin" class="algFct">Join</a>(<var>Ω<sub>1</sub></var>,
<var>Ω<sub>2</sub></var>), |D|, |G|) ∪ <a href="#defn_algDiff" class="algFct">Diff</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>, |D|, |G|)</p>
<p><a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <a href="#defn_algLeftJoin" class="algFct">LeftJoin</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>, <var>expr</var>, |D|, |G|) ) =
<a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <a href="#defn_algFilter" class="algFct">Filter</a>(<var>expr</var>, <a href="#defn_algJoin" class="algFct">Join</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>), |D|, |G|) ) +
<a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <a href="#defn_algDiff" class="algFct">Diff</a>(<var>Ω<sub>1</sub></var>, <var>Ω<sub>2</sub></var>,
<var>expr</var>) )</p>
<var>expr</var>, |D|, |G|) )</p>
</div>

<div class="defn">
Expand Down Expand Up @@ -10128,14 +10153,28 @@ <h3>SPARQL Algebra</h3>
pattern <code>P</code>.</p>
<div class="defn">
<p><b>Definition: <span id="defn_algExtend">Extend</span><span id="defn_extend"><!-- obsolete id --></span></b></p>
<p>Let <var>μ</var> be a solution mapping, <var>Ω</var> a multiset of solution mappings, <var>var</var> a variable
and <var>expr</var> be an <a href="#expressions">expression</a>, then we define:</p>
<p><a href="#defn_algExtend" class="algFct">Extend</a>(<var>μ</var>, <var>var</var>, <var>expr</var>) = <var>μ</var> ∪ { (<var>var</var>, <var>value</var>) | <var>var</var> not in dom(<var>μ</var>) and <var>value</var> = <var>expr</var>(<var>μ</var>) }</p>
<div class="issue" data-number="254">
It is not clear what <var>expr</var>(<var>μ</var>) is, and it is not apparent in the formula that the expression |expr| is meant to be evaluated not only with respect to <var>μ</var> but also with respect to |D| with active graph |G|.</div>
<p><a href="#defn_algExtend" class="algFct">Extend</a>(<var>μ</var>, <var>var</var>, <var>expr</var>) = <var>μ</var> if <var>var</var> not in dom(<var>μ</var>) and expr(<var>μ</var>) is an error</p>
<p><a href="#defn_algExtend" class="algFct">Extend</a> is undefined if <var>var</var> in dom(<var>μ</var>).</p>
<p><a href="#defn_algExtend" class="algFct">Extend</a>(<var>Ω</var>, <var>var</var>, <var>expr</var>) = { <a href="#defn_algExtend" class="algFct">Extend</a>(<var>μ</var>, <var>var</var>, <var>expr</var>) | <var>μ</var> in <var>Ω</var> }</p>
<p>Let <var>μ</var> be a solution mapping, <var>Ω</var> a multiset of solution mappings,
<var>var</var> be a variable,
<var>expr</var> be an <a href="#expressions">expression</a>,
|D| be a <a href="#sparqlDataset">dataset</a>,
and |G| be the <a href="#defn_ActiveGraph">active graph</a>.
We define:</p>
<p><a href="#defn_algExtend" class="algFct">Extend</a>(<var>Ω</var>, <var>var</var>, <var>expr</var>, |D|, |G|) = { |Extend|(<var>μ</var>, <var>var</var>, <var>expr</var>, |D|, |G|) | <var>μ</var> in <var>Ω</var> },</p>
<p>where, for every solution mapping <var>μ</var>,</p>
<p>|Extend|(<var>μ</var>, <var>var</var>, <var>expr</var>, |D|, |G|) = <var>μ</var> ∪ { (<var>var</var>, |expr|(<var>μ</var>, |D|, |G|)) }
if <var>var</var> not in dom(<var>μ</var>) and
|expr|(<var>μ</var>, |D|, |G|) is an RDF term,</p>
<p>|Extend|(<var>μ</var>, <var>var</var>, <var>expr</var>, |D|, |G|) = <var>μ</var>
if <var>var</var> not in dom(<var>μ</var>) and
|expr|(<var>μ</var>, |D|, |G|) is an [=error=],</p>
<p>|Extend|(<var>μ</var>, <var>var</var>, <var>expr</var>, |D|, |G|) is undefined
if <var>var</var> in dom(<var>μ</var>), and</p>
<p>|expr|(<var>μ</var>, |D|, |G|) is the result of
<a href="#expression-evaluation">evaluating</a> expression |expr|
with respect to <var>μ</var>, in the context of dataset |D| with active graph |G|.
</p>
<div class="issue" data-number="290">
We need to define <a href="#defn_Multiplicity">multiplicity</a>( <var>μ</var> | <a href="#defn_algExtend" class="algFct">Extend</a>(<var>Ω</var>, <var>var</var>, <var>expr</var>, |D|, |G|) )</div>
</div>
<p>Write [ <var>x</var> | <var>C</var> ] for a sequence of elements where <var>C</var> is a condition on <var>x</var>.</p>
<div class="defn">
Expand Down Expand Up @@ -10631,7 +10670,7 @@ <h3>Evaluation Semantics</h3>
<div class="defn">
<p><b>Definition: <span id="defn_evalLeftJoin">Evaluation of LeftJoin</span></b></p>
<p>
<a href="#defn_eval" class="evalFct">eval</a>( |D|(|G|), <a href="#defn_absLeftJoin" class="absOp">LeftJoin</a>(<var>P<sub>1</sub></var>, <var>P<sub>2</sub></var>, |F|) ) = <a href="#defn_algLeftJoin" class="algFct">LeftJoin</a>( <a href="#defn_eval" class="evalFct">eval</a>(|D|(|G|), <var>P<sub>1</sub></var>), <a href="#defn_eval" class="evalFct">eval</a>(|D|(|G|), <var>P<sub>2</sub></var>), |F| )
<a href="#defn_eval" class="evalFct">eval</a>( |D|(|G|), <a href="#defn_absLeftJoin" class="absOp">LeftJoin</a>(<var>P<sub>1</sub></var>, <var>P<sub>2</sub></var>, |F|) ) = <a href="#defn_algLeftJoin" class="algFct">LeftJoin</a>( <a href="#defn_eval" class="evalFct">eval</a>(|D|(|G|), <var>P<sub>1</sub></var>), <a href="#defn_eval" class="evalFct">eval</a>(|D|(|G|), <var>P<sub>2</sub></var>), |F|, |D|, |G| )
</p>
</div>
<div class="defn">
Expand Down Expand Up @@ -10702,9 +10741,9 @@ <h3>Evaluation Semantics</h3>
</div>
<p>Note that if <a href="#defn_eval" class="evalFct">eval</a>(|D|(|G|), <var>A<sub>i</sub></var>) is an error, it is ignored.</p>
<div class="defn">
<p><b>Definition: <span id="defn_evalExtend">Evaluation of <a href="#defn_absExtend" class="absOp">Extend</a></span></b></p>
<p><b>Definition: <span id="defn_evalExtend">Evaluation of Extend</span></b></p>
<p>
<a href="#defn_eval" class="evalFct">eval</a>( |D|(|G|), <a href="#defn_absExtend" class="absOp">Extend</a>(|P|, |var|, |expr|) ) = <a href="#defn_algExtend" class="algFct">Extend</a>( <a href="#defn_eval" class="evalFct">eval</a>(|D|(|G|), |P|), |var|, |expr| )
<a href="#defn_eval" class="evalFct">eval</a>( |D|(|G|), <a href="#defn_absExtend" class="absOp">Extend</a>(|P|, |var|, |expr|) ) = <a href="#defn_algExtend" class="algFct">Extend</a>( <a href="#defn_eval" class="evalFct">eval</a>(|D|(|G|), |P|), |var|, |expr|, |D|, |G| )
</p>
</div>
<div class="defn">
Expand Down Expand Up @@ -12652,6 +12691,9 @@ <h2>Changes between SPARQL 1.1 Query Language and SPARQL 1.2 Query Language</h2>
from <i>eval</i> to <i>reachableTerms</i>.</li>
<li>Add section <a href="#sparql-error" class="sectionRef"></a> about SPARQL expression evaluation errors</a>.</li>
<li>Rename section "Filter evaluation" as <a href="#expression-evaluation" class="sectionRef"></a>.</li>
<li>Improve definitions of all algebra operators that involve expressions
(<a href="#defn_algFilter" class="algFct">Filter</a>, <a href="#defn_algDiff" class="algFct">Diff</a>,
<a href="#defn_algLeftJoin" class="algFct">LeftJoin</a>, and <a href="#defn_algExtend" class="algFct">Extend</a>).</li>
</ul>
</li>
<li>
Expand Down
Loading