This pitfall consists in creating an ontology element and failing to provide human readable annotations attached to it. Consequently, ontology elements lack annotation properties that label them (e.g. rdfs:label, lemon:LexicalEntry, skos:prefLabel or skos:altLabel) or that define them (e.g. rdfs:comment or dc:description). This pitfall is related to the guidelines provided in [5].
This pitfall affects to the following ontology elements:
This pitfall consists in creating an ontology element and failing to provide human readable annotations attached to it. Consequently, ontology elements lack annotation properties that label them (e.g. rdfs:label, lemon:LexicalEntry, skos:prefLabel or skos:altLabel) or that define them (e.g. rdfs:comment or dc:description). This pitfall is related to the guidelines provided in [5].
This pitfall affects to the following ontology elements:
This pitfall appears when any relationship (except for those that are defined as symmetric properties using owl:SymmetricProperty) does not have an inverse relationship (owl:inverseOf) defined within the ontology.
This pitfall affects to the following ontology elements:
This pitfall appears when any relationship (except for those that are defined as symmetric properties using owl:SymmetricProperty) does not have an inverse relationship (owl:inverseOf) defined within the ontology.
This pitfall affects to the following ontology elements:
- A field is an expression map that gives a name to an expression.
+ A field gives a name to data derived from the abstract logical source on which a logical view is defined.
- A logical view (rml:LogicalView) is a type of logical source that is derived from another logical source by defining field with data from said logical source.
+ A logical view (rml:LogicalView) is a type of abstract logical source that is derived from another abstract logical source by defining field with data from said abstract logical source.
Logical ViewcLogical View Joinc back to ToC or Class ToC
IRI: http://w3id.org/rml/LogicalViewJoin
- A LogicalViewJoin is an operation that adapts the logical iterations of one logical view (the child logical view) with fields from another logical view (the parent logical view).
+ A logical view join is an operation that adapts the logical iterations of one logical view (the child logical view) with fields from another logical view (the parent logical view).
- The source of the logical view. This is the logical source from which the logical view is derived.
+ The source of the logical view. This is the abstract logical source from which the logical view is derived.
diff --git a/ontology/documentation/ontology.jsonld b/ontology/documentation/ontology.jsonld
index b95ecda..01aa90a 100644
--- a/ontology/documentation/ontology.jsonld
+++ b/ontology/documentation/ontology.jsonld
@@ -27,21 +27,36 @@
"@id" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#List"
} ]
}, {
- "@id" : "http://w3id.org/rml/Field",
+ "@id" : "http://w3id.org/rml/AbstractLogicalSource",
+ "@type" : [ "http://www.w3.org/2002/07/owl#Class" ]
+}, {
+ "@id" : "http://w3id.org/rml/ExpressionField",
"@type" : [ "http://www.w3.org/2002/07/owl#Class" ],
"http://www.w3.org/2000/01/rdf-schema#comment" : [ {
- "@value" : "A field is an expression map that gives a name to an expression."
+ "@value" : "A expression field is an expression map that gives a name to an expression."
} ],
"http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ {
"@id" : "http://w3id.org/rml/lv/"
} ],
"http://www.w3.org/2000/01/rdf-schema#label" : [ {
- "@value" : "Field"
+ "@value" : "Expression Field"
} ],
"http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ {
"@id" : "http://w3id.org/rml/ExpressionMap"
}, {
- "@id" : "http://w3id.org/rml/LogicalIterable"
+ "@id" : "http://w3id.org/rml/Field"
+ } ]
+}, {
+ "@id" : "http://w3id.org/rml/Field",
+ "@type" : [ "http://www.w3.org/2002/07/owl#Class" ],
+ "http://www.w3.org/2000/01/rdf-schema#comment" : [ {
+ "@value" : "A field gives a name to data derived from the abstract logical source on which a logical view is defined."
+ } ],
+ "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ {
+ "@id" : "http://w3id.org/rml/lv/"
+ } ],
+ "http://www.w3.org/2000/01/rdf-schema#label" : [ {
+ "@value" : "Field"
} ]
}, {
"@id" : "http://w3id.org/rml/ForeignKeyAnnotation",
@@ -89,13 +104,30 @@
"@id" : "http://w3id.org/rml/StructuralAnnotation"
} ]
}, {
- "@id" : "http://w3id.org/rml/LogicalIterable",
+ "@id" : "http://w3id.org/rml/Iterable",
"@type" : [ "http://www.w3.org/2002/07/owl#Class" ]
+}, {
+ "@id" : "http://w3id.org/rml/IterableField",
+ "@type" : [ "http://www.w3.org/2002/07/owl#Class" ],
+ "http://www.w3.org/2000/01/rdf-schema#comment" : [ {
+ "@value" : "A iterable field is an iterable that gives a name to a logical iteration."
+ } ],
+ "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ {
+ "@id" : "http://w3id.org/rml/lv/"
+ } ],
+ "http://www.w3.org/2000/01/rdf-schema#label" : [ {
+ "@value" : "Iterable Field"
+ } ],
+ "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ {
+ "@id" : "http://w3id.org/rml/Field"
+ }, {
+ "@id" : "http://w3id.org/rml/Iterable"
+ } ]
}, {
"@id" : "http://w3id.org/rml/LogicalView",
"@type" : [ "http://www.w3.org/2002/07/owl#Class" ],
"http://www.w3.org/2000/01/rdf-schema#comment" : [ {
- "@value" : "A logical view (rml:LogicalView) is a type of logical source that is derived from another logical source by defining field with data from said logical source."
+ "@value" : "A logical view (rml:LogicalView) is a type of abstract logical source that is derived from another abstract logical source by defining field with data from said abstract logical source."
} ],
"http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ {
"@id" : "http://w3id.org/rml/lv/"
@@ -104,13 +136,13 @@
"@value" : "Logical View"
} ],
"http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ {
- "@id" : "http://w3id.org/rml/LogicalSource"
+ "@id" : "http://w3id.org/rml/AbstractLogicalSource"
} ]
}, {
"@id" : "http://w3id.org/rml/LogicalViewJoin",
"@type" : [ "http://www.w3.org/2002/07/owl#Class" ],
"http://www.w3.org/2000/01/rdf-schema#comment" : [ {
- "@value" : "A LogicalViewJoin is an operation that adapts the logical iterations of one logical view (the child logical view) with fields from another logical view (the parent logical view)."
+ "@value" : "A logical view join is an operation that adapts the logical iterations of one logical view (the child logical view) with fields from another logical view (the parent logical view)."
} ],
"http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ {
"@id" : "http://w3id.org/rml/lv/"
@@ -312,7 +344,7 @@
"@id" : "http://w3id.org/rml/onFields",
"@type" : [ "http://www.w3.org/2002/07/owl#ObjectProperty" ],
"http://www.w3.org/2000/01/rdf-schema#comment" : [ {
- "@value" : "\n The property onFields specifies the fields in LogicalView that are involved by the structural annotation.\n The semantics of this involvement depends on the specific annotation.\n "
+ "@value" : "\r\n The property onFields specifies the fields in LogicalView that are involved by the structural annotation.\r\n The semantics of this involvement depends on the specific annotation.\r\n "
} ],
"http://www.w3.org/2000/01/rdf-schema#domain" : [ {
"@id" : "http://w3id.org/rml/StructuralAnnotation"
@@ -402,7 +434,7 @@
"@id" : "http://w3id.org/rml/viewOn",
"@type" : [ "http://www.w3.org/2002/07/owl#ObjectProperty" ],
"http://www.w3.org/2000/01/rdf-schema#comment" : [ {
- "@value" : "The source of the logical view. This is the logical source from which the logical view is derived."
+ "@value" : "The source of the logical view. This is the abstract logical source from which the logical view is derived."
} ],
"http://www.w3.org/2000/01/rdf-schema#domain" : [ {
"@id" : "http://w3id.org/rml/LogicalView"
@@ -414,7 +446,7 @@
"@value" : "view on"
} ],
"http://www.w3.org/2000/01/rdf-schema#range" : [ {
- "@id" : "http://w3id.org/rml/LogicalSource"
+ "@id" : "http://w3id.org/rml/AbstractLogicalSource"
} ]
}, {
"@id" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#List",
diff --git a/ontology/documentation/ontology.nt b/ontology/documentation/ontology.nt
index 8b010f6..dbbf3a3 100644
--- a/ontology/documentation/ontology.nt
+++ b/ontology/documentation/ontology.nt
@@ -76,7 +76,7 @@ _:genid1 .
.
.
- "\n The property onFields specifies the fields in LogicalView that are involved by the structural annotation.\n The semantics of this involvement depends on the specific annotation.\n " .
+ "\r\n The property onFields specifies the fields in LogicalView that are involved by the structural annotation.\r\n The semantics of this involvement depends on the specific annotation.\r\n " .
.
"on fields" .
#
@@ -115,8 +115,9 @@ _:genid1 .
.
- .
- "The source of the logical view. This is the logical source from which the logical view is derived." .
+ .
+ .
+ "The source of the logical view. This is the abstract logical source from which the logical view is derived." .
.
"view on" .
#
@@ -146,12 +147,19 @@ _:genid1 .
+ .
+ .
+ "A expression field is an expression map that gives a name to an expression." .
+ .
+ "Expression Field" .
+#
# http://w3id.org/rml/Field
.
- .
- .
- .
- "A field is an expression map that gives a name to an expression." .
+ "A field gives a name to data derived from the abstract logical source on which a logical view is defined." .
.
"Field" .
#
@@ -176,18 +184,27 @@ _:genid1 .
"Inclusion Dependency Annotation" .
#
-# http://w3id.org/rml/LogicalIterable
+# http://w3id.org/rml/Iterable
+ .
+#
+# http://w3id.org/rml/IterableField
+ .
+ .
+ .
+ "A iterable field is an iterable that gives a name to a logical iteration." .
+ .
+ "Iterable Field" .
#
# http://w3id.org/rml/LogicalView
.
- .
- "A logical view (rml:LogicalView) is a type of logical source that is derived from another logical source by defining field with data from said logical source." .
+ .
+ "A logical view (rml:LogicalView) is a type of abstract logical source that is derived from another abstract logical source by defining field with data from said abstract logical source." .
.
"Logical View" .
#
# http://w3id.org/rml/LogicalViewJoin
.
- "A LogicalViewJoin is an operation that adapts the logical iterations of one logical view (the child logical view) with fields from another logical view (the parent logical view)." .
+ "A logical view join is an operation that adapts the logical iterations of one logical view (the child logical view) with fields from another logical view (the parent logical view)." .
.
"Logical View Join" .
#
diff --git a/ontology/documentation/ontology.owl b/ontology/documentation/ontology.owl
index 5b05cff..ede31b0 100644
--- a/ontology/documentation/ontology.owl
+++ b/ontology/documentation/ontology.owl
@@ -189,8 +189,8 @@
-
- The source of the logical view. This is the logical source from which the logical view is derived.
+
+ The source of the logical view. This is the abstract logical source from which the logical view is derived.view on
@@ -234,13 +234,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A expression field is an expression map that gives a name to an expression.
+
+ Expression Field
+
+
+
+
-
-
- A field is an expression map that gives a name to an expression.
+ A field gives a name to data derived from the abstract logical source on which a logical view is defined.Field
@@ -283,10 +301,23 @@
-
+
+
+
+
+
+
+
+
-
+
+
+
+ A iterable field is an iterable that gives a name to a logical iteration.
+
+ Iterable Field
+
@@ -294,8 +325,8 @@
-
- A logical view (rml:LogicalView) is a type of logical source that is derived from another logical source by defining field with data from said logical source.
+
+ A logical view (rml:LogicalView) is a type of abstract logical source that is derived from another abstract logical source by defining field with data from said abstract logical source.Logical View
@@ -306,7 +337,7 @@
- A LogicalViewJoin is an operation that adapts the logical iterations of one logical view (the child logical view) with fields from another logical view (the parent logical view).
+ A logical view join is an operation that adapts the logical iterations of one logical view (the child logical view) with fields from another logical view (the parent logical view).Logical View Join
diff --git a/ontology/documentation/ontology.ttl b/ontology/documentation/ontology.ttl
index cc4fd14..d0d2819 100644
--- a/ontology/documentation/ontology.ttl
+++ b/ontology/documentation/ontology.ttl
@@ -122,8 +122,8 @@
### http://w3id.org/rml/viewOn
rdf:type owl:ObjectProperty ;
rdfs:domain ;
- rdfs:range ;
- rdfs:comment "The source of the logical view. This is the logical source from which the logical view is derived." ;
+ rdfs:range ;
+ rdfs:comment "The source of the logical view. This is the abstract logical source from which the logical view is derived." ;
rdfs:isDefinedBy ;
rdfs:label "view on" .
@@ -145,14 +145,26 @@
# Classes
#################################################################
+### http://w3id.org/rml/AbstractLogicalSource
+ rdf:type owl:Class .
+
+
+### http://w3id.org/rml/ExpressionField
+ rdf:type owl:Class ;
+ rdfs:subClassOf ,
+ ;
+ rdfs:comment "A expression field is an expression map that gives a name to an expression." ;
+ rdfs:isDefinedBy ;
+ rdfs:label "Expression Field" .
+
+
### http://w3id.org/rml/Field
rdf:type owl:Class ;
- rdfs:subClassOf ,
- ;
- rdfs:comment "A field is an expression map that gives a name to an expression." ;
+ rdfs:comment "A field gives a name to data derived from the abstract logical source on which a logical view is defined." ;
rdfs:isDefinedBy ;
rdfs:label "Field" .
+
### http://w3id.org/rml/ForeignKeyAnnotation
rdf:type owl:Class ;
rdfs:subClassOf ;
@@ -177,21 +189,30 @@
rdfs:label "Inclusion Dependency Annotation" .
-### http://w3id.org/rml/LogicalIterable
- rdf:type owl:Class .
+### http://w3id.org/rml/Iterable
+ rdf:type owl:Class .
+
+
+### http://w3id.org/rml/IterableField
+ rdf:type owl:Class ;
+ rdfs:subClassOf ,
+ ;
+ rdfs:comment "A iterable field is an iterable that gives a name to a logical iteration." ;
+ rdfs:isDefinedBy ;
+ rdfs:label "Iterable Field" .
### http://w3id.org/rml/LogicalView
rdf:type owl:Class ;
- rdfs:subClassOf ;
- rdfs:comment "A logical view (rml:LogicalView) is a type of logical source that is derived from another logical source by defining field with data from said logical source." ;
+ rdfs:subClassOf ;
+ rdfs:comment "A logical view (rml:LogicalView) is a type of abstract logical source that is derived from another abstract logical source by defining field with data from said abstract logical source." ;
rdfs:isDefinedBy ;
rdfs:label "Logical View" .
### http://w3id.org/rml/LogicalViewJoin
rdf:type owl:Class ;
- rdfs:comment "A LogicalViewJoin is an operation that adapts the logical iterations of one logical view (the child logical view) with fields from another logical view (the parent logical view)." ;
+ rdfs:comment "A logical view join is an operation that adapts the logical iterations of one logical view (the child logical view) with fields from another logical view (the parent logical view)." ;
rdfs:isDefinedBy ;
rdfs:label "Logical View Join" .
diff --git a/ontology/ontology.owl b/ontology/ontology.owl
index 315f9e6..1b34238 100644
--- a/ontology/ontology.owl
+++ b/ontology/ontology.owl
@@ -59,9 +59,9 @@ rml:field rdf:type owl:ObjectProperty ;
### http://w3id.org/rml/viewOn
rml:viewOn rdf:type owl:ObjectProperty ;
rdfs:label "view on" ;
- rdfs:comment "The source of the logical view. This is the logical source from which the logical view is derived." ;
+ rdfs:comment "The source of the logical view. This is the abstract logical source from which the logical view is derived." ;
rdfs:domain rml:LogicalView ;
- rdfs:range rml:LogicalSource ;
+ rdfs:range rml:AbstractLogicalSource ;
rdfs:isDefinedBy .
@@ -150,23 +150,37 @@ rml:fieldName rdf:type owl:DatatypeProperty ;
### http://w3id.org/rml/Field
rml:Field rdf:type owl:Class ;
rdfs:label "Field" ;
- rdfs:comment "A field is an expression map that gives a name to an expression." ;
- rdfs:subClassOf rml:ExpressionMap, rml:LogicalIterable ;
+ rdfs:comment "A field gives a name to data derived from the abstract logical source on which a logical view is defined." ;
+ rdfs:isDefinedBy .
+
+### http://w3id.org/rml/ExpressionField
+rml:ExpressionField rdf:type owl:Class ;
+ rdfs:label "Expression Field" ;
+ rdfs:comment "An expression field is an expression map that gives a name to an expression." ;
+ rdfs:subClassOf rml:Field, rml:ExpressionMap ;
+ rdfs:isDefinedBy .
+
+
+### http://w3id.org/rml/IterableField
+rml:IterableField rdf:type owl:Class ;
+ rdfs:label "Iterable Field" ;
+ rdfs:comment "An iterable field is an iterable that gives a name to a logical iteration." ;
+ rdfs:subClassOf rml:Field, rml:Iterable ;
rdfs:isDefinedBy .
### http://w3id.org/rml/LogicalView
rml:LogicalView rdf:type owl:Class ;
rdfs:label "Logical View" ;
- rdfs:comment "A logical view (rml:LogicalView) is a type of logical source that is derived from another logical source by defining field with data from said logical source." ;
- rdfs:subClassOf rml:LogicalSource ;
+ rdfs:comment "A logical view (rml:LogicalView) is a type of abstract logical source that is derived from another abstract logical source by defining fields with data from said abstract logical source." ;
+ rdfs:subClassOf rml:AbstractLogicalSource ;
rdfs:isDefinedBy .
### http://w3id.org/rml/LogicalViewJoin
rml:LogicalViewJoin rdf:type owl:Class ;
rdfs:label "Logical View Join" ;
- rdfs:comment "A LogicalViewJoin is an operation that adapts the logical iterations of one logical view (the child logical view) with fields from another logical view (the parent logical view)." ;
+ rdfs:comment "A logical view join is an operation that adapts the logical iterations of one logical view (the child logical view) with fields from another logical view (the parent logical view)." ;
rdfs:isDefinedBy .
diff --git a/ontology/requirements/requirements.xlsx b/ontology/requirements/requirements.xlsx
new file mode 100644
index 0000000..2e992a6
Binary files /dev/null and b/ontology/requirements/requirements.xlsx differ
diff --git a/ontology/rml-lv_diagram.png b/ontology/rml-lv_diagram.png
index 17df291..c6aa0d7 100644
Binary files a/ontology/rml-lv_diagram.png and b/ontology/rml-lv_diagram.png differ
diff --git a/ontology/rml-lv_diagram.svg b/ontology/rml-lv_diagram.svg
new file mode 100644
index 0000000..a5d89f9
--- /dev/null
+++ b/ontology/rml-lv_diagram.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/shapes/lv.ttl b/shapes/lv.ttl
index 12b424e..b988fdd 100644
--- a/shapes/lv.ttl
+++ b/shapes/lv.ttl
@@ -14,12 +14,12 @@
rmlsh:LogicalViewShape a sh:NodeShape ;
rdfs:label "LogicalView" ;
rdfs:comment """
- A logical view (rml:LogicalView) is a type of logical source that is derived from another logical source by defining field with data from said logical source.
+ A logical view (rml:LogicalView) is a type of abstract logical source that is derived from another abstract logical source by defining fields with data from said abstract logical source.
""" ;
sh:message """
Node must have a valid rml:LogicalView description.
rml:LogicalView requires
- - exactly one rml:viewOn property, with a rml:LogicalSource as its value.
+ - exactly one rml:viewOn property, with a rml:AbstractLogicalSource as its value.
- at least one rml:field property, with a rml:Field as its value.
""" ;
sh:targetClass rml:LogicalView ;
@@ -29,7 +29,7 @@ rmlsh:LogicalViewShape a sh:NodeShape ;
The source of the logical view. This is the logical source from which the logical view is derived.
""" ;
sh:message """
- Exactly one rml:viewOn property must be specified for a rml:LogicalView, with a rml:LogicalSource as its value.
+ Exactly one rml:viewOn property must be specified for a rml:LogicalView, with a rml:AbstractLogicalSource as its value.
""" ;
sh:path rml:viewOn ;
sh:minCount 1 ;
@@ -46,6 +46,10 @@ rmlsh:LogicalViewShape a sh:NodeShape ;
sh:path rml:field ;
sh:minCount 1 ;
sh:nodeKind sh:BlankNodeOrIRI ;
+ sh:xone (
+ [ sh:node rmlsh:ExpressionFieldShape ]
+ [ sh:node rmlsh:IterableFieldShape ]
+ )
] , [
sh:description """
A left join of the logical view.
@@ -80,12 +84,12 @@ rmlsh:LogicalViewShape a sh:NodeShape ;
rmlsh:FieldShape a sh:NodeShape ;
rdfs:label "Field" ;
rdfs:comment """
- A field is an expression map that gives a name to an expression.
+ A field is a construct that gives a name to data derived from an abstract logical source.
""" ;
sh:message """
Node must have a valid rml:Field description.
rml:Field requires a rml:fieldName and may have zero or more rml:field properties.
- Furthermore, rml:Field requires what an rml:ExpressionMap requires.
+ Furthermore, subclass rml:ExpressionField requires what an rml:ExpressionMap requires, subclass rml:IterableField requires what an rml:Iterable requires,.
""" ;
sh:targetClass rml:Field ;
sh:targetObjectsOf rml:field ;
@@ -110,6 +114,51 @@ rmlsh:FieldShape a sh:NodeShape ;
""" ;
sh:path rml:field ;
sh:nodeKind sh:BlankNodeOrIRI ;
+ sh:xone (
+ [ sh:node rmlsh:ExpressionFieldShape ]
+ [ sh:node rmlsh:IterableFieldShape ]
+ )
+ ] .
+
+rmlsh:ExpressionFieldShape a sh:NodeShape ;
+ rdfs:label "Expression Field" ;
+ rdfs:comment """
+ A expression field is an expression map that gives a name to an expression.
+ """ ;
+ sh:message """
+ Node must have a valid rml:ExpressionField description.
+ rml:ExpressionField requires what an rml:ExpressionMap and rml:Field requires.
+ """ ;
+ sh:targetClass rml:ExpressionField ;
+ sh:node rmlsh:RMLExpressionMapShape, rmlsh:Field ;
+.
+
+rmlsh:IterableFieldShape a sh:NodeShape ;
+ rdfs:label "Iterable Field" ;
+ rdfs:comment """
+ An iterable field is a construction that gives a name to logical iterations derived from the parent of the field.
+ """ ;
+ sh:message """
+ Node must have a valid rml:IterableField description.
+ rml:IterableField must have one or more rml:field properties.
+ Furthermore, rml:IterableField requires what an rml:Iterable and rml:Field requires.
+ """ ;
+ sh:targetClass rml:IterableField ;
+ sh:node rmlsh:Iterable, rmlsh:Field ; # TODO requires rmlsh:Iterable to be defined in core
+ sh:property [
+ sh:description """
+ A child field of the iterable field.
+ """ ;
+ sh:message """
+ The value of a rml:field property for a rml:Field must be a resource.
+ """ ;
+ sh:path rml:field ;
+ sh:minCount 1 ;
+ sh:nodeKind sh:BlankNodeOrIRI ;
+ sh:xone (
+ [ sh:node rmlsh:ExpressionFieldShape ]
+ [ sh:node rmlsh:IterableFieldShape ]
+ )
] .
rmlsh:LogicalViewJoinShape a sh:NodeShape ;
@@ -158,6 +207,10 @@ rmlsh:LogicalViewJoinShape a sh:NodeShape ;
sh:path rml:field ;
sh:minCount 1 ;
sh:nodeKind sh:BlankNodeOrIRI ;
+ sh:xone (
+ [ sh:node rmlsh:ExpressionFieldShape ]
+ [ sh:node rmlsh:IterableFieldShape ]
+ )
] .
rmlsh:StructuralAnnotationShape a sh:NodeShape;
diff --git a/spec/rendered.html b/spec/rendered.html
index a1442ac..906c20e 100644
--- a/spec/rendered.html
+++ b/spec/rendered.html
@@ -42,13 +42,13 @@
.dfn-panel li{margin-left:1em}
.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}
-
+
RML Logical Views
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
+
@@ -320,34 +320,34 @@
}
We assume readers have basic familiarity with RDF and RML concepts.
-
In this document, examples assume
+
In this document, examples assume
the following namespace prefix bindings unless otherwise stated:
@@ -452,18 +452,18 @@
RML Logical Views
2. Problem
This section is non-normative.
RML Logical Views aims to resolve challenges such as handling hierarchy of nested data, more flexible joining (also across data hierarchies), and handling data sources that mix source formats.
2.1 Nested data structures
-
References to nested data structures, like JSON or XML, may return multiple values. These values can be composite: they may again contain multiple values.
-RML-Core defines mapping constructs that produce results by combining the results of other mapping constructs in a specific order.
-For example, a triples map combines the results of a subject map and a predicate-object map in that order.
-Another example is a template expression,
-which combines character strings and zero or more reference expressions in declared order.
+
References to nested data structures, like JSON or XML, may return multiple values. These values can be composite: they may again contain multiple values.
+RML-Core defines mapping constructs that produce results by combining the results of other mapping constructs in a specific order.
+For example, a triples map combines the results of a subject map and a predicate-object map in that order.
+Another example is a template expression,
+which combines character strings and zero or more reference expressions in declared order.
When mapping constructs produce multiple results, the combining mapping constructs will apply an n-ary Cartesian product over the sets of results, maintaining the order of the mapping constructs. In the case of nested data structures, this may cause the generation of results that do not match the source hierarchy, i.e. do not follow the root-to-leaf paths in the source data, since values are combined irrespective of it.
Furthermore, there is varying expressiveness in data source expression and query languages, and many languages have limited support for hierarchy traversal. For example, JSONPath has no operator to refer to an ancestor in the document hierarchy.
This limits the ability of RML-Core to map nested data.