Skip to content

Commit a4ec0b1

Browse files
committed
adaptation of limitation on fields in joins
1 parent d06c477 commit a4ec0b1

8 files changed

Lines changed: 98 additions & 61 deletions

File tree

shapes/lv.ttl

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -240,47 +240,34 @@ rmlsh:LogicalViewJoinShape a sh:NodeShape ;
240240
A field of the logical view join.
241241
""" ;
242242
sh:message """
243-
At least one rml:field property must be specified for a rml:LogicalViewJoin, with a reference-valued expression field without nested fields as its value.
243+
At least one rml:field property must be specified for a rml:LogicalViewJoin, with a leaf expression field as its value.
244244
""" ;
245245
sh:path rml:field ;
246246
sh:minCount 1 ;
247247
sh:nodeKind sh:BlankNodeOrIRI ;
248-
sh:node rmlsh:JoinFieldShape ;
248+
sh:node rmlsh:LeafExpressionFieldShape ;
249249
] .
250250

251-
rmlsh:JoinFieldShape a sh:NodeShape ;
252-
rdfs:label "Field in Logical View Join" ;
251+
rmlsh:LeafExpressionFieldShape a sh:NodeShape ;
252+
rdfs:label "Leaf Expression Field" ;
253253
rdfs:comment """
254-
Each logical view join has one rml:field property must be specified for a rml:LogicalViewJoin, with a reference-valued expression field without nested fields as its value, here reference as join field .
254+
A leaf expression field is an expression field without nested fields.
255255
""" ;
256256
sh:message """
257-
Node must have a valid rml:ExpressionField description, with exactly one rml:reference property and without rml:field properties.
257+
Node must have a valid rml:ExpressionField description.
258258
""" ;
259259
sh:node rmlsh:ExpressionFieldShape ;
260260
sh:property [
261261
sh:description """
262-
Nested fields are not allowed in a join field.
262+
A leaf expression field is an expression field without nested fields.
263263
""" ;
264264
sh:message """
265-
A field in a logical view join MUST not have nested fields.
265+
A leaf expression field has no nested fields.
266266
""" ;
267267
sh:path rml:field ;
268268
sh:maxCount 0 ;
269-
] ;
270-
sh:property [
271-
sh:description """
272-
Each join field has exactly one rml:reference property.
273-
""" ;
274-
sh:message """
275-
The value of a rml:reference property for a join field must be a logical view reference that can be evaluated on the parent logical view.
276-
""" ;
277-
sh:path rml:reference ;
278-
sh:minCount 1 ;
279-
sh:maxCount 1 ;
280-
sh:nodeKind sh:Literal ;
281269
] .
282270

283-
284271
rmlsh:StructuralAnnotationShape a sh:NodeShape;
285272
rdfs:label "StructuralAnnotation" ;
286273
rdfs:comment """

spec/config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ var respecConfig = {
3333
// formal title, define it here
3434
// subtitle : "White Paper",
3535
// if you wish the publication date to be other than the last modification, set this
36-
publishDate: "2025-11-13",
36+
publishDate: "2025-11-20",
3737
// if the specification's copyright date is a range of years, specify
3838
// the start date here:
3939
copyrightStart: "2024",
Lines changed: 30 additions & 14 deletions
Large diffs are not rendered by default.
File renamed without changes.
File renamed without changes.

spec/docs/index.html

Lines changed: 30 additions & 14 deletions
Large diffs are not rendered by default.

spec/rendered.html

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@
246246
"processVersion": 2024,
247247
"specStatus": "CG-DRAFT",
248248
"shortName": "rml-lv",
249-
"publishDate": "2025-11-13",
249+
"publishDate": "2025-11-20",
250250
"copyrightStart": "2024",
251251
"edDraftURI": "https://w3id.org/rml/lv/spec",
252252
"editors": [
@@ -342,16 +342,16 @@
342342
"id": "rml-io"
343343
}
344344
},
345-
"publishISODate": "2025-11-13T00:00:00.000Z",
346-
"generatedSubtitle": "Draft Community Group Report 13 November 2025"
345+
"publishISODate": "2025-11-20T00:00:00.000Z",
346+
"generatedSubtitle": "Draft Community Group Report 20 November 2025"
347347
}</script>
348348
<link rel="stylesheet" href="https://www.w3.org/StyleSheets/TR/2021/cg-draft"></head>
349349
<body class="h-entry"><div class="head">
350350

