- From: Franconi Enrico <franconi@inf.unibz.it>
- Date: Wed, 8 Jan 2025 17:40:36 +0000
- To: Pierre-Antoine Champin <pierre-antoine@w3.org>
- CC: Doerthe Arndt <doerthe.arndt@tu-dresden.de>, Niklas Lindström <lindstream@gmail.com>, RDF-star Working Group <public-rdf-star-wg@w3.org>
- Message-ID: <9463BAF4-8137-4137-BC06-FBA9080DBC72@inf.unibz.it>
Yep, interesting comment P-A! On 8 Jan 2025, at 18:37, Pierre-Antoine Champin <pierre-antoine@w3.org> wrote: On 08/01/2025 18:29, Franconi Enrico wrote: SMART. I like it. I like it too, this is very elegant, but... the proposed entailment patterns are mixing RDF and RDFS entailment. If we follow the current "layering", reif1 / reif2 would NOT produce the following triples in RDF-entailment (not RDFS) xxx rdf:type rdfs:Resource zzz rdf:type rdfs:Resource and therefore, Niklas' trick does not work anymore :-( Now, we may decide that "everything is a Resource" should belongs to RDF-semantics after all (rather than only RDFS), and that would solve the problem -- at the cost of destroying the last bit of consistency in the rdf:/rdfs: namespace split! :->. —e. On 8 Jan 2025, at 18:26, Doerthe Arndt <doerthe.arndt@tu-dresden.de><mailto:doerthe.arndt@tu-dresden.de> wrote: Am 08.01.2025 um 18:14 schrieb Franconi Enrico <franconi@inf.unibz.it><mailto:franconi@inf.unibz.it>: With this in mind: if the triple structure appears in S then S RDF(S) entails reif0 sss aaa ooo sss rdf:type rdfs:Resource . ooo rdf:type rdfs:Resource . aaa rdf:type rdf:Property . reif1 sss aaa <<(xxx yyy zzz)>> <<(xxx yyy zzz)>> rdf:type rdfs:Proposition . reif2 <<(xxx yyy zzz)>> aaa ooo <<(xxx yyy zzz)>> rdf:type rdfs:Proposition . reif3 sss rdf:reifies ooo ooo rdf:type rdfs:Proposition . On 8 Jan 2025, at 18:07, Doerthe Arndt <doerthe.arndt@tu-dresden.de><mailto:doerthe.arndt@tu-dresden.de> wrote: General: - Niklas made an interesting point: If you derive from sss aaa <<(xxx yyy zzz)>> that xxx a rdfs:Resource. and zzz a rdfs:Resource. then we do not need the „if the triple structure appears in S“ for rdf:Resource and can stick to „if S contains“. What if this triple structure is deeply embedded? I propose an alternative (based on Niklas idea): if S contains then S RDF(S) entails reif0 sss aaa ooo sss rdf:type rdfs:Resource . ooo rdf:type rdfs:Resource . aaa rdf:type rdf:Property . reif1 sss aaa <<(xxx yyy zzz)>> <<(xxx yyy zzz)>> rdf:type rdfs:Proposition . xxx rdf:type rdfs:Resource. zzz rdf:type rdfs:Resource. yyy rdf:type rdf:Property. reif2 <<(xxx yyy zzz)>> aaa ooo <<(xxx yyy zzz)>> rdf:type rdfs:Proposition . xxx rdf:type rdfs:Resource. zzz rdf:type rdfs:Resource. yyy rdf:type rdf:Property. reif3 sss rdf:reifies ooo ooo rdf:type rdfs:Proposition . If I now have s p <<(a b <<(x y z)>>)>>. I get with reif1: <<(a b <<(x y z)>>)>> rdf:type rdfs:Resource. But from that, I get with reif2: <<(x y z)>> rdf:type rdfs:Resource. I can again apply reif2 and get: x a rdfs:Resource. z a rdfs:Resource. y a rdf:Property. Kind regards, Dörthe It seems I fixed your comment below with my latest proposal above. Comments welcome! —e. Problem keeps being rdf entailment and the property. RDF: - I guess aaa in reif1 and reif2 should be yyy? RDFS: - we do not need <<(xxx yyy zzz)>> rdf:type rdfs:Resource . in reif1 and reif 2 because we get that with the existing rules from RDFS. We do need xxx a rdfs:Resource. and yyy a rdfs:Resource. instead. Kind regards, Dörthe On 8 Jan 2025, at 17:35, Franconi Enrico <franconi@inf.unibz.it><mailto:franconi@inf.unibz.it> wrote: Option 1 (the current option) adds metamodelling inference only for asserted triples.: Option 1 (shallow metamodelling) * ⏩ <[I+A](r), [I+A](rdf:Proposition)> ∈ IEXT([I+A](rdf:type)) if r is a triple term and ∃ x,y . (<x,[I+A](r)> ∈ IEXT(y)) ⋁ (<[I+A](r),x> ∈ IEXT(y)) or if ∃ x . <x,[I+A](r)> ∈ IEXT([I+A](rdf:reifies)) ⏪️ Note that this is just wrong since in this case we have [I+A](rdfs:Resource) ≠ IR [I+A](rdfs:Property) ≠ IP Option 2 (true metamodelling) * ⏩ <r, [I+A](rdf:Proposition)> ∈ IEXT([I+A](rdf:type)) if r ∈ range(RE) or if ∃ x,y . RE(x,[I+A](rdf:reifies),r)=y ⏪️ * ⏩ <r, [I+A](rdfs:Resource)> ∈ IEXT([I+A](rdf:type)) if r ∈ range(RE) or if ∃ x,y,z . RE(x,z,r)=y or if ∃ x,y,z . RE(r,z,x)=y ⏪️ * ⏩ <r, [I+A](rdfs:Property)> ∈ IEXT([I+A](rdf:type)) if ∃ x,y,z . RE(x,r,z)=y ⏪️ Option 2 adds new metamodelling conditions, which implies that [I+A](rdfs:Resource) = IR [I+A](rdfs:Property) = IP as it should. The entailment pattern for option 2 will have "if the triple structure appears in S”. —e. On 8 Jan 2025, at 17:17, Doerthe Arndt <doerthe.arndt@tu-dresden.de><mailto:doerthe.arndt@tu-dresden.de> wrote: Dear Niklas, I think that it should be derived. And I agree that the triple constituents are resources (due to transparency). I believe the following rule does that (given the existing RDF 1.1 entailment): If S contains: sss aaa <<(xxx yyy zzz)>> . or S contains (in symmetric RDF): <<(xxx yyy zzz)>> aaa ooo . then S RDF(1.2)-entails (in symmetric RDF): <<(xxx yyy zzz)>> rdf:type rdf:Proposition . <<(xxx yyy zzz)>> rdf:propositionSubject xxx . <<(xxx yyy zzz)>> rdf:propositionPredicate yyy . <<(xxx yyy zzz)>> rdf:propositionObject zzz . Then define: rdf:propositionPredicate rdfs:range rdf:Property . To make yyy a property. (Which I think makes sense, even though weird triple terms misusing e.g. classes as properties would have weird consequences.) It is a little bit more complicated because of the nesting. We could have :a :b <<( :s :p <<( :x :y :z )>> )>>. we would want to derive that :y a rdf:Property. But that could still be done with a detailed version of Enrico’s "triple structure appears in“ notation. We could still get your triples. Another problem I see with your approach here is that we depend on RDFS while the properties are already derived in RDF and I assume that we want to keep it that way. Another question is whether or not we want the proposition subject, predicate and object, but they could serve the purpose. Kind regards, Dörthe
Received on Wednesday, 8 January 2025 17:40:43 UTC