I would try to avoid implicit overlapping, if possible, for a number of reasons, but more specifically, because:
- access to data is more difficult
- the size of the data set increases dramatically, as each triple becomes 4 triples,
- SPARQL queries that work with an uninitialized dataset will not work on reified,
- judges will ruin things or not work.
After I coded several semantic web applications, very few of those cases when I used implicit confirmation I regretted.
In your case, I would try to model it with explicit confirmation, using Blank Node as an intermediate join point for the heard-by and heard-from predicates. Something like (in RDF / Turtle):
@prefix : <http://somedata.org/id/> . :Mary :bought-a [ a :House; :heard-by :me; :heard-from :Rob ] .
In simple RDF / ntriples, this is the same (converted using rapper ):
<http://somedata.org/id/Mary> <http://somedata.org/id/bought-a> _:genid1 . _:genid1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://somedata.org/id/House> . _:genid1 <http://somedata.org/id/heard-by> <http://somedata.org/id/me> . _:genid1 <http://somedata.org/id/heard-from> <http://somedata.org/id/Rob> .
As you can see, Mary bought something rdf:type House , and you heard it from Rob and Yourself .
I find this solution cleaner and less expensive than implicit reification. Hope this helps.
source share