From ae6af092886f2a8198f7d75db72c03109ef5924d Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Champin Date: Fri, 5 Dec 2025 15:49:17 +0100 Subject: [PATCH 1/4] change basic-encode vocabulary following the emerging consensus in #2 --- spec/index.html | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/spec/index.html b/spec/index.html index f3b273a..2f01571 100644 --- a/spec/index.html +++ b/spec/index.html @@ -81,8 +81,6 @@

Interoperability between RDF [=Basic=] and RDF [=Full=]

Should we go even further and aim to provide interoperability between RDF 1.1 and RDF 1.2 [=Full=]?

-

AT RISK: The Working Group may decide to replace the terms `rdf:TripleTerm`, `rdf:ttSubject`, `rdf:ttPredicate`, and `rdf:ttObject` used in this section with other terms, possibly in a different namespace.

-

These transformation are designed to be:

@@ -112,14 +110,14 @@

From [=Full=] to [=Basic=]

and then adding the following [=triples=] to the graph (where s, p, and o are respectively the [=subject=], [=predicate=] and [=object=] of tt):

Note that this transformation is information preserving only when the input graph either has no [=triple term=] [=appearing=] in it, - or contains no [=asserted triple=] (b, `rdf:type`, `rdf:TripleTerm`) where b is a [=blank node=]. + or contains no [=asserted triple=] (b, `rdf:type`, `rdf:PropositionForm`) where b is a [=blank node=]. Implementations encountering this situation ought to report an error. This limitation is discussed in Section .

@@ -169,13 +167,13 @@

Example

From [=Basic=] to [=Full=]

Reverting a [=basic encoded=] graph to its original form consists of locating - each [=asserted triple=] (b, `rdf:type`, `rdf:TripleTerm`) + each [=asserted triple=] (b, `rdf:type`, `rdf:PropositionForm`) that has a [=blank node=] b as its subject, along with the three associated [=asserted triples=] that have the same [=blank node=] b as their subjects, i.e., - (b, `rdf:ttSubject`, s), - (b, `rdf:ttPredicate`, p), - and (b, `rdf:ttObject`, o); + (b, `rdf:PropositionFormSubject`, s), + (b, `rdf:PropositionFormPredicate`, p), + and (b, `rdf:PropositionFormObject`, o); removing these four [=triples=] from the graph; and replacing all remaining occurrences of b [=appearing=] in the graph with the [=triple term=] (s, p, o). @@ -184,11 +182,11 @@

From [=Basic=] to [=Full=]

An implementation ought to report an error if, for a given b, it can not unambiguously determine s, p, or o (i.e., if one of the properties of b - — `rdf:ttSubject`, `rdf:ttPredicate`, or `rdf:ttObject` — + — `rdf:PropositionFormSubject`, `rdf:PropositionFormPredicate`, or `rdf:PropositionFormObject` — is missing or duplicated). An implementation also ought to report an error if the input graph contains at the same time a [=triple term=] and an [=asserted triple=] - (b, `rdf:type`, `rdf:TripleTerm`) + (b, `rdf:type`, `rdf:PropositionForm`) where b is the same [=blank node=]. Note that none of these situations can occur if the input graph was produced by the [=basic encoding=] transformation.

@@ -196,7 +194,7 @@

From [=Basic=] to [=Full=]

To revert a [=basic encoded=] [=RDF dataset=] to its original form, the transformation above is applied to its [=default graph=] and to each of its [=named graphs=].

-

Note that this transformation has no effect on any [=RDF graph=] or [=RDF dataset=] that does not use the `rdf:TripleTerm` type, +

Note that this transformation has no effect on any [=RDF graph=] or [=RDF dataset=] that does not use the `rdf:PropositionForm` type, including [=Full=] graphs or datasets containing [=triple terms=]. This makes this transformation idempotent as intended.

@@ -206,13 +204,13 @@

From [=Basic=] to [=Full=]

Limitations

The two transformations above explicitly do not support graphs or datasets containing at the same time a [=triple term=] and an [=asserted triple=] - (b, `rdf:type`, `rdf:TripleTerm`) + (b, `rdf:type`, `rdf:PropositionForm`) where b is a [=blank node=]. This means that the [=basic encoding=] transformation is not strictly universal.

