microdata; hixie: Redefine itemtype='' to allow multiple types if they share the same vocabulary. This was by far the most frequently made request at the recent schema.org event (whatwg r6668)

microdata; hixie: Redefine itemtype='' to allow multiple types if they
share the same vocabulary. This was by far the most frequently made
request at the recent schema.org event (whatwg r6668)

http://dev.w3.org/cvsweb/html5/md/Overview.html?r1=1.165&r2=1.166&f=h
http://html5.org/tools/web-apps-tracker?from=6667&to=6668

===================================================================
RCS file: /sources/public/html5/md/Overview.html,v
retrieving revision 1.165
retrieving revision 1.166
diff -u -d -r1.165 -r1.166
--- Overview.html 5 Oct 2011 00:07:34 -0000 1.165
+++ Overview.html 12 Oct 2011 00:16:38 -0000 1.166
@@ -320,7 +320,7 @@
 
    <h1>HTML Microdata</h1>
    <h2 class="no-num no-toc" id="generatedID"></h2>
-   <h2 class="no-num no-toc" id="editor-s-draft-5-october-2011">Editor's Draft 5 October 2011</h2>
+   <h2 class="no-num no-toc" id="editor-s-draft-12-october-2011">Editor's Draft 12 October 2011</h2>
    <dl><dt>Latest Published Version:</dt>
     <dd><a href="http://www.w3.org/TR/microdata/">http://www.w3.org/TR/microdata/</a></dd>
     <dt>Latest Editor's Draft:</dt>
@@ -454,7 +454,7 @@
   Group</a> is the W3C working group responsible for this
   specification's progress along the W3C Recommendation
   track.
-  This specification is the 5 October 2011 Editor's Draft.
+  This specification is the 12 October 2011 Editor's Draft.
   </p><!-- UNDER NO CIRCUMSTANCES IS THE PRECEDING PARAGRAPH TO BE REMOVED OR EDITED WITHOUT TALKING TO IAN FIRST --><p>Work on this specification is also done at the <a href="http://www.whatwg.org/">WHATWG</a>. The W3C HTML working group
   actively pursues convergence with the WHATWG, as required by the <a href="http://www.w3.org/2007/03/HTML-WG-charter">W3C HTML working
   group charter</a>.</p><!-- UNDER NO CIRCUMSTANCES IS THE FOLLOWING PARAGRAPH TO BE REMOVED OR EDITED WITHOUT TALKING TO IAN FIRST --><!-- UNDER NO CIRCUMSTANCES IS THE PRECEDING PARAGRAPH TO BE REMOVED OR EDITED WITHOUT TALKING TO IAN FIRST --><p>This specification is an extension to the HTML5 language. All
@@ -829,12 +829,20 @@
    properties, a "name" ("Hedral"), a "desc" ("Hedral is..."), and an
    "img" ("hedral.jpeg").</p>
 
-  </div><p>An item can only have one type. The type gives the context for
-  the properties, thus defining a vocabulary: a property named "class"
-  given for an item with the type "http://census.example/person" might
-  refer to the economic class of an individual, while a property named
-  "class" given for an item with the type "http://example.com/school/teacher"
-  might refer to the classroom a teacher has been assigned.<h3 id="global-identifiers-for-items"><span class="secno">1.4 </span>Global identifiers for items</h3><p><i>This section is non-normative.</i><p>Sometimes, an <a href="#concept-item" title="concept-item">item</a> gives
+  </div><p>The type gives the context for the properties, thus defining a
+  vocabulary: a property named "class" given for an item with the type
+  "http://census.example/person" might refer to the economic class of
+  an individual, while a property named "class" given for an item with
+  the type "http://example.com/school/teacher" might refer to the
+  classroom a teacher has been assigned. Several types can share a
+  vocabulary. For example, the types "<code title="">http://example.org/people/teacher</code>" and "<code title="">http://example.org/people/engineer</code>" could be defined
+  to use the same vocabulary (though maybe some properties would not
+  be especially useful in both cases, e.g. maybe the "<code title="">http://example.org/people/engineer</code>" type might not
+  typically be used with the "<code title="">classroom</code>"
+  property). Multiple types defined to use the same vocabulary can be
+  given for a single item by listing the URLs as a space-separated
+  list in the attribute' value. An item cannot be given two types if
+  they do not use the same vocabulary, however.<h3 id="global-identifiers-for-items"><span class="secno">1.4 </span>Global identifiers for items</h3><p><i>This section is non-normative.</i><p>Sometimes, an <a href="#concept-item" title="concept-item">item</a> gives
   information about a topic that has a global identifier. For example,
   books can be identified by their ISBN number.<p>Vocabularies (as identified by the <code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code> attribute) can be designed
   such that <a href="#concept-item" title="concept-item">items</a> get associated
