- From: Jarno van Driel <jarno@quantumspork.nl>
- Date: Wed, 26 Mar 2014 21:59:46 +0100
- To: Jason Douglas <jasondouglas@google.com>
- Cc: Guha <guha@google.com>, Gregg Kellogg <gregg@greggkellogg.net>, Dan Brickley <danbri@google.com>, W3C Web Schemas Task Force <public-vocabs@w3.org>
- Message-ID: <CAFQgrbayTAWBErBR_YMDmuyEUQRJfHNwpU9Hae+TkEx5xFBCnQ@mail.gmail.com>
Well if @id has the same role as 'itemref' then could there also please be some info explaining how that works, because to be honest, I sort of understand the proposal but am confused about @id/itemid. e.g. to me it seems @id functions the same way as @resource does in RDFa, or at least that's how I read it. Wouldn't the Person linking back to the AmericanFootballRole create an infinite loop? On Wed, Mar 26, 2014 at 9:47 PM, Jason Douglas <jasondouglas@google.com>wrote: > It does play the same role. I wouldn't be surprised if there are subtle > differences in the respective specs, though. > > > On Wed Mar 26 2014 at 1:45:02 PM, Jarno van Driel <jarno@quantumspork.nl> > wrote: > >> Quick question: is '@id' the same in JSON-LD as 'itemid' is in Microdata? >> Because I find it difficult to comprehend the functionality of '@id'. >> >> >> On Wed, Mar 26, 2014 at 9:00 PM, Guha <guha@google.com> wrote: >> >>> See comments inline >>> >>> >>> On Wed, Mar 26, 2014 at 12:15 PM, Gregg Kellogg <gregg@greggkellogg.net>wrote: >>> >>>> On Mar 26, 2014, at 9:37 AM, Dan Brickley <danbri@google.com> wrote: >>>> >>>> > At schema.org we have been working on a design for describing roles >>>> > and contributions. >>>> > >>>> > I've just posted a discussion draft in the WebSchemas wiki. Please >>>> take a look: >>>> > >>>> > Roles in Schema.org >>>> > https://www.w3.org/wiki/WebSchemas/RolesPattern -> >>>> > https://www.w3.org/wiki/images/b/b5/RolesinSchema.org.pdf >>>> >>>> Some comments on the draft: >>>> >>>> I think this is a really useful abstraction, but I do see some room for >>>> improvement. >>>> >>>> I think adding date ranges to the role is conflating the role with an >>>> event. Better to say that the Joe Montana is the quarterback during the >>>> 1992 season of the 49ers by defining an event for the 1992 season. Jason >>>> and Jean-Pierre made similar points, and I think that models better. >>>> >>>> One could look at anything with a temporal extent (including a >>> proposition) as an event. It is not clear that buys us much. In fact, >>> experience with Cyc shows that this can be confusing. If you want, you can >>> look at Role as a subclass of Event. >>> >>> >>>> A Role seems to use different properties to describe the kind of role >>>> ("position", "characterName", "graduationYear"). It might be possible to >>>> simply subclass Role so that it's known the kind of role that's being >>>> played, but a single property which defines this (ideally an entity, but >>>> allowing a string) would be less ambiguous and would avoid falling into the >>>> trap of not having considered all of the kinds of roles played. Similarly, >>>> settling on a single property to reference the "agent" performing the role >>>> might be better than using arbitrary properties from different classes >>>> depending on where the role is referenced from. (In fact, you reference the >>>> same role from different entities, so context can't really be used either). >>>> >>>> We don't want to be at either extreme. We don't want overly general >>> slots like 'agent, 'performer' and 'object' as the only slots. Similarly, >>> we don't want slots like quarterback, runningback, etc. >>> >>> >>>> The schema for hasRole has domainIncludes and rangeIncludes reversed. >>>> >>>> In the appendix, you site the use of @context as a (temporary) means of >>>> describing the range of hasRole to be an entity, not a literal. You could >>>> eliminate the context by using an expanded form: >>>> >>>> { >>>> "@context": "http://schema.org/", >>>> "@type": "Movie", >>>> "name": "Ghostbusters", "hasRole": { >>>> "@type": "MovieRole", >>>> "@id": "movierole_678", >>>> "characterName": "Dr. Peter Venkman", >>>> "actor": { >>>> "@type": "Person", >>>> "name": "Bill Murray", >>>> "hasRole": {"@id": "movierole_678"} >>>> } >>>> } >>>> } >>>> >>>> But, I prefer to use a different property, as "hasRole" does not seem >>>> to me to be symetric. Better than defining inverses of every property is to >>>> define an inverse alias in the (forthcoming) context. For example: >>>> >>>> >>> Agree. >>> >>> >>>> { >>>> "@context": ["http://schema.org/", { >>>> "inRole": {"@reverse": "hasRole"} >>>> }, >>>> "@type": "Movie", >>>> "name": "Ghostbusters", "hasRole": { >>>> "@type": "MovieRole", >>>> "@id": "movierole_678", >>>> "characterName": "Dr. Peter Venkman", >>>> "actor": { >>>> "@type": "Person", >>>> "name": "Bill Murray", >>>> "inRole": "movierole_678" >>>> } >>>> } >>>> } >>>> >>>> This uses the same property "hasRole", but defines a reverse term which >>>> will expand, flatten or transform to RDF using the inRole property. >>>> >>>> Great to see progress on this issue! >>>> >>>> Gregg >>>> >>>> >> From the wiki, "For example, when we say that a Person was an actor >>>> in >>>> > a Movie, we might want to mention their characterName too. When we say >>>> > that a SportsTeam has a Person as an athlete, we might want to mention >>>> > the position that they play, or the time period in which they >>>> > fulfilled that role.". >>>> > >>>> > I freely acknowledge that PDF isn't the best way to share markup/code >>>> > snippets and will copy those into Wiki. However we wanted to get the >>>> > draft out asap. >>>> > >>>> > Here's a quick example extracted from the doc, expressed in JSON-LD. >>>> > We want to elaborate on a basic description, so here is the mostasic >>>> > version first, followed by the Role-based richer version: >>>> > >>>> > { >>>> > "@context": "http://schema.org/", >>>> > "@type": "AmericanFootballTeam", >>>> > "name": "San Francisco 49ers", >>>> > "athlete": { >>>> > "@type": "Person", >>>> > "name": "Joe Montana" >>>> > } >>>> > } >>>> > >>>> > Extended version using Role: >>>> > >>>> > { >>>> > "@context": "http://schema.org/", >>>> > "@type": "AmericanFootballTeam", >>>> > "name": "San Francisco 49ers", >>>> > "hasRole": { >>>> > "@type": "AmericanFootballRole", >>>> > "@id": "role321", >>>> > "startDate": "1979", >>>> > "endDate": "1992", >>>> > "position": "Quarterback", >>>> > "athlete": { >>>> > "@type": "Person", >>>> > "name": "Joe Montana", >>>> > "hasRole": "role321" >>>> > } >>>> > } >>>> > } >>>> > >>>> > Effectively we interpose a new node in the graph. Instead of >>>> > >>>> > SanFrancisco49ers ---athlete---> JoeMontana >>>> > >>>> > We have >>>> > >>>> > SanFrancisco49ers --hasRole---> [role321] --athlete---> JoeMontana. >>>> > >>>> > There are a few nearby designs that may be worth discussion here. If >>>> > we wanted to make things simpler for publishers, we could remove the >>>> > hasRole reference from JoeMontana back to the Role. However this also >>>> > makes it harder for consuming applications to understand Role-based >>>> > modeling across all domains. Another approach would be to use >>>> > different property names for relating the 'subject' and 'predicate' >>>> > entities. The appendix in the full proposal document elaborates on >>>> > some of these options. I should also note for those of you using the >>>> > JSON-LD playground or other generic tools that the above markup needs >>>> > some tweaks, since schema.org doesn't yet publish a @context file. >>>> > Again, the document has details of a workaround. >>>> > >>>> > Please take a look. This is quite an important spec for schema.org as >>>> > it has impact across all domains, so it is important to find the right >>>> > balance between ease of adoption for publishers, expressivity, ease of >>>> > processing etc. >>>> > >>>> > cheers, >>>> > >>>> > Dan >>>> > >>>> >>>> >>>> >>> >>
Received on Wednesday, 26 March 2014 21:00:14 UTC