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

Reply via email to