@@ -924,14 +932,14 @@
   or all types if no argument is specified.<p>Each <a href="#concept-item" title="concept-item">item</a> is represented in the
   DOM by the element on which the relevant <code title="attr-itemscope"><a href="#attr-itemscope">itemscope</a></code> attribute is found. These
   elements have their <code title="dom-itemScope"><a href="#dom-itemscope">element.itemScope</a></code> IDL attribute set to
-  true.<p>The type of <a href="#concept-item" title="concept-item">items</a> can be
+  true.<p>The type(s) of <a href="#concept-item" title="concept-item">items</a> can be
   obtained using the <code title="dom-itemType"><a href="#dom-itemtype">element.itemType</a></code> IDL attribute on the
   element with the <code title="attr-itemscope"><a href="#attr-itemscope">itemscope</a></code>
   attribute.<div class="example">
 
    <p>This sample shows how the <code title="dom-document-getItems"><a href="#dom-document-getitems">getItems()</a></code> method can be used
-   to obtain a list of all the top-level microdata items of one type
-   given in the document:</p>
+   to obtain a list of all the top-level microdata items of a
+   particular type given in the document:</p>
 
    <pre>var cats = document.getItems("http://example.com/feline");</pre>
 
@@ -1029,49 +1037,54 @@
    <li><code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code></li>
   </ul><h3 id="the-microdata-model"><span class="secno">2.1 </span>The microdata model</h3><p>The microdata model consists of groups of name-value pairs known
   as <a href="#concept-item" title="concept-item">items</a>.<p>Each group is known as an <a href="#concept-item" title="concept-item">item</a>.
