- From: Anthony Moretti <anthony.moretti@gmail.com>
- Date: Wed, 21 Sep 2022 10:53:49 +0700
- To: David Booth <david@dbooth.org>
- Cc: "semantic-web@w3.org" <semantic-web@w3.org>, Thomas Lörtsch <tl@rat.io>
- Message-ID: <CACusdfRuUORRPOBAsjChdhbAnC=c_7_CDmth2zHn1a5Tg34sAw@mail.gmail.com>
I think I can clean those examples up actually, and also make them more consistent with the general structure of JSON/JSON-LD. The only example that expands to a set of triples is example 4, which uses the spread operator (...). 1. Open set. { @id: :TeamUSA2020, @type: :OlympicTeam, @set: [ :SimoneBiles, :MeganRapinoe, :KevinDurant, ], } :medalCount 113 2. Closed list. { @id: :NycToSydneyFlight, @type: :Flight, @closedList: [ :NycToLAFlight, :LALayover, :LAToSydneyFlight, ], } :durationInHours 22 3. Value set (value collections are closed by definition, like all value types). :MichaelJordan :jerseyNumbers @set[23, 45] 4. Compact form of multiple triples. :BillClinton :nickName ...[ "Bubba", "The Comeback Kid", "Slick Willie", ] Anthony On Tue, Sep 20, 2022 at 10:59 AM Anthony Moretti <anthony.moretti@gmail.com> wrote: > I agree with David, first-rest ladders are kind of like writing assembly. > > Regarding Example 1 though, I think it's important to clearly > differentiate the case where the list expands to a set of triples and where > it doesn't, they're very different things. JSON-LD addresses this > somewhat by using plain arrays vs ones annotated by "@list", but it seems > to me their use of "@set" isn't consistent with their use of "@list" > because "@set" gets "optimized away" and becomes the same as a plain > array that expands to a set of triples. I'd also avoid using "probability" > in any examples, in my view it introduces a whole other category of > problems to do with statements being true/false/inbetween and then we get > into RDF-star. > > Thomas, I didn't comment on your earlier proposal because although it was > quite comprehensive it seems to suffer in terms of usability, I'd like to > try and build on some of the concepts though. > > In the following examples all fields are optional except for "@id", which > should be required if the collection includes IRIs. > > 1. An *open set* that *doesn't* expand to a set of triples (the statement > is only about the collection as a whole): > > @set[ > @id: :TeamUSA2020, > @type: :OlympicTeam, > :SimoneBiles, > :MeganRapinoe, > :KevinDurant, > ] :medalCount 113 > > > 2. A *closed list* that *doesn't* expand to a set of triples: > > @list[ > @id: :NycToSydneyFlight, > @type: :Flight, > @closed: true, > :NycToLAFlight, > :LALayover, > :LAToSydneyFlight, > ] :durationInHours 22 > > > 3. A value collection that *doesn't* expand to a set of triples (value > collections don't need IDs): > > :MichaelJordan :jerseyNumbers @set[23, 45] > > > 4. A collection that *does* expand to a set of triples (the "..." syntax > is inspired by the "spread" operator in Dart): > > :BillClinton :nickName ...[ > > "Bubba", > > "The Comeback Kid", > > "Slick Willie", > > ] > > > This type of collection doesn't need any annotations because statements > are unordered. The "spread" operator, ..., makes it more visually clear > that the collection expands to a set of triples. > > Just some ideas. > Anthony > > > On Tue, Sep 20, 2022 at 6:55 AM David Booth <david@dbooth.org> wrote: > >> On 9/19/22 11:53, Thomas Lörtsch wrote: >> > Let’s imagine - a shape X - an annotation syntax @ - >> > an annotation @X can be applied to most entities in RDF >> > >> > For example - X could mean List - the object could be a list >> > (a,b,c) - the annotation applied to the object would be >> > (@X a,b,c) >> > >> > The meaning would be that - this is not syntactic sugar >> > for an rdf:List struct - it is a list _object_ with certain >> > properties as described by the X shape, which in this case is >> > an rdf:List shape. >> >> I like this general idea a lot! I think it still needs quite a bit of >> refinement, both in syntax and semantics, but I think it's going in a >> good direction. >> >> In essence, it is giving the ability to define new kinds of objects. >> When such an object is defined, it becomes "blessed", such that it is >> treated as a new type of object: it is no longer treated as the sum of >> its constituent parts. "Unblessing" it allows you to access its >> constituent parts. >> >> Modern programming languages such as Java do these blessing and >> unblessing operations implicitly when you define and implement a new >> class, so the operations are invisible. Inside the class definition, >> the object is automatically unblessed, while outside the class >> definition it is automatically blessed. However, in a language like >> Perl, the "bless" operation is explicit, so it is directly visible in >> code. >> https://perldoc.perl.org/functions/bless >> >> I bring this up because I think it is useful to bear in mind the >> distinction between the blessed object and the unblessed constituent >> parts. As you stressed, they are not syntactically or semantically >> equivalent, even though they are interconvertible. >> >> Thanks, >> David Booth >> >> >> >>
Received on Wednesday, 21 September 2022 03:54:14 UTC