351351
<h1 id="title" class="title">RML Logical Views</h1>
352352
<p id="w3c-state">
353353
<a href="https://www.w3.org/standards/types#reports">Draft Community Group Report</a>
354-
<time class="dt-published" datetime="2025-11-13">13 November 2025</time>
354+
<time class="dt-published" datetime="2025-11-20">20 November 2025</time>
355355
</p>
356356
<dl>
357357

@@ -660,7 +660,7 @@ <h1 id="title" class="title">RML Logical Views</h1>
660660
</ul>
661661
<p>Additional keys-value pairs with custom <a data-link-type="dfn|abstract-op" href="#dfn-record-key" class="internalDFN" id="ref-for-dfn-record-key-3">record keys</a> can be defined by the <a data-link-type="dfn|abstract-op" href="#dfn-field" class="internalDFN" id="ref-for-dfn-field-3">fields</a> of the <a data-link-type="dfn|abstract-op" href="#dfn-logical-view" class="internalDFN" id="ref-for-dfn-logical-view-6">logical view</a>,
662662
which is further detailed in <a href="#fields" data-matched-text="[[[#fields]]]" class="sec-ref"><bdi class="secno">4. </bdi>Fields</a>.</p>
663-
</section><section id="logical-view-expressions"><div class="header-wrapper"><h3 id="logicalviewexpressions"><bdi class="secno">3.2 </bdi>Logical view expressions</h3><a class="self-link" href="#logicalviewexpressions" aria-label="Permalink for Section 3.2"></a></div><p>A <dfn id="dfn-logical-view-reference" tabindex="0" aria-haspopup="dialog" data-dfn-type="dfn">logical view reference</dfn> is a <a href="https://w3id.org/rml/core/spec#dfn-reference-expression">reference expression</a> that references a defined <a data-link-type="dfn|abstract-op" href="#dfn-referenceable-key" class="internalDFN" id="ref-for-dfn-referenceable-key-1">referenceable key</a> in a <a data-link-type="dfn|abstract-op" href="#dfn-logical-view-iteration" class="internalDFN" id="ref-for-dfn-logical-view-iteration-4">logical view iteration</a>.
663+
</section><section id="logical-view-expressions"><div class="header-wrapper"><h3 id="logicalviewexpressions"><bdi class="secno">3.2 </bdi>Logical view expressions</h3><a class="self-link" href="#logicalviewexpressions" aria-label="Permalink for Section 3.2"></a></div><p>A <dfn data-plurals="logical view references" id="dfn-logical-view-reference" tabindex="0" aria-haspopup="dialog" data-dfn-type="dfn">logical view reference</dfn> is a <a href="https://w3id.org/rml/core/spec#dfn-reference-expression">reference expression</a> that references a defined <a data-link-type="dfn|abstract-op" href="#dfn-referenceable-key" class="internalDFN" id="ref-for-dfn-referenceable-key-1">referenceable key</a> in a <a data-link-type="dfn|abstract-op" href="#dfn-logical-view-iteration" class="internalDFN" id="ref-for-dfn-logical-view-iteration-4">logical view iteration</a>.
664664
A <dfn data-plurals="referenceable keys" id="dfn-referenceable-key" tabindex="0" aria-haspopup="dialog" data-dfn-type="dfn">referenceable key</dfn> is either</p>
665665
<ul>
666666
<li>a <a data-link-type="dfn|abstract-op" href="#dfn-record-key" class="internalDFN" id="ref-for-dfn-record-key-4">record key</a> of an <a data-link-type="dfn|abstract-op" href="#dfn-expression-record" class="internalDFN" id="ref-for-dfn-expression-record-3">expression record</a>, or</li>
@@ -1265,7 +1265,9 @@ <h1 id="title" class="title">RML Logical Views</h1>
12651265
<ul>
12661266
<li>exactly one parent logical view property (<code>rml:parentLogicalView</code>), whose value is a <a data-link-type="dfn|abstract-op" href="#dfn-logical-view" class="internalDFN" id="ref-for-dfn-logical-view-13">logical view</a> (<code>rml:LogicalView</code>) that supplies the additional fields. This is referred to as the <dfn id="dfn-parent-logical-view" tabindex="0" aria-haspopup="dialog" data-dfn-type="dfn">parent logical view</dfn>.</li>
12671267
<li>at least one join condition property (<code>rml:joinCondition</code>), whose value is a <a href="https://w3id.org/rml/core/spec#dfn-join-condition">join condition</a>.</li>
1268-
<li>at least one field property (<code>rml:field</code>), whose value is a <strong><a href="https://w3id.org/rml/core/spec##dfn-reference-valued-expression-map">reference-valued</a></strong> <a data-link-type="dfn|abstract-op" href="#dfn-expression-field" class="internalDFN" id="ref-for-dfn-expression-field-8">expression field</a> (<code>rml:ExpressionField</code>) <strong>without nested fields.</strong> This field <em class="rfc2119">MUST</em> contain a valid <a data-link-type="dfn|abstract-op" href="#dfn-logical-view-reference" class="internalDFN" id="ref-for-dfn-logical-view-reference-3">logical view reference</a> that can be evaluated on the parent logical view.</li>
1268+
<li>at least one field property (<code>rml:field</code>), whose value is a <dfn id="dfn-leaf-expression-field" tabindex="0" aria-haspopup="dialog" data-dfn-type="dfn" class="respec-offending-element" title="Found definition for &quot;leaf expression field&quot;, but nothing links to it. This is usually a spec bug!">leaf expression field</dfn>, i.e., an <a data-link-type="dfn|abstract-op" href="#dfn-expression-field" class="internalDFN" id="ref-for-dfn-expression-field-8">expression field</a> (<code>rml:ExpressionField</code>) without nested fields.
1269+
This field <em class="rfc2119">MUST</em> contain only <a data-link-type="dfn|abstract-op" href="#dfn-logical-view-reference" class="internalDFN" id="ref-for-dfn-logical-view-reference-3">logical view references</a> that can be evaluated on the parent logical view.
1270+
The <a data-link-type="dfn|abstract-op" href="#dfn-declared-name" class="internalDFN" id="ref-for-dfn-declared-name-11">declared name</a> of this field <em class="rfc2119">MUST</em> be different from the <a data-link-type="dfn|abstract-op" href="#dfn-absolute-name" class="internalDFN" id="ref-for-dfn-absolute-name-3">absolute name</a> of every other field in the <a data-link-type="dfn|abstract-op" href="#dfn-child-logical-view" class="internalDFN" id="ref-for-dfn-child-logical-view-2">child logical view</a>.</li>
12691271
</ul>
12701272
<p>Similar to how <a href="https://w3id.org/rml/core/spec#joins">joins are defined in RML-Core</a>,
12711273
the <a data-link-type="dfn|abstract-op" href="#dfn-logical-view" class="internalDFN" id="ref-for-dfn-logical-view-14">logical view</a> in the subject position of the <a data-link-type="dfn|abstract-op" href="#dfn-join-property" class="internalDFN" id="ref-for-dfn-join-property-1">join property</a> fulfills the role of <a href="https://w3id.org/rml/core/spec#child-logical-source">child logical source</a> in the <a href="https://w3id.org/rml/core/spec#dfn-join-condition">join condition(s)</a>, but of the <a data-link-type="dfn|abstract-op" href="#dfn-logical-view-join" class="internalDFN" id="ref-for-dfn-logical-view-join-3">logical view join</a>, and is referred to as <dfn id="dfn-child-logical-view" tabindex="0" aria-haspopup="dialog" data-dfn-type="dfn">child logical view</dfn>.
@@ -1295,8 +1297,8 @@ <h1 id="title" class="title">RML Logical Views</h1>
12951297
</tr>
12961298
</tbody></table>
12971299
<section id="join-types"><div class="header-wrapper"><h3 id="dfn-join-type"><bdi class="secno">5.1 </bdi>Join types</h3><a class="self-link" href="#dfn-join-type" aria-label="Permalink for Section 5.1"></a></div><p>The <dfn id="dfn-join-property" tabindex="0" aria-haspopup="dialog" data-dfn-type="dfn">join property</dfn> specifies the join type of the <a data-link-type="dfn|abstract-op" href="#dfn-logical-view-join" class="internalDFN" id="ref-for-dfn-logical-view-join-5">logical view join</a>, i.e. a <a data-link-type="dfn|abstract-op" href="#dfn-left-join" class="internalDFN" id="ref-for-dfn-left-join-1">left join</a> or an <a data-link-type="dfn|abstract-op" href="#dfn-inner-join" class="internalDFN" id="ref-for-dfn-inner-join-1">inner join</a>.</p>
1298-
<p>A <dfn id="dfn-left-join" tabindex="0" aria-haspopup="dialog" data-dfn-type="dfn">left join</dfn> (<code>rml:leftJoin</code>) is the equivalent of a left (outer) join in SQL, where the <a data-link-type="dfn|abstract-op" href="#dfn-child-logical-view" class="internalDFN" id="ref-for-dfn-child-logical-view-2">child logical view</a> is the left part of the join, and the <a data-link-type="dfn|abstract-op" href="#dfn-parent-logical-view" class="internalDFN" id="ref-for-dfn-parent-logical-view-3">parent logical view</a> is the right part of the join. If any of the <a href="https://w3id.org/rml/core/spec#dfn-join-condition">join conditions</a> evaluates to <code>false</code>, the fields from the <a data-link-type="dfn|abstract-op" href="#dfn-logical-view-join" class="internalDFN" id="ref-for-dfn-logical-view-join-6">logical view join</a> in the extended logical iteration contain a null value.</p>
1299-
<p>An <dfn id="dfn-inner-join" tabindex="0" aria-haspopup="dialog" data-dfn-type="dfn">inner join</dfn> (<code>rml:innerJoin</code>) is the equivalent of an inner join in SQL. If any of the <a href="https://w3id.org/rml/core/spec#dfn-join-condition">join conditions</a> evaluates to <code>false</code>, the logical iteration is removed from the <a data-link-type="dfn|abstract-op" href="#dfn-child-logical-view" class="internalDFN" id="ref-for-dfn-child-logical-view-3">child logical view</a>.</p>
1300+
<p>A <dfn id="dfn-left-join" tabindex="0" aria-haspopup="dialog" data-dfn-type="dfn">left join</dfn> (<code>rml:leftJoin</code>) is the equivalent of a left (outer) join in SQL, where the <a data-link-type="dfn|abstract-op" href="#dfn-child-logical-view" class="internalDFN" id="ref-for-dfn-child-logical-view-3">child logical view</a> is the left part of the join, and the <a data-link-type="dfn|abstract-op" href="#dfn-parent-logical-view" class="internalDFN" id="ref-for-dfn-parent-logical-view-3">parent logical view</a> is the right part of the join. If any of the <a href="https://w3id.org/rml/core/spec#dfn-join-condition">join conditions</a> evaluates to <code>false</code>, the fields from the <a data-link-type="dfn|abstract-op" href="#dfn-logical-view-join" class="internalDFN" id="ref-for-dfn-logical-view-join-6">logical view join</a> in the extended logical iteration contain a null value.</p>
1301+
<p>An <dfn id="dfn-inner-join" tabindex="0" aria-haspopup="dialog" data-dfn-type="dfn">inner join</dfn> (<code>rml:innerJoin</code>) is the equivalent of an inner join in SQL. If any of the <a href="https://w3id.org/rml/core/spec#dfn-join-condition">join conditions</a> evaluates to <code>false</code>, the logical iteration is removed from the <a data-link-type="dfn|abstract-op" href="#dfn-child-logical-view" class="internalDFN" id="ref-for-dfn-child-logical-view-4">child logical view</a>.</p>
13001302
</section><section id="logical-view-join-examples"><div class="header-wrapper"><h3 id="x5-2-logical-view-join-examples"><bdi class="secno">5.2 </bdi>Logical view join examples</h3><a class="self-link" href="#logical-view-join-examples" aria-label="Permalink for Section 5.2"></a></div>
13011303
<section id="left-join"><div class="header-wrapper"><h4 id="x5-2-1-left-join"><bdi class="secno">5.2.1 </bdi>Left join</h4><a class="self-link" href="#left-join" aria-label="Permalink for Section 5.2.1"></a></div>
13021304
<aside class="example" id="ex-leftjoin"><div class="marker">
@@ -2259,6 +2261,8 @@ <h1 id="title" class="title">RML Logical Views</h1>
22592261
<a href="#ref-for-dfn-declared-name-6" title="§ 4.3 Field records">§ 4.3 Field records</a>
22602262
</li><li>
22612263
<a href="#ref-for-dfn-declared-name-7" title="§ 4.4 Field reference formulations">§ 4.4 Field reference formulations</a> <a href="#ref-for-dfn-declared-name-8" title="Reference 2">(2)</a> <a href="#ref-for-dfn-declared-name-9" title="Reference 3">(3)</a> <a href="#ref-for-dfn-declared-name-10" title="Reference 4">(4)</a>
2264+
</li><li>
2265+
<a href="#ref-for-dfn-declared-name-11" title="§ 5. Logical view joins">§ 5. Logical view joins</a>
22622266
</li>
22632267
</ul>
22642268
</div><div class="dfn-panel" hidden="" role="dialog" aria-modal="true" id="dfn-panel-for-dfn-absolute-name" aria-label="Links in this document to definition: absolute name">
@@ -2271,6 +2275,8 @@ <h1 id="title" class="title">RML Logical Views</h1>
22712275
<ul>
22722276
<li>
22732277
<a href="#ref-for-dfn-absolute-name-1" title="§ 4.2 Field names">§ 4.2 Field names</a> <a href="#ref-for-dfn-absolute-name-2" title="Reference 2">(2)</a>
2278+
</li><li>
2279+
<a href="#ref-for-dfn-absolute-name-3" title="§ 5. Logical view joins">§ 5. Logical view joins</a>
22742280
</li>
22752281
</ul>
22762282
</div><div class="dfn-panel" hidden="" role="dialog" aria-modal="true" id="dfn-panel-for-dfn-logical-view-join" aria-label="Links in this document to definition: logical view join">
@@ -2307,6 +2313,16 @@ <h1 id="title" class="title">RML Logical Views</h1>
23072313
<a href="#ref-for-dfn-parent-logical-view-4" title="§ 5.2.3 Two left joins">§ 5.2.3 Two left joins</a>
23082314
</li>
23092315
</ul>
2316+
</div><div class="dfn-panel" hidden="" role="dialog" aria-modal="true" id="dfn-panel-for-dfn-leaf-expression-field" aria-label="Links in this document to definition: leaf expression field">
2317+
<span class="caret"></span>
2318+
<div>
2319+
<a class="self-link" href="#dfn-leaf-expression-field" aria-label="Permalink for definition: leaf expression field. Activate to close this dialog.">Permalink</a>
2320+
2321+
</div>
2322+
<p><b>Referenced in:</b></p>
2323+
<ul>
2324+
<li>Not referenced in this document.</li>
2325+
</ul>
23102326
</div><div class="dfn-panel" hidden="" role="dialog" aria-modal="true" id="dfn-panel-for-dfn-child-logical-view" aria-label="Links in this document to definition: child logical view">
23112327
<span class="caret"></span>
23122328
<div>
@@ -2316,9 +2332,9 @@ <h1 id="title" class="title">RML Logical Views</h1>
23162332
<p><b>Referenced in:</b></p>
23172333
<ul>
23182334
<li>
2319-
<a href="#ref-for-dfn-child-logical-view-1" title="§ 5. Logical view joins">§ 5. Logical view joins</a>
2335+
<a href="#ref-for-dfn-child-logical-view-1" title="§ 5. Logical view joins">§ 5. Logical view joins</a> <a href="#ref-for-dfn-child-logical-view-2" title="Reference 2">(2)</a>
23202336
</li><li>
2321-
<a href="#ref-for-dfn-child-logical-view-2" title="§ 5.1 Join types">§ 5.1 Join types</a> <a href="#ref-for-dfn-child-logical-view-3" title="Reference 2">(2)</a>
2337+
<a href="#ref-for-dfn-child-logical-view-3" title="§ 5.1 Join types">§ 5.1 Join types</a> <a href="#ref-for-dfn-child-logical-view-4" title="Reference 2">(2)</a>
23222338
</li>
23232339
</ul>
23242340
</div><div class="dfn-panel" hidden="" role="dialog" aria-modal="true" id="dfn-panel-for-dfn-join-property" aria-label="Links in this document to definition: join property">

