[whatwg] Microdata DOM API issues
Philip Jägenstedt
philipj at opera.com
Sat Nov 14 01:32:58 PST 2009
On Sat, 14 Nov 2009 00:34:12 +0100, Tab Atkins Jr. <jackalmage at gmail.com>
wrote:
> On Fri, Nov 13, 2009 at 5:14 PM, Philip Jägenstedt <philipj at opera.com>
> wrote:
>> The itemref mechanism allows creating arbitrary graphs of items, rather
>> than
>> the tree of items that is the intended microdata model (right?). Even
>> though
>> my default reaction to graphs is "oh cool", for microdata when the
>> domain
>> model is a graph you should probably just represent it with a level of
>> indirection (RDF).
>>
>> Options:
>> 1. patch the algorithms which can go into recursion
>> 2. patch
>> <http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html#associating-names-with-items>
>> to first check if an itemref'd property creates a loop before adding it
>> to
>> candidates
>> 3. ?
>>
>> I think I prefer 2.
>
> Looping in data-graphs is often useful, so I'm not sure I want to
> throw it out generally. Your statement in the first paragraph I'm
> quoting, though, says that you'd rather leave loops to be defined in
> the vocabulary itself? So loops would be done by, frex, itemprop'ing
> a link to the other element rather than itemref'ing the other element
> directly?
Yes, that's basically what I'm saying. One option is to simply use
microdata such that the RDF you extract is the graph you want (it will
probably look quite ugly though). Another is always referencing subitems
by a mechanism other than refid. For example, in the MusicBrainz XML
webservice when an artist contains a release which itself references
artists (e.g. as the producer), a stub item is used with only artist name
and id, rather than including all information recursively. In microdata I
would do:
<section itemscope
itemtype="http://musicbrainz.org/artist/"
itemid="http://musicbrainz.org/artist/4d5447d7-c61c-4120-ba1b-d7f471d385b9">
<h1 itemprop="name">John Lennon</h1>
<section>
<h1>Releases</h1>
<section itemprop="release"
itemscope
itemtype="http://musicbrainz.org/release/"
itemid="http://musicbrainz.org/release/f237e6a0-4b0e-4722-8172-66f4930198bc">
<h1>Imagine</h1>
Producer:
<span itemprop="producer"
itemscope
itemtype="http://musicbrainz.org/artist/"
itemid="http://musicbrainz.org/artist/e7b587f7-e678-47c1-81dd-e7bb7855b0f9"
><span itemprop="name">Phil Spector</span></span>
</section>
</section>
</section>
Even if John Lennon were the producer here, you don't get any looping in
the microdata itself. If you want to know everything about the producer,
you should just follow the itemid... I haven't looked that much at the RDF
extraction algorithm yet, but I think this example might even create the
proper graph with loops if the producer were John Lennon.
> That would probably be fine, and is compatible with a tree-based data
> model like JSON. Vocabs should know when loops are
> permissible/desirable for themselves.
I agree, I don't see that we have a problem here.
--
Philip Jägenstedt
Opera Software
More information about the whatwg
mailing list