W3C home > Mailing lists > Public > public-rdf-star@w3.org > February 2021

...

From: Pierre-Antoine Champin <pierre-antoine.champin@ercim.eu>
Date: Thu, 4 Feb 2021 19:00:39 +0100
To: "Peter F. Patel-Schneider" <pfpschneider@gmail.com>, public-rdf-star@w3.org
Message-ID: <70627167-e100-a797-64a8-05d327ff8f3d@ercim.eu>

On 04/02/2021 00:18, Peter F. Patel-Schneider wrote:
> On 2/3/21 4:09 PM, Pierre-Antoine Champin wrote:
>> On 28/01/2021 01:59, Peter F. Patel-Schneider wrote:
>>> On 1/25/21 4:21 AM, Pierre-Antoine Champin wrote:
>>>
>>>> [...]
>>>>
>>>> One example of "missed" entailement would be (I think) with the
>>>> "malformed-literal-bnode" test
>>>> (https://w3c.github.io/rdf-star/tests/semantics/manifest.html#malformed-literal-bnode).
>>>>
>>>> But granted, that one is a corner-case, that maybe not everybody agrees on
>>>> anyway.
>>> I don't see why this entailment would be missed.
>> (this is based on your proposal here:
>> https://lists.w3.org/Archives/Public/public-rdf-star/2021Jan/0059.html)
>>
>> * the input of the test has an rdf*:object arc, but no rdf:object arc
>> (because o is a malformed litteral)
>>
>> * the expected entailed graph as a spurious rdf:object arc, and misses the
>> rdf*:object arc (because o is a blank node)
> The example you mention is, I beleive,
>
> prefix :<http://example.com/ns#>
> prefix xsd:<http://www.w3.org/2001/XMLSchema#>
> << :a :b "c"^^xsd:integer >> :p1 :o1.
>
> when xsd:integer is a recognized datatype MUST entail
>
> prefix :<http://example.com/ns#>
> << :a :b _:x >> :p1 :o1.
Correct
> This stays, intuitively, that an embedded triple with a malformed literal
> entails one with a blank node.
>
> I agree that my proposal does not have this entailment, contrary to my
> previous impression.  But I view this as a good thing.  Malformed literals do
> not denote in RDF so there should not be any thing for the blank node to
> match.  So don't view this as a desireable entailment.

I know this one is controversial. :)

My position was: in RDF, one can replace any term with a fresh blank 
node, and the resulting graph is entailed by the original one. Following 
the principle of least surprise, the same should hold in RDF*.

But this causes strange corner cases, such as this test-case. In my 
proposal, this is what requires a slightly different treatment for 
so-called embedded blank nodes (which denote the term used in the 
triple) from mixed blank nodes (which denote either a term or the thing 
that term denotes, depending on where they appear).

This is probably too complex. It's probably better to give up on that 
particular test case...

> If this entailment ends up as part of RDF*, then adding an rdf:object link to
> a fresh blank node for malformed literals would, I think, support this
> entailment without any negative effects.
>>>> Another more concerning example (IMO) is the one I pointed out in
>>>> https://lists.w3.org/Archives/Public/public-rdf-star/2021Jan/0060.html. I
>>>> repeat it below for completeness:
>>>>
>>>> Consider the following RDF* graphs (serialized in Turtle*, assuming the
>>>> adequate prefix declaration) :
>>>>
>>>>        G1:  << :s :p :o >> a :A.
>>>>        G2:  << :s :p :o >> a :B.
>>>>        G3:  _:x a :A, :B.
>>>>
>>>> Does the merging of G1 and G2 entail G3? If you merge them before the
>>>> mapping (straightforwardly extending the definition of merging to the RDF*
>>>> abstract syntax), they do. And for that reason, I personally think they
>>>> should.
>>>>
>>>> If you merge them after the mapping, the merging will ensure that the blank
>>>> nodes generated respectively in G1 and G2 are distinct, and so the result
>>>> will *not* entail G3. The mapping from RDF* to RDF is lossy, as it does not
>>>> preserve the identity of RDF* embedded triples in the RDF abstract syntax.
>>> The blank node method for embedded triples does not preserve uniqueness when
>>> merging.  Implementations that perform merging have to use a modified version
>>> of merging.
>> ... and of union, I just realized (because the mapping of the union of two
>> RDF* graphs is not the union of the mapping of each of them).
>>
>> So the mapping from RDF* to RDF does not produce a "standard" RDF graph, it
>> produces an RDF-graph-that-needs-special-treatment-for-merging-and-union.
> No, RDF* implementations need to know what they are doing.  If they want to
> maintain uniqueness of triples across graphs they need to be careful about
> what operations they perform.
>
>> The whole mapping idea was (IIUC) to get rid of the new kind of node that
>> RDF* introduced. But in effect, the blank nodes used to represent embedded
>> triples require a special treatment for union and merging. I can't help but
>> consider them as a somewhat new kind of blank node...
>>
>> It seems to me that the extra machinery that you insist on keeping out of
>> the semantics shows up elsewhere... I still don't understand why you prefer
>> it that way, but I guess I could live with that. I'll try to capture that in
>> a PR.
>>
>>>> I don't have any idea right now on how to make a lossless mapping. The
>>>> mapping proposed in PR81 is lossy as well, but the additional machinery in
>>>> the semantics aims at re-introducing the missing information, i.e. two blank
>>>> nodes representing triples with the same subject, predicate and object are
>>>> forced to denote the same thing.
>>>>
>>>> Maybe there is a simpler solution to avoid the "merging issue" described
>>>> above -- and I am all for simplicity. But I think this issue needs
>>>> addressing.
>>>>
>>>> Or do you consider that this "merging issue" is not a problem?
>>> I do wonder whether any RDF implementations actually merge RDF graphs.
>> Maybe not explicitly. But all implementations I know allow you to load
>> multiple files into a single graph object, and they ensure that blank nodes
>> coming from each (graph parsed from a) file do not clash. Effectively, this
>> is a merge.
> You can consider this operation as constructing several graphs and then
> merging them.  You can also consider this operation as constructing one graph
> from multiple documents.  In RDF these are the same, but in my semantics for
> RDF* they are different.
>
>
>> To achieve the same thing in RDF*, some post-processing would have to be run
>> after loading each file, in order to merge blank nodes having the same
>> subject/predicate/object...
>>
>>> (Sometimes I wonder whether any RDF implementations actually compute RDF
>>> entailments.)
>> I have indeed never seen an implementation of RDF entailment alone, but RDFS
>> inference engines are meant to support it. Whether this is complete or
>> not... ;->
> Systems that perform RDFS inference don't implement RDF entailment, even as an
> intermediate operation, as far as I can tell.
>
>
>>    pa
>>


Received on Thursday, 4 February 2021 18:00:45 UTC

This archive was generated by hypermail 2.4.0 : Thursday, 4 February 2021 18:00:46 UTC