- From: Doerthe Arndt <doerthe.arndt@ugent.be>
- Date: Wed, 12 Dec 2018 11:12:13 +0100
- To: "Ruben Verborgh (UGent-imec)" <Ruben.Verborgh@UGent.be>, "public-n3-dev@w3.org" <public-n3-dev@w3.org>
- Message-ID: <8a190f34-905b-75c5-f0ae-e49e92799286@ugent.be>
Dear Ruben, I would like to comment on your remarks below: > Nonetheless, here’s my number one topic I’m interested in: > – How to align N3 with the RDF 1.1 standard, in particular with TriG? > > Regarding this topic, it is useful to know that: > – The notion of N3 formulas and TriG graphs is different: > the former represent a closed set, the latter an open set. In case of TriG this really depends on the interpretation you choose. But given, that you choose some kind of open interpretation, would that be different from saying in N3 something like: :graph :includesTriples {:a :b :c. :d :e :f}. I mean, if the graph notation in brackets {} really refers to the triples in them (and I know that this in itself is complicated, but please ignore that problem for now), can't we still have some open concepts by using the right predicates? > – While TriG documents are almost valid N3 documents > (the equals sign got dropped at some point), > their semantics are different, notably with respect to blank nodes. Interesting that you say that "the equal sign" got dropped. Reading this I would have expected that you understand a graph as closed. But you see above how I understood the graph so far. > > I have talked to TimBL about such an alignment, > indicating that N3 should change its interpretation of blank nodes > if we want it to be compatible with RDF 1.1, > which has been standardized (whereas N3 has not). > However, he remarked (understandably) that N3 semantics > predates TriG by over a decade, and therefore is hard to change. Remember that there is no "interpretation" of TriG. I think you refer to this sentence: "BlankNodes sharing the same label in differently labeled graph statements are considered to be the same BlankNode." (taken from: https://www.w3.org/TR/trig/#terms-blanks-nodes) Please note that this is rather problematic since according to RDF semantics blank nodes come with an implicit quantifier. So, if you say that two blank nodes from differently labeled graph statements are the same you shift the quantifier from the local graph upwards which can of course be useful in many cases but it also causes that you do not have the local blank nodes from the original graphs any more. Since the semantics of TriG is not fixed, my explanation stayed vague so far and I am aware of that. So, lets just assume for now, that the named graph refers to an actual graph somewhere in the Web and that by stating: :graph1 {:jim a :Unicorn}. I mean that the graph I find when I follow my uri :graph1 contains the exact triple ":jim a :Unicorn.". If we then have a different graph :graph2 {:jim :likes :apples.}. We can, with the above, indeed state in TriG: :graph1 {_:x a :Unicorn}. :graph2 {_:x :likes :apples.}. Which according to our assumptions here means that "There exists and instance which according to graph 1 is a unicorn and according to graph 2 likes apples." Till here, everything is fine. But how do we deal with the case that graph contains the explicit triple: _:y a :Dragon. We cannot state :graph1 {_:y a :Dragon}. in this case since that would mean: "There exists an instance y and graph 1 states that this instance is a dragon." And not what we actually wanted to express: "Graph one contains the statement that dragons exist." The latter cannot really be expressed here and I think that is a problem since such blank nodes are present in RDF graphs and they have the local scope. To come back to N3, the local scoping actually makes a difference when you deal with negation. Consider the triples: :doerthe :says {:tom a :Cat}. meaning "Doerthe says that Tom is a cat". Now, imagine, that the case is not that clear and to you Tom actually looks more like a dog. Then we could state :ruben :denies {:tom a :Cat}. meaning "Ruben denies that Tom is a cat.". The interesting point is now that with our local scoping in N3 this does not entail: :ruben :denies {_:x a :Cat}. Because that would mean "Ruben denies that cat exist." and that would be a rather strong statement which we cannot justify by you doubting the "catness" of Tom. I only came up with this example to say: regardless of how we formalise it, the fact that a blank node in RDF and thereby also in N3 is a variable with an implicit quantifier which also has a position (inside or outside the quote?) makes this a concept we need to be very careful with. So, I would also careful with ad-hoc alignments and carefully see which use cases we exclude with our formalisations. Kind regards, Doerthe -- Dörthe Arndt Researcher Semantic Web imec - Ghent University - IDLab | Faculty of Engineering and Architecture | Department of Electronics and Information Systems Technologiepark-Zwijnaarde 19, 9052 Ghent, Belgium t: +32 9 331 49 59 | e: doerthe.arndt@ugent.be
Received on Wednesday, 12 December 2018 10:12:41 UTC