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 22:16:00 +0100
Message-ID: <CAFQgrbYJ-Yb0a9ajzTjjZD4nNPZMkByztNfLGaA8HtVyjwdUbw@mail.gmail.com>
To: Jason Douglas <jasondouglas@google.com>
Cc: Ramanathan Guha <guha@google.com>, Gregg Kellogg <gregg@greggkellogg.net>, Dan Brickley <danbri@google.com>, Public Vocabs <public-vocabs@w3.org>
sorry, 'itemref' was a typo, should have been 'itemid'.


On Wed, Mar 26, 2014 at 10:14 PM, Jason Douglas <jasondouglas@google.com>wrote:

> On Wed Mar 26 2014 at 1:59:47 PM, Jarno van Driel <jarno@quantumspork.nl>
> wrote:
>
>> Well if @id has the same role as 'itemref' then could there also please
>> be some info explaining how that works
>>
>
> How did itemref get into this?  That's a microdata-specific DOM-level
> mechanism and is totally different.
>
>
>
>> , 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?
>>
>
> Graphs have loops.
>
>
>>
>>
>>
>>
>>
>>
>> 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.orgas
>>>>>> > 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:16:29 UTC

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