Re: RDF* semantics

> On 17. Aug 2019, at 17:49, Olaf Hartig <olaf.hartig@liu.se> wrote:
> 
> Kingsley,
> 
> On onsdag 14 augusti 2019 kl. 11:01:19 CEST Kingsley Idehen wrote:
>> [...]
>>>> It states that a Person named "Alice" :claims a Person named "Bob" has
>>>> age 23 expressed as in integer.
>>> 
>>> I disagree. It states that a Person named "Alice" :claims something and
>>> this something is of rdf:type foaf:Person. So, what she is claiming is a
>>> person rather than being about a person.
>> 
>> I hope you are not interpreting :clams somewhat whimsically, since I
>> didn't actually assert that the rdfs:range of :claims is an
>> rdf:Statement instance in my original example sentence.
> 
> I know. That's why I am saying that, according to your example data, what 
> Alice is claiming is a person (something of type foaf:Person) rather than a 
> statement about the person. Let's break down your Turtle-formatted example 
> data by writing it in Turtle *without* the syntactic abbreviations of Turtle 
> that you have been using, which gives us the following snippet of Turtle:
> 
> _:b1  rdf:type  foaf:Person .
> _:b1  foaf:name  "Alice" .
> _:b1  :claims  _:b2 .
> _:b2  rdf:type  foaf:Person .
> _:b2  foaf:name  "Bob" .
> _:b2  foaf:age "23"^^xsd:integer .
> 
> As I hope you see now, there is some thing--denoted by blank note _:b2--that 
> the person Alice :claims and this thing is of rdf:type foaf :Person. So, 
> according to this data, Alice claims a person.

How is it that in your interpretation _:b1 stands for "Alice" but _:b2 is interpreted as "some thing of rdf:type foaf :Person"? With your interpretation of _:b1 you follow natural intuition whereas your interpretation of _:b2 jumps boldly into unhealthy semantic quagmires. One thing I learned during the years that I followed long threads of hairsplitting about the precise semantics of this or that is: if you don’t (or can’t) bind it back to some intuitive reading, to some very basic example, you are lost. You are lost no matter how many additional triples and blank nodes and graphs and whatever you throw at it. It’s just as in any human conversation where one participant doesn’t want to understand the other (minus the lack of good will of course). 
So, back to the example: the only natural reading IMHO opinion is the one that Kingsley intended. The natural interpretation of _:b1 in its entirety is "the person Alice" and of _:b2 it’s as well the entirety of all properties, namely that "the person Bob is of age 23". Because otherwise, without their properties, those blank nodes are just meaningless existential variables, and without any hint about which property is the primary one (AFAIK that would be the rdf:value property) there meaning is the set of all properties. Which results in Alice claiming that Bob is a person of age 23. Everything else is lost in translation err semantics.

However I would also like to stress that such modelling is not meta-modelling and it is not equivalent to a layer of abstraction (vulgo taking one step back) like reification or named graphs. Modelling everything in plain RDF without meta-modelling is like coding without abstractions: as soon as a new type, a new perspective, a new aspect has to be considered every second line of code has to be touched. In the example above the introduction of a third person speaking about Alice making claims about Bob would require a lot of shuffling blank nodes and moving triples around. If known in advance that’s not a problem per se but after the fact it gets tedious and errorprone. Integrating data from different sources is what the Semantic Web is all about. However as soon as the edges of an ideal world of shared vocabularies, commonly understood semantics and good will are reached it has to resort to meta modelling for adding perspectives and integrating aspects after the fact, after the initial data model have been developed. It needs abstractions. Interestingly the Property Graph style of modelling with primary relations that have secondary properties is technically similar but to a very different end (and with no solution to cross-application data integration AFAIK).

Well, as I’m on it, a shameless plug: I recently posted an unhaelthily long mail to this list . That mail started with a short overview in which I stated that the RDF* semantics neither fills the gap in RDF standard reification semantic nor does it provide semantics for named graphs but instead, with PG mode, introduces a third semanics that might only deepen the mess we’re in already. I also made some proposals on how most of these issues might be resolved. I wonder if anybody bothered to read that sermon.

Cheers,
Thomas

> That's different from what was 
> meant to be captured in my original example, namely, that Alice makes a claim/
> statement *about* a person (in my original words: "we my want to capture that 
> Alice told us that Bob's age is 23, even if we don't have a document from 
> Alice with this statement/claim regarding Bob's age").
> 
>> [...]
>> BTW -- I can also do all of this in a document (as per SPARQL Named
>> Graphs) and just pepper the document with additional metadata for
>> provenance purposes. Basically, why aren't  SPARQL Named Graphs a viable
>> solution to this problem i.e., RDF stays as is for data definition while
>> languages such as SPARQL handle operations on RDF structured data?
> 
> I never said that Named Graphs cannot be used as a solution (to the problem of 
> representing and querying metadata about individual triples). In contrast, 
> such an application of the concept of Named Graphs may be defined by assuming 
> that every relevant Named Graph consists of a single triple only. However, by 
> using the concept of Named Graphs to capture triple-level metadata, it becomes 
> tricky to also represent and query graph-level metadata. More precisely, it 
> becomes tricky to represent both triple-level metadata and graph-level 
> metadata within the same dataset; and it becomes tricky to request both 
> triple-level and graph-level metadata within the same query.
> 
> Olaf
> 
> 
>>>> [...]
>>>> 
>>>>> I guess what you actually wanted to write was something
>>>>> like the following:
>>>>> 
>>>>> [ a foaf:Person; foaf:name "Alice"]
>>>>> 
>>>>>           :claims [ a rdf:Statement ;
>>>>>           :
>>>>>                     rdf:subject   :Bob ;
>>>>>                     rdf:predicate foaf:age ;
>>>>>                     rdf:object    "23"^^xsd:integer ] .
>>>> 
>>>> No, that is just a reified version of my initial statement.
>>> 
>>> Are you saying that you consider the set of triples serialized as this
>>> piece of Turtle to be semantically equivalent to the set of triples
>>> serialized in the piece of Turtle above?
>> 
>> Of course not.
>> 
>> 
>> Kingsley
>> 
>>>> [...]
>>>> 
>>>>> By the definition of the RDF* data model, every RDF graph is an RDF*
>>>>> graph. Additionally, by the definition of the RDF*-to-RDF mapping, every
>>>>> RDF* graph can be viewed as an RDF graph.
>>>> 
>>>> Sorta, but this is serious work to be done explaining all of this in a
>>>> manner that prevents the confusion I fear.
>>> 
>>> Point taken.
>>> 
>>> Olaf
> 
> 

Received on Sunday, 25 August 2019 12:02:47 UTC