spec/section/joins.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ using a <a data-cite="RML-Core#dfn-join-condition">join condition</a>.
66
A [=logical view join=] MUST contain:
77
- exactly one parent logical view property (`rml:parentLogicalView`), whose value is a [=logical view=] (`rml:LogicalView`) that supplies the additional fields. This is referred to as the <dfn>parent logical view</dfn>.
88
- at least one join condition property (`rml:joinCondition`), whose value is a <a data-cite="RML-Core#dfn-join-condition">join condition</a>.
9-
- at least one field property (`rml:field`), whose value is a **<a data-cite="RML-Core##dfn-reference-valued-expression-map">reference-valued</a>** [=expression field=] (`rml:ExpressionField`) **without nested fields.** This field MUST contain a valid [=logical view reference=] that can be evaluated on the parent logical view.
9+
- at least one field property (`rml:field`), whose value is a <dfn>leaf expression field</dfn>, i.e., an [=expression field=] (`rml:ExpressionField`) without nested fields.
10+
This field MUST contain only [=logical view references=] that can be evaluated on the parent logical view.
11+
The [=declared name=] of this field MUST be different from the [=absolute name=] of every other field in the [=child logical view=].
1012

1113
Similar to how <a data-cite="RML-Core#joins">joins are defined in RML-Core</a>,
1214
the [=logical view=] in the subject position of the [=join property=] fulfills the role of <a data-cite="RML-Core#child-logical-source">child logical source</a> in the <a data-cite="RML-Core#dfn-join-condition">join condition(s)</a>, but of the [=logical view join=], and is referred to as <dfn>child logical view</dfn>.

0 commit comments

Comments
 (0)