- From: Philip Jägenstedt <philipj@opera.com>
- Date: Sat, 14 Nov 2009 10:32:58 +0100
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
Received on Saturday, 14 November 2009 01:32:58 UTC