-
Notifications
You must be signed in to change notification settings - Fork 8
Basic Encoding of Reified Propositions
Note
This is a draft proposal, not yet ready for wider consideration.
This document describes a way of encoding RDF 1.2-reified propositions in RDF 1.2 Basic. (In RDF 1.2 Basic abstract syntax, like in RDF 1.1, triples are not available as terms of other triples.)
Bonus inclusions:
- An OWL model specifying the well-formedness requirement of encoded propositions.
- A semantic extension entailing the basic encoding.
The following expression (using syntactic sugar):
:alice :thinks << :bob :likes :bob ~ _:e >> .
which expands to:
:alice :thinks _:e .
_:e rdf:reifies <<( :bob :likes :bob )>> .
is basic-encoded as:
:alice :thinks _:e .
_:e rdf:reifiesEncoded _:tt .
_:tt a rdf:EncodedProposition ;
rdf:subject :bob ;
rdf:predicate :likes ;
rdf:object :bob .
The encoding uses a relationship from a reifier to some described encoded proposition, existentially quantified (with a blank node), and described with relations to the resources denoted by the constituents of this proposition. This encoding is a "token", and a reification the abstract proposition. It may be the triple itself; that is undefined. The necessary restriction is that these encodings correspond one-to-one with the abstract proposition.
This avoids exposing the abstract proposition as a resource in the model.
Note
Note that these encodings are specialized instances of the classic rdf:Statement
"tokens", with the above one-to-one constraint. This clarifies that not all classic reifications are in themselves these one-to-one tokens, but some may be. This is also a "safety" in the encoded form, since if the token would be further described, such "stray facts" can be kept in RDF 1.2 Full.
<< :bob :likes :bob ~ _:tt >> :spurious "note" .
Warning
It does, however, expose a token thereof in the model; which in very constrained universes may be "reading too much" into the interpretation? A counter-argument could be that these tokens only exist when the universe contains abstract propositions, and that presupposes something. Only of the existing reifiers cannot have "proper parts" corresponding one-to-one with the abstract propositions would this be a problem.
Limitation by design: Does not encode all uses of triple terms, only reified or annotated triples (the "syntactic sugar" forms in Turtle).
rdf:EncodedProposition a rdfs:Class ;
rdfs:subClassOf rdf:Statement .
rdf:reifiesEncoded a owl:ObjectProperty ;
rdfs:range rdf:EncodedProposition .
A triple is denoted by a blank node. It must have exactly one subject, predicate and object, and is uniquely identified through those as a key. Logically, it reifies exactly one proposition.
This would allow the (indirect) encoding of all possible references to propositions.
Instead of the shorthand relationship from the reifier to the encoded proposition:
_:e rdf:reifiesEncoded _:tt .
both can be described as directly refiying the proposition, denoted by a blank node:
_:e rdf:reifies _:pp .
_:tt rdf:reifies _:pp .
In this form, the proposition is "exposed" as a blank node co-denoting it. (No further properties thereof need to be described. Its type does not need to be encoded, as it is entailed.)
But by exposing the proposition, it also enables misuse of the blank node to encode ill-formed propositions, such as self-referential propositions, propositions with multiple distinct predicates, or as subjects.
The meaning of the well-formedness can be expressed in OWL as:
rdf:EncodedProposition
rdfs:subClassOf [ owl:onProperty rdf:reifies ; owl:cardinality 1 ] ;
owl:hasKey (rdf:subject rdf:predicate rdf:object) .
Note that:
_:e rdf:reifiesPropositionEncodedBy _:tt .
should be implied by:
_:e rdf:reifies _:pp .
_:tt rdf:reifies _:pp .
_:tt a rdf:EncodedProposition .
Using OWL, this can be specified with:
rdf:reifiesPropositionEncodedBy
owl:propertyChainAxiom (rdf:reifies [ owl:inverseOf rdf:reifies ] _:selfOfTypeTriple) .
rdf:EncodedProposition
owl:equivalentClass [ owl:onProperty _:selfOfTypeTriple ;
owl:hasSelf true ] .
For every reified proposition, there exists some encoding thereof.
Formally:
aaa rdf:reifies <<( bbb ccc ddd )>> .
entails:
aaa rdf:reifies _:pp .
_:tt rdf:reifies _:pp .
_:tt rdf:type rdf:EncodedProposition .
_:tt rdf:subject bbb .
_:tt rdf:predicate ccc .
_:tt rdf:object ddd .
Note that, given the OWL definitions above, that in turn entails:
aaa rdf:reifiesPropositionEncodedBy _:tt .
This:
- Ensures that applications built on RDF 1.2 Basic assumptions can continue to work when upgraded RDF 1.2 Full (through these entailed facts).
- Enables modelling using OWL to bridge different modelling designs and granularities.
(This extension would resolve issue https://github.com/w3c/rdf-ucr/issues/27 and https://github.com/w3c/rdf-star-wg/issues/154.)
Summary of the RDF-star WG wiki.
- Editor's guide
- Meeting minutes
- RDF terminology
- Scribes
- Use Cases collection
- RDF 1.2 reification examples
- RDF 1.2 and LPGs
- RDF-star syntax and semantics:
-
RDF-star "liberal baseline" (current version - as in RDF Semantics deliverable)
- RDF-star "alternative baseline" (VOTED 2024.11.14 - deprecated)
- RDF-star "minimal baseline" (VOTED 2024.07.18 - frozen - superseded by vote 2024.11.14 - deprecated)
- RDF-star "working baseline" (working version - deprecated)
- Extending the baseline with "asserted" stuff
-
RDF-star "liberal baseline" (current version - as in RDF Semantics deliverable)
- systems and acronyms
- Task forces
- Text Direction considerations
- Text Direction Proposal
- Triple‐Edge-subgroup-proposals