[uf-discuss] mixing vocabularies

Ben Ward lists at ben-ward.co.uk
Sat Jun 27 01:10:23 PDT 2009


On 26 Jun 2009, at 21:33, Peter Mika wrote:

> So even if we all agree to all this, minimally two changes needed to  
> the example on the wiki:
>
> -- hcard should be vcard
> -- all required properties of the hcard should be present OR hcard  
> should be removed
>
> Would you edit it?

Noting that Tantek has edited the hCard class out on the wiki. I think  
we should assume that this was an error in the draft (note that  
hRecipe is draft).

**I think** I understand what has happened here. Thomas, if this  
assumption isn't correct I apologise. However, I hope this explanation  
is valuable anyway in the context of this ‘combining vocabularies’  
discussion, so please consider the following neutrally:

This discussion started from a mistaken understanding about combining  
vocabularies in microformats — e.g. combining hcard with hreview to  
reuse terms like `fn`.

"combining" is a concept applied from a formal vocabulary context,  
where you would import two vocabulary namespaces into different  
prefixes to reuse terms. (e.g. importing dublin core and atom  
namespaces and using them in combination as part of some larger  
document mark-up). In XML, reusing vocabulary terms requires a formal  
reference, because when you use `dc:title` you're using _the same_  
`dc:title` as in every other use of Dublin Core.

In XML, this combining of vocabularies is a publishing-time operation.

In microformats, that concept doesn't exist. The sharing of terms  
between vocabularies is a simpler **design-time** decision. Where  
terms a new format has fields that share the same use with a term  
defined from a previous microformat, the term is re-used in the new  
vocabulary.

So, in hRecipe, `fn`, `type`, `value` and `photo` are not ‘imported’  
from hcard, they are simply properties with the same name, because  
they are used the same way.

The hRecipe spec currently emphasises where terms have been reused  
from hCard (this is good, it clearly documents the design decisions of  
the draft). And, in the case of ingredient, it documents that `type`  
and `value` are reused from hcard (that's correct).

I think the example was using class="ingredient hcard" with the intent  
of explicitly referencing the hCard vocabulary for `type` and `value`.

However, that isn't necessary. `type` and `value`, are first-class  
members the hRecipe draft vocabulary, and the context of their use is  
indicated by the root class name `hrecipe`.

This is why I explain microformats as objects:

   `class="hrecipe"` means "this is a recipe object" not "import the  
recipe vocabulary".

I suspect this is the muddle that happened with the example, but even  
if not, I hope this explanation makes things a little clearer for  
those who switch between the different vocabulary models on the web.

Cheers,

Ben


More information about the microformats-discuss mailing list