This limitation should not be an issue in practice. - The `rdf:TripleTerm` type is unlikely to be in used in any published graph or dataset, + The `rdf:PropositionForm` type is unlikely to be in used in any published graph or dataset, as it was not defined prior to this specification. For this reason, using it would actually have been bad practice. For future graphs and datasets, this type should be considered to be reserved for use within the [=basic encoding=] transformation, and not used otherwise. @@ -220,17 +218,17 @@

Limitations

This is one reason why this transformation introduces new vocabulary terms - (`rdf:TripleTerm`, `rdf:ttSubject`, `rdf:ttPredicate`, `rdf::ttObject`), + (`rdf:PropositionForm`, `rdf:PropositionFormSubject`, `rdf:PropositionFormPredicate`, `rdf::ttObject`), rather than repurposing the existing reification vocabulary (`rdf:Statement`, `rdf:subject`, `rdf:predicate`, `rdf:object`). - Unlike `rdf:TripleTerm`, `rdf:Statement` is known to be found in + Unlike `rdf:PropositionForm`, `rdf:Statement` is known to be found in widely used datasets (e.g., Uniprot), so reserving its use for the [=basic encoding=] transformation was not an option.

Another consequence of this restriction is that implementers will need to be aware and careful when merging graphs in an application that [=basic encoded=] graphs or datasets. The concern is that merging a [=Full=] [=RDF graph=] containing at least one [=triple term=] - with a [=basic encoded=] [=RDF graph=] (which might contain [=blank node=] instances of `rdf:TripleTerm`) + with a [=basic encoded=] [=RDF graph=] (which might contain [=blank node=] instances of `rdf:PropositionForm`) could result in a "hybrid" graph that cannot be transformed to a consistent [=Full=] nor [=Basic=] [=RDF graph=]. Therefore, such applications should [=basic encode=] every graph prior to merging them. Conversely, applications supporting RDF [=Full=] should make sure to apply the reverse transformation @@ -254,7 +252,7 @@

