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

Re: schema.org Roles design

From: Dan Scott <dan@coffeecode.net>
Date: Thu, 3 Apr 2014 01:10:51 -0400
Message-ID: <CAJcoVMh15rcEqC5znm21+gpT768MhTY6B5Ez70QzqThufqRMOw@mail.gmail.com>
To: Dan Brickley <danbri@google.com>
Cc: Gregg Kellogg <gregg@greggkellogg.net>, Jarno van Driel <jarno@quantumspork.nl>, Jason Douglas <jasondouglas@google.com>, Guha <guha@google.com>, W3C Web Schemas Task Force <public-vocabs@w3.org>
On Thu, Mar 27, 2014 at 10:47 AM, Dan Brickley <danbri@google.com> wrote:
>
> Given that doing this is hard in both Microdata and JSON-LD, my guess
> is that we can't be too demanding in terms of wanting a relation
> _from_ the Person _to_ the Role. And semantics-wise, an appropriately
> backwards-named relation from the Role to the Person (alongside the
> domain-specific 'actor' property) would tell us much the same thing.
> For example, trying that with 'roleFor' as the name (assumed to be
> inverse of inRole):
>
> <div vocab="http://schema.org/" typeof="Movie">
>   <span property="name">Ghostbusters</span>
>   <div property="hasRole" typeof="MovieRole">
>     <span property="characterName">Dr. Peter Venkman</span>
>     <div rel="actor roleFor" typeof="Person">
>       <span property="name">Bill Murray</span>
>     </div>
>   </div>
> </div>

I'm primarily interested in resolution of the hasRole pattern in the
context of the existing Comics proposal at
https://www.w3.org/community/schemabibex/wiki/Periodicals_and_Comics_synthesis
which currently wants to add properties for various relatively
comic-specific roles such as "colorist", "inker", "letterer",
"penciler", so I've been encouraged to see some progress on this front
(and the consideration given to media as well as sports contexts).

A couple of questions:

1. My understanding was that the schema.org partners had said they
would parse RDFa Lite, giving the impression that RDFa full was _not_
going to be accepted. But this thread is using RDFa full attributes
such as @about, @rel, and @rev. We may want to keep these constraints
in mind given schema.org's original raison d'ĂȘtre.

2. Rather than creating a new "hasRole" property, or perhaps in
addition to, why not add "rangeIncludes Role" to existing properties
like actor, athlete, and contributor? Assuming the generic "Role" has
the properties "roleName" and "rolePlayer" (come on, you have to love
that!), we could mark up the original Quarterback example from the
proposal document as follows:

{
 "@context": "http://schema.org/",
 "@type": "AmericanFootballTeam",
 "name": "San Francisco 49ers",
 "athlete": {
  "@type": "Role",
  "roleName": "Quarterback",
  "startDate": "1979",
  "endDate": "1992",
  "rolePlayer": {
    "@type": "Person",
    "name": "Joe Montana"
   }
 }
}

or for the RDFa Lite version:

<div vocab="http://schema.org/" type="AmericanFootballTeam">
  <span property="name">San Francisco 49ers</span>
  <div property="athlete" typeof="Role">
    <span property="roleName">Quarterback</span>,
    <span property="startDate">1979</span>-<span property="endDate">1992</span>:
    <span property="rolePlayer" typeof="Person">
        <span property="name">Joe Montana</span>
    </span>
  </div>
</div>

One could add in explicit IDs to provide resolvable URIs, of course,
and sameAs properties to link out to richer sources of external linked
data, etc.

But I think this pattern would work well for the Comics proposal and
for marking up the crazy-long lists of movie credits with all of the
fine-grained contribution types such as gaffer, best boy, etc. In
fact, taking an existing section from the Comics proposal, what was
originally mocked up as (requiring four new schema.org properties in
this case):

<div vocab="http://schema.org/" typeof="ComicIssue">Issue <span
property="issueNumber">13</span>
  <div property="author" typeof="Person">Author: <span
property="name">Michael McMillian</span></div>
  <div property="artist" typeof="Person">Art by: <span
property="name">Beni Lobel</span></div>
  <div property="colorist" typeof="Person">Colors by: <span
property="name">Esther Sanz</span></div>
  <div property="coverArtist" typeof="Person">Cover by: <span
property="name">Michael Gaydos</span></div>
  <div property="letterer" typeof="Person">Letters by: <span
property="name">Neil Uyetake</span></div>
</div>

could now be marked up as the following, requiring no new properties
beyond those supplied by the generic Role:

<div vocab="http://schema.org/" typeof="ComicIssue">Issue <span
property="issueNumber">13</span>
  <div property="author" typeof="Person">Author: <span
property="name">Michael McMillian</span></div>
  <div property="contributor" typeof="Role"><meta property="roleName"
content="artist">Art by: <span property="rolePlayer"
typeof="Person"><span property="name">Beni Lobel</span></span></div>
  <div property="contributor" typeof="Role"><meta property="roleName"
content="colorist">Colors by: <span property="rolePlayer"
typeof="Person"><span property="name">Esther Sanz</span></span></div>
  <div property="contributor" typeof="Role"><meta property="roleName"
content="coverArtist">Cover by: <span property="rolePlayer"
typeof="Person"><span property="name">Michael
Gaydos</span></span></div>
  <div property="contributor" typeof="Role"><meta property="roleName"
content="letterer">Letters by: <span property="rolePlayer"
typeof="Person"><span property="name">Neil Uyetake</span></span></div>
</div>

While Guha mentioned a desire to walk a fine line between overly
general slots and overly specific slots, I think we should ensure the
general slots work before defining more context-specific slots.

3. With any of these proposals, what would be the best way to attach
URIs that draw from external vocabularies? For example, in Comics we
might want to link to http://id.loc.gov/vocabulary/relators/clr in
addition to supplying the literal value "colorist" for the roleName.
Add the URI to "typeof='Role'"?

4. I'd like to see more explicit information in the proposal about the
properties that the base Role type would have. I guess that goes back
to ensuring that the generic type works first, before diving into
specializations.

5. "<hasRole> a <Property>; domainIncludes <Role>; rangeIncludes
<Thing>." in the proposal has range and domain reversed, no? (Looking
back, Gregg caught this too... I think it's okay to update the draft
doc for straightforward mistakes!)

Thanks, Dan, for getting this ball rolling, and to all the
participants in the thread thus far for their contributions.

Dan Scott
Received on Thursday, 3 April 2014 05:11:46 UTC

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