Suggestion reintroducing triple terms, dropping rdf:reifies

Dear WG,

Please take the following inconsideration. I have followed the conversations around different options as well as I could but I do know I have missed a lot, so my apologies in advance if this would be a step back or a step in the wrong direction.

I do know that my opinion on referential opacity is not shared so I will quickly say why I think we should not change from how RDF already acts. I do not believe that a data producer should limit what a data consumer can do with the data with syntactic constructs. It is for the data consumer to determine if "042"^^xsd:int is the same as "42"^^xsd:int and not the producer, this goes for datatype entailments as much as owl:sameAs and other similar technologies. This is different from a constraining shorthand for triple terms etc.


Reintroducing triple terms

A triple term is a content derived identifier for an RDF triple. This identifier identifies an rdfs:Class containing the set of all triple occurrences with a certain subject, predicate and object.

<< ex:subject ex:predicate ex:object >>

There may be named rdfs:Class instances that are rdfs:subClassOf such an rdfs:Class representing all these Triples occurrences, these may be used to group and or denote subsets of all occurrences of a certain triple. This is denoted by the syntax

<< ex:tripleSubClass1 | ex:subject ex:predicate ex:object >> .


<< ex:tripleSubClass2 | ex:subject ex:predicate ex:object >> .

Which is equivalent to the following two triples .

ex:tripleSubClass1  rdfs:subClassOf << ex:subject ex:predicate ex:object >> .

ex:tripleSubClass2  rdfs:subClassOf << ex:subject ex:predicate ex:object >> .

Such a name might be an IRI or a BlankNode.

<< ex:subject ex:predicate ex:object >>

Does not assert that a triple with subject ex:subject, predicate ex:predicate and object ex:object exists or is stated anywhere.

Deriving an identifier for a triple by its contents

Base case there are no blank nodes in the triple. Create an IRI in the domain triple: with the safe Base64 URL encoded n-triple form of the triple. Blank nodes are conversational skolemized: A conversational skolemization is given an identifier that is valid only within a single document or network session.


Jerven rode a roller coaster, and this was absolutely fine and safe. After the first ride Jervens mood changed from scared to enjoying, but at ride 22 Jerven turned nauseous.

:jerven :rode :roller-coaster .

All rides where safe

<< :jerven :rode :roller-coaster >> a :safe-ride .

First ride jerven is scared

<< :ride1 | :jerven :rode :roller-coaster >> :mood :scared .

Second ride is enjoyable

<< :ride2 | :jerven :rode :roller-coaster >> :mood :enjoying .

At ride 22 Jerven is a bit ill.

<< :ride22 | :jerven :rode :roller-coaster >> :mood :nausea .

Inferred statements from class membership for all triples within rdfs.

<< :ride1 | :jerven :rode :roller-coaster >> a :safe-ride .

<< :ride2 | :jerven :rode :roller-coaster >> a :safe-ride .

<< :ride22 | :jerven :rode :roller-coaster >> a :safe-ride .

OWL or other sameAs consequences

Adding an owl:sameAs statement

orcid:0000-0002-7449-1266 owl:sameAs :jerven .

Inferred statements

orcid:0000-0002-7449-1266 :rode :roller-coaster .

<< orcid:0000-0002-7449-1266 :rode :roller-coaster >> a :safe-ride .

<< :ride1 | orcid:0000-0002-7449-1266 :rode :roller-coaster >> :mood :scared .

<< :ride2 | orcid:0000-0002-7449-1266 :rode :roller-coaster >> :mood :enjoying .

<< :ride22 | orcid:0000-0002-7449-1266 :rode :roller-coaster >> :mood :nausea .

Inferred statements from class membership

<< orcid:0000-0002-7449-1266 | :jerven :rode :roller-coaster >> a :safe-ride .

<< orcid:0000-0002-7449-1266 | :jerven :rode :roller-coaster >> a :safe-ride .

<< orcid:0000-0002-7449-1266  | :jerven :rode :roller-coaster >> a :safe-ride .

The rules of owl:sameAs between IRIs imply that derived IRs for the triples also observe the consequences of such an owl:sameAs statement. E.g.

<< orcid:0000-0002-7449-1266 :rode :roller-coaster >> owl:sameAs << :jerven :rode :roller-coaster >> .

Grouping identified triples

As statements are just identifiable things we can use any vocabulary to group them together. As anyone can say anything about anything. Taking the example above.

:ride1 :partOf :a-nice-day-out-for-jerven .

:ride2 :partOf :a-nice-day-out-for-jerven .

:ride3 :partOf :a-nice-day-out-for-jerven .

Remember the syntax << :ride3 | :jerven :rode :roller-coaster >> is not obligatory to refer to :ride3 it is only a shortcut for stating that :ride3 is a rdfs:subClassOf << :jerven :rode :roller-coaster >>

Referential opacity

Is determined by the system answering queries and not the syntax. A system taking into account full owl reasoning may reply differently to a query than a system that has no owl inference capabilities. This might be true for any entailment regime chosen and the syntax above does not limit the capabilities of any entailment system.

[SIB logo]
Jerven Tjalling Bolleman
Principal Software Developer
SIB | Swiss Institute of Bioinformatics
1, rue Michel Servet - CH 1211 Geneva 4 - Switzerland
t +41 22 379 58 85 -

Received on Friday, 19 April 2024 08:32:01 UTC