From cbafd1506122563192bad176a135cf30c1d8bec8 Mon Sep 17 00:00:00 2001 From: David Chaves Date: Fri, 10 Oct 2025 13:00:57 +0200 Subject: [PATCH 1/5] generated RDF triples dfn --- spec/section/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/section/output.md b/spec/section/output.md index f5c81dc..51bbd76 100644 --- a/spec/section/output.md +++ b/spec/section/output.md @@ -20,7 +20,7 @@ RDF syntaxes and RDF APIs generally represent [=blank nodes=] with [=blank node This subsection describes the normative process by which [=RDF triples=] are generated from a [=Triples Map=]. This process contributes [=RDF triples=] to the [=output dataset=]. Each generated triple MUST be placed into one or more graphs of the output dataset. -The generated RDF triples are determined by the following algorithm. [=RML Processors=] MAY employ alternative implementations to compute the generated [=RDF triples=], provided that the resulting output dataset is semantically equivalent to the one obtained by this algorithm. +The generated RDF triples are determined by the following algorithm. [=RML Processors=] MAY employ alternative implementations to compute the generated [=RDF triples=], provided that the resulting output dataset is semantically equivalent to the one obtained by this algorithm. Let: From a514906016677819850a3b194edef7b8133159f7 Mon Sep 17 00:00:00 2001 From: David Chaves Date: Fri, 10 Oct 2025 13:19:22 +0200 Subject: [PATCH 2/5] generated RDF triples dfn --- spec/section/output.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spec/section/output.md b/spec/section/output.md index 51bbd76..6202b5b 100644 --- a/spec/section/output.md +++ b/spec/section/output.md @@ -17,10 +17,9 @@ RDF syntaxes and RDF APIs generally represent [=blank nodes=] with [=blank node ## The Generated RDF Triples of a Triples Map +This subsection describes the process of generating RDF triples from a [=Triples Map=]. This process contributes [=RDF triples=] to the [=output dataset=]. Each generated triple MUST be placed into one or more graphs of the output dataset. -This subsection describes the normative process by which [=RDF triples=] are generated from a [=Triples Map=]. This process contributes [=RDF triples=] to the [=output dataset=]. Each generated triple MUST be placed into one or more graphs of the output dataset. - -The generated RDF triples are determined by the following algorithm. [=RML Processors=] MAY employ alternative implementations to compute the generated [=RDF triples=], provided that the resulting output dataset is semantically equivalent to the one obtained by this algorithm. +The [=generated RDF triples=] are determined by the following algorithm. [=RML Processors=] MAY employ alternative implementations to compute the generated [=RDF triples=], provided that the resulting output dataset is semantically equivalent to the one obtained by this algorithm. Let: From 92ca9bd970a132d1ce2268a14bda73cd5fae1b0e Mon Sep 17 00:00:00 2001 From: David Chaves Date: Mon, 13 Oct 2025 12:52:10 +0200 Subject: [PATCH 3/5] using iteration and not record --- spec/section/output.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/spec/section/output.md b/spec/section/output.md index 6202b5b..9c6952f 100644 --- a/spec/section/output.md +++ b/spec/section/output.md @@ -25,14 +25,14 @@ The [=generated RDF triples=] are determined by the following algorithm. [=RML P Let: - **sm** be the [=subject map=] of the [=Triples Map=]. -- **records** be the set of logical records obtained by evaluating the [=logical source=] of the [=Triples Map=] using its declared [=reference formulation=]. +- **iterations** be the set of [=logical iterations=] obtained by evaluating the [=logical source=] of the [=Triples Map=] using its declared [=reference formulation=]. - **classes** be the set of class [=IRIs=] defined in **sm** (via `rml:class`). - **sgm** be the set of [=graph maps=] attached to **sm**. -For each logical record **record** in **records**, apply the following steps: +For each [=logical iteration=] **iteration** in **iterations**, apply the following steps: -1. Let [=subject=] be the [=RDF term=] resulting from applying **sm** to **record**. -2. Let **subject_graphs** be the set of [=RDF term=] resulting from applying each graph map in **sgm** to **record**. +1. Let [=subject=] be the [=RDF term=] resulting from applying **sm** to **iteration**. +2. Let **subject_graphs** be the set of [=RDF term=] resulting from applying each graph map in **sgm** to **iteration**. 3. For each class [=IRI=] in **classes**, add a triple to the [=output dataset=] as follows: | Component | Value | @@ -44,10 +44,10 @@ For each logical record **record** in **records**, apply the following steps: 4. For each [=predicate-object map=] of the Triples Map, apply the following steps: - - Let **predicates** be the set of [=RDF terms=] resulting from applying each predicate map of the predicate-object map to **record**. - - Let **objects** be the set of [=RDF terms=] resulting from applying each object map (excluding [=referencing object maps=]) to **record**. + - Let **predicates** be the set of [=RDF terms=] resulting from applying each predicate map of the predicate-object map to **iteration**. + - Let **objects** be the set of [=RDF terms=] resulting from applying each object map (excluding [=referencing object maps=]) to **iteration**. - Let **pogm** be the set of graph maps of the predicate-object map. - - Let **predicate_object_graphs** be the set of RDF terms resulting from applying each graph map in **pogm** to **record**. + - Let **predicate_object_graphs** be the set of RDF terms resulting from applying each graph map in **pogm** to **iteration**. For each possible combination ``, where *predicate* ∈ **predicates** and *object* ∈ **objects**, add a triple to the output dataset as follows: @@ -63,15 +63,15 @@ For each [=referencing object map=] of a [=predicate-object map=] in the [=Tripl - Let **psm** be the [=subject map=] of the [=parent Triples Map=] referenced by [=referencing object map=]. - Let **pogm** be the set of [=graph maps=] of the [=predicate-object map=]. -- Let **joined_records** be the result of evaluating the [=join conditions=] defined by the [=referencing object map=], combining records from both the child and parent logical sources. +- Let **joined_iterations** be the result of evaluating the [=join conditions=] defined by the [=referencing object map=], combining iterations from both the child and parent logical sources. -For each pair `` in **joined_records**, apply the following steps: +For each pair `` in **joined_iterations**, apply the following steps: -1. Let **subject** be the [=RDF terms=] resulting from applying **sm** to **child_record**. -2. Let **predicates** be the set of [=RDF terms=] resulting from applying each [=predicate map=] of the [=predicate-object map=] to **child_record**. -3. Let **object** be the [=RDF terms=] resulting from applying **psm** to **parent_record**. -4. Let **subject_graphs** be the set of RDF terms resulting from applying each graph map in **sgm** to **child_record**. -5. Let **predicate_object_graphs** be the set of RDF terms resulting from applying each graph map in **pogm** to **child_record**. +1. Let **subject** be the [=RDF terms=] resulting from applying **sm** to **child_iteration**. +2. Let **predicates** be the set of [=RDF terms=] resulting from applying each [=predicate map=] of the [=predicate-object map=] to **child_iteration**. +3. Let **object** be the [=RDF terms=] resulting from applying **psm** to **parent_iteration**. +4. Let **subject_graphs** be the set of RDF terms resulting from applying each graph map in **sgm** to **child_iteration**. +5. Let **predicate_object_graphs** be the set of RDF terms resulting from applying each graph map in **pogm** to **child_iteration**. For each *predicate* in **predicates**, add a triple to the output dataset as follows: @@ -108,17 +108,17 @@ Execute the following steps: A [=term map=] defines how an [=RDF term=] is generated from the evaluation of a [=logical iteration=] over a [=logical source=]. -The result of evaluating a term map for a given logical record can be one of the following: +The result of evaluating a term map for a given [=logical iteration=] can be one of the following: - **Empty**, if any referenced value of the [=term map=] evaluates to a null, empty or missing value (each data format defines it in [RML-IO-Registry](https://w3id.org/kg-construct/rml-io-registry/)); - **An [=RDF term=]**, when evaluation produces a valid [=RDF term=]according to the [=term generation rules=]; - **A data error**, when a valid RDF term cannot be produced. -The [=generated RDF term=] of a [=term map=] for a given logical record is determined as follows: +The [=generated RDF term=] of a [=term map=] for a given [=logical iteration=] is determined as follows: 1. If the term map is a **constant-valued term map**, then the generated RDF term is the term map’s constant value. -2. If the term map is a **reference-valued term map**, then the generated RDF term is determined by evaluating the [=reference value=] expression over the logical record and applying the *term generation rules* to the resulting value. -3. If the term map is a **template-valued term map**, then the generated RDF term is determined by evaluating the [=template value=] against the logical record and applying the *term generation rules* to the resulting value. +2. If the term map is a **reference-valued term map**, then the generated RDF term is determined by evaluating the [=reference value=] expression over the [=logical iteration=] and applying the *term generation rules* to the resulting value. +3. If the term map is a **template-valued term map**, then the generated RDF term is determined by evaluating the [=template value=] against the [=logical iteration=] and applying the *term generation rules* to the resulting value. The term generation rules define how a concrete RDF term is generated from a given value: From 146411a9b24a6a7aa5d30525f9f01c7b3d817bb2 Mon Sep 17 00:00:00 2001 From: David Chaves Date: Tue, 14 Oct 2025 09:57:08 +0200 Subject: [PATCH 4/5] adding language and datatype map in the output dataset --- spec/section/output.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/section/output.md b/spec/section/output.md index 9c6952f..266d0b4 100644 --- a/spec/section/output.md +++ b/spec/section/output.md @@ -111,7 +111,7 @@ A [=term map=] defines how an [=RDF term=] is generated from the evaluation of a The result of evaluating a term map for a given [=logical iteration=] can be one of the following: - **Empty**, if any referenced value of the [=term map=] evaluates to a null, empty or missing value (each data format defines it in [RML-IO-Registry](https://w3id.org/kg-construct/rml-io-registry/)); -- **An [=RDF term=]**, when evaluation produces a valid [=RDF term=]according to the [=term generation rules=]; +- **An [=RDF term=]**, when evaluation produces a valid [=RDF term=] according to the [=term generation rules=]; - **A data error**, when a valid RDF term cannot be produced. The [=generated RDF term=] of a [=term map=] for a given [=logical iteration=] is determined as follows: @@ -140,8 +140,8 @@ The term generation rules define how a concrete RDF term is generated - Return a blank node that is unique in the target graph. 5. **If the term type is `rml:Literal`:** - - If the term map declares a [=language tag=], then return a literal with that language tag and the natural RDF lexical form corresponding to *value*. - - Otherwise, if the term map declares a non-empty [=datatype=] different from the natural RDF datatype corresponding to the value’s implicit datatype, then return an RDF literal with the specified datatype. + - If the term map declares a [=language map=], then evaluate the [=language map=] to obtain a [=language tag=] and return a literal with that [=language tag=] and the natural RDF lexical form corresponding to *value*. + - Otherwise, if the term map declares a [=datatype map=], then evaluate it to obtain a [=datatype IRI=] and return an RDF literal with that [=datatype=] and the natural RDF lexical form corresponding to *value*. - Otherwise, return the natural RDF literal corresponding to *value*. From 75d1dfa97d7b30a6921394435c69cfa7819e9360 Mon Sep 17 00:00:00 2001 From: David Chaves Date: Tue, 14 Oct 2025 13:06:47 +0200 Subject: [PATCH 5/5] adding multivalues in ouput --- spec/section/output.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/section/output.md b/spec/section/output.md index 266d0b4..8c2cff7 100644 --- a/spec/section/output.md +++ b/spec/section/output.md @@ -117,10 +117,10 @@ The result of evaluating a term map for a given [=logical iteration=] can be one The [=generated RDF term=] of a [=term map=] for a given [=logical iteration=] is determined as follows: 1. If the term map is a **constant-valued term map**, then the generated RDF term is the term map’s constant value. -2. If the term map is a **reference-valued term map**, then the generated RDF term is determined by evaluating the [=reference value=] expression over the [=logical iteration=] and applying the *term generation rules* to the resulting value. -3. If the term map is a **template-valued term map**, then the generated RDF term is determined by evaluating the [=template value=] against the [=logical iteration=] and applying the *term generation rules* to the resulting value. +2. If the term map is a **reference-valued term map**, then the generated RDF term is determined by evaluating the [=reference value=] expression over the [=logical iteration=] and applying the [=term generation rules=] to the resulting value. +3. If the term map is a **template-valued term map**, then the generated RDF term is determined by evaluating the [=template value=] expression over the [=logical iteration=] and applying the [=term generation rules=] to the resulting value. -The term generation rules define how a concrete RDF term is generated from a given value: +The term generation rules define how a concrete RDF term is generated from each value from the [=expression evaluation result=]: 1. **If the value is null, empty or missing**, then no RDF term is generated.