- From: Andy Seaborne <andy@apache.org>
- Date: Thu, 21 Dec 2023 10:15:29 +0000
- To: Olaf Hartig <olaf.hartig@liu.se>, "gregg@greggkellogg.net" <gregg@greggkellogg.net>
- Cc: "public-rdf-star-wg@w3.org" <public-rdf-star-wg@w3.org>
On 20/12/2023 09:26, Olaf Hartig wrote: Good summary. Comment about rdf:type inline. > On Tue, 2023-12-19 at 16:39 -0800, Gregg Kellogg wrote: >>> On Dec 18, 2023, at 12:47 PM, Andy Seaborne <andy@apache.org> >>> wrote: >>> >>> [...] >>> >>> So we have: >>> >>> Occurrence: >>> << :s :p :o >> >>> <<| N | :s :p :o >> >>> >>> Triple term: >>> <<( :s :p :o )>> >> >> To be clear, a Triple term would be a type, while an occurrence is a >> token? > > That's my reading as well. However, maybe someone with a more intimate > understanding of the subtleties* of the notions of a token and an > occurrence should look at this question. > > *https://plato.stanford.edu/entries/types-tokens/#Occ > >> Are these fundamental in the abstract syntax? Or is the token >> considered syntactic sugar for something like [] rdfx:occurrenceOf >> <<( :s :p :o >>? > > When I read Andy's email, I was assuming the latter, and that's also > what my immediate reaction would be, now that you ask this question > explicitly. > > The options that I can currently think of to make tokens/occurrences an > explicit concept in the abstract syntax, would mean that we have to add > another new type of term or introduce some additional mathematical > structure that the notion of an RDF graph would have to be accompanied > with. I don't think these are very attractive options. Yet, if it > appears that there is a use for treating tokens/occurrences in a > special way in SPARQL (e.g., dedicated operators or build-in > functions), then we may have to capture them explicitly in some way > (but I don't see a need for that at the moment). As I understand it, The "type" in "type/token" is general concept of "type" (classification of things). Whether it is an RDF class for rdf:type is another matter. Triple terms <<( :s :p :o )>> are added to the RDF Abstract Data Model. Occurrences are resources identified, like any other kind of resource, by blank node or URI. They are not a new kind of RDF term. <<| <http://example/n> | :s :p :o >> The occurrence resource is denoted by <http://example/n> with all the usual entailment around blank nodes. >> Can a term contain an occurrence, or visa-versa? E.g. <<( << :s :p :o >>>> :o1 :o2 )>> or << <<( :s :p :o )>> :o1 :o2 >>? > > The latter is probably not particularly controversial, in particular if > we understand expressions of the form > > << :s :p :o >> > > as syntactic sugar as suggested in Andy's email. Then, the shorthand > > << <<( :s :p :o )>> :o1 :o2 >> > > expands to > > [] rdfx:occurrenceOf <<( <<( :s :p :o )>> :o1 :o2 )>> . > > (plus, the blank node in the subject of this triple would then also be > in the subject / the object of the triple in which the shorthand is > used). Yes. Nothing special is happening. It follows because is a <<( :s :p :o )>> term in the abstract data model. > Regarding the former, i.e., > > <<( << :s :p :o >> :o1 :o2 )>> > > perhaps this can also be considered (and, thus, defined) as a shorthand > notation for > > <<( _:b :o1 :o2 )>> > > together with the addition of > > _:b rdfx:occurrenceOf <<( :s :p :o )>> . > > into the same graph in which the shorthand is used as subject or object > of a triple. (Note that _:b is meant to be a fresh blank node > identifier that is not yet used in the document in which these things > are written). I hadn't been imagined that the syntax <<:s :p :o >> would be allowed within triple terms. The structure can be written in a longer form such as <<| _:a | :s :p :o >> . << _:a :o1 :o2 >> :start 2023 . and the rdfx:occurrenceOf triple is the graph. c.f. wanting a shared blank node in the object position of Turtle 1.1 There are some places in Turtle syntax today where the syntax form [] can't be used to write the intended shape. >> Would N-Triples contain both variations, or just the triple term? > > I can see how supporting both variations in N-Triples maybe appreciated > for some use cases, but it may also be confusing because it would > diverge from the current principle that every line in an N-Triples file > is a serialization of a single triple only. > > (Note that my assumption here is, again, that an expression of the form > > << :s :p :o >> > > is really just syntactic sugar.) Agreed. >> And, to James’s point, can you say << :s :p :o >> a <<( :s1 :p1 :o1 >> )>>; if so, would this be the same as rdfx:occurrenceOf? > > Well, by resolving the syntactic sugar as suggested in Andy's email, > this would expand to > > _:b rdfx:occurrenceOf c . > _:b rdf:type <<( :s1 :p1 :o1 )>> . I'd only got as far as thinking that * the range of rdfx:occurrenceOf is rdf:Occurrence . * the domain of rdfx:occurrenceOf is rdf:Triple . (aside: rdf: or rdfs: ?) giving <<( :s1 :p1 :o1 )>> rdf:type rdf:Triple . _:b rdf:type rdf:Occurrence . Whether triple terms are rdfs:Class is a separate discussion step in my mind. c.f. RDF collections/lists. The syntax for these don't allow typing the elements. If the application data model wants a typed list, then rdf:first can't be used directly because its range is rdfs:Resource > where, again, _:b is a fresh blank node identifier. So, the predicate > "a" (or, rdf:type) in James' triple is not necessarily the same as rdfx > :occurrenceOf. > >>> Annotation: >>> :s :p :o {| :p :z |} >>> :s :p :o {| N | :p :z |} >>> (the last one is fiddly in the grammar because simply writing in >>> ABNF is ambiguous for some parsers) >> >> Presumably, an annotation is on an occurrence and not on a triple >> term/type? > > I assume that's what Andy is suggesting here. Yes. Andy > > Best, > Olaf > > >> >> Gregg >>> >>> Andy >>> >> >>
Received on Thursday, 21 December 2023 10:15:38 UTC