-  Each <a href="#concept-item" title="concept-item">item</a> can have an <a href="#item-type">item
-  type</a>, a <a href="#global-identifier">global identifier</a> (if the <a href="#item-type">item
-  type</a> <a href="#support-global-identifiers-for-items" title="support global identifiers for
-  items">supports global identifiers for its items</a>), and a list
-  of name-value pairs. Each name in the name-value pair is known as a
-  <a href="#the-properties-of-an-item" title="the properties of an item">property</a>, and each
-  <a href="#the-properties-of-an-item" title="the properties of an item">property</a> has one or
-  more <a href="#concept-property-value" title="concept-property-value">values</a>. Each <a href="#concept-property-value" title="concept-property-value">value</a> is either a string or
+  Each <a href="#concept-item" title="concept-item">item</a> can have <a href="#item-types">item
+  types</a>, a <a href="#global-identifier">global identifier</a> (if the vocabulary
+  specified by the <a href="#item-types">item types</a> <a href="#support-global-identifiers-for-items">support global
+  identifiers for items</a>), and a list of name-value pairs. Each
+  name in the name-value pair is known as a <a href="#the-properties-of-an-item" title="the
+  properties of an item">property</a>, and each <a href="#the-properties-of-an-item" title="the
+  properties of an item">property</a> has one or more <a href="#concept-property-value" title="concept-property-value">values</a>. Each <a href="#concept-property-value" title="concept-property-value">value</a> is either a string or
   itself a group of name-value pairs (an <a href="#concept-item" title="concept-item">item</a>). The names are unordered relative
   to each other, but if a particular name has multiple values, they do
   have a relative order.<p>An <a href="#concept-item" title="concept-item">item</a> is said to be a
-  <dfn id="typed-item">typed item</dfn> when either it has an <a href="#item-type">item type</a>,
-  or it is the <a href="#concept-property-value" title="concept-property-value">value</a> of a <a href="#the-properties-of-an-item" title="the properties of an
-  item">property</a> of a <a href="#typed-item">typed item</a>. The
-  <dfn id="relevant-type">relevant type</dfn> for a <a href="#typed-item">typed item</a> is the <a href="#concept-item" title="concept-item">item</a>'s <a href="#item-type">item type</a>, if it has
-  one, or else is the <a href="#relevant-type">relevant type</a> of the <a href="#concept-item" title="concept-item">item</a> for which it is a <a href="#the-properties-of-an-item" title="the
+  <dfn id="typed-item">typed item</dfn> when either it has an <a href="#item-types" title="item
+  types">item type</a>, or it is the <a href="#concept-property-value" title="concept-property-value">value</a> of a <a href="#the-properties-of-an-item" title="the
+  properties of an item">property</a> of a <a href="#typed-item">typed item</a>.
+  The <dfn id="relevant-types">relevant types</dfn> for a <a href="#typed-item">typed item</a> is the
+  <a href="#concept-item" title="concept-item">item</a>'s <a href="#item-types">item types</a>, if
+  it has one, or else is the <a href="#relevant-types">relevant types</a> of the <a href="#concept-item" title="concept-item">item</a> for which it is a <a href="#the-properties-of-an-item" title="the
   properties of an item">property</a>'s <a href="#concept-property-value" title="concept-property-value">value</a>.<h3 id="items"><span class="secno">2.2 </span>Items</h3><p>Every <a href="#html-elements" title="HTML elements">HTML element</a> may have an
   <dfn id="attr-itemscope" title="attr-itemscope"><code>itemscope</code></dfn> attribute
   specified. The <code title="attr-itemscope"><a href="#attr-itemscope">itemscope</a></code>
   attribute is a <a href="#boolean-attribute">boolean attribute</a>.<p>An element with the <code title="attr-itemscope"><a href="#attr-itemscope">itemscope</a></code>
   attribute specified creates a new <dfn id="concept-item" title="concept-item">item</dfn>, a group of name-value pairs.<hr><p>Elements with an <code title="attr-itemscope"><a href="#attr-itemscope">itemscope</a></code>
   attribute may have an <dfn id="attr-itemtype" title="attr-itemtype"><code>itemtype</code></dfn> attribute
-  specified, to give the <a href="#item-type">item type</a> of the <a href="#concept-item" title="concept-item">item</a>.<p>The <code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code> attribute, if
-  specified, must have a value that is a <a href="#valid-url">valid URL</a> that
-  is an <a href="#absolute-url">absolute URL</a>.<p>The <dfn id="item-type">item type</dfn> of an <a href="#concept-item" title="concept-item">item</a> is the value of its element's <code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code> attribute, if it has one and
-  its value is not the empty string. If the <code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code> attribute is missing or its
-  value is the empty string, the <a href="#concept-item" title="concept-item">item</a> is said to have no <a href="#item-type">item
-  type</a>.<p>The <a href="#item-type">item type</a> must be a type defined in an <span title="other applicable specifications">applicable
-  specification</span>.<div class="impl">
+  specified, to give the <a href="#item-types">item types</a> of the <a href="#concept-item" title="concept-item">item</a>.<p>The <code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code> attribute, if
+  specified, must have a value that is an <a href="#unordered-set-of-unique-space-separated-tokens">unordered set of
+  unique space-separated tokens</a> that are
+  <span>case-sensitive</span>, each of which is a <a href="#valid-url">valid
+  URL</a> that is an <a href="#absolute-url">absolute URL</a>, and all of which
+  are defined to use the same vocabulary.<p>The <dfn id="item-types">item types</dfn> of an <a href="#concept-item" title="concept-item">item</a> are the <a href="#absolute-url" title="absolute
+  URL">absolute URLs</a> obtained by <a href="#split-a-string-on-spaces" title="split a string on
+  spaces">splitting the element's <code title="attr-itemtype">itemtype</code> attribute's value on
+  spaces</a>. If the <code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code>
+  attribute is missing or parsing it in this way finds no tokens that
+  are <a href="#absolute-url" title="absolute URL">absolute URLs</a>, the <a href="#concept-item" title="concept-item">item</a> is said to have no <a href="#item-types">item
+  types</a>.<p>The <a href="#item-types">item types</a> must all be types defined in <span title="other applicable specifications">applicable
+  specifications</span> and must all be defined to use the same
+  vocabulary.<div class="impl">
 
-   <p>Except if otherwise specified by that specification, the
-   <a href="#url">URL</a> given as the <a href="#item-type">item type</a> should not be
-   automatically dereferenced.</p>
+   <p>Except if otherwise specified by that specification, the <a href="#url" title="URL">URLs</a> given as the <a href="#item-types">item types</a> should
+   not be automatically dereferenced.</p>
 
-   <p class="note">A specification could define that its <a href="#item-type">item
-   type</a> can be derefenced to provide the user with help
-   information, for example. In fact, vocabulary authors are
-   encouraged to provide useful information at the given
+   <p class="note">A specification could define that its <a href="#item-types" title="item types">item type</a> can be derefenced to provide
+   the user with help information, for example. In fact, vocabulary
+   authors are encouraged to provide useful information at the given
    <a href="#url">URL</a>.</p>
 
-   <p><a href="#item-type" title="item type">Item types</a> are opaque
-   identifiers, and user agents must not dereference unknown <a href="#item-type" title="item type">item types</a>, or otherwise deconstruct them,
-   in order to determine how to process <a href="#concept-item" title="concept-item">items</a> that use them.</p>
+   <p><a href="#item-types">Item types</a> are opaque identifiers, and user agents
+   must not dereference unknown <a href="#item-types">item types</a>, or otherwise
+   deconstruct them, in order to determine how to process <a href="#concept-item" title="concept-item">items</a> that use them.</p>
 
   </div><p>The <code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code> attribute must
   not be specified on elements that do not have an <code title="attr-itemscope"><a href="#attr-itemscope">itemscope</a></code> attribute specified.<hr><p>Elements with an <code title="attr-itemscope"><a href="#attr-itemscope">itemscope</a></code>
@@ -1123,7 +1136,7 @@
 
    <li>If the item is a <a href="#typed-item">typed item</a>: a <dfn id="defined-property-name">defined
    property name</dfn> allowed in this situation according to the
-   specification that defines the <a href="#relevant-type">relevant type</a> for the
+   specification that defines the <a href="#relevant-types">relevant types</a> for the
    item, or</li>
 
    <li>If the item is not a <a href="#typed-item">typed item</a>: a string that
@@ -1386,7 +1399,7 @@
 partial interface <a href="#htmlelement">HTMLElement</a> {
   // <span>microdata</span> 
            attribute boolean <a href="#dom-itemscope" title="dom-itemScope">itemScope</a>;
-           attribute DOMString <a href="#dom-itemtype" title="dom-itemType">itemType</a>;
+  [PutForwards=<span title="dom-DOMSettableTokenList-value">value</span>] readonly attribute <span>DOMSettableTokenList</span> <a href="#dom-itemtype" title="dom-itemType">itemType</a>;
            attribute DOMString <a href="#dom-itemid" title="dom-itemId">itemId</a>;
   [PutForwards=<span title="dom-DOMSettableTokenList-value">value</span>] readonly attribute <span>DOMSettableTokenList</span> <a href="#dom-itemref" title="dom-itemRef">itemRef</a>;
   [PutForwards=<span title="dom-DOMSettableTokenList-value">value</span>] readonly attribute <span>DOMSettableTokenList</span> <a href="#dom-itemprop" title="dom-itemProp">itemProp</a>;
@@ -1434,27 +1447,31 @@
   representing types. When called, the method must return a
   <span>live</span> <code>NodeList</code> object containing all the
   elements in the document, in <a href="#tree-order">tree order</a>, that are each
-  <a href="#top-level-microdata-items">top-level microdata items</a> with a <a href="#item-type" title="item
-  type">type</a> equal to one of the types specified in that
-  argument, having obtained the types by <a href="#split-a-string-on-spaces" title="split a string
-  on spaces">splitting the string on spaces</a>. If there are no
-  tokens specified in the argument, or if the argument is missing,
-  then the method must return a <code>NodeList</code> containing all
-  the <a href="#top-level-microdata-items">top-level microdata items</a> in the document. When the
-  method is invoked on a <code>Document</code> object again with the
-  same argument, the user agent may return the same object as the
-  object returned by the earlier call. In other cases, a new
-  <code>NodeList</code> object must be returned.</p>
+  <a href="#top-level-microdata-items">top-level microdata items</a> with one of their <a href="#item-types" title="item types">types</a> equal to one of the types specified
+  in that argument, having obtained the types by <a href="#split-a-string-on-spaces" title="split a
+  string on spaces">splitting the string on spaces</a>. If there
+  are no tokens specified in the argument, or if the argument is
+  missing, then the method must return a <code>NodeList</code>
+  containing all the <a href="#top-level-microdata-items">top-level microdata items</a> in the
+  document. When the method is invoked on a <code>Document</code>
+  object again with the same argument, the user agent may return the
+  same object as the object returned by the earlier call. In other
+  cases, a new <code>NodeList</code> object must be returned.</p>
+
+  <p class="note">Since a token in the <code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code> attribute that is not an
+  <a href="#absolute-url">absolute URL</a> is not considered to be one of the item's
+  <a href="#item-types">item types</a>, any tokens passed to <code title="dom-document-getItems"><a href="#dom-document-getitems">getItems()</a></code> that are not
+  themselves <a href="#absolute-url" title="absolute URL">absolute URLs</a> will not
+  find any items.</p>
 
   <p>The <dfn id="dom-itemscope" title="dom-itemScope"><code>itemScope</code></dfn> IDL
   attribute on <a href="#html-elements">HTML elements</a> must <a href="#reflect">reflect</a>
   the <code title="attr-itemscope"><a href="#attr-itemscope">itemscope</a></code> content attribute.
   The <dfn id="dom-itemtype" title="dom-itemType"><code>itemType</code></dfn> IDL
   attribute on <a href="#html-elements">HTML elements</a> must <a href="#reflect">reflect</a>
-  the <code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code> content attribute,
-  as if it was a regular string attribute, not a <a href="#url">URL</a>
-  string attribute.  The <dfn id="dom-itemid" title="dom-itemId"><code>itemId</code></dfn> IDL attribute on
-  <a href="#html-elements">HTML elements</a> must <a href="#reflect">reflect</a> the <code title="attr-itemid"><a href="#attr-itemid">itemid</a></code> content attribute. The <dfn id="dom-itemprop" title="dom-itemProp"><code>itemProp</code></dfn> IDL attribute on
+  the <code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code> content attribute.
+  The <dfn id="dom-itemid" title="dom-itemId"><code>itemId</code></dfn> IDL attribute
+  on <a href="#html-elements">HTML elements</a> must <a href="#reflect">reflect</a> the <code title="attr-itemid"><a href="#attr-itemid">itemid</a></code> content attribute. The <dfn id="dom-itemprop" title="dom-itemProp"><code>itemProp</code></dfn> IDL attribute on
   <a href="#html-elements">HTML elements</a> must <a href="#reflect">reflect</a> the <code title="attr-itemprop"><a href="#names:-the-itemprop-attribute">itemprop</a></code> content attribute. The <dfn id="dom-itemref" title="dom-itemRef"><code>itemRef</code></dfn> IDL attribute on
   <a href="#html-elements">HTML elements</a> must <a href="#reflect">reflect</a> the <code title="attr-itemref"><a href="#attr-itemref">itemref</a></code> content attribute.</p>
 
@@ -1602,11 +1619,14 @@
 
    <li><p>Add <var title="">item</var> to <var title="">memory</var>.</li>
 
-   <li><p>If the <var title="">item</var> has an <a href="#item-type">item
-   type</a>, add an entry to <var title="">result</var> called
-   "<code title="">type</code>" whose value is the <a href="#item-type">item
-   type</a> of <var title="">item</var>.</li>
+   <li><p>If the <var title="">item</var> has any <a href="#item-types">item
+   types</a>, add an entry to <var title="">result</var> called
+   "<code title="">type</code>" whose value is an array listing the
+   <a href="#item-types">item types</a> of <var title="">item</var>, in the order
+   they were specified on the <code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code> attribute.</p>
 
+   <p class="note">Since only <a href="#absolute-url" title="absolute URL">absolute
+   URLs</a> can be <a href="#item-types">item types</a>, any tokens in the <code title="attr-itemtype"><a href="#attr-itemtype">itemtype</a></code> attribute that are not <a href="#absolute-url" title="absolute URL">absolute URLs</a> are dropped.</li> 
    <li><p>If the <var title="">item</var> has a <a href="#global-identifier">global
    identifier</a>, add an entry to <var title="">result</var>
    called "<code title="">id</code>" whose value is the <a href="#global-identifier">global

Received on Wednesday, 12 October 2011 00:17:00 UTC