Is there any RDF serialization format (like Notation 3) that supports implicit reification for easily representing statements about statements?
For example, say I have the statement "Mary bought a house", which I would represent in N3 like:
:Mary :bought-a :house .
Now say I wanted to add meta-statements about this statement, such as "I heard this from Rob."
Intuitively, I'd like to be able to represent this by writing something like:
:Mary :bought-a :house .
:heard-by :me .
:heard-from :Rob .
However, I think the way this would "officially" be represented in N3 would be something like:
[ a rei:Statement;
rei:subject [rei:uri :Mary];
rei:predicate [rei:uri :bought-a];
rei:object [rei:value :house]
] [
:heard-by :me;
:heard-from :Rob;
] .
which is obviously a bit more complicated and harder to read. It gets even more complicated if I need to make statements about statements about statements. e.g. "I heard this from Rob, while Rob was walking down the street".
What would be the correct and simplest way to represent this in an RDF serialization format?
I would use named graphs and wouldn't be scared to put a single statement in a graph. You could put the original statement in a graph and then the meta-statements would be about that graph rather than the statement within. Those can be put into one or more other graphs and then if you need some crazy meta-meta-statements then you can deal with it in the same way as the original meta-statement by referencing the graphs that contain the meta-statements.
When reasoning or using the graphs later, you may need to "collapse" all of your leaf/non-meta graphs into a single graph. This is also a good way to reason about meta-data in order to discover which graphs to "collapse" into your trusted statements to do actual reasoning over.