Not that we need *more* options, but when we do introspection (whether
in core or elsewhere), I'm wondering why we need to invent any new XML
format.    Why can't the introspection document just (itself) be an
Atom feed, where entries describe collections and categories are used
to link related collections?

The following example seems suitable, is valid Atom, and fully
represents the model shown in the draft-06 introspection document
example (7.2):

<feed xmlns="http://www.w3.org/2005/Atom";
         xmlns:app="http://purl.org/atom/app#";>
   <title>My Blog Collections</title>
   <id>{service id}</id>
   <updated>2005-11-04T20:00:02Z</updated>
   <entry>
        <id>{collection id 1}</id>
        <updated>2005-11-04T18:30:02Z</updated>
        <title>My Blog Entries</title>
        <category>Main Site</category>
        <link rel="collection" href="http://example.org/reilly/main"/>
         <app:member-type>entry</app:member-type>
        <app:list-template>http://example.org/{index}</app:list-template>
   </entry>
   <entry>
        <id>{collection id 2}</id>
        <updated>2005-11-04T20:00:02Z</updated>
        <title>Pictures</title>
        <category>Main Site</category>
        <link rel="collection" href="http://example.org/reilly/pic"/>
        <app:member-type>media</app:member-type>
        <app:list-template>http://example.org/p/{index}}</app:list-template>
   </entry>
   <entry>
        <id>{collection id 3}</id>
        <updated>2005-11-03T9:00:02Z</updated>
        <title>Remaindered Links</title>
        <category>Side Bar Blog</category>
        <link rel="collection" href="http://example.org/reilly/list"/>
         <app:member-type>media</app:member-type>
        <app:list-template>http://example.org/l/{index}</app:list-template>
   </entry>
</feed>

Some basic benefits:

- No format invention.  This one is already well-specified and agreed upon :)

- Uses <atom:category> values to link related collections.

- The built-in extensibilty of <atom:feed> and <atom:entry> provides a
nice place to hang service-level and/or collection-level metadata.  
This makes it easy to add domain-specific metadata downstream for
specific types of collections (like blogs).

- An Atom client should already have a parser for the above readily available :)

- Lots of other standard atom elements seem like they might be apropos
to include as collection metadata (author, contributors, rights, ...).

- <atom:updated> could be used on collection entries for fast sync
using only the introspection document (i.e. it is the time of the last
change to the collection).

- If someone wanted to expose a model for editting collections, that
would be pretty logical too (just use APP on the above... POST an
entry to create a collection, etc).

- Nesting _could_ be supported if desired through one of two mechanisms:

* A "collection" link that simply indirects to another introspection
document feed, or:
* use hierarchical categories.  (ex. "Main Blog/Photos" from Robert's
outline pace)

(I lean towards the hierarchical categories because a) a
non-nesting-aware client could still present a view of the full set of
collections and b) all collections are returned within a single
introspection document [one GET vs. link traversal]).

- I think the spec language for the above could be pretty short and
sweet.  Just define the collection link relation (a required element
in collection-describing entries), a description of any collection
metadata extension elements that reaches consensus (like media types,
list templates, or ...), and possibly updated semantics for collection
entries.

 It feels to me, like minimal invention, being elegantly
self-referential, and maybe even close to the simplest thing that
could possibly work.    This also seems obvious enough that either a)
someone has suggested it before and I missed it, and/or b) it is a
really dumb idea for reasons I'm missing.

I can write this up in PACE form, pending positive response and the
results of the consensus call on introspection.

--- Kyle

Reply via email to