- From: Pierre-Antoine Champin <pierre-antoine.champin@ercim.eu>
- Date: Fri, 22 Jan 2021 14:19:43 +0100
- To: thomas lörtsch <tl@rat.io>
- Cc: Olaf Hartig <olaf.hartig@liu.se>, public-rdf-star@w3.org
- Message-ID: <6f97b6fd-ebdf-793c-ff73-635a2ba0300d@ercim.eu>
On 22/01/2021 12:59, thomas lörtsch wrote: > >> On 21. Jan 2021, at 16:43, Pierre-Antoine Champin <pierre-antoine.champin@ercim.eu> wrote: >> >> +1 to what Olaf wrote below. >> >> As an example, I used Jos' implementation of RDF* in EYE, and William Van Woensel super-nice N3 editor, to illustrate this with a small example: >> >> http://ppr.cs.dal.ca:3002/n3/editor/s/j7yBphsy >> >> In this example, I have two predicates that link files to triples: >> >> * :contains keeps referential opacity (nothing to do) >> >> * :entailsForMe has some form of referential transparency (implemented through N3 rules: any triple with the same meaning as one contained in the file is also entailed for me by that file) >> >> By running it in EYE (click "execute"), you can see that the conclusions contain: >> >> :report :contains <<:superman :can :fly>>. >> :report :entailsForMe <<:superman :can :fly>>. >> :report :entailsForMe <<:clark :can :fly>>. >> >> but NOT >> >> :report :contains <<:clark :can :fly>>. > Paraphrasing James’ question to Olaf: how would you do that in SPARQL? AFAIK, you can not write recursive queries in SPARQL, which makes it a limited rule langue compared to N3. But a simplified version of my N3 example would be CONSTRUCT { ?file :entailsForMe <<?s2 ?p2 ?o2>>. } WHERE { ?file :contains <<?s ?p ?o>>. ?s owl:sameAs ?s2. ?p owl:sameAs ?p2. ?o owl:sameAs ?o2. } > > Thomas > >> On 21/01/2021 15:35, Olaf Hartig wrote: >>> Hi Thomas, >>> >>> You are raising an interesting point that I was also thinking about recently, >>> and I believe I have a solution. >>> >>> First of all, regarding terminology, our groups' earlier discussions related >>> to this topic used the terms "referential opacity" and "referential >>> transparency" for what you call "syntactic triple" and "interpreted triple" >>> now. >>> >>> The proposed semantics adopts referential opacity. From my understanding, in >>> comparison to a semantics that adopts referential transparency, adopting >>> referential opacity (as in the proposed semantics) is less restrictive in the >>> sense that it does not rule out the possibility to use referential >>> transparency for selected cases. In other words, by using referential opacity >>> as a basis (i.e., for the semantics of RDF*), on top of this basis you may >>> still define specific cases for which the additional nested triples may be >>> derived that you would expect under referential transparency. In contrast, if >>> referential transparency is used as a basis, which says that such additional >>> nested triples can be derived for all cases, then it is not possible to define >>> on top of this basis that there are cases for which the additional triples >>> should actually not be derived. At least, that's what I had understood from my >>> discussions with Pierre-Antoine and Dörthe (please feel free to confirm or >>> correct me on this). >>> >>> Given this understanding, you may indicate the cases in which you want to use >>> referential transparency on top of a referential opacity semantics by using >>> specific properties that you introduce for this purpose. For instance, you may >>> introduce a property denoted by the URI ex:statedBy and define that >>> referential transparency can be used for nested triples that have this >>> property in their predicate position. This way, related to your example, if >>> you have a nested triple >>> >>> <<:cars :are :bad>> ex:statedBy :Alice >>> >>> you can derive the following triple. >>> >>> <<:automobiles :are :bad>> ex:statedBy :Alice >>> >>> So, while the semantics of RDF* adopts referential opacity, you can build on >>> it and define cases in which you want to have referential transparency. >>> >>> Best, >>> Olaf >>> >>> >>> On torsdag 21 januari 2021 kl. 13:40:56 CET thomas lörtsch wrote: >>>> [I hope I’m using the right terminology in the right way. Advice is >>>> welcome.] >>>> >>>> The proposed semantics defines that the embedded triple refers to a triple >>>> on the syntactic level, not in the realm of interpretation. In defense of >>>> this rather peculiar arrangement Pierre-Antoine and Dörthe argued that >>>> going from the syntactic to the interpreted triple is always possible >>>> whereas the other way round it is not: once a triple is part of the >>>> interpretation we can not know what its original syntactic structure was. >>>> That’s true (at least in any normal setup) but let's assume I’d like to >>>> annotate not the syntactic triple but the interpreted triple. What would I >>>> actually have to do to construct a reference to an interpreted triple from >>>> an RDF* embedded triple? >>>> >>>> >>>> Lets for example assume someone published the triple >>>> >>>> :cars :are :bad . >>>> >>>> As he published that statement on the semantic web we can assume that his >>>> intend was to refer not only to :cars but just as well to :automobiles, >>>> :voitures etc. Now if we want to comment on that general interpretation of >>>> this statement, irrespective of the concrete vocabulary used, irrespective >>>> of any syntactic specifics, how would we do that? The proposed semantics of >>>> >>>> << :cars :are :bad >> :a :disputedClaim . >>>> >>>> doesn’t cover this very common case as the embedded triple only refers to >>>> that very specific syntactic form. From this RDF* statement we couldn’t >>>> infer that >>>> >>>> << :automobiles :are :bad >> :a :disputedClaim . >>>> >>>> even if we were using a reasonably complete mapping of car related >>>> vocabiularies. Adding all those derivable embedded triples to the database >>>> is not a viable option as it would increase operational costs enormously. >>>> We need a way to derive a reference to the interpreted triple from the >>>> syntactic triple that the RDF* embedded triple represents. But how? >>>> >>>> >>>> Thomas >>>
Received on Friday, 22 January 2021 13:19:48 UTC