Short URL: http://html5.org/r/4066
| SVN | Bug | Comment | Time (UTC) |
|---|---|---|---|
| 4066 | Update microdata based on results of usability study | 2009-10-02 21:44 |
Index: source
===================================================================
--- source (revision 4065)
+++ source (revision 4066)
@@ -5894,7 +5894,7 @@
title="">name</var>)</code></dfn> method must return a
<code>PropertyNodeList</code> object representing a live view of the
<code>HTMLPropertyCollection</code> object, further filtered so that
- the only nodes in the <code>RadioNodeList</code> object are those
+ the only nodes in the <code>PropertyNodeList</code> object are those
that have a <span title="property names">property name</span> equal
to <var title="">name</var>. The nodes in the
<code>PropertyNodeList</code> object must be sorted in <span>tree
@@ -7592,11 +7592,12 @@
readonly attribute <span>DOMStringMap</span> <span title="dom-dataset">dataset</span>;
// <span>microdata</span>
- attribute DOMString <span title="dom-item">item</span>;
+ attribute boolean <span title="dom-itemscope">itemscope</span>;
+ attribute DOMString <span title="dom-itemtype">itemtype</span>;
+ attribute DOMString <span title="dom-itemid">itemid</span>;
[PutForwards=<span title="dom-DOMSettableTokenList-value">value</span>] readonly attribute <span>DOMSettableTokenList</span> <span title="dom-itemprop">itemprop</span>;
readonly attribute <span>HTMLPropertyCollection</span> <span title="dom-properties">properties</span>;
attribute DOMString <span title="dom-content">content</span>;
- attribute <span>HTMLElement</span> <span title="dom-subject">subject</span>;
// <span>user interaction</span>
attribute boolean <span title="dom-hidden">hidden</span>;
@@ -7714,9 +7715,10 @@
<li><code title="attr-draggable">draggable</code></li>
<li><code title="attr-hidden">hidden</code></li>
<li><code title="attr-id">id</code></li>
- <li><code title="attr-item">item</code></li>
- <li><code title="attr-itemfor">itemfor</code></li>
+ <li><code title="attr-itemid">itemid</code></li>
<li><code title="attr-itemprop">itemprop</code></li>
+ <li><code title="attr-itemscope">itemscope</code></li>
+ <li><code title="attr-itemtype">itemtype</code></li>
<li><code title="attr-lang">lang</code></li>
<li><code title="attr-spellcheck">spellcheck</code></li>
<li><code title="attr-style">style</code></li>
@@ -11372,6 +11374,7 @@
<dd>If the <code title="attr-meta-http-equiv">http-equiv</code> attribute is present but not in the <span title="attr-meta-http-equiv-content-type">Encoding declaration state</span>: in a <code>head</code> element.</dd>
<dd>If the <code title="attr-meta-http-equiv">http-equiv</code> attribute is present but not in the <span title="attr-meta-http-equiv-content-type">Encoding declaration state</span>: in a <code>noscript</code> element that is a child of a <code>head</code> element.</dd>
<dd>If the <code title="attr-meta-name">name</code> attribute is present: where <span>metadata content</span> is expected.</dd>
+ <dd>If the <code title="attr-itemprop">itemprop</code> attribute is present: where <span>metadata content</span> is expected.</dd>
<dd>If the <code title="attr-itemprop">itemprop</code> attribute is present: where <span>phrasing content</span> is expected.</dd>
<dt>Content model:</dt>
<dd>Empty.</dd>
@@ -12248,7 +12251,52 @@
+ <h4 id="itemref">The <dfn><code>itemref</code></dfn> element</h4>
+ <dl class="element">
+ <dt>Categories</dt>
+ <dd><span>Metadata content</span>.</dd>
+ <dd><span>Flow content</span>.</dd>
+ <dd><span>Phrasing content</span>.</dd>
+ <dt>Contexts in which this element may be used:</dt>
+ <dd>Where <span>metadata content</span> is expected.</dd>
+ <dd>Where <span>phrasing content</span> is expected.</dd>
+ <dt>Content model:</dt>
+ <dd>Empty.</dd>
+ <dt>Content attributes:</dt>
+ <dd><span>Global attributes</span></dd>
+ <dd><code title="attr-itemref-refid">refid</code></dd>
+ <dt>DOM interface:</dt>
+ <dd>
+<pre class="idl">interface <dfn>HTMLItemRefElement</dfn> : <span>HTMLElement</span> {
+ attribute DOMString <span title="dom-itemref-refid">refid</span>;
+};</pre>
+ </dd>
+ </dl>
+
+ <p>The <code>itemref</code> element is used to include by reference
+ properties defined (using <code
+ title="attr-itemprop">itemprop</code>) by elements that are not
+ descendants of the <code>itemref</code> element's nearest ancestor
+ with an <code title="attr-itemscope">itemscope</code> attribute.</p>
+
+ <p>The <dfn title="attr-itemref-refid"><code>refid</code></dfn>
+ attribute is required, and its value must be the ID of an element in
+ the same <code>Document</code> as the <code>itemref</code>
+ element.</p>
+
+ <p class="note">This element is described in more detail as part of
+ the <span>microdata</span> model.</p>
+
+ <div class="impl">
+
+ <p>The <dfn title="dom-itemref-refid"><code>refid</code></dfn> IDL
+ attribute must <span>reflect</span> the content attribute of the
+ same name.</p>
+
+ </div>
+
+
<h4>The <dfn><code>style</code></dfn> element</h4>
<dl class="element">
@@ -48934,8 +48982,9 @@
<!-- v2
- * <ref property="foo" content="id"> to import the item with id="id"
- into the current microdata block
+ * <itemref itemprop="foo" src="url#id"> to import the item with
+ id="id" from url into the current microdata block as the value of
+ property foo?
* splitting the 'content' part of a property into multiple sub-bits,
as in:
@@ -48973,8 +49022,7 @@
existing content.</p>
-<!--END html5-->
-<!--START microdata1--><!--START html5-->
+<!--START html5-->
<h4>The basic syntax</h4>
@@ -48986,8 +49034,8 @@
property. Items and properties are represented by regular
elements.</p>
- <p>To create an item, the <code title="attr-item">item</code>
- attribute is used.</p>
+ <p>To create an item, the <code
+ title="attr-itemscope">itemscope</code> attribute is used.</p>
<p>To add a property to an item, the <code
title="attr-itemprop">itemprop</code> attribute is used on one of
@@ -48997,11 +49045,11 @@
<p>Here there are two items, each of which has the property "name":</p>
- <pre><div item>
+ <pre><div itemscope>
<p>My name is <span itemprop="name">Elizabeth</span>.</p>
</div>
-<div item>
+<div itemscope>
<p>My name is <span itemprop="name">Daniel</span>.</p>
</div></pre>
@@ -49013,7 +49061,7 @@
<p>Here the item has three properties:</p>
- <pre><div item>
+ <pre><div itemscope>
<p>My name is <span itemprop="name">Neil</span>.</p>
<p>My band is called <span itemprop="band">Four Parts Water</span>.</p>
<p>I am <span itemprop="nationality">British</span>.</p>
@@ -49030,9 +49078,10 @@
<div class="example">
- <p>In this example, the item has one property, "image", whose value is a URL:</p>
+ <p>In this example, the item has one property, "image", whose value
+ is a URL:</p>
- <pre><div item>
+ <pre><div itemscope>
<img itemprop="image" src="google-logo.png" alt="Google">
</div></pre>
@@ -49047,15 +49096,15 @@
<p>In this example, the item has one property,
"birthday", whose value is a date:</p>
- <pre><div item>
+ <pre><div itemscope>
I was born on <time itemprop="birthday" datetime="2009-05-10">May 10th 2009</time>.
</div></pre>
</div>
<p>Properties can also themselves be groups of name-value pairs, by
- putting the <code title="attr-item">item</code> attribute on the
- element that declares the property.</p>
+ putting the <code title="attr-itemscope">itemscope</code> attribute
+ on the element that declares the property.</p>
<p>Items that are not part of others are called <span>top-level
microdata items</span>.</p>
@@ -49065,9 +49114,9 @@
<p>In this example, the outer item represents a person, and the
inner one represents a band:</p>
- <pre><div item>
+ <pre><div itemscope>
<p>Name: <span itemprop="name">Amanda</span></p>
- <p>Band: <span itemprop="band" item> <span itemprop="name">Jazz Band</span> (<span itemprop="size">12</span> players)</span></p>
+ <p>Band: <span itemprop="band" itemscope> <span itemprop="name">Jazz Band</span> (<span itemprop="size">12</span> players)</span></p>
</div></pre>
<p>The outer item here has two properties, "name" and
@@ -49082,12 +49131,13 @@
</div>
- <p>Properties don't have to be given as descendants of the element
- with the <code title="attr-item">item</code> attribute. They can be
- associated with a specific <span title="concept-item">item</span>
- using the <code title="attr-itemfor">itemfor</code> attribute, which
- takes the ID of the element with the <code
- title="attr-item">item</code> attribute.</p>
+ <p>Properties that are not descendants of the element with the <code
+ title="attr-itemscope">itemscope</code> attribute can be associated
+ with the <span title="concept-item">item</span> using the
+ <code>itemref</code> element, whose <code
+ title="attr-itemref-refid">refid</code> attribute takes the ID of an
+ element with the <code title="attr-itemprop">itemprop</code>
+ attribute or an ancestor of such an element.</p>
<div class="example">
@@ -49095,11 +49145,13 @@
properties are separated from their <span
title="concept-item">items</span>:</p>
- <pre><div item id="amanda"></div>
-<p>Name: <span itemfor="amanda" itemprop="name">Amanda</span></p>
-<div itemfor="amanda" itemprop="band" item id="jazzband"></div>
-<p>Band: <span itemfor="jazzband" itemprop="name">Jazz Band</span></p>
-<p>Size: <span itemfor="jazzband" itemprop="size">12</span> players</p></pre>
+ <pre><div itemscope id="amanda"><itemref refid="a"><itemref refid="b"></div>
+<p id="a">Name: <span itemprop="name">Amanda</span></p>
+<div id="b" itemprop="band" itemscope id="jazzband"><itemref refid="c"></div>
+<div id="c">
+ <p>Band: <span itemprop="name">Jazz Band</span></p>
+ <p>Size: <span itemprop="size">12</span> players</p>
+</div></pre>
<p>This gives the same result as the previous example. The first
item has two properties, "name", set to "Amanda", and "band", set
@@ -49115,7 +49167,7 @@
<p>This example describes an ice cream, with two flavors:</p>
- <pre><div item>
+ <pre><div itemscope>
<p>Flavors in my favorite ice cream:</p>
<ul>
<li itemprop="flavor">Lemon sorbet</li>
@@ -49139,7 +49191,7 @@
"favorite-color" and "favorite-fruit", both
set to the value "orange":</p>
- <pre><div item>
+ <pre><div itemscope>
<span itemprop="favorite-color favorite-fruit">orange</span>
</div></pre>
@@ -49156,10 +49208,10 @@
<pre><figure>
<dd><img src="castle.jpeg">
- <dt><span item><span itemprop="name">The Castle</span></span> (1986)
+ <dt><span itemscope><span itemprop="name">The Castle</span></span> (1986)
</figure></pre>
- <pre><span item><meta itemprop="name" content="The Castle"></span>
+ <pre><span itemscope><meta itemprop="name" content="The Castle"></span>
<figure>
<dd><img src="castle.jpeg">
<dt>The Castle (1986)
@@ -49189,7 +49241,7 @@
<p>For this purpose, it is necessary to give each <span
title="concept-item">item</span> a type, such as
"com.example.person", or "org.example.cat", or
- "net.example.band". Types are identified in three ways:</p>
+ "net.example.band". Types are identified in two ways:</p>
<ul class="brief">
@@ -49198,9 +49250,6 @@
<li>As <span title="valid reversed DNS identifier">reversed DNS
labels</span>.
- <li>Using the names of <span title="predefined type">predefined
- types</span>, which are described below.
-
</ul>
<p><span title="URL">URLs</span> are self-explanatory. <span
@@ -49208,14 +49257,15 @@
strings such as "org.example.animals.cat" or "com.example.band".</p>
<p>The type for an <span title="concept-item">item</span> is given
- as the value of the <code title="attr-item">item</code>
- attribute.</p>
+ as the value of an <code title="attr-itemtype">itemtype</code>
+ attribute on the same element as the <code
+ title="attr-itemscope">itemscope</code> attribute.</p>
<div class="example">
<p>Here, the item is "org.example.animals.cat":</p>
-<pre><section item="org.example.animal.cat">
+<pre><section itemscope itemtype="org.example.animal.cat">
<h1 itemprop="name">Hedral</h1>
<p itemprop="desc">Hedral is a male american domestic
shorthair, with a fluffy black fur with white paws and belly.</p>
@@ -49229,14 +49279,71 @@
</div>
<p>An item can only have one type. The type gives the context for
- the properties: a property named "class" given for an item with the
- type "com.example.census.person" might refer to the class of an
- individual, while a property named "class" given for an item with
- the type "com.example.school.teacher" might refer to the classroom a
- teacher has been assigned.</p>
-
+ the properties, thus defining a vocabulary: a property named "class"
+ given for an item with the type "com.example.census.person" might
+ refer to the economic class of an individual, while a property named
+ "class" given for an item with the type "com.example.school.teacher"
+ might refer to the classroom a teacher has been assigned.</p>
+ <h4>Global identifiers for items</h4>
+
+ <p><i>This section is non-normative.</i></p>
+
+ <p>Sometimes, an <span title="concept-item">item</span> gives
+ information about a topic that has a global identifier. For example,
+ books can be identified by their ISBN number.</p>
+
+ <p>Vocabularies (as identified by the <code
+ title="attr-itemtype">itemtype</code> attribute) can be designed
+ such that <span title="concept-item">items</span> get associated
+ with their global identifier in an unambiguous way by expressing the
+ global identifiers as <span title="URL">URLs</span> given in an
+ <code title="attr-itemid">itemid</code> attribute.</p>
+
+ <p>The exact meaning of the <span title="URL">URLs</span> given in
+ <code title="attr-itemid">itemid</code> attributes depends on the
+ vocabulary used.</p>
+
+ <div class="example">
+
+ <p>Here, an item is talking about a particular book:</p>
+
+<pre><dl itemscope
+ itemtype="http://vocab.example.net/book"
+ <strong>itemid="urn:isbn:0-330-34032-8"</strong>>
+ <dt>Title
+ <dd itemprop="title">The Reality Dysfunction
+ <dt>Author
+ <dd itemprop="author">Peter F. Hamilton
+ <dt>Publication date
+ <dd><time itemprop="pubdate" datetime="1996-01-26">26 January 1996</time>
+</dl></pre>
+
+ <p>The "<code title="">http://vocab.example.net/book</code>"
+ vocabulary in this example would define that the <code
+ title="attr-itemid">itemid</code> attribute takes a <code
+ title="">urn:</code> <span>URL</span> pointing to the ISBN of the
+ book.</p>
+
+ </div>
+
+ <!-- (commented out since itemtype="" defines the meaning of the
+ identifier for now)
+ <p>Although it is common practice, authors are encouraged not to use
+ the same URL to identify multiple topics; in particular, an HTTP URL
+ usually identifies a specific resource (such as an image or
+ document), and authors are encouraged to not use them to identify
+ people, non-Web resources like companies, movies, and products, or
+ other abstract concepts. Using an HTTP URL as a global identifier
+ for something other than the resource actually designated by the URL
+ leads to a situation where it is ambiguous whether the identifier,
+ and thus the set of properties specified in the microdata,
+ references the page or something else.</p>
+ -->
+
+
+
<h4>Selecting names when defining vocabularies</h4>
<p><i>This section is non-normative.</i></p>
@@ -49286,7 +49393,7 @@
type. There are also a few additional properties whose names come
from other vocabularies.</p>
-<pre><section item="org.example.animal.cat">
+<pre><section itemscope itemtype="org.example.animal.cat">
<h1 itemprop="name com.example.fn">Hedral</h1>
<p itemprop="desc">Hedral is a male american domestic
shorthair, with a fluffy <span
@@ -49327,35 +49434,7 @@
</div>
- <h4>Predefined vocabularies</h4>
- <p><i>This section is non-normative.</i></p>
-
- <p>To make the most common tasks simpler, certain vocabularies have
- been predefined. These use short names for types and properties.</p>
-
- <div class="example">
-
- <p>For example, the <span title="md-vcard">vCard</span> vocabulary
- can be used to mark up people's names:</p>
-
- <pre><span item=vcard><span itemprop=fn>George Washington</span></span></pre>
-
- <p>This creates a single item with a single name-value pair, with
- the name "fn" and the value "George Washington". This is defined to
- map to the following vCard:</p>
-
- <pre>BEGIN:VCARD
-PROFILE:VCARD
-VERSION:3.0
-SOURCE:<var title="">document's address</var>
-FN:George Washington
-N:Washington;George;;;
-END:VCARD</pre>
-
- </div>
-
-
<h4>Using the microdata DOM API</h4>
<p><i>This section is non-normative.</i></p>
@@ -49372,10 +49451,17 @@
<p>Each <span title="concept-item">item</span> is represented in the
DOM by the element on which the relevant <code
- title="attr-item">item</code> attribute is found. The type of that
- element can be obtained using the <code
- title="dom-item">element.item</code> IDL attribute.</p>
+ title="attr-itemscope">itemscope</code> attribute is found. These
+ elements have their <code
+ title="dom-itemscope">element.itemscope</code> IDL attribute set to
+ true.</p>
+ <p>The type of <span title="concept-item">items</span> can be
+ obtained using the <code
+ title="dom-itemtype">element.itemtype</code> IDL attribute on the
+ element with the <code title="attr-itemscope">itemscope</code>
+ attribute.</p>
+
<div class="example">
<p>This sample shows how the <code
@@ -49468,7 +49554,7 @@
<p>If faced with the following from an earlier example:</p>
- <pre><section item="org.example.animal.cat">
+ <pre><section itemscope item="org.example.animal.cat">
<h1 itemprop="name com.example.fn">Hedral</h1>
<p itemprop="desc">Hedral is a male american domestic
shorthair, with a fluffy <span
@@ -49503,115 +49589,129 @@
<h4>The microdata model</h4>
<p>The microdata model consists of groups of name-value pairs known
- as <dfn title="concept-item">items</dfn>.</p>
+ as <span title="concept-item">items</span>.</p>
- <p>Each group has zero or more types, each name has one or more
- values, and each value is either a string or another group of
- name-value pairs.</p>
+ <p>Each group is known as an <span
+ title="concept-item">item</span>. Each <span
+ title="concept-item">item</span> can have an <span>item type</span>,
+ a <span>global identifier</span> (if the <span>item type</span>
+ <span title="support global identifiers for items">supports global
+ identifiers for its items</span>), and a list of name-value
+ pairs. Each name in the name-value pair is known as a <span
+ title="the properties of an item">property</span>, and each <span
+ title="the properties of an item">property</span> has one or more
+ <span title="concept-property-value">values</span>. Each <span title="concept-property-value">value</span> is either a string or itself a group of
+ name-value pairs (an <span title="concept-item">item</span>).</p>
+ <p>An <span title="concept-item">item</span> is said to be a
+ <dfn>typed item</dfn> when either it has an <span>item type</span>,
+ or it is the <span title="concept-property-value">value</span> of a <span title="the properties of an
+ item">property</span> of a <span>typed item</span>. The
+ <dfn>relevant type</dfn> for a <span>typed item</span> is the <span
+ title="concept-item">item</span>'s <span>item type</span>, if it has
+ one, or else is the <span>relevant type</span> of the <span
+ title="concept-item">item</span> for which it is a <span title="the
+ properties of an item">property</span>'s <span title="concept-property-value">value</span>.</p>
- <h4>Items: the <dfn title="attr-item"><code>item</code></dfn> attribute</h4>
- <p>Every <span title="HTML elements">HTML element</span> may have an
- <code title="attr-item">item</code> attribute specified.</p>
- <p>An element with the <code title="attr-item">item</code> attribute
- specified creates a new <span title="concept-item">item</span>, a
- group of name-value pairs.</p>
+ <h4>Items</h4>
- <p>The attribute, if specified, must have a value that is either:</p>
+ <p>Every <span title="HTML elements">HTML element</span> except the
+ <code>itemref</code> element may have an <dfn
+ title="attr-itemscope"><code>itemscope</code></dfn> attribute
+ specified. The <code title="attr-itemscope">itemscope</code>
+ attribute is a <span>boolean attribute</span>.</p>
+ <p>An element with the <code title="attr-itemscope">itemscope</code>
+ attribute specified, and that is not an <code>itemref</code>
+ element, creates a new <dfn title="concept-item">item</dfn>, a group
+ of name-value pairs.</p>
+
+ <p>The <code title="attr-itemscope">itemscope</code> attribute must
+ not be specified on <code>itemref</code> elements.</p>
+
+ <hr>
+
+ <p>Elements with an <code title="attr-itemscope">itemscope</code>
+ attribute may have an <dfn
+ title="attr-itemtype"><code>itemtype</code></dfn> attribute
+ specified, to give the <span>item type</span> of the <span
+ title="concept-item">item</span>.</p>
+
+ <p>The <code title="attr-itemtype">itemtype</code> attribute, if
+ specified, must have a value that is either:</p>
+
<ul>
- <li>The empty string, or</li>
-
<li>A <span>valid URL</span> that is an <span>absolute URL</span>
for which the string "<code
title="">http://www.w3.org/1999/xhtml/custom#</code>" is not a
<span>prefix match</span>, or</li>
- <li>A <span>valid reversed DNS identifier</span>, or</li>
+ <li>A <span>valid reversed DNS identifier</span>.</li>
- <li>A <span>predefined type</span>.</li>
-
</ul>
- <p>The <dfn>item type</dfn> of an element with an <code
- title="attr-item">item</code> attribute is the value of the
- element's <code title="attr-item">item</code> attribute. If the
- attribute's value is the empty string, the element is said to have
- no <span>item type</span>.</p>
+ <p>The <dfn>item type</dfn> of an <span
+ title="concept-item">item</span> is the value of its element's <code
+ title="attr-itemtype">itemtype</code> attribute, if it has one and
+ its value is not the empty string. If the <code
+ title="attr-itemtype">itemtype</code> attribute is missing or its
+ value is the empty string, the <span
+ title="concept-item">item</span> is said to have no <span>item
+ type</span>.</p>
+ <p>The <span>item type</span> must be a type defined in an <span
+ title="other applicable specifications">applicable
+ specification</span>.</p>
- <h4>Associating names with items</h4>
+ <p>The <code title="attr-itemtype">itemtype</code> attribute must
+ not be specified on elements that do not have an <code
+ title="attr-itemscope">itemscope</code> attribute specified.</p>
- <p>The <dfn title="attr-itemfor"><code>itemfor</code></dfn>
- attribute may be specified on any <span title="HTML elements">HTML
- element</span> to associate the element with an element with an
- <code title="attr-item">item</code> attribute. If the <code
- title="attr-itemfor">itemfor</code> attribute is specified, the
- attribute's value must be the ID of an element with an <code
- title="attr-item">item</code> attribute, in the same
- <code>Document</code> as the element with the <code
- title="attr-itemfor">itemfor</code> attribute.</p>
+ <hr>
- <p>An element's <dfn
- title="concept-item-corresponding">corresponding item</dfn> is
- determined by its position in the DOM and by any <code
- title="attr-itemfor">itemfor</code> attributes on the element, and
- is defined as follows:</p>
+ <p>Elements with an <code title="attr-itemscope">itemscope</code>
+ attribute and an <code title="attr-itemtype">itemtype</code>
+ attribute that references a vocabulary that is defined to
+ <dfn>support global identifiers for items</dfn> may also have an
+ <dfn title="attr-itemid"><code>itemid</code></dfn> attribute
+ specified, to give a global identifier for the <span
+ title="concept-item">item</span>, so that it can be related to other
+ <span title="concept-item">items</span> on pages elsewhere on the
+ Web.</p>
- <dl>
+ <p>The <code title="attr-itemid">itemid</code> attribute, if
+ specified, must have a value that is a <span>valid URL</span> that
+ is an <span>absolute URL</span>.</p>
- <dt>If the element has a <code title="attr-itemfor">itemfor</code>
- attribute</dt>
+ <p>The <dfn>global identifier</dfn> of an <span
+ title="concept-item">item</span> is the value of its element's <code
+ title="attr-itemid">itemid</code> attribute, if it has one. If the
+ <code title="attr-itemid">itemid</code> attribute is missing or its
+ value is the empty string, it is said to have no <span>global
+ identifier</span>.</p>
- <dd><p>If there is an element in the document with an ID equal to
- the value of the <code title="attr-itemfor">itemfor</code>
- attribute, and if the first such element has an <code
- title="attr-item">item</code> attribute specified, then that
- element is the <span
- title="concept-item-corresponding">corresponding
- item</span>. Otherwise, there is no <span
- title="concept-item-corresponding">corresponding
- item</span>.</p></dd>
+ <p>The <code title="attr-itemid">itemid</code> attribute must not be
+ specified on elements that do not have both an <code
+ title="attr-itemscope">itemscope</code> attribute and an <code
+ title="attr-itemtype">itemtype</code> attribute specified, and must
+ not be specified on elements with an <code
+ title="attr-itemscope">itemscope</code> attribute whose <code
+ title="attr-itemtype">itemtype</code> attribute specifies a
+ vocabulary that does not <span>support global identifiers for
+ items</span>, as defined by that vocabulary's specification.</p>
- <dt>If the element has no <code title="attr-itemfor">itemfor</code>
- attribute but does have an ancestor with an <code
- title="attr-item">item</code> attribute specified</dt>
- <dd><p>The nearest ancestor element with the <code
- title="attr-item">item</code> attribute specified is the element's
- <span title="concept-item-corresponding">corresponding
- item</span>.</p></dd>
-
- <dt>If the element has neither <code
- title="attr-itemfor">itemfor</code> attribute nor an ancestor with
- an <code title="attr-item">item</code> attribute specified</dt>
-
- <dd><p>The element has no <span
- title="concept-item-corresponding">corresponding
- item</span>.</p></dd>
-
- </dl>
-
- <p>The list of elements that create <span
- title="concept-item">items</span> but do not themselves have a <span
- title="concept-item-corresponding">corresponding item</span> forms
- the list of <dfn>top-level microdata items</dfn>.</p>
-
-
<h4>Names: the <dfn title="attr-itemprop"><code>itemprop</code></dfn> attribute</h4>
- <p>Every <span title="HTML elements">HTML element</span> that has a
- <span title="concept-item-corresponding">corresponding item</span>
- may have an <code title="attr-itemprop">itemprop</code> attribute
- specified.</p>
+ <p>Every <span title="HTML elements">HTML element</span> may have an
+ <code title="attr-itemprop">itemprop</code> attribute specified, if
+ doing so <span title="the properties of an item">adds a
+ property</span> to one or more <span
+ title="concept-item">items</span> (as defined below).</p>
- <p>An element with the <code title="attr-itemprop">itemprop</code>
- attribute specified adds one or more name-value pairs to its
- <span title="concept-item-corresponding">corresponding item</span>.</p>
-
<p>The <code title="attr-itemprop">itemprop</code> attribute, if
specified, must have a value that is an <span>unordered set of
unique space-separated tokens</span> representing the names of the
@@ -49629,27 +49729,35 @@
<li>A <span>valid reversed DNS identifier</span>, or</li>
- <li>A <span>predefined global property name</span> allowed in this
- situation, or</li>
+ <li>If the item is a <span>typed item</span>: a string allowed in
+ this situation according to the specification that defines the
+ <span>relevant type</span> for the item, or</li>
- <li>If the item's <span>item type</span> is a <span>predefined
- type</span>: a <span>predefined property name</span> allowed in
- this situation, or</li>
+ <li>If the item is not a <span>typed item</span>: a string that
+ contains no U+002E FULL STOP (.) characters and no U+003A COLON (:)
+ characters.</li>
- <li>If the item has no <span>item type</span> but it is itself the
- value of a property whose property name is a <span>predefined
- property name</span>: a <span>predefined property name</span>
- allowed in this situation, or</li>
+ </ul>
- <li>If the item's <span>item type</span> is not a <span>predefined
- type</span> and the item is not the value of a property whose
- property name is a <span>predefined property name</span>: a string
- that contains no U+002E FULL STOP (.) or U+003A COLON (:)
- characters, and that is not a <span>predefined global property
- name</span>.</li>
+ <p>When an element with an <code
+ title="concept-itemprop">itemprop</code> attribute <span title="the
+ properties of an item">adds a property</span> to multiple <span
+ title="concept-item">items</span>, the requirement above regarding
+ the tokens applies for each <span title="concept-item">item</span>
+ individually.</p>
- </ul>
+ <!--
+ e.g.:
+
+ <div itemscope itemtype="http://example.com/a"> <ref refid="x"> </div>
+ <div itemscope itemtype="http://example.com/b"> <ref refid="x"> </div>
+ <meta id="x" itemprop="z" content="">
+
+ "z" had better be valid for both http://example.com/a and http://example.com/b
+
+ -->
+
<p>The <dfn>property names</dfn> of an element are the tokens that
the element's <code title="attr-itemprop">itemprop</code> attribute
is found to contain when its value is <span title="split a string on
@@ -49657,9 +49765,10 @@
duplicates removed (leaving only the first occurrence of each
name).</p>
- <p>With an <span title="concept-item">item</span>, the properties
+ <p>Within an <span title="concept-item">item</span>, the properties
are unordered with respect to each other, except for properties with
- the same name, which are ordered in <span>tree order</span>.</p>
+ the same name, which are ordered in the order they are given by the
+ algorithm that defines <span>the properties of an item</span>.</p>
<div class="example">
@@ -49667,7 +49776,7 @@
and "2", <em>in that order</em>, but whether the "a" property comes
before the "b" property or not is not important:</p>
- <pre><div item>
+ <pre><div itemscope>
<p itemprop="a">1</p>
<p itemprop="a">2</p>
<p itemprop="b">test</p>
@@ -49675,7 +49784,7 @@
<p>Thus, the following is equivalent:</p>
- <pre><div item>
+ <pre><div itemscope>
<p itemprop="b">test</p>
<p itemprop="a">1</p>
<p itemprop="a">2</p>
@@ -49683,15 +49792,28 @@
<p>As is the following:</p>
- <pre><div item>
+ <pre><div itemscope>
<p itemprop="a">1</p>
<p itemprop="b">test</p>
<p itemprop="a">2</p>
</div></pre>
+ <p>And the following:</p>
+
+ <pre><div itemscope>
+ <itemref refid="x">
+ <p itemprop="b">test</p>
+ <p itemprop="a">2</p>
+</div>
+<div id="x">
+ <p itemprop="a">1</p>
+</div>
+</pre>
+
</div>
+
<h4>Values</h4>
<p>The <dfn title="concept-property-value">property value</dfn> of a
@@ -49701,8 +49823,8 @@
<dl>
- <dt>If the element also has an <code title="attr-item">item</code>
- attribute</dt>
+ <dt>If the element also has an <code
+ title="attr-itemscope">itemscope</code> attribute</dt>
<dd><p>The value is the <span title="concept-item">item</span>
created by the element.</p></dd>
@@ -49775,6 +49897,107 @@
+ <h4>Associating names with items</h4>
+
+ <p>To find <dfn>the properties of an item</dfn>, the user agent must
+ run the following steps:</p>
+
+ <ol>
+
+ <li><p>Let <var title="">root</var> be the element with the <code
+ title="attr-itemscope">itemscope</code> attribute. This element
+ cannot be an <code>itemref</code> element.</p></li>
+
+ <li><p>Let <var title="">queue</var> be a stack of elements
+ initially containing the child elements of <var
+ title="">root</var>, if any, in <span>tree order</span> (so that
+ the first child element of <var title="">root</var> will be the
+ first one to be popped from the stack). This list will be the one
+ that holds the elements that still need to be crawled.</p></li>
+
+ <li><p>Let <var title="">properties</var> be an empty list of
+ elements. This list will be the result of the algorithm: a list of
+ elements with properties that apply to <var
+ title="">root</var>.</p></li>
+
+ <li><p>Let <var title="">visited nodes</var> be a list of elements
+ containing just <var title="">root</var>. This list is used to
+ avoid loops caused by <code>itemref</code> elements.</p></li>
+
+ <li><p>Let <var title="">error found</var> be false. If it is set
+ to true by the algorithm below, then an <code>itemref</code> error
+ has been found.</p></li>
+
+ <li><p><i>Loop</i>: Pop the top element from <var
+ title="">queue</var> and let <var title="">current</var> be that
+ element.</p></li>
+
+ <li><p>If <var title="">current</var> is already in <var
+ title="">visited nodes</var> then let <var title="">error
+ found</var> be true, and skip down to the step marked <i>end of
+ loop</i>.</p></li>
+
+ <li><p>If <var title="">current</var> has an <code
+ title="attr-itemprop">itemprop</code> attribute, then append <var
+ title="">current</var> to <var title="">properties</var>.</p></li>
+
+ <li><p>Append <var title="">current</var> to <var title="">visited
+ nodes</var>.</p></li>
+
+ <li><p>If <var title="">current</var> is an <code>itemref</code>
+ element with a <code title="attr-itemref-refid">refid</code>
+ attribute, and there is an element in the document whose <span
+ title="concept-id">ID</span> matches the value of <var
+ title="">current</var>'s <code
+ title="attr-itemref-refid">refid</code> attribute, then push the
+ first element in the document whose <span
+ title="concept-id">ID</span> matches the value of <var
+ title="">current</var>'s <code
+ title="attr-itemref-refid">refid</code> attribute onto <var
+ title="">queue</var> (so that it will be the next element to be
+ popped from <var title="">queue</var>).</p></li>
+
+ <li><p>Otherwise, if <var title="">current</var> is not a
+ <code>refid</code> element, and <var title="">current</var> does
+ not have an <code title="attr-itemscope">itemscope</code>
+ attribute, and <var title="">current</var> is an element with child
+ elements, then: push all the child elements of <var
+ title="">current</var> onto <var title="">queue</var>, in
+ <span>tree order</span> (so the first child of <var
+ title="">current</var> will be the next element to be popped from
+ <var title="">queue</var>).</p></li>
+
+ <li><p><i>End of loop</i>: If <var title="">queue</var> is not
+ empty, return to the step marked <i>loop</i>.</p></li>
+
+ <li><p>Return <var title="">properties</var>. That is the list of
+ <span title="the properties of an item">properties of the
+ item</span> <var title="">root</var>.</p></li>
+
+ </ol>
+
+ <p>A document must not contain any <code>itemref</code> elements
+ that would cause the <var title="">error found</var> flag in the
+ algorithm above to be set to true if the <span title="the properties
+ of an item">properties</span> of all the <span
+ title="concept-item">items</span> in that document were to be
+ determined.</p>
+
+ <p>A document must not contain any elements that have an <code
+ title="attr-itemprop">itemprop</code> attribute that would not be
+ found to be a property of any of the <span
+ title="concept-item">items</span> in that document were their <span
+ title="the properties of an item">properties</span> all to be
+ determined.</p>
+
+ <p>An <span title="concept-item">item</span> is a <dfn
+ title="top-level microdata items">top-level microdata item</dfn> if
+ its element does not have an <code
+ title="attr-itemprop">itemprop</code> attribute.</p>
+
+
+
+
<h3>Microdata DOM API</h3>
<dl class="domintro">
@@ -49832,21 +50055,22 @@
containing all the <span>top-level microdata items</span> in the
document.</p>
- <p>The <dfn title="dom-item"><code>item</code></dfn> IDL attribute
- on elements must <span>reflect</span> the element's <code
- title="attr-item">item</code> content attribute.</p>
+ <p>The <dfn title="dom-itemscope"><code>itemscope</code></dfn>, <dfn
+ title="dom-itemtype"><code>itemtype</code></dfn>, <dfn
+ title="dom-itemid"><code>itemid</code></dfn>, and <dfn
+ title="dom-itemprop"><code>itemprop</code></dfn> IDL attributes on
+ <span>HTML elements</span> must <span>reflect</span> the respective
+ content attributes of the same name.</p>
- <p>The <dfn title="dom-itemprop"><code>itemprop</code></dfn> IDL
- attribute on elements must <span>reflect</span> the element's <code
- title="attr-itemprop">itemprop</code> content attribute.</p>
-
<p>The <dfn title="dom-properties"><code>properties</code></dfn> IDL
- attribute on elements must return an
+ attribute on <span>HTML elements</span> must return an
<code>HTMLPropertyCollection</code> rooted at the
<code>Document</code> node, whose filter matches only elements that
- have <span>property names</span> and have a <span
- title="concept-item-corresponding">corresponding item</span> that is
- equal to the element on which the attribute was invoked.</p>
+ have <span>property names</span> and are <span title="the properties
+ of an item">the properties of the item</span> created by the element
+ on which the attribute was invoked, while that element is an <span
+ title="concept-item">item</span>, and matches nothing the rest of
+ the time.</p>
<p>The <dfn title="dom-content"><code>content</code></dfn> IDL
attribute's behavior depends on the element, as follows:</p>
@@ -49900,20 +50124,13 @@
</dl>
- <p>The <dfn title="dom-subject"><code>itemfor</code></dfn> IDL
- attribute on elements must <span>reflect</span> the element's <code
- title="attr-itemfor">itemfor</code> content attribute.</p>
-
</div>
-<!--END microdata1--><!--END html5-->
-<!--START microdata2-->
-<!--END microdata2-->
-<!--START microdata3-->
-<!--END microdata3-->
-<!--START html5-->
+<!--END html5-->
+<!--START vocabs-->
+
<h3>Predefined vocabularies</h3>
<p>A number of <dfn title="predefined type">predefined types</dfn>
@@ -49926,20 +50143,6 @@
- <h4>General</h4>
-
- <p>The <span>predefined global property name</span> <dfn
- title="md-about"><code>about</code></dfn> can be used to name an
- <span title="concept-item">item</span> for the purposes of
- identifying or referring to the data defined in that item.</p>
-
- <p>A single property with the name <code
- title="md-about">about</code> may be present within each <span
- title="concept-item">item</span>. Its <span
- title="concept-property-value">value</span> must be an
- <span>absolute URL</span>.</p>
-
-
<h4>vCard</h4>
<p>An item with the <span>predefined type</span> <dfn
@@ -51414,8 +51617,29 @@
</div>
+ <div class="example">
+ <p>The <span title="md-vcard">vCard</span> vocabulary can be used
+ to just mark up people's names:</p>
+ <pre><span itemscope itemtype=vcard><span itemprop=fn>George Washington</span></span></pre>
+
+ <p>This creates a single item with a single name-value pair, with
+ the name "fn" and the value "George Washington". This is defined to
+ map to the following vCard:</p>
+
+ <pre>BEGIN:VCARD
+PROFILE:VCARD
+VERSION:3.0
+SOURCE:<var title="">document's address</var>
+FN:George Washington
+N:Washington;George;;;
+END:VCARD</pre>
+
+ </div>
+
+
+
<h4>vEvent</h4>
<p>An item with the <span>predefined type</span> <dfn
@@ -52216,14 +52440,13 @@
</div>
+ <!--START html5-->
<div class="impl">
<h3>Converting HTML to other formats</h3>
- <p>In all these algorithms, except where otherwise stated,
- operations that iterate over a series of elements (whether items,
- properties, or otherwise) must do so in <span>tree order</span>.</p>
+ <!--END html5-->
<p>A generic API upon which the vocabulary-specific conversions
defined below (vCard, iCalendar) can be built will need to provide
@@ -52264,7 +52487,10 @@
</ul>
+ <!--START html5-->
+ <!--END vocabs-->
+
<h4>JSON</h4>
<p>Given a list of nodes <var title="">nodes</var> in a
@@ -52300,19 +52526,27 @@
<li><p>Let <var title="">result</var> be an empty object.</p></li>
- <li><p>Add an entry to <var title="">result</var> called "<code
- title="">type</code>" whose value is the <span>item type</span> of
- <var title="">item</var>.</p></li>
+ <li><p>If the <var title="">item</var> has an <span>item
+ type</span>, add an entry to <var title="">result</var> called
+ "<code title="">type</code>" whose value is the <span>item
+ type</span> of <var title="">item</var>.</p></li>
+ <li><p>If the <var title="">item</var> has an <span>global
+ identifier</span>, add an entry to <var title="">result</var>
+ called "<code title="">id</code>" whose value is the <span>global
+ identifier</span> of <var title="">item</var>.</p></li>
+
<li><p>Let <var title="">properties</var> be an empty
object.</p></li>
<li>
<p>For each element <var title="">element</var> that has one or
- more <span>property names</span> and whose <span
- title="concept-item-corresponding">corresponding item</span> is
- <var title="">item</var>, run the following substeps:</p>
+ more <span>property names</span> and is one of <span title="the
+ properties of an item">the properties of the item</span> <var
+ title="">item</var>, in the order those elements are given by the
+ algorithm that returns <span>the properties of an item</span>, run
+ the following substeps:</p>
<ol>
@@ -52455,9 +52689,8 @@
<li>
- <p>For each <code>article</code>, <code>section</code>,
- <code>blockquote</code>, and <code>q</code> element in the
- <code>Document</code> that has a <code title="">cite</code>
+ <p>For each <code>blockquote</code> and <code>q</code> element in
+ the <code>Document</code> that has a <code title="">cite</code>
attribute that <span title="resolve a url">resolves</span>
successfully relative to the element, generate the following
triple:</p>
@@ -52498,6 +52731,7 @@
</li>
+<!--
<li>
<p>If the element is, or is a descendant of, an
@@ -52514,6 +52748,7 @@
</dl>
</li>
+-->
</ol>
@@ -52527,34 +52762,23 @@
<ol>
- <li><p>If of the elements whose <span
- title="concept-item-corresponding">corresponding item</span> is
- <var title="">item</var>, there are any with a <span
- title="property names">property name</span> equal to the string
- "<code title="md-about">about</code>", and the first such element
- is a <span title="URL property elements">URL property
- element</span>, and its <span
- title="concept-property-value">value</span> is not an <span
- title="concept-item">item</span>, let <var title="">subject</var>
- be the <span title="concept-property-value">value</span> of that
- property. Otherwise, let <var title="">subject</var> be a new blank
- node.</p></li>
+ <li><p>If <var title="">item</var> has a <span>global
+ identifier</span> and that <span>global identifier</span> is an
+ <span>absolute URL</span>, let <var title="">subject</var> be that
+ <span>global identifier</span>. Otherwise, let <var
+ title="">subject</var> be a new blank node.</p></li>
<li><p>Let <var title="">type</var> be the <span>item type</span>
of <var title="">item</var>.</p></li>
- <li>
+ <li><p>If <var title="">type</var> is neither the empty string nor
+ an <span>absolute URL</span>, then let <var title="">type</var> be
+ the result of concatenating the string "<code
+ title="">http://www.w3.org/1999/xhtml/custom#</code>" with the <var
+ title="">type</var>, with any characters in <var
+ title="">type</var> that are not valid in the <ifragment>
+ production of the IRI syntax being %-escaped.</p></li>
- <p>If <var title="">type</var> is neither the empty string nor an
- <span>absolute URL</span>, then let <var title="">type</var> be
- the result of concatenating the string "<code
- title="">http://www.w3.org/1999/xhtml/custom#</code>" with the
- <var title="">type</var>, with any characters in <var
- title="">type</var> that are not valid in the <ifragment>
- production of the IRI syntax being %-escaped.</p>
-
- </li>
-
<li>
<p>If <var title="">type</var> is not the empty string, generate
@@ -52571,9 +52795,11 @@
<li>
<p>For each element <var title="">element</var> that has one or
- more <span>property names</span> and whose <span
- title="concept-item-corresponding">corresponding item</span> is
- <var title="">item</var>, run the following substeps:</p>
+ more <span>property names</span> and is one of <span title="the
+ properties of an item">the properties of the item</span> <var
+ title="">item</var>, in the order those elements are given by the
+ algorithm that returns <span>the properties of an item</span>, run
+ the following substeps:</p>
<ol>
@@ -52589,7 +52815,7 @@
<!-- could support <time> here somehow, though we'd have to
reserialise it, check if the <time> was valid, check if it had a
- .date, a .time, a .timezone, etc. -->
+ date, a time, a timezone, etc. -->
<li><p>Otherwise, if <var title="">element</var> is not one of
the <span>URL property elements</span>, let <var
@@ -52604,10 +52830,7 @@
following substeps:</p>
<ol>
-
- <li><p>If <var title="">name</var> is equal to the string
- "<code title="md-about">about</code>", skip this name.</p></li>
-
+<!--
<li><p>Otherwise, if <var title="">type</var> is <code
title="md-work">work</code>, and <var title="">name</var> is
equal to the string "<code title="md-work-title">title</code>",
@@ -52627,10 +52850,10 @@
title="md-work-license">license</code>", let <var
title="">name</var> be the string "<code
title="">http://www.w3.org/1999/xhtml/vocab#license</code>".</p></li>
-
- <li><p>Otherwise, if <var title="">name</var> is not an
- <span>absolute URL</span>, then let <var title="">name</var> be
- the result of concatenating the string "<code
+-->
+ <li><p><!--Otherwise...--> If <var title="">name</var> is not
+ an <span>absolute URL</span>, then let <var title="">name</var>
+ be the result of concatenating the string "<code
title="">http://www.w3.org/1999/xhtml/custom#</code>" with <var
title="">name</var>, with any characters in <var
title="">name</var> that are not valid in the <ifragment>
@@ -52661,8 +52884,9 @@
</ol>
+<!--END html5-->
+<!--START vocabs-->
-
<h4>vCard</h4>
<p>Given a list of nodes <var title="">nodes</var> in a
@@ -53652,9 +53876,9 @@
names</span>.</p> <!-- of course since icalendar doesn't define
error handling, this is somewhat problematic. -->
+<!--END vocabs-->
+<!--START html5-->
-
-
<h4>Atom</h4>
<p>Given a <code>Document</code> <var title="">source</var>, a user
@@ -53676,6 +53900,7 @@
<li><p>Append a <code title="">feed</code> element in the
<span>Atom namespace</span> to <var title="">R</var>.</p></li>
+<!--
<li>
<p>For each element <var title="">candidate</var> that is, or is a
@@ -53696,6 +53921,7 @@
title="">property</var>.</p>
</li>
+-->
<li>
@@ -53925,6 +54151,7 @@
</li>
+<!--
<li>
<p>For each element <var title="">candidate</var> that is, or is
@@ -53947,6 +54174,7 @@
title="">property</var>.</p>
</li>
+-->
<li>
@@ -69126,6 +69354,8 @@
</li>
+<!-- v2: deal with multiple vCards -->
+<!--
<li>
<p>The user agent must take the <span>list of dragged nodes</span>
@@ -69134,7 +69364,6 @@
<code title="dom-DragEvent-dataTransfer">dataTransfer</code>
member, associated with the <code
title="">text/directory;profile=vcard</code> format.</p>
- <!-- v2: deal with multiple vCards -->
</li>
@@ -69148,6 +69377,7 @@
title="">text/calendar;component=vevent</code> format.</p>
</li>
+-->
<!-- v2: text/html -->
@@ -74513,8 +74743,8 @@
"<code title="">set-cookie2</code>" or another cookie-related
header name</dt>
- <dd><p>Handle the cookie as defined by the appropriate spec, with
- the resource being the one with the host <var
+ <dd><p>Handle the cookie as defined by the appropriate
+ specification, with the resource being the one with the host <var
title="">host</var>, the port <var title="">port</var>, the path
(and possibly query parameters) <var title="">resource
name</var>, and the scheme <code title="">http</code> if <var
@@ -91221,6 +91451,7 @@
Larry Page,
Lars Gunther<!-- Keryx Web -->,
Lars Solberg,
+ Laura Granka,
Laura L. Carlson,
Laura Wisewell,
Laurens Holst,
@@ -91419,6 +91650,10 @@
features first widely deployed by the Windows Internet Explorer
browser.</p>
+ <p>Thanks to the participants of the microdata usability study for
+ allowing us to use their mistakes as a guide for designing the
+ microdata feature.</p>
+
<div class="impl">
<p>Special thanks and $10,000 to David Hyatt who came up with a