- From: Ben Adida <ben@adida.net>
 - Date: Sun, 23 Dec 2007 09:47:48 -0800
 - To: Ivan Herman <ivan@w3.org>
 - CC: Mark Birbeck <mark.birbeck@formsPlayer.com>, Manu Sporny <msporny@digitalbazaar.com>, RDFa <public-rdf-in-xhtml-tf@w3.org>
 
Ivan,
First let me solve your example, then get back to the reason why this
makes sense.
> <http:://www.ivan-herman.net/Ivan_Herman>
>    foaf:holdsAccount
>       <http://www.facebook.com/p/Ivan_Herman/555188827>;
>    foaf:foaf:publications
>       <http://www.ivan-herman.net/professional/CV/publist.rdf>.
> 
> <http://www.facebook.com/p/Ivan_Herman/555188827>
>    rdf:type foaf:OnlineAccount;
>    foaf:accountServiceHomepage <http://www.facebook.com>
>    foaf:accountName "555188827".
This is actually a great example to show off Mark's chaining rules.
First, write your Facebook account information:
  <div about="http://www.facebook.com/p/Ivan_Herman/555188827"
       instanceof="foaf:OnlineAccount">
     a <a rel="foaf:accountServiceHomePage">facebook account</a>
     with name <span property="foaf:accountName">555188827</span>.
  </div>
Let's call that block <<ACCOUNT>>.
Now, let's go back to your first triples:
  <div about="http://www.ivan-herman.net/Ian_Herman">
     <div rel="foaf:holdsAccount">
        <<ACCOUNT>>
     </div>
     and some
     <a rel="foaf:publications" href="/professional/CV/publist.rdf">
        publications
     </a>
  </div>
Now, you can literally substitute the first block of HTML+RDFa for
<<ACCOUNT>>, and it all works out nicely. The @about completes the
hanging @rel, and you're done. The beauty of this approach is that you
can literally take whole blocks of HTML+RDFa and move them into the
"object" of a hanging @rel without modification.
Now, to get back to your earlier comment:
> - but... why? I mean: why is it necessary to introduce an extra rule?
It's partly the fault of microformats, and, actually, it's partly your
fault. Oh okay, and it's also partially mine. ;)
>From the microformats community, we have the following general approach:
  <div class="hCal">
    ...
  </div>
where you can declare a calendar event without naming it. We wanted the
same ease of use. To achieve it, we need to be able to declare a blank
calendar event without explicitly naming it. Thus
  <div instanceof="cal:Vevent">
has the same "feel" to it as
  <div class="hCal">
It declare a new "thing", even if you don't give it a name.
Then, there's also the use case you brought up: a bibtex entry with
multiple authors where one does not need to give the author a URI or
even a bnode ID. With the @instanceof construct creating a new bnode, we
get the following extremely pleasant approach:
  <div about="#paper">
    <span property="dc:title">RDFa Primer</span>
    <div rel="dc:creator">
       <span instanceof="foaf:Person"
             property="foaf:name">Ben Adida</span>
       <span instanceof="foaf:Person"
             property="foaf:name">Mark Birbeck</span>
       ... more authors ...
    </div>
  </div>
Now, we *could* force a new @rel="dc:creator" every time, but given the
beauty of the chaining rules, doesn't that seem like a missed
opportunity to have extremely clean markup?
There's a final argument that's more about how @instanceof feels to the
publisher. When I see two <div>'s, each with @instanceof, that implies
two instances to me. I think it would end up being counter-intuitive,
from an HTML publisher perspective, if the following:
  <div instanceof="foo:bar">
     ...
  </div>
  <div instanceof="foo:baz">
     ...
  </div>
somehow referred to the same item with two different types. If you
really wanted that, you would do:
  <div instanceof="foo:bar foo:baz">
    ...
  </div>
I won't claim that my search has been exhaustive, but I did spend a good
week trying to discredit Mark's chaining rules given the @instanceof
rules, and I didn't find any good counter-examples :) I think this
@instanceof approach combined with Mark's chaining rules form a strict
superset of other approaches in terms of expressive capability. Plus,
it's more pleasing to the eye, especially when you take all the history
out of the equation and take a fresh look at the above bibtex markup
example. Isn't it nice?
-Ben
Received on Sunday, 23 December 2007 17:47:59 UTC