The `basic-encode` algorithm

  • Let M be an empty map from [=triple terms=] to [=blank nodes=].
  • Let inputKind be `null`.
  • For each [=triple=] (s, p, o) in Gᵢ:
      -
    1. If s is a [=blank node=], p is `rdf:type` and o is `rdf:TripleTerm`, then:
        +
      1. If s is a [=blank node=], p is `rdf:type` and o is `rdf:PropositionForm`, then:
        1. If inputKind is `"full"` then exit with an error.
        2. Otherwise, set inputKind to `"basic"`.
      2. @@ -299,7 +297,7 @@

        The `basic-encode-triple-term` algorithm

    2. Let b be a fresh blank node.
    3. Add the association (t, b) to Mₒ.
    4. -
    5. Add the triples (b, `rdf:type`, `rdf:TripleTerm`), (b, `rdf:ttSubject`, s), (b, `rdf:ttPredicate`, p), and (b, `rdf:ttObject`, o) in G.
    6. +
    7. Add the triples (b, `rdf:type`, `rdf:PropositionForm`), (b, `rdf:PropositionFormSubject`, s), (b, `rdf:PropositionFormPredicate`, p), and (b, `rdf:PropositionFormObject`, o) in G.
  • Return b, Mₒ and G.
  • From 99a10e4fc4a94ba3f80947d16ef6b745768f5ede Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Champin Date: Wed, 10 Dec 2025 17:14:28 +0100 Subject: [PATCH 2/4] properties now start with lowercase, as they should --- spec/index.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/spec/index.html b/spec/index.html index 2f01571..725d315 100644 --- a/spec/index.html +++ b/spec/index.html @@ -111,9 +111,9 @@

    From [=Full=] to [=Basic=]

    • (b, `rdf:type`, `rdf:PropositionForm`) -
    • (b, `rdf:PropositionFormSubject`, s) -
    • (b, `rdf:PropositionFormPredicate`, p) -
    • (b, `rdf:PropositionFormObject`, o) +
    • (b, `rdf:propositionFormSubject`, s) +
    • (b, `rdf:propositionFormPredicate`, p) +
    • (b, `rdf:propositionFormObject`, o)

    Note that this transformation is information preserving only when the input graph either has no [=triple term=] [=appearing=] in it, @@ -171,9 +171,9 @@

    From [=Basic=] to [=Full=]

    that has a [=blank node=] b as its subject, along with the three associated [=asserted triples=] that have the same [=blank node=] b as their subjects, i.e., - (b, `rdf:PropositionFormSubject`, s), - (b, `rdf:PropositionFormPredicate`, p), - and (b, `rdf:PropositionFormObject`, o); + (b, `rdf:propositionFormSubject`, s), + (b, `rdf:propositionFormPredicate`, p), + and (b, `rdf:propositionFormObject`, o); removing these four [=triples=] from the graph; and replacing all remaining occurrences of b [=appearing=] in the graph with the [=triple term=] (s, p, o). @@ -182,7 +182,7 @@

    From [=Basic=] to [=Full=]

    An implementation ought to report an error if, for a given b, it can not unambiguously determine s, p, or o (i.e., if one of the properties of b - — `rdf:PropositionFormSubject`, `rdf:PropositionFormPredicate`, or `rdf:PropositionFormObject` — + — `rdf:propositionFormSubject`, `rdf:propositionFormPredicate`, or `rdf:propositionFormObject` — is missing or duplicated). An implementation also ought to report an error if the input graph contains at the same time a [=triple term=] and an [=asserted triple=] @@ -218,7 +218,7 @@

    Limitations

    This is one reason why this transformation introduces new vocabulary terms - (`rdf:PropositionForm`, `rdf:PropositionFormSubject`, `rdf:PropositionFormPredicate`, `rdf::ttObject`), + (`rdf:PropositionForm`, `rdf:propositionFormSubject`, `rdf:propositionFormPredicate`, `rdf::ttObject`), rather than repurposing the existing reification vocabulary (`rdf:Statement`, `rdf:subject`, `rdf:predicate`, `rdf:object`). Unlike `rdf:PropositionForm`, `rdf:Statement` is known to be found in @@ -297,7 +297,7 @@

    The `basic-encode-triple-term` algorithm

  • Let b be a fresh blank node.
  • Add the association (t, b) to Mₒ.
  • -
  • Add the triples (b, `rdf:type`, `rdf:PropositionForm`), (b, `rdf:PropositionFormSubject`, s), (b, `rdf:PropositionFormPredicate`, p), and (b, `rdf:PropositionFormObject`, o) in G.
  • +
  • Add the triples (b, `rdf:type`, `rdf:PropositionForm`), (b, `rdf:propositionFormSubject`, s), (b, `rdf:propositionFormPredicate`, p), and (b, `rdf:propositionFormObject`, o) in G.
  • Return b, Mₒ and G.
  • From 76e53104999550f1604f67b11c26073dd7a17ce9 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Champin Date: Wed, 10 Dec 2025 17:15:14 +0100 Subject: [PATCH 3/4] align example with new vocabulary --- spec/ex-basicenc-output.ttl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/ex-basicenc-output.ttl b/spec/ex-basicenc-output.ttl index 2c80ce5..7142286 100644 --- a/spec/ex-basicenc-output.ttl +++ b/spec/ex-basicenc-output.ttl @@ -4,8 +4,8 @@ PREFIX ex: _:r1 rdf:reifies _:gen1. _:r1 ex:q "some value". -_:gen1 a rdf:TripleTerm ; - rdf:ttSubject ex:s; - rdf:ttPredicate ex:p; - rdf:ttObject ex:o. +_:gen1 a rdf:PropositionForm; + rdf:propositionFormSubject ex:s; + rdf:propositionFormPredicate ex:p; + rdf:propositionFormObject ex:o. From 19c06a81c0d5f0fa1a8783857e74597e20a0ab00 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Champin Date: Thu, 11 Dec 2025 10:46:48 +0100 Subject: [PATCH 4/4] Update spec/index.html MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Niklas Lindström --- spec/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/index.html b/spec/index.html index 725d315..102822d 100644 --- a/spec/index.html +++ b/spec/index.html @@ -218,7 +218,7 @@

    Limitations

    This is one reason why this transformation introduces new vocabulary terms - (`rdf:PropositionForm`, `rdf:propositionFormSubject`, `rdf:propositionFormPredicate`, `rdf::ttObject`), + (`rdf:PropositionForm`, `rdf:propositionFormSubject`, `rdf:propositionFormPredicate`, `rdf:propositionFormObject`), rather than repurposing the existing reification vocabulary (`rdf:Statement`, `rdf:subject`, `rdf:predicate`, `rdf:object`). Unlike `rdf:PropositionForm`, `rdf:Statement` is known to be found in