Re: Why does RDF* allow triples as objects?

David,

> On 19 Sep 2019, at 16:54, David Booth <david@dbooth.org> wrote:
> 
> On 9/19/19 11:14 AM, Richard Cyganiak wrote:
>> 
>> One use case for RDF* is to replace RDF Reification. RDF* can replace many, but not all uses of RDF Reification, so it doesn't address that use case completely.
> 
> Can you please give a simple example of the deficiency?  It would be helpful to be able to keep it in mind when considering what to do.

1. Some uses of RDF reification may rely on annotating triples that are not in the RDF graph. The “SA flavour” of RDF* can handle this case, but the “PG flavour” cannot.

2. Some uses of RDF reification may rely on specific, application-selected IRIs as statement identifiers. RDF* does not have statement identifiers of any kind. This could perhaps be addressed with a new property:

     <<:s :p :o>> rdf:stmtIdentifier <http://myfacts.example.org/facts/124365389 <http://myfacts.example.org/facts/124365389>>

3. Some uses of RDF reification may rely on rdf:Statement resources that are underspecified (e.g., lacking an rdf:object property) to indicate a triple pattern, or overspecified (e.g., five rdf:object properties) to indicate multiple triples. But arguably, that would be an abuse of the RDF reification vocabulary, and doesn't need to trouble us.

4. Some uses of RDF reification may rely on having multiple “instances” of the same triple with different annotations—similar to the Property Graph related limitation detailed below.

>> Another use case for RDF* is to make RDF compatible with property graphs. RDF* makes RDF almost, but not quite, compatible with property graphs, so it doesn't address that use case completely.
> 
> Again, a simple example please, that illustrates the deficiency?

In property graphs, we can have two nodes connected by more than one edge, with different annotations on each edge. For example:

    <<:Bob :worksFor :ACME>> :startDate 2009; :endDate 2013; :role :Salesperson.
    <<:Bob :worksFor :ACME>> :startDate 2014; :role :SalesManager.

The intention is to have two different :worksFor edges with different annotations. In RDF*, they would “smush” together:

    <<:Bob :worksFor :ACME>> :startDate 2009, 2014; :endDate 2013; :role :Salesperson, :SalesManager.

This is difficult to address except by requiring a different modelling. But if changing the modelling is an option, then we might just as well change to a model that doesn't use edge properties at all. And such a model is straightforwardly compatible with “vanilla” RDF, so RDF* would be unnecessary.

Richard

Received on Thursday, 19 September 2019 16:28:10 UTC