W3C home > Mailing lists > Public > public-vocabs@w3.org > March 2014

Re: schema.org Roles design

From: Jarno van Driel <jarno@quantumspork.nl>
Date: Wed, 26 Mar 2014 21:42:48 +0100
Message-ID: <CAFQgrbaeA-QDkk8exTFQK8ci4L504m8w6JDZ0Q47J7reBR=AFA@mail.gmail.com>
To: Guha <guha@google.com>
Cc: Gregg Kellogg <gregg@greggkellogg.net>, Dan Brickley <danbri@google.com>, W3C Web Schemas Task Force <public-vocabs@w3.org>
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 20:43:17 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 21:29:38 UTC