diff --git a/spec/section/output.md b/spec/section/output.md index f5c81dc..8c2cff7 100644 --- a/spec/section/output.md +++ b/spec/section/output.md @@ -17,23 +17,22 @@ 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: - **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 | @@ -45,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: @@ -64,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: @@ -109,19 +108,19 @@ 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=]; +- **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=] 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. @@ -141,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*.