Re: Combining RDF-star and Singleton Properties [ was Re: The singleton property option]

Hello,

I have to agree with Enrico (but I might be missing something). Even
syntactically

:subject [ :namedNode | :property1 :value1; :property2 :value2 ] :object .

doesn't add much to

:subject :namedNode :object .
:namedNode :property1 :value1; :property2 :value2 .

which seems to be same if I understand the document correctly. Same holds
for S and O positions.
And you still have to make each :namedNode unique and refer to the
predicate to actually get singleton properties,

In this proposal, how would you annotate :subject :namedNode "42" without
having to change your graph?

Cheers,

Miel

Op vr 24 mei 2024 om 15:55 schreef Franconi Enrico <franconi@inf.unibz.it>:

> Hi Kurt,
> It seems to me that your proposal is a rephrase of various discussions we
> already had, and ruled out.
>
> *Named Node in the Predicate Position*: this seems to be just a rephrase
> of the singleton property - once you try to give semantics to it. Observe
> that, wrt the current status of the discussion, your proposal does not
> express directly the multi-edge case, since you have to name each edge of
> the same type with a distinct name.
>
> *Reifier Expression*: this is just a rephrase of "option 1" we discussed
> and ruled out some time ago. It has severe drawbacks in reconstructing the
> reifier back from the tree reification triples.
>
> cheers
> —e.
>
> On 23 May 2024, at 21:46, Kurt Cagle <kurt.cagle@gmail.com> wrote:
>
> Dominik,
>
> Thanks, I will incorporate the Cyper coding as well.
>
> *Kurt Cagle*
> Editor in Chief
> The Cagle Report
> kurt.cagle@gmail.com
> 443-837-8725 <http://voice.google.com/calls?a=nc,%2B14438378725>
>
>
> On Thu, May 23, 2024 at 12:33 PM ddooss@wp.pl <ddooss@wp.pl> wrote:
>
>> Dear Kurt
>>
>> Thank you for sharing your document on the proposed enhancements to RDF
>> reification and LPG harmonization. Your approach to addressing these issues
>> separately while utilizing a similar notation is intriguing and seems quite
>> promising.
>>
>> The named node expressions, in particular, provide a clear method for
>> transforming typically ephemeral blank nodes into actionable, referencable
>> elements.
>>
>> I would appreciate a formal presentation of these concepts in our next
>> meeting. A detailed exposition will help ensure that everyone understands
>> the intricacies of your proposal and will facilitate a thorough comparison
>> with other existing proposals. I definitely think that we need to have
>> formal definitions, as well as the semantics of your proposal.
>>
>> Regarding translating these ideas into a DDL/DML language like Cypher,
>> could you provide an example that mirrors the LPG scenario described?
>> Demonstrating how these RDF constructs could be represented in Cypher would
>> aid in evaluating their practical applicability in a graph database context.
>>
>> Best regards,
>> Dominik
>>
>> Dnia 23 maja 2024 19:24 Kurt Cagle <kurt.cagle@gmail.com> napisał(a):
>>
>> I've attached a document that covers YET ANOTHER proposal (more properly
>> a recommendation I've made before).
>>
>> There are two issues that we seem to be rehashing here. The first is the
>> question of reificational notation, while the second has to do with LPG
>> harmonization. My contention is that these are different issues, though we
>> can use similar notation for both.
>>
>> *Reification*
>>
>> A named reification is simply a set of statements:
>>
>> :r rdf:subject :s; rdf:predicate :p; rdf:object :o .
>>
>> This is not a triple. It is three statements about the state that a
>> triple can be in. It does not introduce a triple into the system,it makes
>> no assertions about the truthiness or even, by itself existence of that
>> triple. It is simply a statement about the components that a triple might
>> have. You cannot reason with it directly, though you can use other
>> processes (SPARQL, SHACL, etc.) to construct or verify the existence of
>> triples for which these assertions are true. Properly speaking, the above
>> itself should probably be qualified:
>>
>> :r rdf:subject :s; rdf:predicate :p; rdf:object :o ; a rdf:Reification .
>>
>> The notation << :r | :s :p :o >> makes the above statement more compact,
>> but the reification can apply to any triples within a system, or none at
>> all, regardless of the values.
>>
>> *Named Node Expressions*
>>
>> I propose, in the attached, that we use a similar nomenclature for what
>> I'm turning named node expressions, to whit:
>>
>> [ ?nn | :p1 :o1 ; :p2 :o2 ]
>>
>> where ?nn is replaced by a formal (not blank) IRI.
>>
>> This is a Turtle (not RDF) syntactical amendment. The above takes what
>> would ordinarily be a blank node and replaces it with a named node:
>>
>> For instance:
>>
>> :liz :hasMarriage [ :marriage 1 | :to :Ricard, :start "1965" ; :end
>> "1975" ].
>>
>> which expands to:
>>
>> :liz :hasMarriage  :marriage 1 .
>> :marriage 1 :to :Richard .
>> :marriage 1  :start "1965" .
>> :marriage 1   :end "1975" .
>>
>> Why is this important? Because the blank node is a pointer to a data
>> structure, but use of the [] notation makes it impossible to reference that
>> data structure from within Turtle. By adding in a named node as the
>> referencing node, you gain that ability, and it is a key ability for
>> modeling.
>>
>> For instance, I can use the expression:
>>
>> :liz :hasMarriage [ :marriage 1 | :start "1965" ; :end "1975"; :to
>> :richard ], [ :marriage 2 | :start "1975" ; :end "1985"; :to :john].
>>
>> This is semantically equivalent to the JSON
>>
>> {"liz":{"hasMarriage":[{"marriage1":{"start":"1965",
>> "end":"1975","to":"richard"}},"marriage1":{"start":"1965",
>> "end":"1975","to":"richard"}}]}}
>>
>> The same thing can be done with both predicate-positioned named node
>> expressions and subject-oriented ones.
>>
>> This addresses the LPG equivalency relationship, and does so without ever
>> touching reifications.
>>
>> Note that this also highlights an important point. Blank nodes are useful
>> because they are unique and system-assigned. However, they are not
>> referenceable. The Turtle notation:
>>
>> :liz :hasMarriage _:b1, _:b2 .
>> _:b1 :start "1965" ; :end "1975"; :to :richard .
>> _:b2 :start "1975" ; :end "1985"; :to :john .
>>
>> is simply a preprocessor directive to replace the "named" nodes with
>> anonymous IRIs in the final indexing.  You still have to make _:b1 and _:b2
>> unique, or the data structures disintegrate.
>>
>> Anyway, I ask the chair for time during our next meeting to discuss this
>> proposal.
>>
>> *Kurt Cagle*
>> Editor in Chief
>> The Cagle Report
>> kurt.cagle@gmail.com
>> 443-837-8725 <http://voice.google.com/calls?a=nc,%2B14438378725>
>>
>>
>> On Wed, May 15, 2024 at 5:32 AM Thomas Lörtsch <tl@rat.io> wrote:
>>
>> YET ANOTHER GRAND UNIFYING PROPOSAL
>> ===================================
>>
>> What appeared as the way forward last winter is getting more and more
>> convoluted as the details are discussed. I agree with Niklas that this is a
>> result of the choice for Option 3, but it also is sign of a deeper problem:
>> we might still don’t work with the right primitives and still don’t have a
>> solid understanding of the problem we’re dealing with. I’m well aware that
>> everybody is tired and wants to be done with all this, but it seems to me
>> that we should change course, again. I’ll discuss some background first,
>> but then make a pretty concrete proposal of how to attack the problem by
>> combining the syntax of RDF-star with the semantics of singleton
>> properties. IMHO it has some very concrete advantages: less triples, less
>> confusing indirections, and more intuitive semantics.
>>
>>
>> BACKGROUND
>> ==========
>>
>> I see two main use cases for statement annotation:
>>
>> - n-ary relations
>>  with a primary topic and secondary, qualifying attributes
>>  -> that can be interpreted as INSTANTIATION
>>
>> - metadata annotations
>>  that are orthogonal to the topic of the statement
>>  -> that can be interpreted as REIFICATION
>>
>> The metadata use case (quite often characterized as provenance) is strong
>> in RDF land with its focus on integration of data from heterogeneous
>> sources. In LPG land much more emphasis is put on structuring the graph
>> into easy to navigate main relations and their less important details (and
>> attributed objects, but that’s another topic). Of course that is just a
>> very rough characterization, and overlaps in both directions are common.
>>
>> The metadata use case is well captured by REIFICATION because reification
>> stays clear of the annotated statement itself (lets keep in mind that
>> reification is a general concept and don’t associate it with the syntactic
>> verbosity its implementation in RDF for a moment). There is an air gap
>> between the statement and its reification that ensures that the original
>> statement is unencumbered and unchanged by the annotation. This is good for
>> the metadata use case but it is not easy to understand as recent mail
>> exchanges on the list between Olaf, Niklas, Bryan and Peter have shown
>> (again) and the indirection can cause irritating and unfortunate effects.
>>
>> In an n-ary relation the main relation can be understood as an
>> INSTANTIATION of the type of relation it represents, with each instance
>> having its own secondary attributes as qualifications. Instantiation is a
>> concept that is well understood and maps nicely to everyday
>> conceptualizations like "a car" (engine, four wheels, etc) and "my car"
>> (again engine, four wheels, etc, but also a sedan, blue, old, etc).
>> Instantiation is what drives the semantics of the singleton property
>> approach.
>>
>> Of course, the distinction is more one of tendencies than of a hard
>> separation: reification can represent n-ary relations and instantiation via
>> n-ary relations can represent metadata, one person’s data is another
>> person’s metadata, etc. However, in both cases that comes at a certain cost
>> in intuitiveness and naturalness. If used wrongly, subtle breaks can be
>> introduced that may lead to surprising and undesirable results.
>>
>> The problem with the singleton property approach as proposed by Nguyen et
>> al is that it tries to achieve its goal without a change to the syntax of
>> RDF. It lacks the boldness of RDF-star to introduce a new term type into
>> RDF. This makes it verbose, hard to optimize and requiring to entail the
>> primary relation as if it was an additional detail, an afterthought even.
>> On the other hand RDF-star was intially a syntax without a well-defined
>> semantics, or model theory even, and this WG still struggles to make it all
>> work out. This here is an attempt to re-use  the singleton property
>> approach as the semantic underpinning of the RDF-star syntax, or, put the
>> other way, to augment the singleton property approach with the RDF-star
>> syntax, thereby getting rid of its verbosity. So let’s get to it.
>>
>>
>> CORE
>> ====
>>
>> 1) a return to RDR and pre-CG RDF*: EACH TRIPLE TERM IS ASSERTED, e.g.
>>
>>    << :s :p :o >> :b :c .
>>
>> asserts ' :s :p :o ' and annotates it in one go. This gets rid of the
>> need for an annotation/shorthand syntax and it safes an extra triple to
>> actually assert the assertion. It captures the predominant intuition:
>> saying something and adding detail to it. At this point it doesn’t matter
>> much if that detail is metadata or qualifying detail. What matters is that
>> both are solidly connected, not separated (and prone to mixups and
>> misunderstandings through overlapping multi-edge situations).
>> A query for { :s :p :o } in SPARQL-star on the above example must
>> retrieve the statement ':s :p :o' from the triple term << :s :p :o >>, etc
>> - "Turtle with holes".
>> This means that in common scenarios there is zero overhead because of
>> singleton property verbosity and entailments, unasserted assertions, etc.
>> The main use case is very straightforward to use (and implement, I reckon).
>>
>>
>> 2) the RDR/RDF* proposal is extended with TRIPLE TERM IDENTIFIERS not
>> unlike the current WG proposal, but with a twist: user-provided identifiers
>> are handled differently (more on that below). Just as in the current WG
>> proposal a bnode identifier is provided by the system for every triple
>> term, e.g. the above '<< :s :p :o >> :b :c .' is equivalent to
>>
>>    << _:p1 | :s :p :o >> :b :c .
>>
>> The triple term is now a QUAD-TUPLE: the identifier becomes part of the
>> triple term also in model and abstract syntax, getting rid of the abstract
>> triple term type (the thing syntactically expressed as '<<( :s :p :o )>>'
>> in the current proposal - however, we will reuse that syntax, see below).
>> This identifier is equivalent to the singleton property itself in the
>> approach so named.
>> The statement identifier, refering to an instance/occurrence of the
>> abstract statement, is essential to capture the semantics of most use
>> cases, not the least LPG uses, where statements (or edges in LPG) of the
>> same type can occur multiple times, each with different and not to be mixed
>> up sets of annotations.
>>
>> The current WG proposal offers to users the possibility to explicitly
>> define an IRI en lieu of but semantically equivalent to the system provided
>> bnode, e.g.
>>
>>    << :x | :s :p :o >> :b :c .
>>
>> Its purpose is to work around the limitations of line-based
>> serializations. We do this too, but in a different way (that’s the TWIST
>> hinted at above): an explicitly provided identifier is stored separately
>> from and additionally to the system provided bnode. The quad therefore
>> conceptually becomes a QUIN-TUPLE - however, stores may choose to just
>> store the explicit identifier via an extra statement, like in the mapping
>> discussed next. The rationale behind this arrangement will become apparent
>> below when we discuss many-to-many relations, sets and graphs.
>>
>>
>> 3) a MAPPING to standard RDF is based on the singleton property approach,
>> e.g.
>>
>>    :s :p :o .
>>    :s _:p1 :o .
>>    _:p1 rdf12:singletonOf :p ;  # _:p1 is a singleton property of _:p
>>         rdf12:id :x ;           # :x is a user-provided identifier
>> refering to _:p1
>>         :b :c .
>>
>> This should work well through the whole installed base and stack of
>> RDF/RDFS/OWL/etc, at least in principle (issues e.g. with missing predicate
>> indexes notwithstanding). [0] have found that singleton properties have
>> quite favorable properties w.r.t. reasoning (and even more so if, in
>> contrast to those authors, one interprets singleton annotations not as
>> constraints but as additional detail).
>>
>>
>> I claim that so far all this is pretty straightforward and covers the
>> vast majority of real world usage. It is cleaner and more concise than the
>> current proposal in that it doesn’t separate assertion from annotation, it
>> saves that extra un-asserted triple in storage and it makes the shorthand
>> annotation syntax superfluous.
>>
>>
>> Some details are important to understand:
>>
>> - rdf12:singletonOf rdfs:subPropertyOf rdf:type .
>> This reflects the intuition that each singleton is unique, an intuition
>> that is better expressed as instantiation than as subclassing.
>>
>> - the verbosity and optimization troubles of singelton properties, as
>> evidenced in the mapping, only occur in environments that don’t support
>> RDF-star triple terms (otherwise what would we need RDF-star for ;-).
>>
>> - the mapping loses the strong connection between a statement and its
>> annotation. Just as with the current WG proposal it is possible to have the
>> same statement asserted and, e.g. after merging a different source,
>> annotated but assumedly un-asserted. The latter information will get lost,
>> making the whole concept of un-asserted assertions brittle and unreliable.
>> The current WG proposal always has this problem, this proposal here only
>> when mapping to standard RDF.
>>
>> - the main difference between our proposal and the singleton property
>> approach is that we reverse access: we put the un-annotated statement in
>> the foreground (by means of the triple term syntax), both in the user
>> facing syntax and at the implementation level, whereas in the singleton
>> property approach it has to be entailed from the annotated singleton
>> statement. This makes our proposal much more straightforward to use and
>> implement.
>>
>>
>>
>> EXTENSIONS
>> ==========
>>
>> The current WG proposal tries to cover more ground than just statement
>> annotation, most notably annotating un-asserted assertions, but also other
>> stuff that depending on perspecticve seems like low-hanging fruit,
>> especially annotating sets of statements and referentially opaque statement
>> annotations. We argue that those are orthogonal demands and should be
>> implemented in a way that doesn’t complicate the above very simple basic
>> arrangement. It seems however that it is possible to achieve this with
>> modest effort.
>>
>>
>> UNASSERTED ASSERTIONS
>>
>> We re-use the syntax of abstract triple terms from the current WG
>> proposal to encode unasserted assertions, as the concept of abstract triple
>> terms is obsolete in our approach. Like triple terms they are four-tuples,
>> i.e. they always have an identifier implicitly provided by the system as a
>> bnode. As the use case is rather niche we consider the introduction of an
>> unasserted assertion in model and abstarct syntax overkill, but instead
>> advocate to implement the syntax as syntactic sugar for standard
>> reification, e.g.
>>
>>    <<( :s :p :o )>> :b :c .
>>
>> in standard RDF maps to standard reification:
>>
>>    _:p2 rdf:type :rdf:Statement ;
>>         rdf:subject :s ;
>>         rdf:predicate :p ;
>>         rdf:object :o ;
>>         :b :c .
>>
>> The same for explicitly named un-asserted assertions like e.g. '<<( :x |
>> :s :p :o )>>  :b :c .'
>>
>>    _:p2 rdf:type :rdf:Statement ;
>>         rdf:subject :s ;
>>         rdf:predicate :p ;
>>         rdf:object :o ;
>>         rdf12:id :x ;
>>         :b :c .
>>
>>
>> REFERENTIAL OPACITY
>>
>> Referential opacity has come up again lately and although I’m pretty wary
>> of the concept I can see a way in which its introduction will probably not
>> harm RDF in general. Most of all I like to see it as an orthogonal concern
>> that should not be entagled with annotations or un-asserted assertions as
>> such. Therefore I take up the idea of introducing yet another syntax (by
>> Enrico IIRC, in a recent telco), e.g.
>>
>>    <<" :s :p :o ">> :b :c .
>>
>> Again this may be implemented as a new term type in model and abstract
>> syntax, or we may follow Antoine Zimmermanns proposal for an RDF literal
>> datatype. The latter can be employed to define referential opacity as
>> syntactic sugar and map to standard RDF maps as follows:
>>
>>    :s :p :o .
>>    :s _:p3 :o .
>>    _:p3 rdf12:singletonOf :p ;
>>         :b :c ;
>>         rdf12:ofArtefact ":s :p :o"^^rdf:ttl .
>>
>> The RDF literal datatype documents precisely the syntactic representation
>> of the statement. This is a very un-intrusive approach to referential
>> opacity and IMHO won’t get in the way of standard RDF procedures. Of course
>> it doesn’t prevent undesirable entailments from being made, as the approach
>> to referential opacity taken by the CG proposal does, but at least it
>> allows to track them back to the original source and treat them
>> accordingly. Bnodes might either not be handled or be covered more fully
>> than in teh CG report proposal by allowing artefacts to be concise bounded
>> descriptions. E.g. an artefact ":s :p _:b1 . _:b1 :d :e , :f ."^^rdf:ttl
>> would give a full account of the meaning of _:b1 at the time the artefact
>> was created.
>>
>>
>> REFERENTIALLY OPAQUE UNASSERTED ASSERTIONS
>>
>> Again, referential opacity and unasserted assertions are orthogonal
>> concerns, and therefore yet another syntax is introduced to combine the
>> two, e.g.
>>
>>    <<(" :s :p :o ")>>  :b :c .
>>
>> Following the above proposals this is mapped to standard RDF by adding
>> the literal representation to the reification quad, e.g.
>>
>>    _:p4 rdf:type :rdf:Statement ;
>>         rdf:subject :s ;
>>         rdf:predicate :p ;
>>         rdf:object :o ;
>>         rdf12:hasArtefact ":s :p :o"^^rdf:ttl ;
>>         :b :c .
>>
>> Considering the mindboggling level of disambiguation that this
>> arrangement provides the complexity isn’t too bad IMHO ;-)
>>
>>
>> MANY-TO-MANY, SETS, GRAPHS
>>
>> Like the current WG proposal this approach doesn’t rule out many-to-many
>> relations, e.g.
>>
>>    << :x | :s :p :o >> :b :c .
>>    << :x | :u :v :w >> :b :c .
>>
>> We might even consider to introduce a supporting syntax, aka GRAPH TERMS,
>> e.g.
>>
>>
>>    << :s :p :o .
>>       :u :v :w >> :b :c .
>>
>> or, explicitly named
>>
>>    << :x | :s :p :o .
>>            :u :v :w >> :b :c .
>>
>> I don’t want to push the envelope too far (given the constraints imposed
>> by the charter, the controverses around the topic, etc) but it’s good to
>> see that this is syntactically straightforward - it isn’t with the
>> shorthand annotation syntax of the WG proposal.
>>
>> Anyway, employing the mapping to standard RDF from CORE above, we get a
>> straightforward definition of the meaning of many-to-many annotations (no
>> matter if they come as singleton terms or as hypothetical graph terms),
>> e.g. mapping the above many-to-many relation to
>>
>>    :s :p :o .
>>    :u :v :w .
>>    :s _:p5 :o .
>>    _:p5 rdf12:singletonOf :p ;
>>         rdf12:id :x ;
>>         :b :c .
>>    :u _:v1 :w .
>>    _:v1 rdf12:singletonOf :v ;
>>         rdf12:id :x ;
>>         :b :c .
>>
>> This establishes a FOR-EACH semantics: annotations of the graph term are
>> annotating each triple, not the graph (or set of triples if one prefers
>> that slightly looser wording) itself. The same is true for annpotations on
>> :x: they too are mapped to all statements so named, e.g.
>>
>>    << :x | :s :p :o .
>>            :u :v :w >> :b :c .
>>    :x :d :e .
>>
>> is mapped to
>>
>>    :s :p :o .
>>    :u :v :w .
>>    :s _:p5 :o .
>>    _:p5 rdf12:singletonOf :p ;
>>         rdf12:id :x ;
>>         :b :c ;
>>         :d :e .
>>    :u _:v1 :w .
>>    _:v1 rdf12:singletonOf :v ;
>>         rdf12:id :x ;
>>         :b :c ;
>>         :d :e .
>>
>>
>> To annotate the set of triples itself one would have to create an
>> explicit reference via the identifier :x, e.g.
>>
>>     :x rdf12:asObject [     # or "rdf12:asGraph", "rdf12:asSet" ...
>>         :f :g
>>     ] .
>>
>> A possible use case might be to express that a set of statements together
>> describe a situation, postulate a theory, etc.
>> This arrangement can also be used to annotate singleton statements as
>> objects of there own right (not as annotations to the predicate).
>> Semantically this is probably closer to reification than to n-ary
>> relations, but I’m not really sure myself what to make of it. In any case
>> it is more expressive than the current WG proposal which provides no means
>> to differentiate between the object and its content (httpRange-14 raising
>> its ugly head again, I guess)
>>
>>
>> However, this arrangement has repercussions on the interpretation of
>> annotations on :x (or _:x) in x-to-one cases, i.e. when single statements
>> are annotated, because it can only mean that also those annotations refer
>> to the statement as a whole, not its n-ary property. This is a departure
>> from the current state which leaves this question open - and sure to cause
>> some irritation.
>>
>>
>> TBC… I’m leaving it at this for reasons of time, but also to solicit some
>> general comments. The details most certainly need some more tweaking, as so
>> far all proposals did. The means to explicitly name an occurrence were
>> introduced to overcome the limitations of serialization, but they do open
>> the door to many-to-many relations, and that comes in handy when discussing
>> sets and graphs. However it mixes orthogonal concerns, so may have
>> unintended consequences. I expect this arrangement to be controversial, and
>> maybe buggy. Comments welcome!
>>
>> Best,
>> Thomas
>>
>> [0] https://link.springer.com/chapter/10.1007/978-3-319-58068-5_39
>>
>>
>> > On 2. May 2024, at 16:00, Peter F. Patel-Schneider <
>> pfpschneider@gmail.com> wrote:
>> >
>> > The singleton property approach has benefits and downsides.  The quoted
>> triple approach has benefits and downsides.
>> >
>> > One very big advantage of the singleton property approach is that it is
>> (barely) possible to use it with any RDF system, even RDF systems that have
>> no optimizations.  A big disadvantage of the quoted triple approach is that
>> it requires new syntax, new semantics, and new implementations.
>> >
>> > One cannot successfully argue that just because the singleton property
>> approach may require more triples that it is inherently worse than the
>> quoted triple approach.   RDF implementations can be tuned to the singleton
>> property approach, providing special data structures for singleton
>> properties and special code to optimize SPARQL queries for the singleton
>> property approach.
>> >
>> > One possible way to do this is to use a special approach for singleton
>> properties where the internal name of the blank node encodes the parent
>> property.  This could result in minimal or even no storage overhead for
>> singleton properties.  Of course the implementation effort to make this
>> completely transparent would be significant, but then so is the effort to
>> make a performative implementation of quoted triples.
>> >
>> > I note that in this approach the singleton property triples would look
>> very much like multiple edges, i.e., this could be considered to be a
>> space-efficient implementation of RDFn.
>> >
>> > peter
>> >
>> >
>> > On 4/30/24 15:46, Thompson, Bryan wrote:
>> >> Your proposal would require two statements on top of the original SPO
>> statement before you should begin to make assertions about the original SPO
>> statement?
>> >> Anything based on the singleton property approach will have quite an
>> impact on database statistics.  The number of used predicates would jump
>> from millions (for open linked data) to the cardinality of the statements
>> about which statements are being made (e.g., billions, 10s of billions,
>> etc.). @Williams, Gregory <mailto:ngregwil@amazon.com> or @Schmidt,
>> Michael <mailto:schmdtm@amazon.com> can comment on this, but this
>> certainly places a new burden on common techniques for extracting
>> statistics from a graph.
>> >> Note that there is really no reason to rely on the P position in your
>> proposal.  You could use S since it already allows blank nodes.  You then
>> hang the Subject of the original asserted SPO on the statement about that
>> unique subject. (Or you could use O, which might be kinder for database
>> statistics since they tend to focus on SP* analysis.)
>> >> _:si :statementInstanceHasSubject :s .
>> >> _:si :p :o .
>> >> :s :p :o.
>> >> I have been impressed in the past with the space and time overhead
>> which arises out of various modeling decisions around possible statements
>> about statements treatments.  I would recommend carefully considering that
>> impact.  Another 2 triples makes a huge difference when all statements
>> carry annotations, as they do in some domains.  For example, consider the
>> relatively common case in which you have a graph consisting of a topology
>> and edge weights.  This is very common - lots of graphs are simply edges
>> and their weights.  As I understand it, your proposal would have 3 times
>> the data volume to model the topology (some set of edges) in a manner which
>> would permit associating edge weights with the edges in that topology.  And
>> the database would need to chase a long chain to obtain those edge weights
>> in a correct manner: :s :p :o. => :s _:pi :o => _:pi rdfs:subPropertyOf :p
>> . => _:pi :hasWeight 1.0.  The cost of chasing that chain would make
>> applications relying on edge weights very expensive in both time and
>> space.  I can't see that as being responsive to such use cases.  To be
>> efficient, there needs to be a close association between an edge and the
>> properties of that edge.  Their resolution needs to be very efficient.
>> >> Also note that this singleton property proposal would not support
>> alignment in the data (interoperability in the data) with LPG edge
>> properties.  So it would fail to offer a unification path for the common
>> use cases of RDF and LPG.
>> >> Thanks,
>> >> Bryan
>> >>
>> ------------------------------------------------------------------------------
>> >> *From:* Peter F. Patel-Schneider <pfpschneider@gmail.com>
>> >> *Sent:* Tuesday, April 30, 2024 10:40:18 AM
>> >> *To:* public-rdf-star-wg@w3.org
>> >> *Subject:* RE: [EXTERNAL] The singleton property option
>> >> CAUTION: This email originated from outside of the organization. Do
>> not click links or open attachments unless you can confirm the sender and
>> know the content is safe.
>> >> I think that this is far too strong.   The singleton property approach
>> has
>> >> problems, but not to this extent.
>> >> For any statement that does not require annotation, the singleton
>> property
>> >> approach does not require any changes at all, i.e.,  just use
>> >> :s :p :o .
>> >> For a statement that does require annotation, the singleton property
>> requires
>> >> two or three triples, one to make the blank node a subproperty of the
>> desired
>> >> property, one to state the relationship using the blank node, and, if
>> the RDF
>> >> system does not implement RDFS semantics, one to make the statement
>> using the
>> >> regular property, i.e.,
>> >> _:pi rdfs:subPropertyOf :p .
>> >> :s _:pi :o .
>> >> :s :p :o.
>> >> The added storage for this might be less than that needed for efficient
>> >> processing of quoted triples, particularly if the third statement is
>> not needed.
>> >> There is no need to change modelling if the statement is annotated
>> after the fact.
>> >> peter
>> >> On 4/30/24 12:26, Thompson, Bryan wrote:
>> >>> The singleton property approach undermines the direct use of
>> predicates in
>> >>> statements and forces a second hop for any use case to determine the
>> actual
>> >>> predicate used.  It also requires that the "statement" is modeled
>> differently
>> >>> in advance, thus increasing the space requirements even if no
>> statements about
>> >>> statements are used.
>> >>>
>> >>>
>> >>> This is not efficient.
>> >>>
>> >>>
>> >>> Effectively, the singleton property model says that the RDF triple is
>> wrong.
>> >>> It says that you should model using (S ID O) and then model the
>> predicate and
>> >>> other information as statements about that ID.  This is not the RDF
>> model.
>> >>>
>> >>>
>> >>> The approach with Statements about Statements should IMHO be built on
>> (S P O
>> >>> ID).  That is, there is a unique identifier for the SPO and you make
>> >>> statements about that statement ID.
>> >>>
>> >>>
>> >>> Bryan
>> >>>
>> >>>
>> ------------------------------------------------------------------------------
>> >>> *From:* Thomas Lörtsch <tl@rat.io>
>> >>> *Sent:* Tuesday, April 30, 2024 12:02:21 AM
>> >>> *To:* public-rdf-star-wg@w3.org; Thompson, Bryan; Niklas Lindström;
>> RDF-star
>> >>> Working Group
>> >>> *Subject:* RE: [EXTERNAL] The singleton property option
>> >>>
>> >>> *CAUTION*: This email originated from outside of the organization. Do
>> not
>> >>> click links or open attachments unless you can confirm the sender and
>> know the
>> >>> content is safe.
>> >>>
>> >>>
>> >>> Brian,
>> >>>
>> >>> Niklas combines the RDF-star syntax with the semantics of Singleton
>> >>> Properties. AFAIK no implementations of or papers on Singleton
>> Properties have
>> >>> done that. This combination doesn't even require an index on
>> properties.
>> >>>
>> >>> This combination is nearer to the original RDR approach than anything
>> else
>> >>> discussed by CG and WG. It is IMO a very neat idea and deserves a
>> closer look.
>> >>>
>> >>> Thomas
>> >>>
>> >>>
>> >>>
>> >>> Am 29. April 2024 19:06:37 MESZ schrieb "Thompson, Bryan" <
>> bryant@amazon.com>:
>> >>>
>> >>>      The singleton property approach has many downsides and is
>> pragmatically
>> >>>      unworkable.  There is a good reason people are not happy with
>> this approach.
>> >>>
>> >>>
>> >>>      Bryan
>> >>>
>> >>>
>> ------------------------------------------------------------------------------
>> >>>      *From:* Niklas Lindström <lindstream@gmail.com>
>> >>>      *Sent:* Friday, April 26, 2024 2:08:41 PM
>> >>>      *To:* RDF-star Working Group
>> >>>      *Subject:* [EXTERNAL] The singleton property option
>> >>>      CAUTION: This email originated from outside of the organization.
>> Do not
>> >>>      click links or open attachments unless you can confirm the
>> sender and know
>> >>>      the content is safe.
>> >>>
>> >>>
>> >>>
>> >>>      For completeness (and perhaps to widen the perspective), here is
>> the
>> >>>      singleton property option I briefly mentioned on the semantics
>> call
>> >>>      (and alluded to in [1]). Also see [2] for the original; this is
>> just a
>> >>>      quick strawman adaptation for the benefit of the LPG perspective.
>> >>>
>> >>>      It extends RDF 1.1 differently; no triple terms, no opacity,
>> just:
>> >>>
>> >>>      1. Allow bnodes as predicates (blank predicates).
>> >>>      2. Define rdf:singletonPropertyOf for linking those to the
>> property
>> >>>      they represent instances/occurrences/edges of.
>> >>>
>> >>>      3. Well-formedness conditions:
>> >>>      3.1 Bnode predicates are only to be used once; with one s and o
>> >>>      (similar to list cons nodes, who are "single purposed").
>> >>>      3.2 The rdf:singletonPropertyOf is semantically functional
>> (exactly
>> >>>      like rdf:first and rdf:rest).
>> >>>
>> >>>      4. For optimization, implementations can put triples with blank
>> >>>      predicates in a dedicated table (using edgename as unique key),
>> >>>      relying on well-formedness for cohesion. Such a table is
>> completed in
>> >>>      two steps: 1) the singleton assertion inserts s and o for
>> edgename; 2)
>> >>>      the rdf:singletonPropertyOf assertion inserts p for edgename. If
>> >>>      well-formedness is broken, all optimization bets are off.
>> Perhaps a
>> >>>      dedicated skolemization scheme can be employed for some more
>> control
>> >>>      and/or "unstarring".
>> >>>
>> >>>      5. RDF-star syntax obviously needs no naming syntax; naming these
>> >>>      would break well-formedness.
>> >>>      6. What these *mean* of course needs a good definition (property
>> >>>      specializations, edge type instances or similar). Are they
>> asserted?
>> >>>      Sure. Do they assert something using their
>> rdf:singletonPropertyOf
>> >>>      property as predicate? No. (Could they? Well, they can be
>> declared
>> >>>      ("inline") to *also* be subPropertyOf the same property, and
>> through
>> >>>      entailment that would happen.)
>> >>>      7. Reifiers become a usage pattern (informative) as suggested
>> from the
>> >>>      property edge perspective. Any desired :reifiedBy or :partOf
>> relation
>> >>>      can link predicate singletons to one or more "reifiers".
>> >>>
>> >>>      Basic example:
>> >>>
>> >>>           << :s :p :o >> :source <stream662be7ba> ;
>> >>>               :timestampMills 1714153402 .
>> >>>
>> >>>      Expands to:
>> >>>
>> >>>           :s _:e1 :o .
>> >>>           _:e1 rdf:singletonPropertyOf :p ;
>> >>>               :source <stream662be7ba> ;
>> >>>               :timestampMills 1714153402 .
>> >>>
>> >>>      Annotation syntax:
>> >>>
>> >>>           :s :p :o {| :reifiedBy <#reifier> |} .
>> >>>
>> >>>      Expands to:
>> >>>
>> >>>           :s :p :o .
>> >>>           :s _:e1 :o .
>> >>>           _:e1 rdf:singletonPropertyOf :p ;
>> >>>             :reifiedBy <#reifier> .
>> >>>
>> >>>      Possible singleton property entailment?:
>> >>>
>> >>>           _:e1 a rdf:SingletonProperty;
>> >>>               rdf:subject :s ;
>> >>>               rdf:prediate :p ;
>> >>>               rdf:object :o .
>> >>>
>> >>>      Will entailment break well-formedness if (accidentally?) *put
>> back*
>> >>>      into a regular graph? Of course, just as RDF lists are "broken"
>> >>>      whenever that happens (as in look terrible when serialized, make
>> no
>> >>>      sense when queried, etc.).
>> >>>
>> >>>      Best regards,
>> >>>      Niklas
>> >>>
>> >>>      [1]:
>> >>>      <
>> https://lists.w3.org/Archives/Public/public-rdf-star-wg/2024Apr/0158.html
>> >>>      <
>> https://lists.w3.org/Archives/Public/public-rdf-star-wg/2024Apr/0158.html
>> >> <
>> https://lists.w3.org/Archives/Public/public-rdf-star-wg/2024Apr/0158.html
>> >>>
>> >>>      [2]: <https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4350149/
>> >>>      <https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4350149/
>> >> <https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4350149/>>>
>> >>>
>> >
>>
>>
>>
>

Received on Monday, 27 May 2024 06:49:49 UTC