How about app:scheme instead of app:categoryGroup ?

  <app:categories fixed="yes">
    <app:scheme
      ref="http://myblog.example.net/categories";
      fixed="yes" exclusive="no">
      <atom:category term="foo" />
      <atom:category term="bar" />
    </app:scheme>
    <app:scheme
      ref="http://myblog.example.net/tags";
      fixed="no" exclusive="no" />
    <app:scheme
      ref="http://myblog.example.net/type";
      fixed="yes" exclusive="yes">
      <atom:category term="contact" />
      <atom:category term="event" />
      <atom:category term="review" />
    </app:scheme>
  </app:categories>

wrt the exclusive attribute, some blogging systems only allow one
category per entry.

  <app:categories fixed="yes">
    <app:scheme
      ref="http://myblog.example.net/categories";
      fixed="yes" exclusive="yes">
      <atom:category term="foo" />
      <atom:category term="bar" />
    </app:scheme>
  </app:categories>


- James

Thomas Broyer wrote:
> 
> 2006/6/8, Tim Bray <[EMAIL PROTECTED]>:
>>
>> At http://www.intertwingly.net/wiki/pie/PaceAPPCategories
>>
>> Based on PaceCategoryListing2.  In an introspection document, you
>> either have an href= or you don't.  If not, you contain atom:category
>> elements directly.  If you do, it has to point to a Categories
>> document, whose root is <app:categories> with <atom:category>
>> children.  The only thing that's not obvious is that
>> <app:categories>, when it's the root of a Categories doc, can have a
>> @scheme attribute to provide a default, if you want a couple of
>> hundred categories and not to provide the [EMAIL PROTECTED] for all of
>> them.
>>
>> This seems to be about the minimum I can think of that would give APP
>> category listing, without trying to stretch too far or solve the
>> whole problem.
> 
> That's pretty good stuff, but:
> - appOutOfLineCategories shouldn't have a "fixed" attribute, as this
> one will be present in the "Categories Document"
> - app:collection should be able to contain more than one
> app:categories element (see below)
> - the "fixed" attribute should apply to the "scheme" if defined at
> the app:collections level, or to "any category in any (other) scheme"
> if not provided (see below)
> 
> I envision app:categories as a "category scheme definition", along the
> line of the rank schemes in the ranking extension.
> It might be necessary to define a collection as:
> <app:collection ...>
>   ...
>   <app:categories scheme="http://myblog.example.net/categories";
> fixed="yes">
>      <!-- These are my blog's categories, I can only add categories
> through the blog admin web interface (at least until APP comes with
> category management) -->
>      <atom:category term="Family" />
>      <atom:category term="Geekeries" />
>   </app:categories>
>   <app:categories scheme="http://del.icio.us/tags/"; fixed="no">
>      <!-- these are tags already used in entries of the collection -->
>      <atom:category term="Atom" />
>      <atom:category term="protocol" />
>      <atom:category term="photos" />
>   </app:categories>
> </app:collection>
> 
> My problem here is that I now can't say whether categories from other
> schemes are allowed or not…
> If the "http://myblog.example.net/categories"; scheme weren't "fixed",
> I could have used a single app:categories without a"scheme" attribute,
> which could have implied that any category from any scheme is allowed:
>   <app:categories fixed="no">
>      <atom:category term="Family"
> scheme="http://myblog.example.net/categories"; />
>      <atom:category term="Geekeries"
> scheme="http://myblog.example.net/categories"; />
>      <atom:category term="Atom" scheme="http://del.icio.us/tags/"; />
>      <atom:category term="protocol" scheme="http://del.icio.us/tags/"; />
>      <atom:category term="photos" scheme="http://del.icio.us/tags/"; />
>   </app:categories>
> 
> But how about, you can use categories from those schemes, which don't
> define a fixed set of terms, but no category from any other scheme?
> Would the following work?
> <app:collection ...>
>   ...
>   <app:categories scheme="http://myblog.example.net/categories";
> fixed="yes">
>      <!-- These are my blog's categories, I can only add categories
> through the blog admin web interface (at least until APP comes with
> category management) -->
>      <atom:category term="Family" />
>      <atom:category term="Geekeries" />
>   </app:categories>
>   <app:categories scheme="http://del.icio.us/tags/"; fixed="no">
>      <!-- these are tags already used in entries of the collection -->
>      <atom:category term="Atom" />
>      <atom:category term="protocol" />
>      <atom:category term="photos" />
>   </app:categories>
>   <app:categories scheme="http://technorati.net/tags"; fixed="no">
>      <!-- You can use categories from this scheme, but no one has
> been used already -->
>   </app:categories>
> </app:collection>
> But now I've no way to tell that you could use any category from any
> other scheme (consider that if I start using a category from the
> "technorati" scheme, the definition becomes almost identical to the
> first one given above, wi the same problems).
> 
> So how about a new categoryGroup element?
> <app:collection ...>
>   ...
>   <!-- the following fixed="yes" attribute tells clients that I don't
> allow categories from any scheme other than those that are explicitly
> allowed here; a value of "no" would tell them that they can use
> categories from any scheme -->
>   <app:categories fixed="yes">
>      <app:categoryGroup scheme="http://myblog.example.net/categories";
> fixed="yes">
>         <!-- These are my blog's categories, I can only add
> categories through the blog admin web interface (at least until APP
> comes with category management) -->
>         <atom:category term="Family" />
>         <atom:category term="Geekeries" />
>      </app:categoryGroup>
>      <app:categoryGroup scheme="http://del.icio.us/tags/"; fixed="no">
>         <!-- these are tags already used in entries of the collection -->
>         <atom:category term="Atom" />
>         <atom:category term="protocol" />
>         <atom:category term="photos" />
>      </app:categoryGroup>
>      <app:categoryGroup scheme="http://technorati.net/tags"; fixed="no">
>      <!-- You can use categories from this scheme, but no one has
> been used already -->
>      </app:categoryGroup>
>   </app:categories>
> </app:collection>
> 
> Both app:categories and app:categoryGroup could be "out-of-line'd"
> using an "href" attribute.
> 
> 
> Constraints:
> * there MUST NOT be more than one app:categoryGroup with the same
> "scheme" value
> * if an app:categoryGroup has a "scheme" attribute, then its
> atom:category children MUST NOT have "scheme" attributes (as the value
> is "inherited" by scope context)
> 
> [[ please do not skip the end of the message, there's some more
> thoughts and questions after the RNC schemas ]]
> 
> RNC for app:categories in Introspection/Service Documents (might not
> be correct, given my poor knowledge of RelaxNG):
>  appCollection =
>    element app:collection {
>      appCommonAttributes,
>      attribute title { text },
>      attribute href { text },
>      ( appMemberType,
>       & appCategories?
>       & extensionElement* )
>    }
> 
>  appInlineCategories =
>    element app:categories {
>      attribute fixed { 'yes' | 'no' }?,
>      (appCategoryGroup*)
>    }
> 
>  appOutOfLineCategories =
>    element app:categories {
>      attribute href { atomURI },
>      (empty)
>    }
> 
>  appCategories = appInlineCategories | appOutOfLineCategories
> 
>  appInlineCategoryGroup =
>    element app:categoryGroup {
>      attribute scheme { atomURI }?,
>      attribute fixed { 'yes' | 'no' }?,
>      (atomCategories*)
>    }
> 
>  appOutOfLineCategoryGroup =
>    element app:categoryGroup {
>      attribute href { atomURI },
>      (empty)
>    }
> 
>  appCategoryGroup = appInlineCategoryGroup | appOutOfLineCategoryGroup
> 
> RNC for Category Documents:
> 
> namespace app = "http://purl.org/atom/app#";
> namespace atom = "http://www.w3.org/2005/Atom";
> namespace local = ""
> 
> start = appInlineCategories | appInlineCategoryGroup
> 
> [[ other definitions copied from the above "RNC for app:categories in
> Introspection/Service Documents" ]]
> 
> 
> With the above definitions, the only problem left is: what if an
> appOutOfLineCategoryGroup references a Category Document with an
> appInlineCategories root element?
> But I think it's basically the same problem as "what if an
> appCollection element references an Atom Entry Document?"
> 
> I'm aware that it's not as simple as what you're proposing in this
> Pace, but it's not really difficult either and covers most (if not
> all) use cases.
> 
> Finally, wrt to James' question about "exclusive" schemes, I think
> that if only one value is acceptable, then it's not really a
> "category", but something else that people tried to implement without
> inventing anything and (badly) reused an existing syntax construct…
> Wrt to category labels, I'd say that servers shouln't reject entries
> only because of a category using a different label, they should either
> keep the sent label, or ignore it and use a "default" one (as
> eventually exposed in the app:categories/app:categoryGroup children)
> 

Reply via email to