Re: reifiesDomain-14 (Re: proposal: a reifier should reify only one "thing")

Sorry, a correction that I missed in the previous email:

START----------------------------------------------------------------------
 I can say:

:s1 :hasReading [:value :A; :time :t1],[:value :B; :time :t2],[:value :A;
:time :t3].

but that's all I can say. Put another way, I can only reify the statements:

:s1 :hasReading <<:r1 | [:value :A; :time :t1]>>, <<:r2 | [:value :B; :time
:t12>>,<<:r3 | [:value :A; :time :t1]>>.
END-----------------------------------------------------------------------

should be:

START------------------------------------------------------------------------
I can say:

:s1 :hasReading [:value :A; :time :t1],[:value :B; :time :t2],[:value :A;
:time :t3].

but that's all I can say. Put another way, I can only reify the statements:

:s1 :hasReading <<:r1 | [:value :A; :time :t1]>>, <<:r2 | [:value :B; :time
:t12>>,<<:r3 | [:value :A; :time *:t3*]>>.
END
--------------------------------------------------------------------------

*Kurt Cagle*
Editor in Chief
The Cagle Report
kurt.cagle@gmail.com
443-837-8725 <http://voice.google.com/calls?a=nc,%2B14438378725>


On Fri, Apr 19, 2024 at 7:49 AM Kurt Cagle <kurt.cagle@gmail.com> wrote:

> Pierre-Antoine,
>
> It's worth noting that some of the difficulties here arise because we are
> modelling temporal phenomena:
>
> <<#marriage1 | :liz :marries :richard>> a :Event;
>        :bride :liz ;
>        :groom :richard ;
>        :startYear 1964 ;
>        :endYear 1975 ;
>        .
>
> This works in the case where Liz later marries Bob:
>
> <<#marriage2 | :liz :marries :robert>> a :Event;
>        :bride :liz ;
>        :groom :robert ;
>        :startYear 1977 ;
>        :endYear 1981 ;
>        .
>
> But gets into trouble when Liz and Richard decide to remarry:
>
> <<#marriage3 | :liz :marries :richard>> a :Event;
>        :bride :liz ;
>        :groom :richard ;
>        :startYear 1985 ;
>        .
>
> This is actually an error that arises in LPGs, because they have no way of
> differentiating #marriage1 from #marriage3.
>
> What this suggests is that there is an error in modelling, and that it
> should properly be:
>
> <<#marriage1| :liz :marries :richard>> a :Marriage ;
>      :groom :richard
>      :bride :liz ;
>      :intervals [ :from 1964; :to :1975], [:from :1985] ;
>      .
> <<#marriage2| :liz :marries :robert>> a :Marriage ;
>      :bride :liz ;
>      :groom :robert
>      :intervals [ :from 1977; :to :1981] ;
>      .
>
> This isn't necessarily intuitive - we think of #marriage3 as being the
> third marriage, but, given the reification statement, it is in fact a
> continuation of the same marriage across two separate intervals in time.
>
> Note as well that :groom and :bride here are clarifications. We can infer
> that
>
> #marriage1 rdf:subject :liz .
> #marriage1 rdf:object :richard .
>
> but we cannot tell who is :bride or :groom from the reification itself,
> unless there is some explicit ruleset:
>
> CONSTRUCT {?marriage :bride ?bride}
> WHERE {?marriage rdf:subject ?bride}
>
> CONSTRUCT {?marriage :groom ?groom}
> WHERE {?marriage rdf:object ?groom}
>
> These things aren't contained in LPGs, because in general LPGs don't have
> the expressivity of RDF. They are assumed (usually without explicit
> declaration) by the modeller.
>
> This also points to a limitation of reification -
> *if we have a temporal sequence (or any sequence for that matter) that
> incorporates the same <<:s :p :o>>  relationship, where you have multiple
> reifiers describing the same relationship, those reifiers MUST perforce
> describe the same thing.*
>
> You see this in expressions of time series data. Here's the scenario:
>
> At time :t1, sensor :s1 has a reading of :A
> At time :t2, sensor :s1 has a reading of :B
> At time :t3, sensor :s1 has a reading of :A
>
> I cannot say:
>
> :s1 :hasReading :A .
>
> without having context :t1 or :t3.
>
> I can say:
>
> :s1 :hasReading [:value :A; :time :t1],[:value :B; :time :t2],[:value :A;
> :time :t3].
>
> but that's all I can say. Put another way, I can only reify the statements:
>
> :s1 :hasReading <<:r1 | [:value :A; :time :t1]>>, <<:r2 | [:value :B;
> :time :t12>>,<<:r3 | [:value :A; :time :t1]>>.
>
> Once I do, then I can say:
>
> :r1 :reportedBy :joe .
> :r2 :reportedBy :jane .
> :r3 :reportedBy :joe.
>
> The same can be applied to the first scenario:
>
> <<::m1 | liz :marries :richard>> a :Marriage; :hasIntervals <<:mi1-1 |  [
> :from 1964; :to :1975; a :MarriageInterval]>>, <<:mi1-2 | [:from :1985; a
> :MarriageInterval]>>.
> <<::m2 | liz :marries :robert>> a :Marriage, :hasIntervals <<:mi2-1 |  [
> :from 1977; :to :1981; a :MarriageInterval]>>.
>
> (I'm including the type declarations to make the relationships explicit,
> but most likely they wouldn't be included.
>
> Given this case, we can say:
> :mi1-1 :hasChildren :wendy .
> :mi1-2 :hasChildren :john, :michael .
> :mi2-1 :hasChildren :peter .
>
> and can infer:
>
> :m1 :hasChildren :wendy, :john, :michael .
> :m2 :hasChildren :peter .
>
> through the ruleset:
>
> CONSTRUCT {?marriage :hasChildren ?child}
> WHERE {
> ?marriage :hasIntervals ?interval .
> ?interval :hasChildren ?child .
> }
>
> Let me put this another way: LPGs can induce bad modelling because they
> hide a lot of the complexity of the model at the expense of excluding these
> kind of edge cases.
>
> This makes RDF MORE expressive than LPGs (I'm not a hundred percent sure
> you could even model the above statements in Neo4J as an example without
> having to create two distinct predicates) but the case that I think we
> should be most concerned about, can RDF represent LPG content, is readily
> satisfied. This should be stated explicitly:
>
> My position: We, as a working group, are under no obligation to create RDF
> that can be modelled via an LPG, but we MUST ensure that any LPG
> representation can be represented in RDF. If you need RDF/LPG
> interoperability, then you need to conform to a more limited RDF profile.
> Let the LPG vendors play catch up for once.
>
>
>
>
>
>
> *Kurt Cagle*
> Editor in Chief
> The Cagle Report
> kurt.cagle@gmail.com
> 443-837-8725 <http://voice.google.com/calls?a=nc,%2B14438378725>
>
>
> On Fri, Apr 19, 2024 at 5:56 AM Pierre-Antoine Champin <
> pierre-antoine@w3.org> wrote:
>
>> Ora,
>>
>> thanks for this response, I think eliciting our respective assumptions is
>> a way to better understand each other and reach a trade-off acceptable to
>> everyone.
>>
>> If I understand your argument below, the use of rdf:reifies (including
>> the use of the syntactic sugar) should be limited to use-cases about
>> "statements" (for some definition of statement, which I'll defer to another
>> discussion). Any use of rdf:reifies for something that is not a "statement"
>> (e.g. a wedding) is a semantic error. If you want to talk about weddings,
>> just to it "the RDF 1.1 way", with a class :Wedding and corresponding
>> properties. This position can be defended by a strict reading of the
>> charter ("statements about statements").
>>
>> The position I defend below is based on the assumption that reifiers can
>> actually model a wide range of entities, such as weddings (Enrico's example
>> below), pipes (Niklas' recent example [1]). The main argument for this
>> position, IMO, is that it is required to ensure smooth ("intuitive"?)
>> interoperability with LPGs: in LPGs, edges *are* used to model all kinds
>> of things.
>>
>> Of course, if reifiers can be anything, we need to be able to
>> disambiguate. My understanding is that this can be done via typing, but
>> this discussion makes me realize that we should actually be more
>> prescriptive about this. We should probably instate a good practice that
>> every reifier should be explicitly typed. Consider an extended version of
>> Bob's graph below:
>>
>>     <<#w64 | :liz :married-in 1964 >> a :Wedding ;
>>         :groom :richard .
>>
>>     <<#stmt | :liz :married-in 1964 >> a rdf:Statement ;
>>         :source  <https://en.wikipedia.org/wiki/Elizabeth_Taylor>
>> <https://en.wikipedia.org/wiki/Elizabeth_Taylor>.
>>
>> Remark 1: writing this, I realize an interesting difference between LPGs
>> and RDF 1.2: the role of the edge label in LPGs is split in RDF 1.2 into
>> (a) the predicate of the reified triple, and (b) the type of the reifier.
>> Another example, IMO, of RDF semantics forcing us to be more precise (and
>> that's good).
>>
>> Remark 2: of course, the typing of the reifier could be inferred from the
>> additional properties we put on the reifier (e.g. id the domain of :groom
>> is :Wedding). So technically, the type could be ommitted. But at least when
>> we write examples, explicit is better than implicit [2].
>>
>> Remark 3: if we decide to restrict rdf:reifies to "statements", then I
>> fully support the many-to-one camp. Even though it would be tempting to
>> include complex statements (modeled by graphs) in the picture, I came to
>> the conclusion that it does not fly [3].
>> For the same reason, if we decide to allow reifiers to be anything, we
>> can still restrict rdf:reifies *per class of reifier*. In particular,
>> for "statement" reifiers:
>>
>>     rdf:Statement rdfs:subClassOf [
>>         a owl:Restriction ;
>>         owl:onProperty rdf:reifies ;
>>         owl:maxCardinality 1;
>>     ].
>>
>> Remark 4: pulling the thread on Remark 3, could we imagine something like
>> this?
>>
>>     :Wedding rdfs:subClassOf [
>>         a owl:Restriction ;
>>         owl:onProperty rdf:reifies ;
>>         owl:allValueFrom [
>>             a owl:Restriction ;
>>             owl:onProperty rdf:predicate ;
>>             owl:allValuesFrom :WeddingDescribingProperty
>>         ]
>>     ].
>>     :married-to a :WeddingDescribingProperty .
>>     :married-in a :WeddingDescribingProperty .
>>
>> (I know, this is totally out of scope of this group! But food for
>> thought, I think...)
>>
>>   pa
>>
>> [1]
>> https://lists.w3.org/Archives/Public/public-rdf-star-wg/2024Apr/0112.html
>> [2] https://peps.python.org/pep-0020/#the-zen-of-python
>> [3]
>> https://lists.w3.org/Archives/Public/public-rdf-star-wg/2024Apr/0096.html
>> On 19/04/2024 05:45, Lassila, Ora wrote:
>>
>> I was confused before, but now I see where this stuff went “off the
>> rails”. This does not mean that others would not be confused.
>>
>>
>>
>> Let’s leave owl:sameAs out of this for a moment. Let’s even leave LPGs
>> out for a moment, too. And I now realize that my confusion started way
>> earlier, from someone claiming that
>>
>>
>>
>> :Liz :married :Richard    [1]
>>
>>
>>
>> somehow  **represents a wedding**. Well, maybe it does, maybe it
>> doesn’t, but nobody has stated so, so where does that claim come from? What
>> if I said
>>
>>
>>
>> :Liz :avioitui :Richard    [2]
>>
>>
>>
>> does that also represent a wedding? No, you will say. And I say “why
>> not?”, because for sure if [1] represents that, [2] must too. “I don’t see
>> it” you say, and that actually is the point I want to make. If we just look
>> at just these statements, the claims are nonsensical, because nobody has
>> stated that “:married” has anything to do with weddings. So if I make a
>> statement about [1], I am doing it because I want to make a statement about
>> that statement, not about a wedding. If I wanted to represent a wedding, I
>> would want to do that in a much more explicit manner.
>>
>>
>>
>> Ascribing meaning to something that does not have it just because your
>> brain tells you there is meaning is an elementary mistake people make all
>> the time.
>>
>>
>>
>> What about one reifier for multiple statements? I think that reinforces
>> the “this is implicitly a wedding” -notion, and just adds to my troubles of
>> explaining RDF representation to people and warning them against conflating
>> explicit representation and what’s in their brain. Also, I cannot accept
>> Pierre-Antoine’s claim that Charlie wasn’t wrong about his assertion. He
>> was wrong because he assumed those thiattributes.ngs represented a wedding.
>>
>>
>>
>> I want to keep this simple. If someone makes a statement, that is what
>> they do. If they want that statement to be part of something bigger, let
>> them state that explicitly.
>>
>>
>>
>> Ora
>>
>>
>>
>> P.S. After I posted my earlier message about the “Neptune position”, many
>> people have contacted me asking how the “one reifier multiple triples”
>> -scenario is different from named graphs. I knew that would happen. :-(
>> Let’s not mess this up.
>>
>>
>>
>>
>>
>> *From: *Pierre-Antoine Champin <pierre-antoine@w3.org>
>> <pierre-antoine@w3.org>
>> *Date: *Thursday, April 18, 2024 at 5:05 PM
>> *To: *Gregory Williams <greg@evilfunhouse.com> <greg@evilfunhouse.com>,
>> Franconi Enrico <franconi@inf.unibz.it> <franconi@inf.unibz.it>
>> *Cc: *RDF-star WG <public-rdf-star-wg@w3.org> <public-rdf-star-wg@w3.org>
>> *Subject: *RE: [EXTERNAL] proposal: a reifier should reify only one
>> "thing"
>> *Resent-From: *<public-rdf-star-wg@w3.org> <public-rdf-star-wg@w3.org>
>> *Resent-Date: *Thu, 18 Apr 2024 21:05:01 +0000
>>
>>
>>
>> Gregory, Enrico, all,
>>
>> TL/DR; Enrico convinced me to retract my proposal, and accept that a
>> reifier can reify several thing.
>>
>> On 18/04/2024 17:41, Gregory Williams wrote:
>>
>> On Apr 18, 2024, at 6:37 AM, Franconi Enrico <franconi@inf.unibz.it>
>> <franconi@inf.unibz.it> wrote:
>>
>> While I am against this choice on the ground that it would rule out
>> several typical reification use cases, let’s assume I accept it.
>>
>>
>>
>> We have two ways to look at it:
>>
>>    1. the objects denote the same resource, but not their components
>>    s,p,o;
>>    2. the objects denote the same resource, and also their components
>>    s,p,o denote the same resource, respectively.
>>
>>
>>
>> (1) We can *still* *write* triples that Amazon-et-al apparently find
>> confusing (most of us do not):
>>
>>
>>
>> We all come from diverse backgrounds. I’m not sure if “us” was meant to
>> mean WG members, or the RDF community/users, or something else, but I’d
>> suggest we not make claims about what “most” people are or are not confused
>> by here.
>>
>>
>>
>> I’m not sure I’d describe myself as being confused by (most of) your
>> proposal, but I do think it addresses use-cases which I myself have never
>> encountered, it adds complexity for implementations, and (for myself) it
>> adds mental complexity as I find the modeling counter to how I would
>> naturally try to approach “statements about statements."
>>
>>
>>
>> :w1 rdf:reifies <<( :liz : married :richard )>> .
>>
>> :w1 :location :miami .
>>
>> :w1 rdf:reifies <<( :liz :married-in :miami )>> .
>>
>> :w1 :groom :richard .
>>
>> :w1 rdf:reifies <<( :richard : married :liz )>> .
>>
>>
>>
>> which by the way entails:
>>
>> <<( :liz : married :richard )>> owl:same-as <<( :liz :married-in
>> :las-vegas )>> .
>>
>>
>>
>> I do think this entailment might fall a bit closer towards “confused,”
>> though. I thought I could get myself to an understanding of your
>> reification use-case where the reified :w1 is in some way representing the
>> marriage event. But this new entailment is saying that the triple terms
>> themselves are the same, and I am really struggling to get an intuitive
>> understanding of that. The triples do not represent the same relationship
>> (one between two people, the other between a person and a location), and to
>> me only start to have some connection once the reification or some other
>> modeling of the wedding brings them together as being different aspects of
>> the same event.
>>
>> Gregory, I think what's confusing you is that you are misinterpreting
>> Enrico's intention with this owl:sameAs entailment.
>> IIUC, Enrico is not advocating for this entailment. On the contrary, he
>> is pointing out that my proposal would have this kind of undesirable
>> consequences.
>>
>> Enrico, to be clear:
>> in my suggestion, this "intended meaning" of rdf:reifies being
>> functional, would not be captured by RDF semantics –just like rdf:subject
>> is meant to be functional, but this is not captured either. So this
>> entailment would not happen under simple entailment nor RDFS entailment. So
>> this would have no negative consequence on the complexity of RDFS
>> reasonners or SPARQL BGP matching.
>>
>>
>>
>> However the inferences that you describe would still be valid from an
>> abstract point of view, or if someone using OWL decided to enforce this
>> "intended meaning" formally. And I agree, this would be a problem.
>>
>> Actually, I would like to rephrase your example; 1st to check that I got
>> it correctly, and 2nd, to emphasize why I think it is a valid
>> counter-example of rdf:reifies being functional.
>>
>> 1. Alice publishes the following graph as <a.ttl>
>>
>>     <#w1> rdf:reifies <<( :liz : married :richard )>> .
>>
>>     <#w1> :year 1964 .
>>
>>     <#w2> rdf:reifies <<( :liz : married :richard )>> .
>>     <#w2> :year 1975 .
>>
>> I don't expect this one to be controversial, as it complies with the
>> easy-to-explain many-to-one "mode" of rdf:reifies.
>>
>>
>>
>>
>>
>> 2. Bob publishes the following graph as <b.ttl>
>>
>>
>>
>>     <#w64> rdf:reifies <<( :liz :married-in 1964 )>> .
>>
>>     <#w64> :groom :richard .
>>
>>
>>
>> Same comment as above.
>>
>>
>>
>>
>>
>> 3. Charlie then notices that Alice and Bob are actually talking about the
>> same wedding, and states
>>
>>
>>
>>     <alice.ttl#w1> owl:sameAs <bob.ttl#w64>.
>>
>>
>>
>> Boom! From there, Charlie infers that
>>
>>
>>
>>     <<( :liz : married :richard )>> owl:sameAs <<( :liz :married-in 1964
>> )>>.
>>
>>
>>
>> Is this really a problem after all? Considering that it leads to the
>> following
>>
>>
>>
>>     <alice.ttl#w1> rdf:reifies <<(:liz :married-in 1964 )>> ;
>>         :year 1975.
>>
>>
>>
>> I believe it is!!
>>
>> So we have a problem. If we agree that Alice and Bob are entitled to
>> publish those graphs,
>> we must conclude that either
>>
>> a) Charlie was wrong in asserting the owl:sameAs between the two wedding,
>> or that
>> b) we must accept that a given reifier may reify different things.
>>
>>
>>
>> I strongly believe that Charlie's graph is legit, so I lean towards
>> option b), and I retract my proposal that "a reifier should reify only one
>> thing".
>>
>>
>>
>>   pa
>>
>>
>>
>>

Received on Friday, 19 April 2024 14:53:53 UTC