On Sat, 14 Nov 2009 00:34:12 +0100, Tab Atkins Jr. <[email protected]>
wrote:
On Fri, Nov 13, 2009 at 5:14 PM, Philip Jägenstedt <[email protected]>
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