- 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