The following two graphs clearly express a similar intent, one using RDF-star (soon to be incorporated into the RDF standard as RDF 1.2), and one using RDF reification.
:bob :asserts <<:earth :hasShape :flat>>
:bob :asserts _b1
_b1 rdf:subject :earth
_b1 rdf:predicate :hasShape
_b1 rdf:object :flat
_b1 rdf:type rdf:Statement
The RDF 1.2 working draft makes it clear that they are not equivalent ("Reification is not a form of quotation."). And the RDF-star report makes a similar claim that "RDF-star is not syntactic sugar for standard reification."
So they are not fully equivalent. However, the difference is subtle... the only guidance in the specs is the nuance that the value of a rdf:subject
or rdf:predicate
is not the subject IRI but the actual resource being denoted, whereas a quoted triple refers to the IRIs in their lexical form, not the denoted resource. In practice the only difference this would seem to make in real-world data processing is that the lexical form of a quoted triple is intended to be preserved.
That said, the rationale of RDF-star is explicitly to make working with metadata "less verbose and cumbersome" than reification.
So my question: is there intended to be any formal relationship between quotation and reification, whether some sort of entailment regime, or something weaker? Is there any way to "dereference" a quoted term to get something truly equivalent to the reified form?
Or are we left with two different ways of doing largely the same thing that are 99% percent similar for systems in practice, but semantically incompatible?
The semantic relation between reified triples is somewhat vague, due to the RDF reification section in RDF 1.2 Semantics being written as non-normative, but we can at least argue about the intended meaning:
"reify" means "to make concrete", thus reified triples are actual triples, just accessible as resources, in line with the intended meaning (Triple Pattern Fragments also use this interpretation). This actually comes from RDF/XML where
rdf:ID
on a triple gives it an actual identifier that could (in theory) be used to manipulate that triple. There, you can even have a graph with multiple equal triples with different IDs.Quoted triples are also actual triples, but they are not made concrete in the semantics, rather they are a new kind of RDF term. In this aspect, they are similar to literals.
I don't agree that reified triples are somehow less likely to preserve the original IRIs of the resources than quoted triples, since that ultimately depends on the kind of entailment you use. It is however true that quoted triples in OWL do provide referential opacity by default (disabled per-property using
rdf-star:TransparencyEnablingProperty
), unlike reified triples (which OWL is oblivious to, since it has its own mechanism for that ‒owl:Annotation
).The reason referential opacity does not matter that much for reified triples is because they have identity that is independent on the values of
rdf:subject
,rdf:predicate
, andrdf:object
‒ these properties merely describe the actual triple and can be used to navigate to its components, but the triple exists as an individual and does not become something different when the entailment modifies its individual properties. In contrast, a quoted triple is the platonic ideal of a triple, existing on its own in an unbound state. If two quoted triples have the same components, they are the same resource.In practice, this should be the deciding factor which of the two to choose, but there is definitely some overlap between them:
If you have something that is an instance of a triple or something close to it, use
rdf:Statement
, for example:Even if you don't use any properties outside of
rdf:subject
,rdf:predicate
, andrdf:object
, according to the open world principle there might always be other properties (like truthiness, seriousness, other contexts of validity or provenance information etc.) that potentially apply to it and might be true, just unsaid.If you want to make it clear that what you are describing is the actual platonic ideal of a triple, no strings attached, use a quoted triple, but mind that these triples are everyone's property (so be careful when using predicates that might conflict with someone else's idea). This includes statements about assertions (pedantically speaking, a graph does not "assert" an
rdf:Statement
, it contains it, but it does assert the platonic ideal, i.e. the quoted triple), beliefs, claims and similar.It seems somewhat okay to add provenance information to quoted triples too, as shows one of the RDF-star examples:
However, I would be careful with this since if
<< :a :name "Alice" >>
is described multiple times, you lose the information about whose statement is actually being recorded here. If your graph is intended to be used globally alongside other graphs, I would advise against this.There is nothing preventing you from combining the two of course. I would use this approach:
SKOS seems like a good match for this relation, indicating that the claimed statement is in some way a narrower (more concrete) concept of the platonic ideal. Of course, you could also describe the quoted triple using the old vocabulary:
I am not aware of any entailment regimes that do any of those automatically.
Side note: Literals also show a similar dualism with both an RDF term and an emergent structure ‒
rdf:CompoundLiteral
in this case:Likewise for compound literals, the one here is just one particular occurrence/instance of
"hello"@en
, potentially with more unknown properties.