subject predicate object:
subject predicate1 object1
taggedStatement predicate2 object2
subject predicate3 object3
quotedStatement predicate2 object2
All of the statements except
quotedStatement were added to the model,
which was then serialized into RDF.
We intentionally used predicate2 and object2 for both statements about statements. This would be the case, for example, if we were recording the source pedigree and both taggedStatement and quotedStatement came from the same source.
Only Jena used the RDF M&S reified statement construct.
N3 uses its own
RDF API and Jena attempt to label taggedStatement and/or quotedStatement,
but do so in different ways.
Jena associates a (non-standard) ID with the predicate for taggedStatement.
RDF API computes a hash of the subject/predicate/object for each statement,
and uses it as the statement URI.
N3 refers to the quoted statements themselves,
using a (non-standard?) variant of
Other than the hash URI, RDF API loses quotedStatement.
When reading their own results, each of the tools should be able to properly reconstruct their basic model (with some loss of information in RDF API). When reading the results of other tools, I believe none of the tools can properly reconstruct the model.
quotedStatement) but couldn't find a way to do that in the Jena API.
Adding an ID only to each reified statement doesn't provide a mechanism for someone to come back later and add a statement. Adding an ID to every statement seems excessive, so something like the RDF API hash or N3 quoting becomes necessary. A compact representation of quoting within a single URI may often not require a lot more space than the hash; this would preserve information and have 0 probability of collisions.
I prefer the terseness of the RDF API generated namespace names (e.g.
to Jena (e.g.
I would also prefer that Jena's generated identifiers be shorter (e.g.