HTML Standard Tracker

Filter

File a bug

SVNBugCommentTime (UTC)
4069Restructure how microdata vocabularies are defined; fix microdata to address some issues found while doing that; clean up the RDF conversion.2009-10-04 08:50
@@ -49722,23 +49722,24 @@ document.body.appendChild(outer);</pre>
 
   <ul>
 
    <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/microdata#</code>" is not a
    <span>prefix match</span>, or</li>
 
    <li>A <span>valid reversed DNS identifier</span>, 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 is a <span>typed item</span>: a <dfn>defined
+   property name</dfn> allowed in this situation according to the
+   specification that defines the <span>relevant type</span> for the
+   item, 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>
 
   </ul>
 
   <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
@@ -50121,65 +50122,56 @@ document.body.appendChild(outer);</pre>
 
    <dd><p>The attribute must act the same as the element's
    <code>textContent</code> attribute.</p></dd>
 
   </dl> 
 
   </div>
 
 
 <!--END html5-->
-<!--START vocabs-->
-
-
-  <h3>Predefined vocabularies</h3>
-
-  <p>A number of <dfn title="predefined type">predefined types</dfn>
-  exist, for describing common structures. Each such type has a set of
-  <dfn title="predefined property name">predefined property
-  names</dfn> that are used to describe data of that type. In
-  addition, there are some <dfn title="predefined global property
-  name">predefined global property names</dfn> that can be used for
-  any item.</p>
 
+  <h3>Microdata vocabularies</h3>
 
+<!--START vocabs-->
 
   <h4>vCard</h4>
 
-  <p>An item with the <span>predefined type</span> <dfn
-  title="md-vcard"><code>vcard</code></dfn> represents a person's or
-  organization's contact information.</p>
+<!--START vCard-->
+
+  <p>An item with the <span>item type</span> <dfn
+  title="md-vcard"><code>http://microformats.org/profile/hcard</code></dfn>
+  represents a person's or organization's contact information.</p>
 
-  <p>The following are the type's <span title="predefined property
-  name">predefined property names</span>. They are based on the
+  <p>The following are the type's <span title="defined property
+  name">defined property names</span>. They are based on the
   vocabulary defined in the vCard specification and its extensions,
   where more information on how to interpret the values can be
   found. <a href="#refsRFC2426">[RFC2426]</a> <a
   href="#refsRFC4770">[RFC4770]</a></p>
 
   <dl>
 
-
    <dt><dfn title="md-vcard-fn"><code>fn</code></dfn></dt>
 
    <dd>
 
     <p>Gives the formatted text corresponding to the name of the
     person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Exactly one property with the name <code
     title="md-vcard-fn">fn</code> must be present within each <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-n"><code>n</code></dfn></dt>
 
    <dd>
 
     <p>Gives the structured name of the person or organization.</p>
 
@@ -50189,21 +50181,21 @@ document.body.appendChild(outer);</pre>
     title="md-vcard-n-family-name">family-name</code>, <code
     title="md-vcard-n-given-name">given-name</code>, <code
     title="md-vcard-n-additional-name">additional-name</code>, <code
     title="md-vcard-n-honorific-prefix">honorific-prefix</code>, and
     <code title="md-vcard-n-honorific-suffix">honorific-suffix</code>
     properties.</p>
 
     <p>Except when one of the conditions given below applies, exactly
     one property with the name <code title="md-vcard-n">n</code> must
     be present within each <span title="concept-item">item</span> with
-    the type <code title="md-vcard">vcard</code>.</p>
+    the type <code title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
     <p>If one of the following conditions does apply, then the <code
     title="md-vcard-n">n</code> may be omitted:</p>
 
     <dl>
 
      <dt>The <span title="concept-item">item</span> with the type
      <code title="">vcard</code> has both an <code
      title="md-vcard-fn">fn</code> property and an <code
      title="md-vcard-org">org</code> property, and they both have
@@ -50273,97 +50265,97 @@ document.body.appendChild(outer);</pre>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-n-family-name">family-name</code> may be present
     within the <span title="concept-item">item</span> that forms the
     <span title="concept-property-value">value</span> of the <code
     title="md-vcard-n">n</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-n-given-name"><code>given-name</code></dfn> (inside <code title="md-vcard-n">n</code>)</dt>
 
    <dd>
 
     <p>Gives the given-name of the person.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-n-given-name">given-name</code> may be present
     within the <span title="concept-item">item</span> that forms the
     <span title="concept-property-value">value</span> of the <code
     title="md-vcard-n">n</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-n-additional-name"><code>additional-name</code></dfn> (inside <code title="md-vcard-n">n</code>)</dt>
 
    <dd>
 
     <p>Gives the any additional names of the person.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-n-additional-name">additional-name</code> may be
     present within the <span title="concept-item">item</span> that
     forms the <span title="concept-property-value">value</span> of the
     <code title="md-vcard-n">n</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-n-honorific-prefix"><code>honorific-prefix</code></dfn> (inside <code title="md-vcard-n">n</code>)</dt>
 
    <dd>
 
     <p>Gives the honorific prefix of the person.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-n-honorific-prefix">honorific-prefix</code> may be
     present within the <span title="concept-item">item</span> that
     forms the <span title="concept-property-value">value</span> of the
     <code title="md-vcard-n">n</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-n-honorific-suffix"><code>honorific-suffix</code></dfn> (inside <code title="md-vcard-n">n</code>)</dt>
 
    <dd>
 
     <p>Gives the honorific suffix of the person.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-n-honorific-suffix">honorific-suffix</code> may be
     present within the <span title="concept-item">item</span> that
     forms the <span title="concept-property-value">value</span> of the
     <code title="md-vcard-n">n</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-nickname"><code>nickname</code></dfn></dt>
 
    <dd>
 
     <p>Gives the nickname of the person or organization.</p>
 
@@ -50373,55 +50365,55 @@ document.body.appendChild(outer);</pre>
     thing. It can also be used to specify a familiar form of a proper
     name specified by the <code title="md-vcard-fn">fn</code> or <code
     title="md-vcard-n">n</code> properties.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-nickname">nickname</code> may be present within
     each <span title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-photo"><code>photo</code></dfn></dt>
 
    <dd>
 
     <p>Gives a photograph of the person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     an <span>absolute URL</span>.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-photo">photo</code> may be present within each
     <span title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-bday"><code>bday</code></dfn></dt>
 
    <dd>
 
     <p>Gives the birth date of the person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be a
     <span>valid date string</span>.</p>
 
     <p>A single property with the name <code
     title="md-vcard-bday">bday</code> may be present within each <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-adr"><code>adr</code></dfn></dt>
 
    <dd>
 
     <p>Gives the delivery address of the person or organization.</p>
 
@@ -50438,57 +50430,57 @@ document.body.appendChild(outer);</pre>
     title="md-vcard-adr-postal-code">postal-code</code> property, and
     optionally a <code
     title="md-vcard-adr-country-name">country-name</code>
     property.</p>
 
     <p>If no <code title="md-vcard-adr-type">type</code> properties
     are present within an <span title="concept-item">item</span> that
     forms the <span title="concept-property-value">value</span> of an
     <code title="md-vcard-adr">adr</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>, then the <span>address type
+    title="md-vcard">http://microformats.org/profile/hcard</code>, then the <span>address type
     strings</span> <code title="mv-vcard-type-adr-intl">intl</code>,
     <code title="mv-vcard-type-adr-postal">postal</code>, <code
     title="mv-vcard-type-adr-parcel">parcel</code>, and <code
     title="mv-vcard-type-adr-work">work</code> are implied.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-adr">adr</code> may be present within each <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-adr-type"><code>type</code></dfn> (inside <code title="md-vcard-adr">adr</code>)</dt>
 
    <dd>
 
     <p>Gives the type of delivery address.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text that, when compared in a <span>case-sensitive</span> manner,
     is equal to one of the <span>address type strings</span>.</p>
 
     <p>Within each <span title="concept-item">item</span> with the
-    type <code title="md-vcard">vcard</code>, there must be no more
+    type <code title="md-vcard">http://microformats.org/profile/hcard</code>, there must be no more
     than one <code title="md-vcard-adr">adr</code> property <span
     title="concept-item">item</span> with a <code
     title="md-vcard-adr-type">type</code> property whose value is
     <code title="md-vcard-type-adr-pref">pref</code>.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-adr-type">type</code> may be present within the
     <span title="concept-item">item</span> that forms the <span
     title="concept-property-value">value</span> of an <code
     title="md-vcard-adr">adr</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>, but within each such <code
+    title="md-vcard">http://microformats.org/profile/hcard</code>, but within each such <code
     title="md-vcard-adr">adr</code> property <span
     title="concept-item">item</span> there must only be one <code
     title="md-vcard-adr-type">type</code> property per distinct
     value.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-adr-post-office-box"><code>post-office-box</code></dfn> (inside <code title="md-vcard-adr">adr</code>)</dt>
 
    <dd>
@@ -50498,141 +50490,141 @@ document.body.appendChild(outer);</pre>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-adr-post-office-box">post-office-box</code> may be
     present within the <span title="concept-item">item</span> that
     forms the <span title="concept-property-value">value</span> of an
     <code title="md-vcard-adr">adr</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-adr-extended-address"><code>extended-address</code></dfn> (inside <code title="md-vcard-adr">adr</code>)</dt>
 
    <dd>
 
     <p>Gives an additional component of the delivery address of the
     person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-adr-extended-address">extended-address</code> may
     be present within the <span title="concept-item">item</span> that
     forms the <span title="concept-property-value">value</span> of an
     <code title="md-vcard-adr">adr</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-adr-street-address"><code>street-address</code></dfn> (inside <code title="md-vcard-adr">adr</code>)</dt>
 
    <dd>
 
     <p>Gives the street address component of the delivery address of
     the person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-adr-street-address">street-address</code> may be
     present within the <span title="concept-item">item</span> that
     forms the <span title="concept-property-value">value</span> of an
     <code title="md-vcard-adr">adr</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-adr-locality"><code>locality</code></dfn> (inside <code title="md-vcard-adr">adr</code>)</dt>
 
    <dd>
 
     <p>Gives the locality component (e.g. city) of the delivery
     address of the person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>A single property with the name <code
     title="md-vcard-adr-locality">locality</code> may be present
     within the <span title="concept-item">item</span> that forms the
     <span title="concept-property-value">value</span> of an <code
     title="md-vcard-adr">adr</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-adr-region"><code>region</code></dfn> (inside <code title="md-vcard-adr">adr</code>)</dt>
 
    <dd>
 
     <p>Gives the region component (e.g. state or province) of the
     delivery address of the person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>A single property with the name <code
     title="md-vcard-adr-region">region</code> may be present within
     the <span title="concept-item">item</span> that forms the <span
     title="concept-property-value">value</span> of an <code
     title="md-vcard-adr">adr</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-adr-postal-code"><code>postal-code</code></dfn> (inside <code title="md-vcard-adr">adr</code>)</dt>
 
    <dd>
 
     <p>Gives the postal code component of the delivery address of the
     person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>A single property with the name <code
     title="md-vcard-adr-postal-code">postal-code</code> may be present
     within the <span title="concept-item">item</span> that forms the
     <span title="concept-property-value">value</span> of an <code
     title="md-vcard-adr">adr</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-adr-country-name"><code>country-name</code></dfn> (inside <code title="md-vcard-adr">adr</code>)</dt>
 
    <dd>
 
     <p>Gives the country name component of the delivery address of the
     person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>A single property with the name <code
     title="md-vcard-adr-country-name">country-name</code> may be
     present within the <span title="concept-item">item</span> that
     forms the <span title="concept-property-value">value</span> of an
     <code title="md-vcard-adr">adr</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-label"><code>label</code></dfn></dt>
 
    <dd>
 
     <p>Gives the formatted text corresponding to the delivery address
     of the person or organization.</p>
@@ -50641,60 +50633,60 @@ document.body.appendChild(outer);</pre>
     either text or an <span title="concept-item">item</span> with zero
     or more <code title="md-vcard-label-type">type</code> properties
     and exactly one <code title="md-vcard-label-value">value</code>
     property.</p>
 
     <p>If no <code title="md-vcard-label-type">type</code> properties
     are present within an <span title="concept-item">item</span> that
     forms the <span title="concept-property-value">value</span> of a
     <code title="md-vcard-label">label</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>, or if the <span
+    title="md-vcard">http://microformats.org/profile/hcard</code>, or if the <span
     title="concept-property-value">value</span> of such a <code
     title="md-vcard-label">label</code> property is text, then the
     <span>address type strings</span> <code
     title="mv-vcard-type-adr-intl">intl</code>, <code
     title="mv-vcard-type-adr-postal">postal</code>, <code
     title="mv-vcard-type-adr-parcel">parcel</code>, and <code
     title="mv-vcard-type-adr-work">work</code> are implied.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-label">label</code> may be present within each
     <span title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-label-type"><code>type</code></dfn> (inside <code title="md-vcard-label">label</code>)</dt>
 
    <dd>
 
     <p>Gives the type of delivery address.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text that, when compared in a <span>case-sensitive</span> manner,
     is equal to one of the <span>address type strings</span>.</p>
 
     <p>Within each <span title="concept-item">item</span> with the
-    type <code title="md-vcard">vcard</code>, there must be no more
+    type <code title="md-vcard">http://microformats.org/profile/hcard</code>, there must be no more
     than one <code title="md-vcard-label">label</code> property <span
     title="concept-item">item</span> with a <code
     title="md-vcard-label-type">type</code> property whose value is
     <code title="md-vcard-type-adr-pref">pref</code>.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-label-type">type</code> may be present within the
     <span title="concept-item">item</span> that forms the <span
     title="concept-property-value">value</span> of a <code
     title="md-vcard-label">label</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>, but within each such <code
+    title="md-vcard">http://microformats.org/profile/hcard</code>, but within each such <code
     title="md-vcard-label">label</code> property <span
     title="concept-item">item</span> there must only be one <code
     title="md-vcard-label-type">type</code> property per distinct
     value.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-label-value"><code>value</code></dfn> (inside <code title="md-vcard-label">label</code>)</dt>
 
    <dd>
@@ -50704,21 +50696,21 @@ document.body.appendChild(outer);</pre>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Exactly one property with the name <code
     title="md-vcard-label-value">value</code> must be present within
     the <span title="concept-item">item</span> that forms the <span
     title="concept-property-value">value</span> of a <code
     title="md-vcard-label">label</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-tel"><code>tel</code></dfn></dt>
 
    <dd>
 
     <p>Gives the telephone number of the person or organization.</p>
 
@@ -50728,57 +50720,57 @@ document.body.appendChild(outer);</pre>
     title="concept-item">item</span> with zero or more <code
     title="md-vcard-tel-type">type</code> properties and exactly one
     <code title="md-vcard-tel-value">value</code> property. <a
     href="#refsE163">[E163]</a> <a href="#refsX121">[X121]</a></p>
 
     <p>If no <code title="md-vcard-tel-type">type</code> properties
     are present within an <span title="concept-item">item</span> that
     forms the <span title="concept-property-value">value</span> of a
     <code title="md-vcard-tel">tel</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>, or if the <span
+    title="md-vcard">http://microformats.org/profile/hcard</code>, or if the <span
     title="concept-property-value">value</span> of such a <code
     title="md-vcard-tel">tel</code> property is text, then the <span
     title="telephone type strings">telephone type string</span> <code
     title="mv-vcard-type-tel-voice">voice</code> is implied.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-tel">tel</code> may be present within each
     <span title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-tel-type"><code>type</code></dfn> (inside <code title="md-vcard-tel">tel</code>)</dt>
 
    <dd>
 
     <p>Gives the type of telephone number.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text that, when compared in a <span>case-sensitive</span> manner,
     is equal to one of the <span>telephone type strings</span>.</p>
 
     <p>Within each <span title="concept-item">item</span> with the
-    type <code title="md-vcard">vcard</code>, there must be no more
+    type <code title="md-vcard">http://microformats.org/profile/hcard</code>, there must be no more
     than one <code title="md-vcard-tel">tel</code> property <span
     title="concept-item">item</span> with a <code
     title="md-vcard-tel-type">type</code> property whose value is
     <code title="md-vcard-type-tel-pref">pref</code>.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-tel-type">type</code> may be present within the
     <span title="concept-item">item</span> that forms the <span
     title="concept-property-value">value</span> of a <code
     title="md-vcard-tel">tel</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>, but within each such <code
+    title="md-vcard">http://microformats.org/profile/hcard</code>, but within each such <code
     title="md-vcard-tel">tel</code> property <span
     title="concept-item">item</span> there must only be one <code
     title="md-vcard-tel-type">type</code> property per distinct
     value.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-tel-value"><code>value</code></dfn> (inside <code title="md-vcard-tel">tel</code>)</dt>
 
    <dd>
@@ -50790,21 +50782,21 @@ document.body.appendChild(outer);</pre>
     text that can be interpreted as a telephone number as defined in
     the CCITT specifications E.163 and X.121. <a
     href="#refsE163">[E163]</a> <a href="#refsX121">[X121]</a></p>
 
     <p>Exactly one property with the name <code
     title="md-vcard-tel-value">value</code> must be present within the
     <span title="concept-item">item</span> that forms the <span
     title="concept-property-value">value</span> of a <code
     title="md-vcard-tel">tel</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-email"><code>email</code></dfn></dt>
 
    <dd>
 
     <p>Gives the e-mail address of the person or organization.</p>
 
@@ -50812,58 +50804,58 @@ document.body.appendChild(outer);</pre>
     either text or an <span title="concept-item">item</span> with zero
     or more <code title="md-vcard-email-type">type</code> properties
     and exactly one <code title="md-vcard-email-value">value</code>
     property.</p>
 
     <p>If no <code title="md-vcard-email-type">type</code> properties
     are present within an <span title="concept-item">item</span> that
     forms the <span title="concept-property-value">value</span> of an
     <code title="md-vcard-email">email</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>, or if the <span
+    title="md-vcard">http://microformats.org/profile/hcard</code>, or if the <span
     title="concept-property-value">value</span> of such an <code
     title="md-vcard-email">email</code> property is text, then the
     <span title="e-mail type strings">e-mail type string</span> <code
     title="mv-vcard-type-email-internet">internet</code> is
     implied.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-email">email</code> may be present within each
     <span title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-email-type"><code>type</code></dfn> (inside <code title="md-vcard-email">email</code>)</dt>
 
    <dd>
 
     <p>Gives the type of e-mail address.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text that, when compared in a <span>case-sensitive</span> manner,
     is equal to one of the <span>e-mail type strings</span>.</p>
 
     <p>Within each <span title="concept-item">item</span> with the
-    type <code title="md-vcard">vcard</code>, there must be no more
+    type <code title="md-vcard">http://microformats.org/profile/hcard</code>, there must be no more
     than one <code title="md-vcard-email">email</code> property <span
     title="concept-item">item</span> with a <code
     title="md-vcard-email-type">type</code> property whose value is
     <code title="md-vcard-type-email-pref">pref</code>.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-email-type">type</code> may be present within the
     <span title="concept-item">item</span> that forms the <span
     title="concept-property-value">value</span> of an <code
     title="md-vcard-email">email</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>, but within each such <code
+    title="md-vcard">http://microformats.org/profile/hcard</code>, but within each such <code
     title="md-vcard-email">email</code> property <span
     title="concept-item">item</span> there must only be one <code
     title="md-vcard-email-type">type</code> property per distinct
     value.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-email-value"><code>value</code></dfn> (inside <code title="md-vcard-email">email</code>)</dt>
 
    <dd>
@@ -50873,39 +50865,39 @@ document.body.appendChild(outer);</pre>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Exactly one property with the name <code
     title="md-vcard-email-value">value</code> must be present within
     the <span title="concept-item">item</span> that forms the <span
     title="concept-property-value">value</span> of an <code
     title="md-vcard-email">email</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-mailer"><code>mailer</code></dfn></dt>
 
    <dd>
 
     <p>Gives the name of the e-mail software used by the person or
     organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-mailer">mailer</code> may be present within each
     <span title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-tz"><code>tz</code></dfn></dt>
 
    <dd>
 
     <p>Gives the time zone of the person or organization.</p>
 
@@ -50925,21 +50917,21 @@ document.body.appendChild(outer);</pre>
 
      <li>A <span>valid non-negative integer</span> that is exactly two
      digits long and that represents a number in the range
      00..59.</li>
 
     </ol>
 
     <p>Any number of properties with the name <code
     title="md-vcard-tz">tz</code> may be present within each <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-geo"><code>geo</code></dfn></dt>
 
    <dd>
 
     <p>Gives the geographical position of the person or
     organization.</p>
@@ -50980,94 +50972,94 @@ document.body.appendChild(outer);</pre>
     <p class="note">The value specifies latitude and longitude, in
     that order (i.e., "LAT LON" ordering), in decimal degrees. The
     longitude represents the location east and west of the prime
     meridian as a positive or negative real number, respectively.  The
     latitude represents the location north and south of the equator as
     a positive or negative real number, respectively.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-geo">geo</code> may be present within each <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-title"><code>title</code></dfn></dt>
 
    <dd>
 
     <p>Gives the job title, functional position or function of the
     person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-title">title</code> may be present within each
     <span title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-role"><code>role</code></dfn></dt>
 
    <dd>
 
     <p>Gives the role, occupation, or business category of the person
     or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-role">role</code> may be present within each
     <span title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-logo"><code>logo</code></dfn></dt>
 
    <dd>
 
     <p>Gives the logo of the person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     an <span>absolute URL</span>.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-logo">logo</code> may be present within each
     <span title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-agent"><code>agent</code></dfn></dt>
 
    <dd>
 
     <p>Gives the contact information of another person who will act on
     behalf of the person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     either an <span title="concept-item">item</span> with the type
-    <code title="md-vcard">vcard</code>, or an <span>absolute
+    <code title="md-vcard">http://microformats.org/profile/hcard</code>, or an <span>absolute
     URL</span>, or text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-logo">logo</code> may be present within each
     <span title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-org"><code>org</code></dfn></dt>
 
    <dd>
 
     <p>Gives the name and units of the organization.</p>
 
@@ -51075,95 +51067,95 @@ document.body.appendChild(outer);</pre>
     either text or an <span title="concept-item">item</span> with one
     <code
     title="md-vcard-org-organization-name">organization-name</code>
     property and zero or more <code
     title="md-vcard-n-organization-unit">organization-unit</code>
     properties.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-org">org</code> may be present within each <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-org-organization-name"><code>organization-name</code></dfn> (inside <code title="md-vcard-org">org</code>)</dt>
 
    <dd>
 
     <p>Gives the name of the organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Exactly one property with the name <code
     title="md-vcard-org-organization-name">organization-name</code>
     must be present within the <span title="concept-item">item</span>
     that forms the <span title="concept-property-value">value</span>
     of an <code title="md-vcard-org">org</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-org-organization-unit"><code>organization-unit</code></dfn> (inside <code title="md-vcard-org">org</code>)</dt>
 
    <dd>
 
     <p>Gives the name of the organization unit.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-org-organization-unit">organization-unit</code>
     may be present within the <span title="concept-item">item</span>
     that forms the <span title="concept-property-value">value</span>
     of the <code title="md-vcard-org">org</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-categories"><code>categories</code></dfn></dt>
 
    <dd>
 
     <p>Gives the name of a category or tag that the person or
     organization could be classified as.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-categories">categories</code> may be present
     within each <span title="concept-item">item</span> with the type
-    <code title="md-vcard">vcard</code>.</p>
+    <code title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-note"><code>note</code></dfn></dt>
 
    <dd>
 
     <p>Gives supplemental information or a comment about the person or
     organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-note">note</code> may be present
     within each <span title="concept-item">item</span> with the type
-    <code title="md-vcard">vcard</code>.</p>
+    <code title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <!-- PRODID not included -->
 
 
    <dt><dfn title="md-vcard-rev"><code>rev</code></dfn></dt>
 
    <dd>
@@ -51174,77 +51166,77 @@ document.body.appendChild(outer);</pre>
     <p>The <span title="concept-property-value">value</span> must be
     text that is a <span>valid global date and time string</span>.</p>
 
     <!-- copied from vCard -->
     <p class="note">The value distinguishes the current revision of
     the information for other renditions of the information.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-rev">rev</code> may be present within each <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-sort-string"><code>sort-string</code></dfn></dt>
 
    <dd>
 
     <p>Gives the string to be used for sorting the person or
     organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-sort-string">sort-string</code> may be present
     within each <span title="concept-item">item</span> with the type
-    <code title="md-vcard">vcard</code>.</p>
+    <code title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <dt><dfn title="md-vcard-sound"><code>sound</code></dfn></dt>
 
    <dd>
 
     <p>Gives a sound file relating to the person or organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     an <span>absolute URL</span>.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-sound">sound</code> may be present within each
     <span title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
-   <!-- UID not included - use "about" -->
+   <!-- UID not included - use "itemid" -->
 
 
    <dt><dfn title="md-vcard-url"><code>url</code></dfn></dt>
 
    <dd>
 
     <p>Gives a <span>URL</span> relating to the person or
     organization.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     an <span>absolute URL</span>.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-url">url</code> may be present within each <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <!-- VERSION not included - always 3.0 -->
 
 
    <dt><dfn title="md-vcard-class"><code>class</code></dfn></dt>
 
    <dd>
@@ -51260,21 +51252,21 @@ document.body.appendChild(outer);</pre>
      <li><code title="">private</code></li>
      <li><code title="">confidential</code></li>
     </ul>
 
     <p class="warning">This is merely advisory and cannot be
     considered a confidentiality measure.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-class">class</code> may be present
     within each <span title="concept-item">item</span> with the type
-    <code title="md-vcard">vcard</code>.</p>
+    <code title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
    <!-- KEY not included - no way to include binary data at this time -->   
 
 
    <!-- IMPP is from RFC4770 -->
 
    <dt><dfn title="md-vcard-impp"><code>impp</code></dfn></dt>
@@ -51288,57 +51280,57 @@ document.body.appendChild(outer);</pre>
     either an <span>absolute URL</span> or an <span
     title="concept-item">item</span> with zero or more <code
     title="md-vcard-impp-type">type</code> properties and exactly one
     <code title="md-vcard-impp-value">value</code> property.</p>
 
     <p>If no <code title="md-vcard-impp-type">type</code> properties
     are present within an <span title="concept-item">item</span> that
     forms the <span title="concept-property-value">value</span> of an
     <code title="md-vcard-impp">impp</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>, or if the <span
+    title="md-vcard">http://microformats.org/profile/hcard</code>, or if the <span
     title="concept-property-value">value</span> of such an <code
     title="md-vcard-impp">impp</code> property is an <span>absolute
     URL</span>, then no <span>IMPP type strings</span> are
     implied.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-impp">impp</code> may be present within each
     <span title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-impp-type"><code>type</code></dfn> (inside <code title="md-vcard-impp">impp</code>)</dt>
 
    <dd>
 
     <p>Gives the intended use of the IMPP <span>URL</span>.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
     text that, when compared in a <span>case-sensitive</span> manner,
     is equal to one of the <span>IMPP type strings</span>.</p>
 
     <p>Within each <span title="concept-item">item</span> with the
-    type <code title="md-vcard">vcard</code>, there must be no more
+    type <code title="md-vcard">http://microformats.org/profile/hcard</code>, there must be no more
     than one <code title="md-vcard-impp">impp</code> property <span
     title="concept-item">item</span> with a <code
     title="md-vcard-impp-type">type</code> property whose value is
     <code title="md-vcard-type-impp-pref">pref</code>.</p>
 
     <p>Any number of properties with the name <code
     title="md-vcard-impp-type">type</code> may be present within the
     <span title="concept-item">item</span> that forms the <span
     title="concept-property-value">value</span> of an <code
     title="md-vcard-impp">impp</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>, but within each such <code
+    title="md-vcard">http://microformats.org/profile/hcard</code>, but within each such <code
     title="md-vcard-impp">impp</code> property <span
     title="concept-item">item</span> there must only be one <code
     title="md-vcard-impp-type">type</code> property per distinct
     value.</p>
 
    </dd>
 
    <dt><dfn title="md-vcard-impp-value"><code>value</code></dfn> (inside <code title="md-vcard-impp">impp</code>)</dt>
 
    <dd>
@@ -51349,21 +51341,21 @@ document.body.appendChild(outer);</pre>
 
     <p>The <span title="concept-property-value">value</span> must be
     an <span>absolute URL</span>.</p>
 
     <p>Exactly one property with the name <code
     title="md-vcard-impp-value">value</code> must be present within
     the <span title="concept-item">item</span> that forms the <span
     title="concept-property-value">value</span> of an <code
     title="md-vcard-impp">impp</code> property of an <span
     title="concept-item">item</span> with the type <code
-    title="md-vcard">vcard</code>.</p>
+    title="md-vcard">http://microformats.org/profile/hcard</code>.</p>
 
    </dd>
 
 
   </dl>
 
   <p>The <dfn>address type strings</dfn> are:</p>
 
   <dl>
 
@@ -51531,2408 +51523,2380 @@ document.body.appendChild(outer);</pre>
 
    <dt><dfn title="md-vcard-type-impp-pref"><code>pref</code></dfn></dt>
    <dd>
     <p>Indicates the preferred address when multiple IMPP
     <span>URL</span>s are specified.</p>
    <dd>
 
   </dl>
 
 
-  <h5>Examples</h5>
+  <h5>Conversion to vCard</h5>
 
-  <div class="example">
+  <p>Given a list of nodes <var title="">nodes</var> in a
+  <code>Document</code>, a user agent must run the following algorithm
+  to <dfn title="extracting a vCard">extract any vCard data
+  represented by those nodes</dfn> (only the first vCard is
+  returned):</p>
 
-   <p>Here is a long example <code title="md-vcard">vcard</code> for a
-   fictional character called "Jack Bauer":</p>
+  <ol>
 
-   <pre>&lt;section id="jack" item="vcard">
- &lt;h1 itemprop="fn">Jack Bauer&lt;/h1>
- &lt;img itemprop="photo" alt="" src="jack-bauer.jpg">
- &lt;p itemprop="org" item>
-  &lt;span itemprop="organization-name">Counter-Terrorist Unit&lt;/span>
-  (&lt;span itemprop="organization-unit">Los Angeles Division&lt;/span>)
- &lt;/p>
- &lt;p>
-  &lt;span itemprop="adr" item>
-   &lt;span itemprop="street-address">10201 W. Pico Blvd.&lt;/span>&lt;br>
-   &lt;span itemprop="locality">Los Angeles&lt;/span>,
-   &lt;span itemprop="region">CA&lt;/span>
-   &lt;span itemprop="postal-code">90064&lt;/span>&lt;br>
-   &lt;span itemprop="country-name">United States&lt;/span>&lt;br>
-  &lt;/span>
-  &lt;span itemprop="geo">34.052339;-118.410623&lt;/span>
- &lt;/p>
- &lt;h2>Assorted Contact Methods&lt;/h2>
- &lt;ul>
-  &lt;li itemprop="tel" item>&lt;span itemprop="value">+1 (310) 597
-  3781&lt;/span> &lt;span itemprop="type">work&lt;/span>
-  &lt;meta itemprop="type" content="pref">&lt;/li>
-  &lt;li>&lt;a itemprop="url"
-  href="http://en.wikipedia.org/wiki/Jack_Bauer">I'm on
-  Wikipedia&lt;/a> so you can leave a message on my user talk
-  page.&lt;/li>
-  &lt;li>&lt;a itemprop="url"
-  href="http://www.jackbauerfacts.com/">Jack Bauer Facts&lt;/a>&lt;/li>
-  &lt;li itemprop="email">&lt;a
-  href="mailto:j.bauer@la.ctu.gov.invalid">j.bauer@la.ctu.gov.invalid&lt;/a>&lt;/li>
-  &lt;li itemprop="tel" item>&lt;span itemprop="value">+1 (310) 555
-  3781&lt;/span> &lt;span>&lt;meta itemprop="type" content="cell">mobile
-  phone&lt;/span>&lt;/li>
- &lt;/ul>
- &lt;p itemprop="note">If I'm out in the field, you may be better
- off contacting &lt;span itemprop="agent" item="vcard">&lt;a
- itemprop="email" href="mailto:c.obrian@la.ctu.gov.invalid">&lt;span
- itemprop="fn">Chloe O'Brian&lt;/span>&lt;/a>&lt;/span> if it's about
- work, or ask &lt;span itemprop="agent">Tony Almeida&lt;/span> if
- you're interested in the CTU five-a-side football team we're
- trying to get going.&lt;/p>
- &lt;ins datetime="2008-07-20T21:00:00+0100">
-  &lt;span itemprop="rev" item>
-   &lt;meta itemprop="type" content="date-time">
-   &lt;meta itemprop="value" content="2008-07-20T21:00:00+0100">
-  &lt;/span>
-  &lt;p itemprop="tel" item>&lt;strong>Update!&lt;/strong>
-  My new &lt;span itemprop="type">home&lt;/span> phone number is
-  &lt;span itemprop="value">01632 960 123&lt;/span>.
- &lt;/ins>
-&lt;/section></pre>
+   <li><p>If none of the nodes in <var title="">nodes</var> are <span
+   title="concept-item">items</span> with the <span>item type</span>
+   <code
+   title="md-vcard">http://microformats.org/profile/hcard</code>, then
+   there is no vCard. Abort the algorithm, returning nothing.</p></li>
 
-  </div>
+   <li><p>Let <var title="">node</var> be the first node in <var
+   title="">nodes</var> that is an <span
+   title="concept-item">item</span> with the <span>item type</span>
+   <code
+   title="md-vcard">http://microformats.org/profile/hcard</code>.</p></li>
 
-  <div class="example">
+   <li><p>Let <var title="">output</var> be an empty string.</p></li>
 
-   <p>This example shows a site's contact details (using the
-   <code>address</code> element) containing an address with two street
-   components:</p>
+   <li><p><span>Add a vCard line</span> with the type "<code
+   title="">BEGIN</code>" and the value "<code title="">VCARD</code>"
+   to <var title="">output</var>.</p></li>
 
-   <pre>&lt;address item=vcard>
- &lt;strong title="fn">Alfred Person&lt;/strong> &lt;br>
- &lt;span itemprop="adr" item>
-  &lt;span itemprop="street-address">1600 Amphitheatre Parkway&lt;/span> &lt;br>
-  &lt;span itemprop="street-address">Building 43, Second Floor&lt;/span> &lt;br>
-  &lt;span itemprop="locality">Mountain View&lt;/span>,
-   &lt;span itemprop="region">CA&lt;/span> &lt;span itemprop="postal-code">94043&lt;/span>
- &lt;/span>
-&lt;/address></pre>
+   <li><p><span>Add a vCard line</span> with the type "<code
+   title="">PROFILE</code>" and the value "<code
+   title="">VCARD</code>" to <var title="">output</var>.</p></li>
 
-  </div>
+   <li><p><span>Add a vCard line</span> with the type "<code
+   title="">VERSION</code>" and the value "<code title="">3.0</code>"
+   to <var title="">output</var>.</p></li>
 
-  <div class="example">
+   <li><p><span>Add a vCard line</span> with the type "<code
+   title="">SOURCE</code>" and the result of <span>escaping the vCard
+   text string</span> that is the <span>the document's current
+   address</span> as the value to <var title="">output</var>.</p></li>
 
-   <p>The <span title="md-vcard">vCard</span> vocabulary can be used
-   to just mark up people's names:</p>
+   <li><p>If <span>the <code>title</code> element</span> is not null,
+   <span>add a vCard line</span> with the type "<code
+   title="">NAME</code>" and with the result of <span>escaping the
+   vCard text string</span> obtained from the <code>textContent</code>
+   of <span>the <code>title</code> element</span> as the value to <var
+   title="">output</var>.</p></li>
 
-   <pre>&lt;span itemscope itemtype=vcard>&lt;span itemprop=fn>George Washington&lt;/span>&lt;/span></pre>
+   <li><p>If <var title="">node</var> has a <span>global
+   identifier</span>, <span>add a vCard line</span> with the type
+   "<code title="">UID</code>" and with the result of <span>escaping
+   the vCard text string</span> of that <span>global identifier</span>
+   as the value to <var title="">output</var>.</p></li>
 
-   <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>
+   <li><p>Let <var title="">first-n</var>, <var
+   title="">first-org</var>, and <var title="">first-fn</var> be
+   null.</p></li>
 
-   <pre>BEGIN:VCARD
-PROFILE:VCARD
-VERSION:3.0
-SOURCE:<var title="">document's address</var>
-FN:George Washington
-N:Washington;George;;;
-END:VCARD</pre>
+   <li>
 
-  </div>
+    <p>For each element <var title="">element</var> that is <span
+    title="the properties of an item">a property of the item</span>
+    <var title="">node</var>: for each name <var title="">name</var>
+    in <var title="">element</var>'s <span>property names</span>, run
+    the following substeps:</p>
 
+    <ol>
 
+     <li><p>Let <var title="">parameters</var> be an empty set of
+     name-value pairs.</p></li>
 
-  <h4>vEvent</h4>
+     <li>
 
-  <p>An item with the <span>predefined type</span> <dfn
-  title="md-vevent"><code>vevent</code></dfn> represents an event.</p>
+      <p>Run the appropriate set of substeps from the following
+      list. The steps will set a variable <var title="">value</var>,
+      which is used in the next step.</p>
 
-  <p>The following are the type's <span title="predefined property
-  name">predefined property names</span>. They are based on the
-  vocabulary defined in the iCalendar specification, where more
-  information on how to interpret the values can be found. <a
-  href="#refsRFC2445">[RFC2445]</a></p>
+      <dl>
 
-  <p class="note">Only the parts of the iCalendar vocabulary relating
-  to events are used here; this vocabulary cannot express a complete
-  iCalendar instance.</p>
+       <dt>If the property's <span
+       title="concept-property-value">value</span> is an <span
+       title="concept-item">item</span> <var title="">subitem</var>
+       and <var title="">name</var> is <code
+       title="md-vcard-n">n</code></dt>
 
-  <dl>
+       <dd>
 
+        <ol>
 
-   <dt><dfn title="md-vevent-attach"><code>attach</code></dfn></dt>
+         <li><p>If <var title="">first-n</var> is null, let <var
+         title="">first-n</var> be <var title="">element</var>.</p></li>
 
-   <dd>
+         <li><p>Let <var title="">n1</var> be the <span
+         title="concept-property-value">value</span> of the first
+         property named <code
+         title="md-vcard-n-family-name">family-name</code> in <var
+         title="">subitem</var>, or the empty string if there is no
+         such property or the property's value is itself an <span
+         title="concept-item">item</span>.</p></li>
 
-    <p>Gives the address of an associated document for the event.</p>
+         <li><p>Let <var title="">n2</var> be the <span
+         title="concept-property-value">value</span> of the first
+         property named <code
+         title="md-vcard-n-given-name">given-name</code> in <var
+         title="">subitem</var>, or the empty string if there is no
+         such property or the property's value is itself an <span
+         title="concept-item">item</span>.</p></li>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    an <span>absolute URL</span>.</p>
+         <li><p>Let <var title="">n3</var> be the <span
+         title="concept-property-value">value</span> of the first
+         property named <code
+         title="md-vcard-n-additional-name">additional-name</code> in
+         <var title="">subitem</var>, or the empty string if there is
+         no such property or the property's value is itself an <span
+         title="concept-item">item</span>.</p></li>
 
-    <p>Any number of properties with the name <code
-    title="md-vevent-attach">attach</code> may be present within each
-    <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+         <li><p>Let <var title="">n4</var> be the <span
+         title="concept-property-value">value</span> of the first
+         property named <code
+         title="md-vcard-n-honorific-prefix">honorific-prefix</code>
+         in <var title="">subitem</var>, or the empty string if there
+         is no such property or the property's value is itself an
+         <span title="concept-item">item</span>.</p></li>
 
-   </dd>
+         <li><p>Let <var title="">n5</var> be the <span
+         title="concept-property-value">value</span> of the first
+         property named <code
+         title="md-vcard-n-honorific-suffix">honorific-suffix</code>
+         in <var title="">subitem</var>, or the empty string if there
+         is no such property or the property's value is itself an
+         <span title="concept-item">item</span>.</p></li>
 
+         <li>
 
-   <dt><dfn title="md-vevent-categories"><code>categories</code></dfn></dt>
+          <p>Let <var title="">value</var> be the concatenation of the
+          following, in this order:</p>
 
-   <dd>
+          <ol class="brief">
+           <li>The result of <span>escaping the vCard text string</span> <var title="">n1</var></li>
+           <li>A U+003B SEMICOLON character (;)</li>
+           <li>The result of <span>escaping the vCard text string</span> <var title="">n2</var></li>
+           <li>A U+003B SEMICOLON character (;)</li>
+           <li>The result of <span>escaping the vCard text string</span> <var title="">n3</var></li>
+           <li>A U+003B SEMICOLON character (;)</li>
+           <li>The result of <span>escaping the vCard text string</span> <var title="">n4</var></li>
+           <li>A U+003B SEMICOLON character (;)</li>
+           <li>The result of <span>escaping the vCard text string</span> <var title="">n5</var></li>
+          </ol>
 
-    <p>Gives the name of a category or tag that the event could be
-    classified as.</p>
+         </li>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text.</p>
+        </ol>
 
-    <p>Any number of properties with the name <code
-    title="md-vevent-categories">categories</code> may be present
-    within each <span title="concept-item">item</span> with the type
-    <code title="md-vevent">vevent</code>.</p>
+       </dd>
 
-   </dd>
+       <dt>If the property's <span
+       title="concept-property-value">value</span> is an <span
+       title="concept-item">item</span> <var title="">subitem</var>
+       and <var title="">name</var> is <code
+       title="md-vcard-adr">adr</code></dt>
 
+       <dd>
 
-   <dt><dfn title="md-vevent-class"><code>class</code></dfn></dt>
+        <ol>
 
-   <dd>
+         <li><p>Let <var title="">value</var> be the empty
+         string.</p></li>
 
-    <p>Gives the access classification of the information regarding
-    the event.</p>
+         <li><p>Append to <var title="">value</var> the result of
+         <span>collecting vCard subproperties</span> named <code
+         title="md-vcard-adr-post-office-box">post-office-box</code>
+         in <var title="">subitem</var>.</p>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text with one of the following values:</p>
+         <li>Append a U+003B SEMICOLON character (;) to <var
+         title="">value</var>.</li>
 
-    <ul class="brief">
-     <li><code title="">public</code></li>
-     <li><code title="">private</code></li>
-     <li><code title="">confidential</code></li>
-    </ul>
+         <li><p>Append to <var title="">value</var> the result of
+         <span>collecting vCard subproperties</span> named <code
+         title="md-vcard-adr-extended-address">extended-address</code>
+         in <var title="">subitem</var>.</p>
 
-    <p class="warning">This is merely advisory and cannot be
-    considered a confidentiality measure.</p>
+         <li>Append a U+003B SEMICOLON character (;) to <var
+         title="">value</var>.</li>
 
-    <p>A single property with the name <code
-    title="md-vevent-class">class</code> may be present within each
-    <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+         <li><p>Append to <var title="">value</var> the result of
+         <span>collecting vCard subproperties</span> named <code
+         title="md-vcard-adr-street-address">street-address</code> in
+         <var title="">subitem</var>.</p>
 
-   </dd>
+         <li>Append a U+003B SEMICOLON character (;) to <var
+         title="">value</var>.</li>
 
+         <li><p>Append to <var title="">value</var> the result of
+         <span>collecting the first vCard subproperty</span> named
+         <code title="md-vcard-adr-locality">locality</code> in <var
+         title="">subitem</var>.</p>
 
-   <dt><dfn title="md-vevent-comment"><code>comment</code></dfn></dt>
+         <li>Append a U+003B SEMICOLON character (;) to <var
+         title="">value</var>.</li>
 
-   <dd>
+         <li><p>Append to <var title="">value</var> the result of
+         <span>collecting the first vCard subproperty</span> named
+         <code title="md-vcard-adr-region">region</code> in <var
+         title="">subitem</var>.</p>
 
-    <p>Gives a comment regarding the event.</p>
+         <li>Append a U+003B SEMICOLON character (;) to <var
+         title="">value</var>.</li>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text.</p>
+         <li><p>Append to <var title="">value</var> the result of
+         <span>collecting the first vCard subproperty</span> named
+         <code title="md-vcard-adr-postal-code">postal-code</code> in
+         <var title="">subitem</var>.</p>
 
-    <p>Any number of properties with the name <code
-    title="md-vevent-comment">comment</code> may be present within each
-    <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+         <li>Append a U+003B SEMICOLON character (;) to <var
+         title="">value</var>.</li>
 
-   </dd>
+         <li><p>Append to <var title="">value</var> the result of
+         <span>collecting the first vCard subproperty</span> named
+         <code title="md-vcard-adr-country-name">country-name</code>
+         in <var title="">subitem</var>.</p>
 
+         <li><p>If there is a property named <code
+         title="md-vcard-adr-type">type</code> in <var
+         title="">subitem</var>, and the first such property has a
+         <span title="concept-property-value">value</span> that is not
+         an <span title="concept-item">item</span> and whose value
+         consists only of <span>alphanumeric ASCII characters</span>,
+         then add a parameter named "<code title="">TYPE</code>" whose
+         value is the <span
+         title="concept-property-value">value</span> of that property
+         to <var title="">parameters</var>.</p></li>
 
-   <dt><dfn title="md-vevent-description"><code>description</code></dfn></dt>
+        </ol>
 
-   <dd>
+       </dd>
 
-    <p>Gives a detailed description of the event.</p>
+       <dt>If the property's <span
+       title="concept-property-value">value</span> is an <span
+       title="concept-item">item</span> <var title="">subitem</var>
+       and <var title="">name</var> is <code
+       title="md-vcard-org">org</code></dt>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text.</p>
+       <dd>
 
-    <p>A single property with the name <code
-    title="md-vevent-description">description</code> may be present
-    within each <span title="concept-item">item</span> with the type
-    <code title="md-vevent">vevent</code>.</p>
+        <ol>
 
-   </dd>
+         <li><p>If <var title="">first-org</var> is null, let <var
+         title="">first-org</var> be <var
+         title="">element</var>.</p></li>
 
+         <li><p>Let <var title="">value</var> be the empty
+         string.</p></li>
 
-   <dt><dfn title="md-vevent-geo"><code>geo</code></dfn></dt>
+         <li><p>Append to <var title="">value</var> the result of
+         <span>collecting the first vCard subproperty</span> named
+         <code
+         title="md-vcard-org-organization-name">organization-name</code>
+         in <var title="">subitem</var>.</p>
 
-   <dd>
+         <li>
 
-    <p>Gives the geographical position of the event.</p>
+          <p>For each property named <code
+          title="md-vcard-org-organization-unit">organization-unit</code>
+          in <var title="">subitem</var>, run the following steps:</p>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text and must match the following syntax:</p>
+          <ol>
 
-    <ol>
+           <li><p>If the <span
+           title="concept-property-value">value</span> of the property
+           is an <span title="concept-item">item</span>, then skip
+           this property.</p></li>
 
-     <li>Optionally, either a U+002B PLUS SIGN character (+) or a
-     U+002D HYPHEN-MINUS character (-).</li>
+           <li><p>Append a U+003B SEMICOLON character (;) to <var
+           title="">value</var>.</p></li>
 
-     <li>One or more digits in the range U+0030 DIGIT ZERO .. U+0039
-     DIGIT NINE.</li>
+           <li><p>Append the result of <span>escaping the vCard text
+           string</span> given by the <span
+           title="concept-property-value">value</span> of the property
+           to <var title="">value</var>.</p></li>
 
-     <li>Optionally*, a U+002E FULL STOP character (.) followed by one
-     or more digits in the range U+0030 DIGIT ZERO .. U+0039 DIGIT
-     NINE.</li>
+          </ol>
 
-     <li>A U+003B SEMICOLON character (;).</li>
+         </li>
 
-     <li>Optionally, either a U+002B PLUS SIGN character (+) or a
-     U+002D HYPHEN-MINUS character (-).</li>
+        </ol>
 
-     <li>One or more digits in the range U+0030 DIGIT ZERO .. U+0039
-     DIGIT NINE.</li>
+       </dd>
 
-     <li>Optionally*, a U+002E FULL STOP character (.) followed by one
-     or more digits in the range U+0030 DIGIT ZERO .. U+0039 DIGIT
-     NINE.</li>
+       <dt>If the property's <span
+       title="concept-property-value">value</span> is an <span
+       title="concept-item">item</span> <var title="">subitem</var>
+       with the <span>item type</span> <code
+       title="md-vcard">http://microformats.org/profile/hcard</code>
+       and <var title="">name</var> is <code
+       title="md-vcard-agent">agent</code></dt>
 
-    </ol>
+       <dd>
 
-    <p>The optional components marked with an asterisk (*) should be
-    included, and should have six digits each.</p> <!-- iCalendar
-    actually limits the range to -91.0 < lat < 91.0; -181.0 < long <
-    181.0, which seems weird. It also gives special meanings to
-    +90/-90 lat, and +180 long. -->
+        <ol>
 
-    <!-- copied from vcard (not icalendar!) -->
-    <p class="note">The value specifies latitude and longitude, in
-    that order (i.e., "LAT LON" ordering), in decimal degrees. The
-    longitude represents the location east and west of the prime
-    meridian as a positive or negative real number, respectively.  The
-    latitude represents the location north and south of the equator as
-    a positive or negative real number, respectively.</p>
+         <li><p>Let <var title="">value</var> be the result of
+         <span>escaping the vCard text string</span> obtained from
+         <span>extracting a vCard</span> from the element that
+         represents <var title="">subitem</var>.</p></li>
 
-    <p>A single property with the name <code
-    title="md-vevent-geo">geo</code> may be present within each <span
-    title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+         <li><p>Add a parameter named "<code title="">VALUE</code>"
+         whose value is "<code title="">VCARD</code>" to <var
+         title="">parameters</var>.</p></li>
 
-   </dd>
+        </ol>
 
+       </dd>
 
-   <dt><dfn title="md-vevent-location"><code>location</code></dfn></dt>
+       <dt>If the property's <span
+       title="concept-property-value">value</span> is an <span
+       title="concept-item">item</span> and <var title="">name</var>
+       is none of the above</dt>
 
-   <dd>
+       <dd>
 
-    <p>Gives the location of the event.</p>
+        <ol>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text.</p> <!-- v2: support vcard here -->
+         <li><p>Let <var title="">value</var> the result of
+         <span>collecting the first vCard subproperty</span> named
+         <code title="">value</code> in <var
+         title="">subitem</var>.</p>
 
-    <p>A single property with the name <code
-    title="md-vevent-location">location</code> may be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+         <li><p>If there is a property named <code
+         title="">type</code> in <var title="">subitem</var>, and the
+         first such property has a <span
+         title="concept-property-value">value</span> that is not an
+         <span title="concept-item">item</span> and whose value
+         consists only of <span>alphanumeric ASCII characters</span>,
+         then add a parameter named "<code title="">TYPE</code>" whose
+         value is the <span
+         title="concept-property-value">value</span> of that property
+         to <var title="">parameters</var>.</p></li>
 
-   </dd>
+        </ol>
 
+       </dd>
 
-   <!-- PRIORITY not included - always 0 - doesn't make sense for single events -->
+       <dt>Otherwise (the property's <span
+       title="concept-property-value">value</span> is not an <span
+       title="concept-item">item</span>)</dt>
 
+       <dd>
 
-   <dt><dfn title="md-vevent-resources"><code>resources</code></dfn></dt>
+        <ol>
 
-   <dd>
+         <li>
 
-    <p>Gives a resource that will be needed for the event.</p>
+          <p>If <var title="">name</var> is <code
+          title="md-vcard-fn">fn</code> and <var
+          title="">first-fn</var> is null, let <var
+          title="">first-fn</var> be <var
+          title="">element</var>.</p>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text.</p> <!-- v2: support vcard here -->
+          <p>Otherwise, if <var title="">name</var> is <code
+          title="md-vcard-org">org</code> and <var
+          title="">first-org</var> is null, let <var
+          title="">first-org</var> be <var
+          title="">element</var>.</p>
 
-    <p>Any number of properties with the name <code
-    title="md-vevent-resources">resources</code> may be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+         </li>
 
-   </dd>
+         <li><p>Let <var title="">value</var> be the property's <span
+         title="concept-property-value">value</span>.</p></li>
 
+         <li><p>If <var title="">element</var> is one of the <span>URL
+         property elements</span>, add a parameter with the name "<code
+         title="">VALUE</code>" and the value "<code
+         title="">URI</code>" to <var
+         title="">parameters</var>.</p></li>
 
-   <dt><dfn title="md-vevent-status"><code>status</code></dfn></dt>
+         <li><p>Otherwise, if <var title="">element</var> is a
+         <code>time</code> element and the <var title="">value</var> is
+         a <span>valid date string</span>, add a parameter with the name
+         "<code title="">VALUE</code>" and the value "<code
+         title="">DATE</code>" to <var
+         title="">parameters</var>.</p></li>
 
-   <dd>
+         <li><p>Otherwise, if <var title="">element</var> is a
+         <code>time</code> element and the <var title="">value</var> is
+         a <span>valid global date and time string</span>, add a
+         parameter with the name "<code title="">VALUE</code>" and the
+         value "<code title="">DATE-TIME</code>" to <var
+         title="">parameters</var>.</p></li>
 
-    <p>Gives the confirmation status of the event.</p>
+         <li><p>Prefix every U+005C REVERSE SOLIDUS character (\) in
+         <var title="">value</var> with another U+005C REVERSE SOLIDUS
+         character (\).</p></li>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text with one of the following values:</p>
+         <li><p>Prefix every U+002C COMMA character (,) in <var
+         title="">value</var> with a U+005C REVERSE SOLIDUS character
+         (\).</p></li>
 
-    <ul class="brief">
-     <li><code title="">tentative</code></li>
-     <li><code title="">confirmed</code></li>
-     <li><code title="">cancelled</code></li> <!-- two Ls as per iCalendar spec -->
-    </ul>
+         <li><p>Unless <var title="">name</var> is <code
+         title="md-vcard-geo">geo</code>, prefix every U+003B SEMICOLON
+         character (;) in <var title="">value</var> with a U+005C
+         REVERSE SOLIDUS character (\).</p></li>
 
-    <p>A single property with the name <code
-    title="md-vevent-status">status</code> may be present within each
-    <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+         <li><p>Replace every U+000D CARRIAGE RETURN U+000A LINE FEED
+         character pair (CRLF) in <var title="">value</var> with a U+005C REVERSE
+         SOLIDUS character (\) followed by a U+006E LATIN SMALL LETTER
+         N.</p></li>
 
-   </dd>
+         <li><p>Replace every remaining U+000D CARRIAGE RETURN (CR) or
+         U+000A LINE FEED (LF) character in <var title="">value</var>
+         with a U+005C REVERSE SOLIDUS character (\) followed by a U+006E
+         LATIN SMALL LETTER N.</p></li>
 
+        </ol>
 
-   <dt><dfn title="md-vevent-summary"><code>summary</code></dfn></dt>
+       </dd>
 
-   <dd>
+      </dl>
 
-    <p>Gives a short summary of the event.</p>
+     </li>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text.</p>
+     <li>
 
-    <p>User agents should replace U+000A LINE FEED (LF) characters in
-    the <span title="concept-property-value">value</span> by U+0020
-    SPACE characters when using the value.</p>
+      <p><span>Add a vCard line</span> with the type <var
+      title="">name</var>, the parameters <var
+      title="">parameters</var>, and the value <var
+      title="">value</var> to <var title="">output</var>.</p>
 
-    <p>A single property with the name <code
-    title="md-vevent-summary">summary</code> may be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+     </li>
 
-   </dd>
+    </ol>
 
+   </li>
 
-   <dt><dfn title="md-vevent-dtend"><code>dtend</code></dfn></dt>
+   <li>
 
-   <dd>
+    <p>If <var title="">first-n</var> is null, then run the following
+    substeps:</p>
 
-    <p>Gives the date and time by which the event ends.</p>
+    <ol>
 
-    <p>If the property with the name <code
-    title="md-vevent-dtend">dtend</code> is present within an <span
-    title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code> that has a property with the name
-    <code title="md-vevent-dtstart">dtstart</code> whose value is a
-    <span>valid date string</span>, then the <span
-    title="concept-property-value">value</span> of the property with
-    the name <code title="md-vevent-dtend">dtend</code> must be text
-    that is a <span>valid date string</span> also. Otherwise, the
-    <span title="concept-property-value">value</span> of the property
-    must be text that is a <span>valid global date and time
-    string</span>.</p>
+     <li><p>If <var title="">first-fn</var> is also null, then skip
+     the remainder of these substeps.</p></li>
 
-    <p>In either case, the <span
-    title="concept-property-value">value</span> be later in time than
-    the value of the <code title="md-event-dtstart">dtstart</code>
-    property of the same <span title="concept-item">item</span>.</p>
+     <li><p>If <var title="">first-fn</var> has a <span
+     title="concept-property-value">value</span> that is an <span
+     title="concept-item">item</span>, then skip the remainder of
+     these substeps.</p></li>
 
-    <p class="note">The time given by the <code
-    title="md-vevent-dtend">dtend</code> property is not
-    inclusive. For day-long events, therefore, the the <code
-    title="md-vevent-dtend">dtend</code> property's <span
-    title="concept-property-value">value</span> will be the day
-    <em>after</em> the end of the event.</p>
+     <li><p>If <var title="">first-org</var> is not null, and the
+     <span title="concept-property-value">value</span> of <var
+     title="">first-org</var> is not an <span
+     title="concept-item">item</span> and is equal to <var
+     title="">first-fn</var>, then <span>add a vCard line</span> with
+     the type "<code title="">N</code>" whose value is four U+003B
+     SEMICOLON characters ("<code title="">;;;;</code>") to <var
+     title="">output</var>. Then, skip the remainder of these
+     substeps.</p></li>
 
-    <p>A single property with the name <code
-    title="md-vevent-dtend">dtend</code> may be present within each
-    <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>, so long as that <code
-    title="md-vevent">vevent</code> does not have a property with the
-    name <code title="md-vevent-duration">duration</code>.</p>
+     <li><p>If the <span title="space character">space
+     characters</span> in <var title="">first-fn</var>, if any, are
+     not all contiguous, then skip the remainder of these
+     substeps.</p></li>
 
-   </dd>
+     <li><p><span title="split a string on spaces">Split <var
+     title="">first-fn</var> on spaces</span>, and let <var
+     title="">part one</var> be the first resulting token, and <var
+     title="">part two</var> be the second, if any, or the empty
+     string if there is no second token. (There cannot be three, given
+     the previous step.)</p></li>
 
+     <li>
 
-   <dt><dfn title="md-vevent-dtstart"><code>dtstart</code></dfn></dt>
+      <p>If the last character of <var title="">part one</var> is a
+      U+002C COMMA character (,), then remove that character from <var
+      title="">part one</var> and <span>add a vCard line</span> with
+      the type "<code title="">N</code>" whose value is the
+      concatenation of the following strings:</p>
 
-   <dd>
+      <ol class="brief">
+       <li>The result of <span>escaping the vCard text string</span> <var title="">part one</var></li>
+       <li>A U+003B SEMICOLON character (;)</li>
+       <li>The result of <span>escaping the vCard text string</span> <var title="">part two</var></li>
+       <li>Three U+003B SEMICOLON characters (;)</li>
+      </ol>
 
-    <p>Gives the date and time at which the event starts.</p>
+      <p>Then, skip the remainder of these substeps.</p>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text that is either a <span>valid date string</span> or a
-    <span>valid global date and time string</span>.</p>
+     </li>
 
-    <p>Exactly one property with the name <code
-    title="md-vevent-dtstart">dtstart</code> must be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+     <li>
 
-   </dd>
+      <p>If <var title="">part two</var> is two Unicode code-points
+      long and its second character is a U+002E FULL STOP character
+      (.), then <span>add a vCard line</span> with the type "<code
+      title="">N</code>" whose value is the concatenation of the
+      following strings:</p>
 
+      <ol class="brief">
+       <li>The result of <span>escaping the vCard text string</span> <var title="">part one</var></li>
+       <li>A U+003B SEMICOLON character (;)</li>
+       <li>The result of <span>escaping the vCard text string</span> consisting of the first character of <var title="">part two</var></li>
+       <li>Three U+003B SEMICOLON characters (;)</li>
+      </ol>
 
-   <dt><dfn title="md-vevent-duration"><code>duration</code></dfn></dt>
+      <p>Then, skip the remainder of these substeps.</p>
 
-   <dd>
+     </li>
 
-    <p>Gives the date and time at which the event starts.</p>
+     <li>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text that is a <span>valid vevent duration string</span>.</p>
+      <p>If <var title="">part two</var> is one Unicode code-point
+      long, then <span>add a vCard line</span> with the type "<code
+      title="">N</code>" whose value is the concatenation of the
+      following strings:</p>
 
-    <p>The duration represented is the sum of all the durations
-    represented by integers in the value.</p>
+      <ol class="brief">
+       <li>The result of <span>escaping the vCard text string</span> <var title="">part one</var></li>
+       <li>A U+003B SEMICOLON character (;)</li>
+       <li>The result of <span>escaping the vCard text string</span> <var title="">part two</var></li>
+       <li>Three U+003B SEMICOLON characters (;)</li>
+      </ol>
 
-    <p>A single property with the name <code
-    title="md-vevent-duration">duration</code> may be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>, so long as that <code
-    title="md-vevent">vevent</code> does not have a property with the
-    name <code title="md-vevent-dtend">dtend</code>.</p>
+      <p>Then, skip the remainder of these substeps.</p>
 
-   </dd>
+     </li>
 
+     <li>
 
-   <dt><dfn title="md-vevent-transp"><code>transp</code></dfn></dt>
+      <p><span>Add a vCard line</span> with the type "<code
+      title="">N</code>" whose value is the concatenation of the
+      following strings:</p>
 
-   <dd>
+      <ol class="brief">
+       <li>The result of <span>escaping the vCard text string</span> <var title="">part two</var></li>
+       <li>A U+003B SEMICOLON character (;)</li>
+       <li>The result of <span>escaping the vCard text string</span> <var title="">part one</var></li>
+       <li>Three U+003B SEMICOLON characters (;)</li>
+      </ol>
 
-    <p>Gives whether the event is to be considered as consuming time
-    on a calendar, for the purpose of free-busy time searches.</p>
+     </li>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text with one of the following values:</p>
+    </ol>
 
-    <ul class="brief">
-     <li><code title="">opaque</code></li>
-     <li><code title="">transparent</code></li>
-    </ul>
+   </li>
 
-    <p>A single property with the name <code
-    title="md-vevent-transp">transp</code> may be present within each
-    <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+   <li><p><span>Add a vCard line</span> with the type "<code
+   title="">END</code>" and the value "<code title="">VCARD</code>"
+   to <var title="">output</var>.</p></li>
 
-   </dd>
+  </ol>
 
+  <p>When the above algorithm says that the user agent is to <dfn>add
+  a vCard line</dfn> consisting of a type <var title="">type</var>,
+  optionally some parameters, and a value <var title="">value</var> to
+  a string <var title="">output</var>, it must run the following
+  steps:</p>
 
-   <!-- ATTENDEE not included; iCalendar says MUST NOT be included in
-   published events -->
+  <ol>
 
+   <li><p>Let <var title="">line</var> be an empty string.
 
-   <dt><dfn title="md-vevent-contact"><code>contact</code></dfn></dt>
+   <li><p>Append <var title="">type</var>, <span>converted to
+   ASCII uppercase</span>, to <var title="">line</var>.</p></li>
 
-   <dd>
+   <li>
 
-    <p>Gives the contact information for the event.</p>
+    <p>If there are any parameters, then for each parameter, in the
+    order that they were added, run these substeps:</p>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text.</p> <!-- v2: support vcard here -->
+    <ol>
 
-    <p>Any number of properties with the name <code
-    title="md-vevent-contact">contact</code> may be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+     <li><p>Append a U+003B SEMICOLON character (;) to <var
+     title="">line</var>.</p></li>
 
-   </dd>
+     <li><p>Append the parameter's name to <var
+     title="">line</var>.</p></li>
 
+     <li><p>Append a U+003D EQUALS SIGN character (=) to <var
+     title="">line</var>.</p></li>
 
-   <!-- ORGANIZER not included, as it is calendar-system-specific
-   (gives a CAL-ADDRESS value); use CONTACT instead -->
+     <li><p>Append the parameter's value to <var
+     title="">line</var>.</p></li>
 
+    </ol>
 
-   <!-- RECURRENCE-ID not included... unclear how to make it usefully
-   work here -->
+   </li>
 
+   <li><p>Append a U+003A COLON character (:) to <var
+   title="">line</var>.</p></li>
 
-   <!-- RELATED-TO not included, as it only makes sense for complete
-   calendars -->
+   <li><p>Append <var title="">value</var> to <var
+   title="">line</var>.</p></li>
 
+   <li><p>Let <var title="">maximum length</var> be 75.</p></li>
 
-   <dt><dfn title="md-vevent-url"><code>url</code></dfn></dt>
+   <li>
 
-   <dd>
+    <p>If and while <var title="">line</var> is longer than <var
+    title="">maximum length</var> Unicode code points long, run the
+    following substeps:</p>
 
-    <p>Gives a <span>URL</span> for the event.</p>
+    <ol>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    an <span>absolute URL</span>.</p>
+     <li><p>Append the first <var title="">maximum length</var>
+     Unicode code points of <var title="">line</var> to <var
+     title="">output</var>.</p></li>
 
-    <p>A single property with the name <code
-    title="md-vevent-url">url</code> may be present within each
-    <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+     <li><p>Remove the first <var title="">maximum length</var>
+     Unicode code points from <var title="">line</var>.</p></li>
 
-   </dd>
+     <li><p>Append a U+000D CARRIAGE RETURN character (CR) to <var
+     title="">output</var>.</p></li>
 
+     <li><p>Append a U+000A LINE FEED character (LF) to <var
+     title="">output</var>.</p></li>
 
-   <!-- UID not included - use "about" -->
+     <li><p>Append a U+0020 SPACE character to <var
+     title="">output</var>.</p></li>
 
+     <li><p>Let <var title="">maximum length</var> be 74.</p></li>
 
-   <dt><dfn title="md-vevent-exdate"><code>exdate</code></dfn></dt>
+    </ol>
 
-   <dd>
+   </li>
 
-    <p>Gives a date and time at which the event does not occur despite
-    the recurrence rules.</p>
+   <li><p>Append (what remains of) <var title="">line</var> to <var
+   title="">output</var>.</p></li>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text that is either a <span>valid date string</span> or a
-    <span>valid global date and time string</span>.</p>
+   <li><p>Append a U+000D CARRIAGE RETURN character (CR) to <var
+   title="">output</var>.</p></li>
 
-    <p>Any number of properties with the name <code
-    title="md-vevent-exdate">exdate</code> may be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+   <li><p>Append a U+000A LINE FEED character (LF) to <var
+   title="">output</var>.</p></li>
 
-   </dd>
+  </ol>
 
+  <p>When the steps above require the user agent to obtain the result
+  of <dfn>collecting vCard subproperties</dfn> named <var
+  title="">subname</var> in <var title="">subitem</var>, the user
+  agent must run the following steps:</p>
 
-   <dt><dfn title="md-vevent-exrule"><code>exrule</code></dfn></dt>
+  <ol>
 
-   <dd>
+   <li><p>Let <var title="">value</var> be the empty string.</p></li>
 
-    <p>Gives a rule for finding dates and times at which the event
-    does not occur despite the recurrence rules.</p>
+   <li>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text that matches the RECUR value type defined in the iCalendar
-    specification. <a href="#refsRFC2445">[RFC2445]</a></p>
+    <p>For each property named <var title="">subname</var> in the item
+    <var title="">subitem</var>, run the following substeps:</p>
 
-    <p>Any number of properties with the name <code
-    title="md-vevent-exrule">exrule</code> may be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+    <ol>
 
-   </dd>
+     <li><p>If the <span title="concept-property-value">value</span>
+     of the property is itself an <span
+     title="concept-item">item</span>, then skip this
+     property.</p></li>
 
+     <li><p>If this is not the first property named <var
+     title="">subname</var> in <var title="">subitem</var> (ignoring
+     any that were skipped by the previous step), then append a U+002C
+     COMMA character (,) to <var title="">value</var>.</p></li>
 
-   <dt><dfn title="md-vevent-rdate"><code>rdate</code></dfn></dt>
+     <li><p>Append the result of <span>escaping the vCard text
+     string</span> given by the <span
+     title="concept-property-value">value</span> of the property to
+     <var title="">value</var>.</p></li>
 
-   <dd>
+    </ol>
 
-    <p>Gives a date and time at which the event recurs.</p>
+   </li>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text that is one of the following:
+   <li><p>Return <var title="">value</var>.</p></li>
 
-    <ul>
+  </ol>
 
-     <li>A <span>valid date string</span>.</li>
+  <p>When the steps above require the user agent to obtain the result
+  of <dfn>collecting the first vCard subproperty</dfn> named <var
+  title="">subname</var> in <var title="">subitem</var>, the user
+  agent must run the following steps:</p>
 
-     <li>A <span>valid global date and time string</span>.</li>
+  <ol>
 
-     <li>A <span>valid global date and time string</span> followed by
-     a U+002F SOLIDUS character (/) followed by a second <span>valid
-     global date and time string</span> representing a later time.</li>
+   <li><p>If there are no properties named <var title="">subname</var>
+   in <var title="">subitem</var>, then abort these substeps,
+   returning the empty string.</p></li>
 
-     <li>A <span>valid global date and time string</span> followed by
-     a U+002F SOLIDUS character (/) followed by a <span>valid vevent
-     duration string</span>.</li>
+   <li><p>If the <span title="concept-property-value">value</span> of
+   the first property named <var title="">subname</var> in <var
+   title="">subitem</var> is an <span
+   title="concept-item">item</span>, then abort these substeps,
+   returning the empty string.</p></li>
 
-    </ul>
+   <li><p>Return the result of <span>escaping the vCard text
+   string</span> given by the <span
+   title="concept-property-value">value</span> of the first property
+   named <var title="">subname</var> in <var
+   title="">subitem</var>.</p></li>
 
-    <p>Any number of properties with the name <code
-    title="md-vevent-rdate">rdate</code> may be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+  </ol>
 
-   </dd>
+  <p>When the above algorithms say the user agent is to <dfn
+  title="escaping the vCard text string">escape the vCard text
+  string</dfn> <var title="">value</var>, the user agent must use the
+  following steps:</p>
 
+  <ol>
 
-   <dt><dfn title="md-vevent-rrule"><code>rrule</code></dfn></dt>
+   <li><p>Prefix every U+005C REVERSE SOLIDUS character (\) in <var
+   title="">value</var> with another U+005C REVERSE SOLIDUS character
+   (\).</p></li>
 
-   <dd>
+   <li><p>Prefix every U+002C COMMA character (,) in <var
+   title="">value</var> with a U+005C REVERSE SOLIDUS character
+   (\).</p></li>
 
-    <p>Gives a rule for finding dates and times at which the event
-    occurs.</p>
+   <li><p>Prefix every U+003B SEMICOLON character (;) in <var
+   title="">value</var> with a U+005C REVERSE SOLIDUS character
+   (\).</p></li>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text that matches the RECUR value type defined in the iCalendar
-    specification. <a href="#refsRFC2445">[RFC2445]</a></p>
+   <li><p>Replace every U+000D CARRIAGE RETURN U+000A LINE FEED
+   character pair (CRLF) in <var title="">value</var> with a U+005C
+   REVERSE SOLIDUS character (\) followed by a U+006E LATIN SMALL
+   LETTER N.</p></li>
 
-    <p>Any number of properties with the name <code
-    title="md-vevent-rrule">rrule</code> may be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+   <li><p>Replace every remaining U+000D CARRIAGE RETURN (CR) or
+   U+000A LINE FEED (LF) character in <var title="">value</var> with a
+   U+005C REVERSE SOLIDUS character (\) followed by a U+006E LATIN
+   SMALL LETTER N.</p></li>
 
-   </dd>
+   <li><p>Return the mutated <var title="">value</var>.</p></li>
 
+  </ol>
 
-   <dt><dfn title="md-vevent-created"><code>created</code></dfn></dt>
+  <p class="note">This algorithm can generate invalid vCard output, if
+  the input does not conform to the rules described for the <code
+  title="md-vcard">http://microformats.org/profile/hcard</code>
+  <span>item type</span> and <span title="defined property
+  name">defined property names</span>.</p> <!-- of course since vcard
+  doesn't define error handling, this is somewhat problematic. -->
 
-   <dd>
 
-    <p>Gives the date and time at which the event information was first
-    created in a calendaring system.</p>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text that is a <span>valid global date and time string</span>.</p>
+  <h5>Examples</h5>
 
-    <p>A single property with the name <code
-    title="md-vevent-created">created</code> may be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+  <div class="example">
 
-   </dd>
+   <p>Here is a long example vCard for a fictional character called
+   "Jack Bauer":</p>
 
+   <pre>&lt;section id="jack" itemscope itemtype="http://microformats.org/profile/hcard">
+ &lt;h1 itemprop="fn">Jack Bauer&lt;/h1>
+ &lt;img itemprop="photo" alt="" src="jack-bauer.jpg">
+ &lt;p itemprop="org" itemscope>
+  &lt;span itemprop="organization-name">Counter-Terrorist Unit&lt;/span>
+  (&lt;span itemprop="organization-unit">Los Angeles Division&lt;/span>)
+ &lt;/p>
+ &lt;p>
+  &lt;span itemprop="adr" itemscope>
+   &lt;span itemprop="street-address">10201 W. Pico Blvd.&lt;/span>&lt;br>
+   &lt;span itemprop="locality">Los Angeles&lt;/span>,
+   &lt;span itemprop="region">CA&lt;/span>
+   &lt;span itemprop="postal-code">90064&lt;/span>&lt;br>
+   &lt;span itemprop="country-name">United States&lt;/span>&lt;br>
+  &lt;/span>
+  &lt;span itemprop="geo">34.052339;-118.410623&lt;/span>
+ &lt;/p>
+ &lt;h2>Assorted Contact Methods&lt;/h2>
+ &lt;ul>
+  &lt;li itemprop="tel" itemscope>&lt;span itemprop="value">+1 (310)
+  597 3781&lt;/span> &lt;span itemprop="type">work&lt;/span> &lt;meta
+  itemprop="type" content="pref">&lt;/li>
+  &lt;li>&lt;a itemprop="url"
+  href="http://en.wikipedia.org/wiki/Jack_Bauer">I'm on
+  Wikipedia&lt;/a> so you can leave a message on my user talk
+  page.&lt;/li>
+  &lt;li>&lt;a itemprop="url"
+  href="http://www.jackbauerfacts.com/">Jack Bauer Facts&lt;/a>&lt;/li>
+  &lt;li itemprop="email">&lt;a
+  href="mailto:j.bauer@la.ctu.gov.invalid">j.bauer@la.ctu.gov.invalid&lt;/a>&lt;/li>
+  &lt;li itemprop="tel" itemscope>&lt;span itemprop="value">+1 (310) 555
+  3781&lt;/span> &lt;span>&lt;meta itemprop="type" content="cell">mobile
+  phone&lt;/span>&lt;/li>
+ &lt;/ul>
+ &lt;p itemprop="note">If I'm out in the field, you may be better off
+ contacting &lt;span itemprop="agent" itemscope
+ itemtype="http://microformats.org/profile/hcard">&lt;a
+ itemprop="email" href="mailto:c.obrian@la.ctu.gov.invalid">&lt;span
+ itemprop="fn">Chloe O'Brian&lt;/span>&lt;/a>&lt;/span> if it's about
+ work, or ask &lt;span itemprop="agent">Tony Almeida&lt;/span> if
+ you're interested in the CTU five-a-side football team we're trying
+ to get going.&lt;/p>
+ &lt;ins datetime="2008-07-20T21:00:00+0100">
+  &lt;span itemprop="rev" itemscope>
+   &lt;meta itemprop="type" content="date-time">
+   &lt;meta itemprop="value" content="2008-07-20T21:00:00+0100">
+  &lt;/span>
+  &lt;p itemprop="tel" itemscope>&lt;strong>Update!&lt;/strong>
+  My new &lt;span itemprop="type">home&lt;/span> phone number is
+  &lt;span itemprop="value">01632 960 123&lt;/span>.
+ &lt;/ins>
+&lt;/section></pre>
 
-   <!-- DTSTAMP not included, it gets added when serialising -->
+  </div>
 
+  <div class="example">
 
-   <dt><dfn title="md-vevent-last-modified"><code>last-modified</code></dfn></dt>
+   <p>This example shows a site's contact details (using the
+   <code>address</code> element) containing an address with two street
+   components:</p>
 
-   <dd>
+   <pre>&lt;address itemscope itemtype="http://microformats.org/profile/hcard">
+ &lt;strong title="fn">Alfred Person&lt;/strong> &lt;br>
+ &lt;span itemprop="adr" itemscope>
+  &lt;span itemprop="street-address">1600 Amphitheatre Parkway&lt;/span> &lt;br>
+  &lt;span itemprop="street-address">Building 43, Second Floor&lt;/span> &lt;br>
+  &lt;span itemprop="locality">Mountain View&lt;/span>,
+   &lt;span itemprop="region">CA&lt;/span> &lt;span itemprop="postal-code">94043&lt;/span>
+ &lt;/span>
+&lt;/address></pre>
 
-    <p>Gives the date and time at which the event information was last
-    modified in a calendaring system.</p>
+  </div>
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text that is a <span>valid global date and time string</span>.</p>
+  <div class="example">
 
-    <p>A single property with the name <code
-    title="md-vevent-last-modified">last-modified</code> may be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+   <p>The vCard vocabulary can be used to just mark up people's
+   names:</p>
 
-   </dd>
+   <pre>&lt;span itemscope itemtype="http://microformats.org/profile/hcard"
+>&lt;span itemprop=fn>George Washington&lt;/span>&lt;/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>
 
-   <dt><dfn title="md-vevent-sequence"><code>sequence</code></dfn></dt>
+   <pre>BEGIN:VCARD
+PROFILE:VCARD
+VERSION:3.0
+SOURCE:<var title="">document's address</var>
+FN:George Washington
+N:Washington;George;;;
+END:VCARD</pre>
 
-   <dd>
+  </div>
 
-    <p>Gives a revision number for the event information.</p>
+<!--END vCard-->
 
-    <p>The <span title="concept-property-value">value</span> must be
-    text that is a <span>valid non-negative integer</span>.</p>
+  <h4>vEvent</h4>
 
-    <p>A single property with the name <code
-    title="md-vevent-sequence">sequence</code> may be present within
-    each <span title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>.</p>
+<!--START vEvent-->
 
-   </dd>
+  <p>An item with the <span>item type</span> <dfn
+  title="md-vevent"><code>http://microformats.org/profile/hcalendar</code></dfn>
+  represents an event.</p>
 
+  <p>The following are the type's <span title="defined property
+  name">defined property names</span>. They are based on the
+  vocabulary defined in the iCalendar specification, where more
+  information on how to interpret the values can be found. <a
+  href="#refsRFC2445">[RFC2445]</a></p>
 
-   <!-- REQUEST-STATUS not included, calendaring system interop
-   feature -->
+  <p class="note">Only the parts of the iCalendar vocabulary relating
+  to events are used here; this vocabulary cannot express a complete
+  iCalendar instance.</p>
 
+  <dl>
 
-  </dl>
 
-  <p>A string is a <dfn>valid vevent duration string</dfn> if it
-  matches the following pattern:</p>
+   <dt><dfn title="md-vevent-attach"><code>attach</code></dfn></dt>
 
-  <ol>
+   <dd>
 
-   <li>A U+0050 LATIN CAPITAL LETTER P character.</li>
+    <p>Gives the address of an associated document for the event.</p>
 
-   <li>One of the following:
+    <p>The <span title="concept-property-value">value</span> must be
+    an <span>absolute URL</span>.</p>
 
-    <ul>
+    <p>Any number of properties with the name <code
+    title="md-vevent-attach">attach</code> may be present within each
+    <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-     <li> A <span>valid non-negative integer</span> followed by a
-     U+0057 LATIN CAPITAL LETTER W character. The integer represents
-     a duration of that number of weeks. </li>
+   </dd>
 
-     <li> At least one, and possible both in this order, of the
-     following:
 
-      <ol>
+   <dt><dfn title="md-vevent-categories"><code>categories</code></dfn></dt>
 
-       <li> A <span>valid non-negative integer</span> followed by a
-       U+0044 LATIN CAPITAL LETTER D character. The integer
-       represents a duration of that number of days. </li>
+   <dd>
 
-       <li> A U+0054 LATIN CAPITAL LETTER T character followed by
-       any one of the following, or the first and second of the
-       following in that order, or the second and third of the
-       following in that order, or all three of the following in
-       this order:
+    <p>Gives the name of a category or tag that the event could be
+    classified as.</p>
 
-        <ol>
+    <p>The <span title="concept-property-value">value</span> must be
+    text.</p>
 
-         <li> A <span>valid non-negative integer</span> followed by
-         a U+0048 LATIN CAPITAL LETTER H character. The integer
-         represents a duration of that number of hours. </li>
+    <p>Any number of properties with the name <code
+    title="md-vevent-categories">categories</code> may be present
+    within each <span title="concept-item">item</span> with the type
+    <code title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-         <li> A <span>valid non-negative integer</span> followed by
-         a U+004D LATIN CAPITAL LETTER M character. The integer
-         represents a duration of that number of minutes. </li>
+   </dd>
 
-         <li> A <span>valid non-negative integer</span> followed by
-         a U+0053 LATIN CAPITAL LETTER S character. The integer
-         represents a duration of that number of seconds. </li>
 
-        </ol>
+   <dt><dfn title="md-vevent-class"><code>class</code></dfn></dt>
 
-      </ol>
+   <dd>
 
-     </li>
+    <p>Gives the access classification of the information regarding
+    the event.</p>
+
+    <p>The <span title="concept-property-value">value</span> must be
+    text with one of the following values:</p>
 
+    <ul class="brief">
+     <li><code title="">public</code></li>
+     <li><code title="">private</code></li>
+     <li><code title="">confidential</code></li>
     </ul>
 
-   </li>
+    <p class="warning">This is merely advisory and cannot be
+    considered a confidentiality measure.</p>
 
-  </ol>
+    <p>A single property with the name <code
+    title="md-vevent-class">class</code> may be present within each
+    <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
+   </dd>
 
-  <h5>Examples</h5>
 
-<!-- get more from http://www.ietf.org/rfc/rfc2445.txt -->
+   <dt><dfn title="md-vevent-comment"><code>comment</code></dfn></dt>
 
-  <div class="example">
+   <dd>
 
-   <p>Here is an example of a page that uses the <code
-   title="md-vevent">vevent</code> vocabulary to mark up an event:</p>
+    <p>Gives a comment regarding the event.</p>
 
-   <pre>&lt;body item="vevent">
- ...
- &lt;h1 itemprop="summary">Bluesday Tuesday: Money Road&lt;/h1>
- ...
- &lt;time itemprop="dtstart" datetime="2009-05-05T19:00:00Z">May 5th @ 7pm&lt;/time>
- (until &lt;time itemprop="dtend" datetime="2009-05-05T21:00:00Z">9pm&lt;/time>)
- ...
- &lt;a href="http://livebrum.co.uk/2009/05/05/bluesday-tuesday-money-road"
-    rel="bookmark" itemprop="url">Link to this page&lt;/a>
- ...
- &lt;p>Location: &lt;span itemprop="location">The RoadHouse&lt;/span>&lt;/p>
- ...
- &lt;p>&lt;input type=button value="Add to Calendar"
-           onclick="location = getCalendar(this)">&lt;/p>
- ...
- &lt;meta itemprop="description" content="via livebrum.co.uk">
-&lt;/body></pre>
+    <p>The <span title="concept-property-value">value</span> must be
+    text.</p>
 
-   <p>The "<code title="">getCalendar()</code>" method could look like
-   this:</p>
+    <p>Any number of properties with the name <code
+    title="md-vevent-comment">comment</code> may be present within each
+    <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-   <pre>function getCalendar(node) {
-  while (node && !node.item.contains('vevent'))
-    node = node.parentNode;
-  if (!node) {
-    alert('No event data found.');
-    return;
-  }
-  var stamp = new Date();
-  var stampString = '' + stamp.getUTCFullYear() + (stamp.getUTCMonth() + 1) + stamp.getUTCDate() + 'T' +
-                         stamp.getUTCHours() + stamp.getUTCMinutes() + stamp.getUTCSeconds() + 'Z';
-  var calendar = 'BEGIN:VCALENDAR\r\nPRODID:HTML\r\nVERSION:2.0\r\nBEGIN:VEVENT\r\nDTSTAMP:' + stampString + '\r\n';
-  for (var propIndex = 0; propIndex &lt; node.properties.length; propIndex += 1) {
-    var prop = node.properties[propIndex];
-    var value = prop.contents;
-    var parameters = '';
-    if (prop.localName == 'time') {
-      value = value.replace(/[:-]/g, '');
-      if (prop.date &amp;&amp; prop.time)
-        parameters = ';VALUE=DATE';
-      else
-        parameters = ';VALUE=DATE-TIME';
-    } else {
-      value = value.replace(/\\/g, '\\n');
-      value = value.replace(/;/g, '\\;');
-      value = value.replace(/,/g, \\,');
-      value = value.replace(/\n/g, '\\n');
-    }
-    for (var nameIndex = 0; nameIndex &lt; prop.itemprop.length; nameIndex += 1) {
-      var name = prop.itemprop[nameIndex];
-      if (!name.match(':') && !name.match('.'))
-        calendar += name.toUpperCase() + parameters + ':' + value + '\r\n';
-    }
-  }
-  calendar += 'END:VEVENT\r\nEND:VCALENDAR\r\n';
-  return 'data:text/calendar;component=vevent,' + encodeURI(calendar);
-}</pre>
+   </dd>
 
-   <p>The same page could offer some markup, such as the following,
-   for copy-and-pasting into blogs:</p>
 
-   <pre>&lt;div item="vevent">
- &lt;p>I'm going to
- &lt;strong itemprop="summary">Bluesday Tuesday: Money Road&lt;/strong>,
- &lt;time itemprop="dtstart" datetime="2009-05-05T19:00:00Z">May 5th at 7pm&lt;/time>
- to &lt;time itemprop="dtend" content="2009-05-05T21:00:00Z">9pm&lt;/time>,
- at &lt;span itemprop="location">The RoadHouse&lt;/span>!&lt;/p>
- &lt;p>&lt;a href="http://livebrum.co.uk/2009/05/05/bluesday-tuesday-money-road"
-       itemprop="url">See this event on livebrum.co.uk&lt;/a>.&lt;/p>
- &lt;meta itemprop="description" content="via livebrum.co.uk">
-&lt;/div></pre>
+   <dt><dfn title="md-vevent-description"><code>description</code></dfn></dt>
 
-  </div>
+   <dd>
 
+    <p>Gives a detailed description of the event.</p>
 
+    <p>The <span title="concept-property-value">value</span> must be
+    text.</p>
 
-  <h4>Licensing works</h4>
-<!--
-       <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>",
-       let <var title="">name</var> be the string "<code
-       title="">http://purl.org/dc/elements/1.1/title</code>".</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-author">author</code>", let <var
-       title="">name</var> be the string "<code
-       title="">http://creativecommons.org/ns#attributionName</code>".</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-license">license</code>", let <var
-       title="">name</var> be the string "<code
-       title="">http://www.w3.org/1999/xhtml/vocab#license</code>".</p></li>
--->
+    <p>A single property with the name <code
+    title="md-vevent-description">description</code> may be present
+    within each <span title="concept-item">item</span> with the type
+    <code title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-  <p>An item with the <span>predefined type</span> <dfn
-  title="md-work"><code>work</code></dfn> represents a work (e.g. an
-  article, an image, a video, a song, etc). This type is primarily
-  intended to allow authors to include licensing information for
-  works.</p>
+   </dd>
 
-  <p>The following are the type's <span title="predefined property
-  name">predefined property names</span>.</p>
 
-  <dl>
+   <dt><dfn title="md-vevent-geo"><code>geo</code></dfn></dt>
+
+   <dd>
 
+    <p>Gives the geographical position of the event.</p>
 
-   <dt><dfn title="md-work-title"><code>title</code></dfn></dt>
+    <p>The <span title="concept-property-value">value</span> must be
+    text and must match the following syntax:</p>
 
-   <dd>
+    <ol>
 
-    <p>Gives the name of the work.</p>
+     <li>Optionally, either a U+002B PLUS SIGN character (+) or a
+     U+002D HYPHEN-MINUS character (-).</li>
+
+     <li>One or more digits in the range U+0030 DIGIT ZERO .. U+0039
+     DIGIT NINE.</li>
+
+     <li>Optionally*, a U+002E FULL STOP character (.) followed by one
+     or more digits in the range U+0030 DIGIT ZERO .. U+0039 DIGIT
+     NINE.</li>
+
+     <li>A U+003B SEMICOLON character (;).</li>
+
+     <li>Optionally, either a U+002B PLUS SIGN character (+) or a
+     U+002D HYPHEN-MINUS character (-).</li>
+
+     <li>One or more digits in the range U+0030 DIGIT ZERO .. U+0039
+     DIGIT NINE.</li>
+
+     <li>Optionally*, a U+002E FULL STOP character (.) followed by one
+     or more digits in the range U+0030 DIGIT ZERO .. U+0039 DIGIT
+     NINE.</li>
+
+    </ol>
+
+    <p>The optional components marked with an asterisk (*) should be
+    included, and should have six digits each.</p> <!-- iCalendar
+    actually limits the range to -91.0 < lat < 91.0; -181.0 < long <
+    181.0, which seems weird. It also gives special meanings to
+    +90/-90 lat, and +180 long. -->
+
+    <!-- copied from vcard (not icalendar!) -->
+    <p class="note">The value specifies latitude and longitude, in
+    that order (i.e., "LAT LON" ordering), in decimal degrees. The
+    longitude represents the location east and west of the prime
+    meridian as a positive or negative real number, respectively.  The
+    latitude represents the location north and south of the equator as
+    a positive or negative real number, respectively.</p>
 
     <p>A single property with the name <code
-    title="md-work-title">title</code> may be present within each
-    <span title="concept-item">item</span> with the type <code
-    title="md-work">work</code>.</p>
+    title="md-vevent-geo">geo</code> may be present within each <span
+    title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
 
-   <dt><dfn title="md-work-author"><code>author</code></dfn></dt>
+   <dt><dfn title="md-vevent-location"><code>location</code></dfn></dt>
 
    <dd>
 
-    <p>Gives the name or contact information of one of the authors or
-    creators of the work.</p>
+    <p>Gives the location of the event.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
-    either an <span title="concept-item">item</span> with the type
-    <code title="md-vcard">vcard</code>, or text.</p>
+    text.</p> <!-- v2: support vcard here -->
 
-    <p>Any number of properties with the name <code
-    title="md-work-author">author</code> may be present within each
-    <span title="concept-item">item</span> with the type <code
-    title="md-work">work</code>.</p>
+    <p>A single property with the name <code
+    title="md-vevent-location">location</code> may be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
 
-   <dt><dfn title="md-work-license"><code>license</code></dfn></dt>
+   <!-- PRIORITY not included - always 0 - doesn't make sense for single events -->
+
+
+   <dt><dfn title="md-vevent-resources"><code>resources</code></dfn></dt>
 
    <dd>
 
-    <p>Identifies one of the licenses under which the work is
-    available.</p>
+    <p>Gives a resource that will be needed for the event.</p>
 
     <p>The <span title="concept-property-value">value</span> must be
-    an <span>absolute URL</span>.</p>
+    text.</p> <!-- v2: support vcard here -->
 
     <p>Any number of properties with the name <code
-    title="md-work-license">license</code> may be present within each
-    <span title="concept-item">item</span> with the type <code
-    title="md-work">work</code>.</p>
+    title="md-vevent-resources">resources</code> may be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
-  </dl>
 
-  <p>In addition, exactly one property with the name <code
-  title="md-about">about</code> must be present within each <span
-  title="concept-item">item</span> with the type <code
-  title="md-work">work</code>, giving the <span>URL</span> of the
-  work.</p>
+   <dt><dfn title="md-vevent-status"><code>status</code></dfn></dt>
 
+   <dd>
 
-  <h5>Examples</h5>
+    <p>Gives the confirmation status of the event.</p>
 
-  <div class="example">
+    <p>The <span title="concept-property-value">value</span> must be
+    text with one of the following values:</p>
 
-   <p>This example shows an embedded image entitled <cite>My
-   Pond</cite>, licensed under the Creative Commons Attribution-Share
-   Alike 3.0 United States License and the MIT license
-   simultaneously.</p>
+    <ul class="brief">
+     <li><code title="">tentative</code></li>
+     <li><code title="">confirmed</code></li>
+     <li><code title="">cancelled</code></li> <!-- two Ls as per iCalendar spec -->
+    </ul>
 
-   <pre>&lt;figure <strong>item="work"</strong>>
- &lt;dd>&lt;img <strong>itemprop="about"</strong> src="mypond.jpeg">
- &lt;dt>
-  &lt;p>&lt;cite <strong>itemprop="title"</strong>>My Pond&lt;/cite>&lt;/p>
-  &lt;p>&lt;small>Licensed under the &lt;a <strong>itemprop="license"</strong>
-  href="http://creativecommons.org/licenses/by-sa/3.0/us/">Creative
-  Commons Attribution-Share Alike 3.0 United States License&lt;/a>
-  and the &lt;a <strong>itemprop="license"</strong>
-  href="http://www.opensource.org/licenses/mit-license.php">MIT
-  license&lt;/a>.&lt;/small>
-&lt;/figure></pre>
+    <p>A single property with the name <code
+    title="md-vevent-status">status</code> may be present within each
+    <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-  </div>
+   </dd>
 
 
-  <!--START html5-->
+   <dt><dfn title="md-vevent-summary"><code>summary</code></dfn></dt>
 
-  <div class="impl">
+   <dd>
 
-  <h3>Converting HTML to other formats</h3>
+    <p>Gives a short summary of the event.</p>
 
-  <!--END html5-->
+    <p>The <span title="concept-property-value">value</span> must be
+    text.</p>
 
-  <p>A generic API upon which the vocabulary-specific conversions
-  defined below (vCard, iCalendar) can be built will need to provide
-  the following information when given a <code>Document</code> (or
-  equivalent):</p>
+    <p>User agents should replace U+000A LINE FEED (LF) characters in
+    the <span title="concept-property-value">value</span> by U+0020
+    SPACE characters when using the value.</p>
 
-  <ul>
+    <p>A single property with the name <code
+    title="md-vevent-summary">summary</code> may be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-   <li><span>The document's current address</span>.</li>
+   </dd>
 
-   <li>The <code>textContent</code> of <span>the <code>title</code>
-   element</span>, if any.</li>
 
-   <li>The list of <span>top-level microdata items</span>.</li>
+   <dt><dfn title="md-vevent-dtend"><code>dtend</code></dfn></dt>
 
-   <li>For each <span title="concept-item">item</span>, the list of
-   properties that have that <span title="concept-item">item</span> as
-   their <span title="concept-item-corresponding">corresponding
-   item</span>.</li>
+   <dd>
 
-   <li>For each property, its <span title="property
-   names">name</span>.</li>
+    <p>Gives the date and time by which the event ends.</p>
 
-   <li>For each property, its <span
-   title="concept-property-value">value</span> (which might be a
-   further <span title="concept-item">item</span>).</li>
+    <p>If the property with the name <code
+    title="md-vevent-dtend">dtend</code> is present within an <span
+    title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>
+    that has a property with the name <code
+    title="md-vevent-dtstart">dtstart</code> whose value is a
+    <span>valid date string</span>, then the <span
+    title="concept-property-value">value</span> of the property with
+    the name <code title="md-vevent-dtend">dtend</code> must be text
+    that is a <span>valid date string</span> also. Otherwise, the
+    <span title="concept-property-value">value</span> of the property
+    must be text that is a <span>valid global date and time
+    string</span>.</p>
 
-   <li>For each property, if its <span
-   title="concept-property-value">value</span> is not itself an <span
-   title="concept-item">item</span>, whether the element is a
-   <code>time</code> element, a <span title="URL property
-   elements">URL property element</span>, or another element.</li>
+    <p>In either case, the <span
+    title="concept-property-value">value</span> be later in time than
+    the value of the <code title="md-event-dtstart">dtstart</code>
+    property of the same <span title="concept-item">item</span>.</p>
 
-<!--(RDF only currently)
-   <li>For each property, the <span>language</span> of the element
-   that adds the property.</li>
--->
+    <p class="note">The time given by the <code
+    title="md-vevent-dtend">dtend</code> property is not
+    inclusive. For day-long events, therefore, the the <code
+    title="md-vevent-dtend">dtend</code> property's <span
+    title="concept-property-value">value</span> will be the day
+    <em>after</em> the end of the event.</p>
 
-  </ul>
+    <p>A single property with the name <code
+    title="md-vevent-dtend">dtend</code> may be present within each
+    <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>,
+    so long as that <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>
+    does not have a property with the name <code
+    title="md-vevent-duration">duration</code>.</p>
 
-  <!--START html5-->
-  <!--END vocabs-->
+   </dd>
 
 
-  <h4>JSON</h4>
+   <dt><dfn title="md-vevent-dtstart"><code>dtstart</code></dfn></dt>
 
-  <p>Given a list of nodes <var title="">nodes</var> in a
-  <code>Document</code>, a user agent must run the following algorithm
-  to <dfn title="extracting JSON">extract the microdata from those
-  nodes into a JSON form</dfn>:</p>
+   <dd>
 
-  <ol>
+    <p>Gives the date and time at which the event starts.</p>
 
-   <li><p>Let <var title="">result</var> be an empty object.</p></li>
+    <p>The <span title="concept-property-value">value</span> must be
+    text that is either a <span>valid date string</span> or a
+    <span>valid global date and time string</span>.</p>
 
-   <li><p>Let <var title="">items</var> be an empty array.</p></li>
+    <p>Exactly one property with the name <code
+    title="md-vevent-dtstart">dtstart</code> must be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-   <li><p>For each <var title="">node</var> in <var
-   title="">nodes</var>, check if the element is a <span
-   title="top-level microdata items">top-level microdata item</span>,
-   and if it is then <span>get the object</span> for that element and
-   add it to <var title="">items</var>.</p></li>
+   </dd>
 
-   <li><p>Add an entry to <var title="">result</var> called "<code
-   title="">items</code>" whose value is the array <var
-   title="">items</var>.</p></li>
 
-   <li><p>Return the result of serializing <var title="">result</var>
-   to JSON.</p></li>
+   <dt><dfn title="md-vevent-duration"><code>duration</code></dfn></dt>
 
-  </ol>
+   <dd>
 
-  <p>When the user agent is to <dfn>get the object</dfn> for an item
-  <var title="">item</var>, it must run the following substeps:</p>
+    <p>Gives the date and time at which the event starts.</p>
 
-  <ol>
+    <p>The <span title="concept-property-value">value</span> must be
+    text that is a <span>valid vevent duration string</span>.</p>
 
-   <li><p>Let <var title="">result</var> be an empty object.</p></li>
+    <p>The duration represented is the sum of all the durations
+    represented by integers in the value.</p>
 
-   <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>
+    <p>A single property with the name <code
+    title="md-vevent-duration">duration</code> may be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>,
+    so long as that <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>
+    does not have a property with the name <code
+    title="md-vevent-dtend">dtend</code>.</p>
 
-   <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>
+   </dd>
 
-   <li><p>Let <var title="">properties</var> be an empty
-   object.</p></li>
 
-   <li>
+   <dt><dfn title="md-vevent-transp"><code>transp</code></dfn></dt>
 
-    <p>For each element <var title="">element</var> that has one or
-    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>
+   <dd>
 
-    <ol>
+    <p>Gives whether the event is to be considered as consuming time
+    on a calendar, for the purpose of free-busy time searches.</p>
 
-     <li><p>Let <var title="">value</var> be the <span
-     title="concept-property-value">property value</span> of <var
-     title="">element</var>.</p></li>
+    <p>The <span title="concept-property-value">value</span> must be
+    text with one of the following values:</p>
 
-     <li><p>If <var title="">value</var> is an <span
-     title="concept-item">item</span>, then <span>get the
-     object</span> for <var title="">value</var>, and then replace
-     <var title="">value</var> with the object returned from those
-     steps.</p></li>
+    <ul class="brief">
+     <li><code title="">opaque</code></li>
+     <li><code title="">transparent</code></li>
+    </ul>
 
-     <li>
+    <p>A single property with the name <code
+    title="md-vevent-transp">transp</code> may be present within each
+    <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-      <p>For each name <var title="">name</var> in <var
-      title="">element</var>'s <span>property names</span>, run the
-      following substeps:</p>
+   </dd>
 
-      <ol>
 
-       <li><p>If there is no entry named <var title="">name</var> in
-       <var title="">properties</var>, then add an entry named <var
-       title="">name</var> to <var title="">properties</var> whose
-       value is an empty array.</p></li>
+   <!-- ATTENDEE not included; iCalendar says MUST NOT be included in
+   published events -->
 
-       <li><p>Append <var title="">value</var> to the entry named <var
-       title="">name</var> in <var title="">properties</var>.</p></li>
 
-      </ol>
+   <dt><dfn title="md-vevent-contact"><code>contact</code></dfn></dt>
 
-     </li>
+   <dd>
 
-    </ol>
+    <p>Gives the contact information for the event.</p>
 
-   </li>
+    <p>The <span title="concept-property-value">value</span> must be
+    text.</p> <!-- v2: support vcard here -->
 
-   <li><p>Add an entry to <var title="">result</var> called "<code
-   title="">properties</code>" whose value is the array <var
-   title="">properties</var>.</p></li>
+    <p>Any number of properties with the name <code
+    title="md-vevent-contact">contact</code> may be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-   <li><p>Return <var title="">result</var>.</p></li>
+   </dd>
 
-  </ol>
 
+   <!-- ORGANIZER not included, as it is calendar-system-specific
+   (gives a CAL-ADDRESS value); use CONTACT instead -->
 
-  <h4>RDF</h4>
 
-  <p>To convert a <code>Document</code> to RDF, a user agent must run
-  the following algorithm:</p>
+   <!-- RECURRENCE-ID not included... unclear how to make it usefully
+   work here -->
 
-  <ol>
 
-   <li>
+   <!-- RELATED-TO not included, as it only makes sense for complete
+   calendars -->
 
-    <p>If <span>the <code>title</code> element</span> is not null,
-    then generate the following triple:</p>
 
-    <dl class="triple">
-     <dt>subject   <dd> <span>the document's current address</span>
-     <dt>predicate <dd> <code title="">http://purl.org/dc/terms/title</code>
-     <dt>object    <dd> the <code>textContent</code> of <span>the <code>title</code> element</span>, as a plain literal, with the language information set from the <span>language</span> of <span>the <code>title</code> element</span>, if it is not unknown.
-    </dl>
+   <dt><dfn title="md-vevent-url"><code>url</code></dfn></dt>
 
-   </li>
+   <dd>
 
-   <li>
+    <p>Gives a <span>URL</span> for the event.</p>
 
-    <p>For each <code>a</code>, <code>area</code>, and
-    <code>link</code> element in the <code>Document</code>, run these
-    substeps:</p>
+    <p>The <span title="concept-property-value">value</span> must be
+    an <span>absolute URL</span>.</p>
 
-    <ol>
+    <p>A single property with the name <code
+    title="md-vevent-url">url</code> may be present within each
+    <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-     <li><p>If the element does not have a <code title="">rel</code>
-     attribute, then skip this element.</p></li>
+   </dd>
 
-     <li><p>If the element does not have an <code title="">href</code>
-     attribute, then skip this element.</p></li>
 
-     <li><p>If <span title="resolve a URL">resolving</span> the
-     element's <code title="">href</code> attribute relative to the
-     element is not successful, then skip this element.</p></li>
+   <!-- UID not included - use "itemid" -->
 
-     <li><p>Otherwise, <span title="split a string on spaces">split
-     the value of the element's <code title="">rel</code> attribute on
-     spaces</span>, obtaining <var title="">list of tokens</var>.</p></li>
 
-     <li><p><span title="converted to ASCII lowercase">Convert each token in
-     <var title="">list of tokens</var> to ASCII lowercase</span>.</p></li>
+   <dt><dfn title="md-vevent-exdate"><code>exdate</code></dfn></dt>
 
-     <li><p>If <var title="">list of tokens</var> contains more than
-     one instance of the token <code title="rel-up">up</code>, then
-     remove all such tokens.</p></li>
+   <dd>
 
-     <li><p>Coalesce duplicate tokens in <var title="">list of
-     tokens</var>.</p></li>
+    <p>Gives a date and time at which the event does not occur despite
+    the recurrence rules.</p>
 
-     <li><p>If <var title="">list of tokens</var> contains both the
-     tokens <code title="rel-alternate">alternate</code> and <code
-     title="rel-stylesheet">stylesheet</code>, then remove them both
-     and replace them with the single (uppercase) token <code
-     title="">ALTERNATE-STYLESHEET</code>.</p></li>
+    <p>The <span title="concept-property-value">value</span> must be
+    text that is either a <span>valid date string</span> or a
+    <span>valid global date and time string</span>.</p>
 
-     <li>
+    <p>Any number of properties with the name <code
+    title="md-vevent-exdate">exdate</code> may be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-      <p>For each token <var title="">token</var> in <var
-      title="">list of tokens</var> that contains neither a U+003A
-      COLON character (:) nor a U+002E FULL STOP character (.),
-      generate the following triple:</p>
+   </dd>
 
-      <dl class="triple">
-       <dt>subject   <dd> <span>the document's current address</span>
-       <dt>predicate <dd> the concatenation of the string "<code title="">http://www.w3.org/1999/xhtml/vocab#</code>" and <var title="">token</var>, with any characters in <var title="">token</var> that are not valid in the &lt;ifragment> production of the IRI syntax being %-escaped <a href="#refsRFC3987">[RFC3987]</a>
-       <dt>object    <dd> the <span>absolute URL</span> that results from <span title="resolve a URL">resolving</span> the value of the element's <code title="">href</code> attribute relative to the element
-      </dl>
 
-     </li>
+   <dt><dfn title="md-vevent-exrule"><code>exrule</code></dfn></dt>
 
-    </ol>
+   <dd>
 
-   </li>
+    <p>Gives a rule for finding dates and times at which the event
+    does not occur despite the recurrence rules.</p>
 
-   <li>
+    <p>The <span title="concept-property-value">value</span> must be
+    text that matches the RECUR value type defined in the iCalendar
+    specification. <a href="#refsRFC2445">[RFC2445]</a></p>
 
-    <p>For each <code>meta</code> element in the <code>Document</code>
-    that has a <code title="attr-meta-name">name</code> attribute and
-    a <code title="attr-meta-content">content</code> attribute, if the
-    value of the <code title="attr-meta-name">name</code> attribute
-    contains neither a U+003A COLON character (:) nor a U+002E FULL
-    STOP character (.), generate the following triple:</p>
+    <p>Any number of properties with the name <code
+    title="md-vevent-exrule">exrule</code> may be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-    <dl class="triple">
-     <dt>subject   <dd> <span>the document's current address</span>
-     <dt>predicate <dd> the concatenation of the string "<code title="">http://www.w3.org/1999/xhtml/vocab#</code>" and the value of the element's <code title="attr-meta-name">name</code> attribute, <span>converted to ASCII lowercase</span>, with any characters in the value that are not valid in the &lt;ifragment> production of the IRI syntax being %-escaped <a href="#refsRFC3987">[RFC3987]</a>
-     <dt>object    <dd> the value of the element's <code title="attr-meta-content">content</code> attribute, as a plain literal, with the language information set from the <span>language</span> of the element, if it is not unknown.
-    </dl>
+   </dd>
 
-   </li>
 
-   <li>
+   <dt><dfn title="md-vevent-rdate"><code>rdate</code></dfn></dt>
 
-    <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>
+   <dd>
 
-    <dl class="triple">
-     <dt>subject   <dd> <span>the document's current address</span>
-     <dt>predicate <dd> <code title="">http://purl.org/dc/terms/source</code>
-     <dt>object    <dd> the <span>absolute URL</span> that results from <span title="resolve a URL">resolving</span> the value of the element's <code title="">cite</code> attribute relative to the element
-    </dl>
+    <p>Gives a date and time at which the event recurs.</p>
 
-   </li>
+    <p>The <span title="concept-property-value">value</span> must be
+    text that is one of the following:
 
-   <li>
+    <ul>
 
-    <p>For each element that is also a <span title="top-level
-    microdata items">top-level microdata item</span>, run the
-    following steps:</p>
+     <li>A <span>valid date string</span>.</li>
 
-    <ol>
+     <li>A <span>valid global date and time string</span>.</li>
 
-     <li>
+     <li>A <span>valid global date and time string</span> followed by
+     a U+002F SOLIDUS character (/) followed by a second <span>valid
+     global date and time string</span> representing a later time.</li>
 
-      <p><span title="generate the triples for an item">Generate the
-      triples for the item</span>. Let <var title="">item</var> be the
-      subject returned.</p>
+     <li>A <span>valid global date and time string</span> followed by
+     a U+002F SOLIDUS character (/) followed by a <span>valid vevent
+     duration string</span>.</li>
 
-     </li>
+    </ul>
 
-     <li>
+    <p>Any number of properties with the name <code
+    title="md-vevent-rdate">rdate</code> may be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-      <p>Generate the following triple:</p>
+   </dd>
 
-      <dl class="triple">
-       <dt>subject   <dd> <span>the document's current address</span>
-       <dt>predicate <dd> <code title="">http://www.w3.org/1999/xhtml/microdata#item</code>
-       <dt>object    <dd> <var title="">item</var>
-      </dl>
 
-     </li>
+   <dt><dfn title="md-vevent-rrule"><code>rrule</code></dfn></dt>
 
-<!--
-     <li>
+   <dd>
 
-      <p>If the element is, or is a descendant of, an
-      <code>address</code> element that has no <code>article</code>
-      element ancestors, and the <span
-      title="concept-item">item</span> has the type <code
-      title="md-vcard">vcard</code>, generate the following
-      triple:</p>
+    <p>Gives a rule for finding dates and times at which the event
+    occurs.</p>
 
-      <dl class="triple">
-       <dt>subject   <dd> <span>the document's current address</span>
-       <dt>predicate <dd> <code title="">http://purl.org/dc/terms/creator</code>
-       <dt>object    <dd> <var title="">item</var>
-      </dl>
-
-     </li>
--->
-
-    </ol>
+    <p>The <span title="concept-property-value">value</span> must be
+    text that matches the RECUR value type defined in the iCalendar
+    specification. <a href="#refsRFC2445">[RFC2445]</a></p>
 
-   </li>
+    <p>Any number of properties with the name <code
+    title="md-vevent-rrule">rrule</code> may be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-  </ol>
+   </dd>
 
-  <p>When the user agent is to <dfn>generate the triples for an
-  item</dfn> <var title="">item</var>, it must follow the following
-  steps:</p>
 
-  <ol>
+   <dt><dfn title="md-vevent-created"><code>created</code></dfn></dt>
 
-   <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>
+   <dd>
 
-   <li><p>Let <var title="">type</var> be the <span>item type</span>
-   of <var title="">item</var>, or the empty string, if <var
-   title="">item</var> has no <span>item type</span>.</p></li>
+    <p>Gives the date and time at which the event information was first
+    created in a calendaring system.</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/microdata#</code>" with the <var
-   title="">type</var>, with any characters in <var
-   title="">type</var> that are not valid in the &lt;ifragment>
-   production of the IRI syntax being %-escaped.</p></li>
+    <p>The <span title="concept-property-value">value</span> must be
+    text that is a <span>valid global date and time string</span>.</p>
 
-   <li>
+    <p>A single property with the name <code
+    title="md-vevent-created">created</code> may be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-    <p>If <var title="">type</var> is not the empty string, generate
-    the following triple:</p>
+   </dd>
 
-    <dl class="triple">
-     <dt>subject   <dd> <var title="">subject</var>
-     <dt>predicate <dd> <code title="">http://www.w3.org/1999/02/22-rdf-syntax-ns#type</code>
-     <dt>object    <dd> <var title="">type</var>
-    </dl>
 
-   </li>
+   <!-- DTSTAMP not included, it gets added when serialising -->
 
-   <li>
 
-    <p>For each element <var title="">element</var> that has one or
-    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>
+   <dt><dfn title="md-vevent-last-modified"><code>last-modified</code></dfn></dt>
 
-    <ol>
+   <dd>
 
-     <li><p>Let <var title="">value</var> be the <span
-     title="concept-property-value">property value</span> of <var
-     title="">element</var>.</p></li>
+    <p>Gives the date and time at which the event information was last
+    modified in a calendaring system.</p>
 
-     <li><p>If <var title="">value</var> is an <span
-     title="concept-item">item</span>, then <span title="generate the
-     triples for an item">generate the triples</span> for <var
-     title="">value</var>, and then replace <var title="">value</var>
-     with the subject returned from those steps.</p></li>
+    <p>The <span title="concept-property-value">value</span> must be
+    text that is a <span>valid global date and time string</span>.</p>
 
-     <!-- 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. -->
+    <p>A single property with the name <code
+    title="md-vevent-last-modified">last-modified</code> may be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-     <li><p>Otherwise, if <var title="">element</var> is not one of
-     the <span>URL property elements</span>, let <var
-     title="">value</var> be a plain literal, with the language
-     information set from the <span>language</span> of the element, if
-     it is not unknown.</p></li>
+   </dd>
 
-     <li>
 
-      <p>For each name <var title="">name</var> in <var
-      title="">element</var>'s <span>property names</span>, run the
-      appropriate substeps from the following list:</p>
+   <dt><dfn title="md-vevent-sequence"><code>sequence</code></dfn></dt>
 
-      <dl>
+   <dd>
 
-       <dt>If <var title="">name</var> is an <span>absolute
-       URL</span></dt>
+    <p>Gives a revision number for the event information.</p>
 
-       <dd>
+    <p>The <span title="concept-property-value">value</span> must be
+    text that is a <span>valid non-negative integer</span>.</p>
 
-        <p>Generate the following triple:</p>
+    <p>A single property with the name <code
+    title="md-vevent-sequence">sequence</code> may be present within
+    each <span title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
-        <dl class="triple">
-         <dt>subject   <dd> <var title="">subject</var>
-         <dt>predicate <dd> <var title="">name</var>
-         <dt>object    <dd> <var title="">value</var>
-        </dl>
+   </dd>
 
-       </dd>
 
-       <dt>If <var title="">name</var> contains neither a U+003A COLON
-       character (:) nor a U+002E FULL STOP character (.)</dt>
+   <!-- REQUEST-STATUS not included, calendaring system interop
+   feature -->
 
-       <dd>
 
-        <ol>
+  </dl>
 
-         <li><p>If <var title="">type</var> is the empty string, then
-         abort these substeps.</p></li>
+  <p>A string is a <dfn>valid vevent duration string</dfn> if it
+  matches the following pattern:</p>
 
-         <li><p>Let <var title="">predicate</var> have the same value
-         as <var title="">type</var>.</p></li>
+  <ol>
 
-         <li><p>If <var title="">predicate</var> does not end in a
-         U+0023 NUMBER SIGN character (#), then append a U+0023 NUMBER
-         SIGN character (#) to <var title="">predicate</var>.</p></li>
+   <li>A U+0050 LATIN CAPITAL LETTER P character.</li>
 
-         <li><p>Append the value of <var title="">name</var> to <var
-         title="">predicate</var>, with any characters in <var
-         title="">name</var> that are not valid in the &lt;ifragment>
-         production of the IRI syntax being %-escaped.</p></li>
+   <li>One of the following:
 
-         <li>
+    <ul>
 
-          <p>Generate the following triple:</p>
+     <li> A <span>valid non-negative integer</span> followed by a
+     U+0057 LATIN CAPITAL LETTER W character. The integer represents
+     a duration of that number of weeks. </li>
 
-          <dl class="triple">
-           <dt>subject   <dd> <var title="">subject</var>
-           <dt>predicate <dd> the concatenation of the string "<code title="">http://www.w3.org/1999/xhtml/microdata#</code>" and <var title="">predicate</var>, with any characters in <var title="">predicate</var> that are not valid in the &lt;ifragment> production of the IRI syntax being %-escaped <a href="#refsRFC3987">[RFC3987]</a>
-           <dt>object    <dd> <var title="">value</var>
-          </dl>
+     <li> At least one, and possible both in this order, of the
+     following:
 
-         </li>
+      <ol>
 
-        </ol>
+       <li> A <span>valid non-negative integer</span> followed by a
+       U+0044 LATIN CAPITAL LETTER D character. The integer
+       represents a duration of that number of days. </li>
 
-       </dd>
+       <li> A U+0054 LATIN CAPITAL LETTER T character followed by
+       any one of the following, or the first and second of the
+       following in that order, or the second and third of the
+       following in that order, or all three of the following in
+       this order:
 
-       <dt>Otherwise</dt>
+        <ol>
 
-       <dd>
+         <li> A <span>valid non-negative integer</span> followed by
+         a U+0048 LATIN CAPITAL LETTER H character. The integer
+         represents a duration of that number of hours. </li>
 
-        <p>Generate the following triple:</p>
+         <li> A <span>valid non-negative integer</span> followed by
+         a U+004D LATIN CAPITAL LETTER M character. The integer
+         represents a duration of that number of minutes. </li>
 
-        <dl class="triple">
-         <dt>subject   <dd> <var title="">subject</var>
-         <dt>predicate <dd> the concatenation of the string "<code title="">http://www.w3.org/1999/xhtml/microdata#</code>" and <var title="">name</var>, with any characters in <var title="">name</var> that are not valid in the &lt;ifragment> production of the IRI syntax being %-escaped <a href="#refsRFC3987">[RFC3987]</a>
-         <dt>object    <dd> <var title="">value</var>
-        </dl>
+         <li> A <span>valid non-negative integer</span> followed by
+         a U+0053 LATIN CAPITAL LETTER S character. The integer
+         represents a duration of that number of seconds. </li>
 
-       </dd>
+        </ol>
 
-      </dl>
+      </ol>
 
      </li>
 
-    </ol>
+    </ul>
 
    </li>
 
-   <li><p>Return <var title="">subject</var>.</p></li>
-
   </ol>
 
-<!--END html5-->
-<!--START vocabs-->
 
-  <h4>vCard</h4>
+  <h5>Conversion to iCalendar</h5>
 
   <p>Given a list of nodes <var title="">nodes</var> in a
   <code>Document</code>, a user agent must run the following algorithm
-  to <dfn title="extracting a vCard">extract any <code
-  title="md-vcard">vcard</code> data represented by those nodes</dfn>
-  (only the first vCard is returned):</p>
+  to <dfn title="extracting vEvent data">extract any vEvent data
+  represented by those nodes</dfn>:</p>
 
   <ol>
 
    <li><p>If none of the nodes in <var title="">nodes</var> are <span
    title="concept-item">items</span> with the type <code
-   title="md-vcard">vcard</code>, then there is no vCard. Abort the
-   algorithm, returning nothing.</p></li>
-
-   <li><p>Let <var title="">node</var> be the first node in <var
-   title="">nodes</var> that is an <span
-   title="concept-item">item</span> with the type <code
-   title="md-vcard">vcard</code>.</p></li>
+   title="md-vevent">http://microformats.org/profile/hcalendar</code>,
+   then there is no vEvent data. Abort the algorithm, returning
+   nothing.</p></li>
 
    <li><p>Let <var title="">output</var> be an empty string.</p></li>
 
-   <li><p><span>Add a vCard line</span> with the type "<code
-   title="">BEGIN</code>" and the value "<code title="">VCARD</code>"
-   to <var title="">output</var>.</p></li>
-
-   <li><p><span>Add a vCard line</span> with the type "<code
-   title="">PROFILE</code>" and the value "<code title="">VCARD</code>"
-   to <var title="">output</var>.</p></li>
-
-   <li><p><span>Add a vCard line</span> with the type "<code
-   title="">VERSION</code>" and the value "<code title="">3.0</code>"
-   to <var title="">output</var>.</p></li>
-
-   <li><p><span>Add a vCard line</span> with the type "<code
-   title="">SOURCE</code>" and the result of <span>escaping the vCard
-   text string</span> that is the <span>the document's current
-   address</span> as the value to <var title="">output</var>.</p></li>
+   <li><p><span>Add an iCalendar line</span> with the type "<code
+   title="">BEGIN</code>" and the value "<code
+   title="">VCALENDAR</code>" to <var title="">output</var>.</p></li>
 
-   <li><p>If <span>the <code>title</code> element</span> is not null,
-   <span>add a vCard line</span> with the type "<code
-   title="">NAME</code>" and with the result of <span>escaping the
-   vCard text string</span> obtained from the <code>textContent</code>
-   of <span>the <code>title</code> element</span> as the value to <var
+   <li><p><span>Add an iCalendar line</span> with the type "<code
+   title="">PRODID</code>" and the value equal to a
+   user-agent-specific string representing the user agent to <var
    title="">output</var>.</p></li>
 
-   <li><p>If there is a property named <code
-   title="md-about">about</code> whose <span
-   title="concept-item-corresponding">corresponding item</span> is
-   <var title="">node</var> and the element of the first such property
-   is a <span title="URL property elements">URL property
-   element</span> and has a <span
-   title="concept-property-value">value</span> that is not an <span
-   title="concept-item">item</span>, <span>add a vCard line</span>
-   with the type "<code title="">UID</code>" and with the result of
-   <span>escaping the vCard text string</span> that is that property's
-   <span title="concept-property-value">value</span> as the value to
-   <var title="">output</var>.</p></li>
+   <li><p><span>Add an iCalendar line</span> with the type "<code
+   title="">VERSION</code>" and the value "<code title="">2.0</code>"
+   to <var title="">output</var>.</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="">node</var>: for each name <var title="">name</var>
-    in <var title="">element</var>'s <span>property names</span>, run
-    the following substeps:</p>
+    <p>For each node <var title="">node</var> in <var
+    title="">nodes</var> that is an <span
+    title="concept-item">item</span> with the type <code
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>,
+    run the following steps:</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><span>Add an iCalendar line</span> with the type "<code
+     title="">BEGIN</code>" and the value "<code
+     title="">VEVENT</code>" to <var title="">output</var>.</p></li>
 
-     <li><p>Let <var title="">parameters</var> be an empty set of
-     name-value pairs.</p></li>
+     <li><p><span>Add an iCalendar line</span> with the type "<code
+     title="">DTSTAMP</code>" and a value consisting of an iCalendar
+     DATE-TIME string representing the current date and time, with the
+     annotation "<code title="">VALUE=DATE-TIME</code>", to <var
+     title="">output</var>.  <a
+     href="#refsRFC2445">[RFC2445]</a></p></li>
+
+     <li><p>If the <span title="concept-item">item</span> has a
+     <span>global identifier</span>, <span>add an iCalendar
+     line</span> with the type "<code title="">UID</code>" and that
+     <span>global identifier</span> as the value to <var
+     title="">output</var>.</p></li>
 
      <li>
 
-      <p>Run the appropriate set of substeps from the following
-      list. The steps will set a variable <var title="">value</var>,
-      which is used in the next step.</p>
+      <p>For each element <var title="">element</var> that is <span
+      title="the properties of an item">a property of the item</span>
+      <var title="">node</var>: for each name <var title="">name</var>
+      in <var title="">element</var>'s <span>property names</span>,
+      run the appropriate set of substeps from the following list:</p>
 
       <dl>
 
        <dt>If the property's <span
        title="concept-property-value">value</span> is an <span
-       title="concept-item">item</span> <var title="">subitem</var>
-       and <var title="">name</var> is <code
-       title="md-vcard-n">n</code></dt>
+       title="concept-item">item</span></dt>
 
        <dd>
 
-        <ol>
+        <p>Skip the property.</p>
 
-         <li><p>Let <var title="">n1</var> be the <span
-         title="concept-property-value">value</span> of the first
-         property named <code
-         title="md-vcard-n-family-name">family-name</code> in <var
-         title="">subitem</var>, or the empty string if there is no
-         such property or the property's value is itself an <span
-         title="concept-item">item</span>.</p></li>
+       </dd>
 
-         <li><p>Let <var title="">n2</var> be the <span
-         title="concept-property-value">value</span> of the first
-         property named <code
-         title="md-vcard-n-given-name">given-name</code> in <var
-         title="">subitem</var>, or the empty string if there is no
-         such property or the property's value is itself an <span
-         title="concept-item">item</span>.</p></li>
-
-         <li><p>Let <var title="">n3</var> be the <span
-         title="concept-property-value">value</span> of the first
-         property named <code
-         title="md-vcard-n-additional-name">additional-name</code> in
-         <var title="">subitem</var>, or the empty string if there is
-         no such property or the property's value is itself an <span
-         title="concept-item">item</span>.</p></li>
-
-         <li><p>Let <var title="">n4</var> be the <span
-         title="concept-property-value">value</span> of the first
-         property named <code
-         title="md-vcard-n-honorific-prefix">honorific-prefix</code>
-         in <var title="">subitem</var>, or the empty string if there
-         is no such property or the property's value is itself an
-         <span title="concept-item">item</span>.</p></li>
-
-         <li><p>Let <var title="">n5</var> be the <span
-         title="concept-property-value">value</span> of the first
-         property named <code
-         title="md-vcard-n-honorific-suffix">honorific-suffix</code>
-         in <var title="">subitem</var>, or the empty string if there
-         is no such property or the property's value is itself an
-         <span title="concept-item">item</span>.</p></li>
-
-         <li>
 
-          <p>Let <var title="">value</var> be the concatenation of the
-          following, in this order:</p>
-
-          <ol class="brief">
-           <li>The result of <span>escaping the vCard text string</span> <var title="">n1</var></li>
-           <li>A U+003B SEMICOLON character (;)</li>
-           <li>The result of <span>escaping the vCard text string</span> <var title="">n2</var></li>
-           <li>A U+003B SEMICOLON character (;)</li>
-           <li>The result of <span>escaping the vCard text string</span> <var title="">n3</var></li>
-           <li>A U+003B SEMICOLON character (;)</li>
-           <li>The result of <span>escaping the vCard text string</span> <var title="">n4</var></li>
-           <li>A U+003B SEMICOLON character (;)</li>
-           <li>The result of <span>escaping the vCard text string</span> <var title="">n5</var></li>
-          </ol>
-
-         </li>
-
-        </ol>
-
-       </dd>
-
-       <dt>If the property's <span
-       title="concept-property-value">value</span> is an <span
-       title="concept-item">item</span> <var title="">subitem</var>
-       and <var title="">name</var> is <code
-       title="md-vcard-adr">adr</code></dt>
+       <dt>If <var title="">element</var> is a <code>time</code>
+       element</dt>
 
        <dd>
 
-        <ol>
-
-         <li><p>Let <var title="">value</var> be the empty
-         string.</p></li>
-
-         <li><p>Append to <var title="">value</var> the result of
-         <span>collecting vCard subproperties</span> named <code
-         title="md-vcard-adr-post-office-box">post-office-box</code>
-         in <var title="">subitem</var>.</p>
-
-         <li>Append a U+003B SEMICOLON character (;) to <var
-         title="">value</var>.</li>
-
-         <li><p>Append to <var title="">value</var> the result of
-         <span>collecting vCard subproperties</span> named <code
-         title="md-vcard-adr-extended-address">extended-address</code>
-         in <var title="">subitem</var>.</p>
-
-         <li>Append a U+003B SEMICOLON character (;) to <var
-         title="">value</var>.</li>
+        <p>Let <var title="">value</var> be the result of stripping
+        all U+002D HYPHEN-MINUS (-) and U+003A COLON (:) characters
+        from the property's <span
+        title="concept-property-value">value</span>.</p>
 
-         <li><p>Append to <var title="">value</var> the result of
-         <span>collecting vCard subproperties</span> named <code
-         title="md-vcard-adr-street-address">street-address</code> in
-         <var title="">subitem</var>.</p>
+        <p>If the property's <span
+        title="concept-property-value">value</span> is a <span>valid
+        date string</span> then <span>add an iCalendar line</span>
+        with the type <var title="">name</var> and the value <var
+        title="">value</var> to <var title="">output</var>, with the
+        annotation "<code title="">VALUE=DATE</code>".</p>
 
-         <li>Append a U+003B SEMICOLON character (;) to <var
-         title="">value</var>.</li>
+        <p>Otherwise, if the property's <span
+        title="concept-property-value">value</span> is a <span>valid
+        global date and time string</span> then <span>add an iCalendar
+        line</span> with the type <var title="">name</var> and the
+        value <var title="">value</var> to <var title="">output</var>,
+        with the annotation "<code
+        title="">VALUE=DATE-TIME</code>".</p>
 
-         <li><p>Append to <var title="">value</var> the result of
-         <span>collecting the first vCard subproperty</span> named
-         <code title="md-vcard-adr-locality">locality</code> in <var
-         title="">subitem</var>.</p>
+        <p>Otherwise skip the property.</p>
 
-         <li>Append a U+003B SEMICOLON character (;) to <var
-         title="">value</var>.</li>
+       </dd>
 
-         <li><p>Append to <var title="">value</var> the result of
-         <span>collecting the first vCard subproperty</span> named
-         <code title="md-vcard-adr-region">region</code> in <var
-         title="">subitem</var>.</p>
 
-         <li>Append a U+003B SEMICOLON character (;) to <var
-         title="">value</var>.</li>
+       <dt>Otherwise</dt>
 
-         <li><p>Append to <var title="">value</var> the result of
-         <span>collecting the first vCard subproperty</span> named
-         <code title="md-vcard-adr-postal-code">postal-code</code> in
-         <var title="">subitem</var>.</p>
+       <dd>
 
-         <li>Append a U+003B SEMICOLON character (;) to <var
-         title="">value</var>.</li>
+        <p><span>Add an iCalendar line</span> with the type <var
+        title="">name</var> and the value <var title="">value</var> to
+        <var title="">output</var>.</p>
 
-         <li><p>Append to <var title="">value</var> the result of
-         <span>collecting the first vCard subproperty</span> named
-         <code title="md-vcard-adr-country-name">country-name</code>
-         in <var title="">subitem</var>.</p>
+       </dd>
 
-         <li><p>If there is a property named <code
-         title="md-vcard-adr-type">type</code> in <var
-         title="">subitem</var>, and the first such property has a
-         <span title="concept-property-value">value</span> that is not
-         an <span title="concept-item">item</span> and whose value
-         consists only of <span>alphanumeric ASCII characters</span>,
-         then add a parameter named "<code title="">TYPE</code>" whose
-         value is the <span
-         title="concept-property-value">value</span> of that property
-         to <var title="">parameters</var>.</p></li>
+      </dl>
 
-        </ol>
+     </li>
 
-       </dd>
+     <li><p><span>Add an iCalendar line</span> with the type "<code
+     title="">END</code>" and the value "<code title="">VEVENT</code>"
+     to <var title="">output</var>.</p></li>
 
-       <dt>If the property's <span
-       title="concept-property-value">value</span> is an <span
-       title="concept-item">item</span> <var title="">subitem</var>
-       and <var title="">name</var> is <code
-       title="md-vcard-org">org</code></dt>
+    </ol>
 
-       <dd>
+   </li>
 
-        <ol>
+   <li><p><span>Add an iCalendar line</span> with the type "<code
+   title="">END</code>" and the value "<code
+   title="">VCALENDAR</code>" to <var title="">output</var>.</p></li>
 
-         <li><p>Let <var title="">value</var> be the empty
-         string.</p></li>
+  </ol>
 
-         <li><p>Append to <var title="">value</var> the result of
-         <span>collecting the first vCard subproperty</span> named
-         <code
-         title="md-vcard-org-organization-name">organization-name</code>
-         in <var title="">subitem</var>.</p>
+  <p>When the above algorithm says that the user agent is to <dfn>add
+  an iCalendar line</dfn> consisting of a type <var
+  title="">type</var>, a value <var title="">value</var>, and
+  optionally an annotation, to a string <var title="">output</var>, it
+  must run the following steps:</p>
 
-         <li>
+  <ol>
 
-          <p>For each property named <code
-          title="md-vcard-org-organization-unit">organization-unit</code>
-          in <var title="">subitem</var>, run the following steps:</p>
+   <li><p>Let <var title="">line</var> be an empty string.</p></li>
 
-          <ol>
+   <li><p>Append <var title="">type</var>, <span>converted to
+   ASCII uppercase</span>, to <var title="">line</var>.</p></li>
 
-           <li><p>If the <span
-           title="concept-property-value">value</span> of the property
-           is an <span title="concept-item">item</span>, then skip
-           this property.</p></li>
+   <li>
 
-           <li><p>Append a U+003B SEMICOLON character (;) to <var
-           title="">value</var>.</p></li>
+    <p>If there is an annotation:</p>
 
-           <li><p>Append the result of <span>escaping the vCard text
-           string</span> given by the <span
-           title="concept-property-value">value</span> of the property
-           to <var title="">value</var>.</p></li>
+    <ol>
 
-          </ol>
+     <li><p>Append a U+003B SEMICOLON character (;) to <var
+     title="">line</var>.</p></li>
 
-         </li>
+     <li><p>Append the annotation to <var
+     title="">line</var>.</p></li>
 
-        </ol>
+    </ol>
 
-       </dd>
+   </li>
 
-       <dt>If the property's <span
-       title="concept-property-value">value</span> is an <span
-       title="concept-item">item</span> <var title="">subitem</var>
-       with the type <code title="md-vcard">vcard</code> and <var
-       title="">name</var> is <code
-       title="md-vcard-agent">agent</code></dt>
+   <li><p>Append a U+003A COLON character (:) to <var
+   title="">line</var>.</p></li>
 
-       <dd>
+   <li><p>Prefix every U+005C REVERSE SOLIDUS character (\) in
+   <var title="">value</var> with another U+005C REVERSE SOLIDUS
+   character (\).</p></li>
 
-        <ol>
+   <li><p>Prefix every U+002C COMMA character (,) in <var
+   title="">value</var> with a U+005C REVERSE SOLIDUS character
+   (\).</p></li>
 
-         <li><p>Let <var title="">value</var> be the result of
-         <span>escaping the vCard text string</span> obtained from
-         <span>extracting a vCard</span> from the element that
-         represents <var title="">subitem</var>.</p></li>
+   <li><p>Prefix every U+003B SEMICOLON character (;) in <var
+   title="">value</var> with a U+005C REVERSE SOLIDUS character
+   (\).</p></li>
 
-         <li><p>Add a parameter named "<code title="">VALUE</code>"
-         whose value is "<code title="">VCARD</code>" to <var
-         title="">parameters</var>.</p></li>
+   <li><p>Replace every U+000D CARRIAGE RETURN U+000A LINE FEED
+   character pair (CRLF) in <var title="">value</var> with a
+   U+005C REVERSE SOLIDUS character (\) followed by a U+006E
+   LATIN SMALL LETTER N.</p></li>
 
-        </ol>
+   <li><p>Replace every remaining U+000D CARRIAGE RETURN (CR) or
+   U+000A LINE FEED (LF) character in <var title="">value</var>
+   with a U+005C REVERSE SOLIDUS character (\) followed by a
+   U+006E LATIN SMALL LETTER N.</p></li>
 
-       </dd>
+   <li><p>Append <var title="">value</var> to <var
+   title="">line</var>.</p></li>
 
-       <dt>If the property's <span
-       title="concept-property-value">value</span> is an <span
-       title="concept-item">item</span> and <var title="">name</var>
-       is none of the above</dt>
+   <li><p>Let <var title="">maximum length</var> be 75.</p></li>
 
-       <dd>
+   <li>
 
-        <ol>
+    <p>If and while <var title="">line</var> is longer than <var
+    title="">maximum length</var> Unicode code points long, run the
+    following substeps:</p>
 
-         <li><p>Let <var title="">value</var> the result of
-         <span>collecting the first vCard subproperty</span> named
-         <code title="">value</code> in <var
-         title="">subitem</var>.</p>
+    <ol>
 
-         <li><p>If there is a property named <code
-         title="">type</code> in <var title="">subitem</var>, and the
-         first such property has a <span
-         title="concept-property-value">value</span> that is not an
-         <span title="concept-item">item</span> and whose value
-         consists only of <span>alphanumeric ASCII characters</span>,
-         then add a parameter named "<code title="">TYPE</code>" whose
-         value is the <span
-         title="concept-property-value">value</span> of that property
-         to <var title="">parameters</var>.</p></li>
+     <li><p>Append the first <var title="">maximum length</var>
+     Unicode code points of <var title="">line</var> to <var
+     title="">output</var>.</p></li>
 
-        </ol>
+     <li><p>Remove the first <var title="">maximum length</var>
+     Unicode code points from <var title="">line</var>.</p></li>
 
-       </dd>
+     <li><p>Append a U+000D CARRIAGE RETURN character (CR) to <var
+     title="">output</var>.</p></li>
 
-       <dt>Otherwise (the property's <span
-       title="concept-property-value">value</span> is not an <span
-       title="concept-item">item</span>)</dt>
+     <li><p>Append a U+000A LINE FEED character (LF) to <var
+     title="">output</var>.</p></li>
 
-       <dd>
+     <li><p>Append a U+0020 SPACE character to <var
+     title="">output</var>.</p></li>
 
-        <ol>
+     <li><p>Let <var title="">maximum length</var> be 74.</p></li>
 
-         <li><p>Let <var title="">value</var> be the property's <span
-         title="concept-property-value">value</span>.</p></li>
+    </ol>
 
-         <li><p>If <var title="">element</var> is one of the <span>URL
-         property elements</span>, add a parameter with the name "<code
-         title="">VALUE</code>" and the value "<code
-         title="">URI</code>" to <var
-         title="">parameters</var>.</p></li>
+   </li>
 
-         <li><p>Otherwise, if <var title="">element</var> is a
-         <code>time</code> element and the <var title="">value</var> is
-         a <span>valid date string</span>, add a parameter with the name
-         "<code title="">VALUE</code>" and the value "<code
-         title="">DATE</code>" to <var
-         title="">parameters</var>.</p></li>
+   <li><p>Append (what remains of) <var title="">line</var> to <var
+   title="">output</var>.</p></li>
 
-         <li><p>Otherwise, if <var title="">element</var> is a
-         <code>time</code> element and the <var title="">value</var> is
-         a <span>valid global date and time string</span>, add a
-         parameter with the name "<code title="">VALUE</code>" and the
-         value "<code title="">DATE-TIME</code>" to <var
-         title="">parameters</var>.</p></li>
+   <li><p>Append a U+000D CARRIAGE RETURN character (CR) to <var
+   title="">output</var>.</p></li>
 
-         <li><p>Prefix every U+005C REVERSE SOLIDUS character (\) in
-         <var title="">value</var> with another U+005C REVERSE SOLIDUS
-         character (\).</p></li>
+   <li><p>Append a U+000A LINE FEED character (LF) to <var
+   title="">output</var>.</p></li>
 
-         <li><p>Prefix every U+002C COMMA character (,) in <var
-         title="">value</var> with a U+005C REVERSE SOLIDUS character
-         (\).</p></li>
+  </ol>
 
-         <li><p>Unless <var title="">name</var> is <code
-         title="md-vcard-geo">geo</code>, prefix every U+003B SEMICOLON
-         character (;) in <var title="">value</var> with a U+005C
-         REVERSE SOLIDUS character (\).</p></li>
+  <p class="note">This algorithm can generate invalid iCalendar
+  output, if the input does not conform to the rules described for the
+  <code
+  title="md-vevent">http://microformats.org/profile/hcalendar</code>
+  <span>item type</span> and <span title="defined property
+  name">defined property names</span>.</p> <!-- of course since
+  iCalendar doesn't define error handling, this is somewhat
+  problematic. -->
 
-         <li><p>Replace every U+000D CARRIAGE RETURN U+000A LINE FEED
-         character pair (CRLF) in <var title="">value</var> with a U+005C REVERSE
-         SOLIDUS character (\) followed by a U+006E LATIN SMALL LETTER
-         N.</p></li>
 
-         <li><p>Replace every remaining U+000D CARRIAGE RETURN (CR) or
-         U+000A LINE FEED (LF) character in <var title="">value</var>
-         with a U+005C REVERSE SOLIDUS character (\) followed by a U+006E
-         LATIN SMALL LETTER N.</p></li>
 
-        </ol>
+  <h5>Examples</h5>
 
-       </dd>
+<!-- get more from http://www.ietf.org/rfc/rfc2445.txt -->
 
-      </dl>
+  <div class="example">
 
-     </li>
+   <p>Here is an example of a page that uses the vEvent vocabulary to
+   mark up an event:</p>
 
-     <li>
+   <pre>&lt;body item="http://microformats.org/profile/hcalendar">
+ ...
+ &lt;h1 itemprop="summary">Bluesday Tuesday: Money Road&lt;/h1>
+ ...
+ &lt;time itemprop="dtstart" datetime="2009-05-05T19:00:00Z">May 5th @ 7pm&lt;/time>
+ (until &lt;time itemprop="dtend" datetime="2009-05-05T21:00:00Z">9pm&lt;/time>)
+ ...
+ &lt;a href="http://livebrum.co.uk/2009/05/05/bluesday-tuesday-money-road"
+    rel="bookmark" itemprop="url">Link to this page&lt;/a>
+ ...
+ &lt;p>Location: &lt;span itemprop="location">The RoadHouse&lt;/span>&lt;/p>
+ ...
+ &lt;p>&lt;input type=button value="Add to Calendar"
+           onclick="location = getCalendar(this)">&lt;/p>
+ ...
+ &lt;meta itemprop="description" content="via livebrum.co.uk">
+&lt;/body></pre>
 
-      <p><span>Add a vCard line</span> with the type <var
-      title="">name</var>, the parameters <var
-      title="">parameters</var>, and the value <var
-      title="">value</var> to <var title="">output</var>.</p>
+   <p>The "<code title="">getCalendar()</code>" method could look like
+   this:</p>
 
-     </li>
+   <pre>function getCalendar(node) {
+  while (node && (!node.nodeScope || !node.itemType == 'http://microformats.org/profile/hcalendar'))
+    node = node.parentNode;
+  if (!node) {
+    alert('No event data found.');
+    return;
+  }
+  var stamp = new Date();
+  var stampString = '' + stamp.getUTCFullYear() + (stamp.getUTCMonth() + 1) + stamp.getUTCDate() + 'T' +
+                         stamp.getUTCHours() + stamp.getUTCMinutes() + stamp.getUTCSeconds() + 'Z';
+  var calendar = 'BEGIN:VCALENDAR\r\nPRODID:HTML\r\nVERSION:2.0\r\nBEGIN:VEVENT\r\nDTSTAMP:' + stampString + '\r\n';
+  if (node.itemId)
+    calendar += 'UID:' + node.itemId + '\r\n';
+  for (var propIndex = 0; propIndex &lt; node.properties.length; propIndex += 1) {
+    var prop = node.properties[propIndex];
+    var value = prop.contents;
+    var parameters = '';
+    if (prop.localName == 'time') {
+      value = value.replace(/[:-]/g, '');
+      if (prop.date &amp;&amp; prop.time)
+        parameters = ';VALUE=DATE';
+      else
+        parameters = ';VALUE=DATE-TIME';
+    } else {
+      value = value.replace(/\\/g, '\\n');
+      value = value.replace(/;/g, '\\;');
+      value = value.replace(/,/g, \\,');
+      value = value.replace(/\n/g, '\\n');
+    }
+    for (var nameIndex = 0; nameIndex &lt; prop.itemProp.length; nameIndex += 1) {
+      var name = prop.itemProp[nameIndex];
+      if (!name.match(':') && !name.match('.'))
+        calendar += name.toUpperCase() + parameters + ':' + value + '\r\n';
+    }
+  }
+  calendar += 'END:VEVENT\r\nEND:VCALENDAR\r\n';
+  return 'data:text/calendar;component=vevent,' + encodeURI(calendar);
+}</pre>
 
-    </ol>
+   <p>The same page could offer some markup, such as the following,
+   for copy-and-pasting into blogs:</p>
 
-   </li>
+   <pre>&lt;div itemscope itemtype="http://microformats.org/profile/hcalendar">
+ &lt;p>I'm going to
+ &lt;strong itemprop="summary">Bluesday Tuesday: Money Road&lt;/strong>,
+ &lt;time itemprop="dtstart" datetime="2009-05-05T19:00:00Z">May 5th at 7pm&lt;/time>
+ to &lt;time itemprop="dtend" content="2009-05-05T21:00:00Z">9pm&lt;/time>,
+ at &lt;span itemprop="location">The RoadHouse&lt;/span>!&lt;/p>
+ &lt;p>&lt;a href="http://livebrum.co.uk/2009/05/05/bluesday-tuesday-money-road"
+       itemprop="url">See this event on livebrum.co.uk&lt;/a>.&lt;/p>
+ &lt;meta itemprop="description" content="via livebrum.co.uk">
+&lt;/div></pre>
 
-   <li>
+  </div>
 
-    <p>If there is no property named <code title="md-vcard-n">n</code>
-    whose <span title="concept-item-corresponding">corresponding
-    item</span> is <var title="">node</var>, then run the following
-    substeps:</p>
+<!--END vEvent-->
 
-    <ol>
+  <h4>Licensing works</h4>
 
-     <li><p>If there is no property named <code
-     title="md-vcard-fn">fn</code> whose <span
-     title="concept-item-corresponding">corresponding item</span> is
-     <var title="">node</var>, then skip the remainder of these
-     substeps.</p></li>
+<!--START work-->
 
-     <li><p>If the first property named <code
-     title="md-vcard-fn">fn</code> whose <span
-     title="concept-item-corresponding">corresponding item</span> is
-     <var title="">node</var> has a <span
-     title="concept-property-value">value</span> that is an <span
-     title="concept-item">item</span>, then skip the remainder of
-     these substeps.</p></li>
+  <p>An item with the <span>item type</span> <dfn
+  title="md-work"><code>http://n.whatwg.org/work</code></dfn>
+  represents a work (e.g. an article, an image, a video, a song,
+  etc). This type is primarily intended to allow authors to include
+  licensing information for works.</p>
 
-     <li><p>Let <var title="">fn</var> be the <span
-     title="concept-property-value">value</span> of the first property
-     named <code title="md-vcard-fn">fn</code> whose <span
-     title="concept-item-corresponding">corresponding item</span> is
-     <var title="">node</var>.</p></li>
-
-     <li><p>If there is a property named <code
-     title="md-vcard-org">org</code> whose <span
-     title="concept-item-corresponding">corresponding item</span> is
-     <var title="">node</var>, and the <span
-     title="concept-property-value">value</span> of the first such
-     property is equal to <var title="">fn</var> (and is not an <span
-     title="concept-item">item</span>), then <span>add a vCard
-     line</span> with the type "<code title="">N</code>" whose value
-     is four U+003B SEMICOLON characters ("<code
-     title="">;;;;</code>") to <var title="">output</var>. Then, skip
-     the remainder of these substeps.</p></li>
+  <p>The following are the type's <span title="defined property
+  name">defined property names</span>.</p>
 
-     <li><p>If the <span title="space character">space
-     characters</span> in <var title="">fn</var>, if any, are not all
-     contiguous, then skip the remainder of these substeps.</p></li>
+  <dl>
 
-     <li><p><span title="split a string on spaces">Split <var
-     title="">fn</var> on spaces</span>, and let <var title="">part
-     one</var> be the first resulting token, and <var title="">part
-     two</var> be the second, if any, or the empty string if there is
-     no second token. (There cannot be three, given the previous
-     step.)</p></li>
 
-     <li>
+   <dt><dfn title="md-work-work"><code>work</code></dfn></dt>
 
-      <p>If the last character of <var title="">part one</var> is a
-      U+002C COMMA character (,), then remove that character from <var
-      title="">part one</var> and <span>add a vCard line</span> with
-      the type "<code title="">N</code>" whose value is the
-      concatenation of the following strings:</p>
+   <dd>
 
-      <ol class="brief">
-       <li>The result of <span>escaping the vCard text string</span> <var title="">part one</var></li>
-       <li>A U+003B SEMICOLON character (;)</li>
-       <li>The result of <span>escaping the vCard text string</span> <var title="">part two</var></li>
-       <li>Three U+003B SEMICOLON characters (;)</li>
-      </ol>
+    <p>Identifies the work being described.</p>
 
-      <p>Then, skip the remainder of these substeps.</p>
+    <p>The <span title="concept-property-value">value</span> must be
+    an <span>absolute URL</span>.</p>
 
-     </li>
+    <p>Exactly one property with the name <code
+    title="md-work-work">work</code> must be present within each <span
+    title="concept-item">item</span> with the type <code
+    title="md-work">http://n.whatwg.org/work</code>.</p>
 
-     <li>
+   </dd>
 
-      <p>If <var title="">part two</var> is two Unicode code-points
-      long and its second character is a U+002E FULL STOP character
-      (.), then <span>add a vCard line</span> with the type "<code
-      title="">N</code>" whose value is the concatenation of the
-      following strings:</p>
 
-      <ol class="brief">
-       <li>The result of <span>escaping the vCard text string</span> <var title="">part one</var></li>
-       <li>A U+003B SEMICOLON character (;)</li>
-       <li>The result of <span>escaping the vCard text string</span> consisting of the first character of <var title="">part two</var></li>
-       <li>Three U+003B SEMICOLON characters (;)</li>
-      </ol>
+   <dt><dfn title="md-work-title"><code>title</code></dfn></dt>
 
-      <p>Then, skip the remainder of these substeps.</p>
+   <dd>
 
-     </li>
+    <p>Gives the name of the work.</p>
 
-     <li>
+    <p>A single property with the name <code
+    title="md-work-title">title</code> may be present within each
+    <span title="concept-item">item</span> with the type <code
+    title="md-work">http://n.whatwg.org/work</code>.</p>
 
-      <p>If <var title="">part two</var> is one Unicode code-point
-      long, then <span>add a vCard line</span> with the type "<code
-      title="">N</code>" whose value is the concatenation of the
-      following strings:</p>
+   </dd>
 
-      <ol class="brief">
-       <li>The result of <span>escaping the vCard text string</span> <var title="">part one</var></li>
-       <li>A U+003B SEMICOLON character (;)</li>
-       <li>The result of <span>escaping the vCard text string</span> <var title="">part two</var></li>
-       <li>Three U+003B SEMICOLON characters (;)</li>
-      </ol>
 
-      <p>Then, skip the remainder of these substeps.</p>
+   <dt><dfn title="md-work-author"><code>author</code></dfn></dt>
 
-     </li>
+   <dd>
 
-     <li>
+    <p>Gives the name or contact information of one of the authors or
+    creators of the work.</p>
 
-      <p><span>Add a vCard line</span> with the type "<code
-      title="">N</code>" whose value is the concatenation of the
-      following strings:</p>
+    <p>The <span title="concept-property-value">value</span> must be
+    either an <span title="concept-item">item</span> with the type
+    <code
+    title="md-vcard">http://microformats.org/profile/hcard</code>, or
+    text.</p>
 
-      <ol class="brief">
-       <li>The result of <span>escaping the vCard text string</span> <var title="">part two</var></li>
-       <li>A U+003B SEMICOLON character (;)</li>
-       <li>The result of <span>escaping the vCard text string</span> <var title="">part one</var></li>
-       <li>Three U+003B SEMICOLON characters (;)</li>
-      </ol>
+    <p>Any number of properties with the name <code
+    title="md-work-author">author</code> may be present within each
+    <span title="concept-item">item</span> with the type <code
+    title="md-work">http://n.whatwg.org/work</code>.</p>
 
-     </li>
+   </dd>
 
-    </ol>
 
-   </li>
+   <dt><dfn title="md-work-license"><code>license</code></dfn></dt>
 
-   <li><p><span>Add a vCard line</span> with the type "<code
-   title="">END</code>" and the value "<code title="">VCARD</code>"
-   to <var title="">output</var>.</p></li>
+   <dd>
 
-  </ol>
+    <p>Identifies one of the licenses under which the work is
+    available.</p>
 
-  <p>When the above algorithm says that the user agent is to <dfn>add
-  a vCard line</dfn> consisting of a type <var title="">type</var>,
-  optionally some parameters, and a value <var title="">value</var> to
-  a string <var title="">output</var>, it must run the following
-  steps:</p>
+    <p>The <span title="concept-property-value">value</span> must be
+    an <span>absolute URL</span>.</p>
 
-  <ol>
+    <p>Any number of properties with the name <code
+    title="md-work-license">license</code> may be present within each
+    <span title="concept-item">item</span> with the type <code
+    title="md-work">http://n.whatwg.org/work</code>.</p>
 
-   <li><p>Let <var title="">line</var> be an empty string.
+   </dd>
 
-   <li><p>Append <var title="">type</var>, <span>converted to
-   ASCII uppercase</span>, to <var title="">line</var>.</p></li>
+  </dl>
 
-   <li>
 
-    <p>If there are any parameters, then for each parameter, in the
-    order that they were added, run these substeps:</p>
+  <h5>Conversion to RDF</h5>
 
-    <ol>
+  <p>For the purposes of RDF processors, blank nodes that are the
+  subject of a triple with the predicate "<code
+  title="">http://www.w3.org/1999/xhtml/microdata#http%3A%2F%2Fn.whatwg.org%2Fwork%23%3Awork</code>"
+  and the object <var title="">s</var> must be treated as if the node
+  was identified by <var title="">s</var>.</p>
 
-     <li><p>Append a U+003B SEMICOLON character (;) to <var
-     title="">line</var>.</p></li>
+  <p>For the purposes of RDF processors, the predicate "<code
+  title="">http://www.w3.org/1999/xhtml/microdata#http%3A%2F%2Fn.whatwg.org%2Fwork%23%3Atitle</code>"
+  must be considered equivalent to the predicate "<code
+  title="">http://purl.org/dc/elements/1.1/title</code>".
 
-     <li><p>Append the parameter's name to <var
-     title="">line</var>.</p></li>
+  <p>For the purposes of RDF processors, the predicate "<code
+  title="">http://www.w3.org/1999/xhtml/microdata#http%3A%2F%2Fn.whatwg.org%2Fwork%23%3Aauthor</code>"
+  must be considered equivalent to the predicate "<code
+  title="">http://creativecommons.org/ns#attributionName</code>".
 
-     <li><p>Append a U+003D EQUALS SIGN character (=) to <var
-     title="">line</var>.</p></li>
+  <p>For the purposes of RDF processors, the predicate "<code
+  title="">http://www.w3.org/1999/xhtml/microdata#http%3A%2F%2Fn.whatwg.org%2Fwork%23%3Alicense</code>"
+  must be considered equivalent to the predicate "<code
+  title="">http://www.w3.org/1999/xhtml/vocab#license</code>".
 
-     <li><p>Append the parameter's value to <var
-     title="">line</var>.</p></li>
 
-    </ol>
 
-   </li>
 
-   <li><p>Append a U+003A COLON character (:) to <var
-   title="">line</var>.</p></li>
+  <h5>Examples</h5>
 
-   <li><p>Append <var title="">value</var> to <var
-   title="">line</var>.</p></li>
+  <div class="example">
 
-   <li><p>Let <var title="">maximum length</var> be 75.</p></li>
+   <p>This example shows an embedded image entitled <cite>My
+   Pond</cite>, licensed under the Creative Commons Attribution-Share
+   Alike 3.0 United States License and the MIT license
+   simultaneously.</p>
 
-   <li>
+   <pre>&lt;figure <strong>item="work"</strong>>
+ &lt;dd>&lt;img <strong>itemprop="about"</strong> src="mypond.jpeg">
+ &lt;dt>
+  &lt;p>&lt;cite <strong>itemprop="title"</strong>>My Pond&lt;/cite>&lt;/p>
+  &lt;p>&lt;small>Licensed under the &lt;a <strong>itemprop="license"</strong>
+  href="http://creativecommons.org/licenses/by-sa/3.0/us/">Creative
+  Commons Attribution-Share Alike 3.0 United States License&lt;/a>
+  and the &lt;a <strong>itemprop="license"</strong>
+  href="http://www.opensource.org/licenses/mit-license.php">MIT
+  license&lt;/a>.&lt;/small>
+&lt;/figure></pre>
 
-    <p>If and while <var title="">line</var> is longer than <var
-    title="">maximum length</var> Unicode code points long, run the
-    following substeps:</p>
+  </div>
 
-    <ol>
+  <!--END work-->
 
-     <li><p>Append the first <var title="">maximum length</var>
-     Unicode code points of <var title="">line</var> to <var
-     title="">output</var>.</p></li>
+  <!--END vocabs-->
 
-     <li><p>Remove the first <var title="">maximum length</var>
-     Unicode code points from <var title="">line</var>.</p></li>
 
-     <li><p>Append a U+000D CARRIAGE RETURN character (CR) to <var
-     title="">output</var>.</p></li>
+  <!--START html5-->
+
+  <div class="impl">
+
+  <h3>Converting HTML to other formats</h3>
 
-     <li><p>Append a U+000A LINE FEED character (LF) to <var
-     title="">output</var>.</p></li>
+  <h4>JSON</h4>
 
-     <li><p>Append a U+0020 SPACE character to <var
-     title="">output</var>.</p></li>
+  <p>Given a list of nodes <var title="">nodes</var> in a
+  <code>Document</code>, a user agent must run the following algorithm
+  to <dfn title="extracting JSON">extract the microdata from those
+  nodes into a JSON form</dfn>:</p>
 
-     <li><p>Let <var title="">maximum length</var> be 74.</p></li>
+  <ol>
 
-    </ol>
+   <li><p>Let <var title="">result</var> be an empty object.</p></li>
 
-   </li>
+   <li><p>Let <var title="">items</var> be an empty array.</p></li>
 
-   <li><p>Append (what remains of) <var title="">line</var> to <var
-   title="">output</var>.</p></li>
+   <li><p>For each <var title="">node</var> in <var
+   title="">nodes</var>, check if the element is a <span
+   title="top-level microdata items">top-level microdata item</span>,
+   and if it is then <span>get the object</span> for that element and
+   add it to <var title="">items</var>.</p></li>
 
-   <li><p>Append a U+000D CARRIAGE RETURN character (CR) to <var
-   title="">output</var>.</p></li>
+   <li><p>Add an entry to <var title="">result</var> called "<code
+   title="">items</code>" whose value is the array <var
+   title="">items</var>.</p></li>
 
-   <li><p>Append a U+000A LINE FEED character (LF) to <var
-   title="">output</var>.</p></li>
+   <li><p>Return the result of serializing <var title="">result</var>
+   to JSON.</p></li>
 
   </ol>
 
-  <p>When the steps above require the user agent to obtain the result
-  of <dfn>collecting vCard subproperties</dfn> named <var
-  title="">subname</var> in <var title="">subitem</var>, the user
-  agent must run the following steps:</p>
+  <p>When the user agent is to <dfn>get the object</dfn> for an item
+  <var title="">item</var>, it must run the following substeps:</p>
 
   <ol>
 
-   <li><p>Let <var title="">value</var> be the empty string.</p></li>
+   <li><p>Let <var title="">result</var> be an empty object.</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 property named <var title="">subname</var> in the item
-    <var title="">subitem</var>, run the following substeps:</p>
+    <p>For each element <var title="">element</var> that has one or
+    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>
 
-     <li><p>If the <span title="concept-property-value">value</span>
-     of the property is itself an <span
-     title="concept-item">item</span>, then skip this
-     property.</p></li>
+     <li><p>Let <var title="">value</var> be the <span
+     title="concept-property-value">property value</span> of <var
+     title="">element</var>.</p></li>
 
-     <li><p>If this is not the first property named <var
-     title="">subname</var> in <var title="">subitem</var> (ignoring
-     any that were skipped by the previous step), then append a U+002C
-     COMMA character (,) to <var title="">value</var>.</p></li>
+     <li><p>If <var title="">value</var> is an <span
+     title="concept-item">item</span>, then <span>get the
+     object</span> for <var title="">value</var>, and then replace
+     <var title="">value</var> with the object returned from those
+     steps.</p></li>
 
-     <li><p>Append the result of <span>escaping the vCard text
-     string</span> given by the <span
-     title="concept-property-value">value</span> of the property to
-     <var title="">value</var>.</p></li>
+     <li>
+
+      <p>For each name <var title="">name</var> in <var
+      title="">element</var>'s <span>property names</span>, run the
+      following substeps:</p>
+
+      <ol>
+
+       <li><p>If there is no entry named <var title="">name</var> in
+       <var title="">properties</var>, then add an entry named <var
+       title="">name</var> to <var title="">properties</var> whose
+       value is an empty array.</p></li>
+
+       <li><p>Append <var title="">value</var> to the entry named <var
+       title="">name</var> in <var title="">properties</var>.</p></li>
+
+      </ol>
+
+     </li>
 
     </ol>
 
    </li>
 
-   <li><p>Return <var title="">value</var>.</p></li>
+   <li><p>Add an entry to <var title="">result</var> called "<code
+   title="">properties</code>" whose value is the array <var
+   title="">properties</var>.</p></li>
+
+   <li><p>Return <var title="">result</var>.</p></li>
 
   </ol>
 
-  <p>When the steps above require the user agent to obtain the result
-  of <dfn>collecting the first vCard subproperty</dfn> named <var
-  title="">subname</var> in <var title="">subitem</var>, the user
-  agent must run the following steps:</p>
 
-  <ol>
+  <h4>RDF</h4>
 
-   <li><p>If there are no properties named <var title="">subname</var>
-   in <var title="">subitem</var>, then abort these substeps,
-   returning the empty string.</p></li>
+  <p>To convert a <code>Document</code> to RDF, a user agent must run
+  the following algorithm:</p>
 
-   <li><p>If the <span title="concept-property-value">value</span> of
-   the first property named <var title="">subname</var> in <var
-   title="">subitem</var> is an <span
-   title="concept-item">item</span>, then abort these substeps,
-   returning the empty string.</p></li>
+  <ol>
 
-   <li><p>Return the result of <span>escaping the vCard text
-   string</span> given by the <span
-   title="concept-property-value">value</span> of the first property
-   named <var title="">subname</var> in <var
-   title="">subitem</var>.</p></li>
+   <li>
 
-  </ol>
+    <p>If <span>the <code>title</code> element</span> is not null,
+    then generate the following triple:</p>
 
-  <p>When the above algorithms say the user agent is to <dfn
-  title="escaping the vCard text string">escape the vCard text
-  string</dfn> <var title="">value</var>, the user agent must use the
-  following steps:</p>
+    <dl class="triple">
+     <dt>subject   <dd> <span>the document's current address</span>
+     <dt>predicate <dd> <code title="">http://purl.org/dc/terms/title</code>
+     <dt>object    <dd> the <code>textContent</code> of <span>the <code>title</code> element</span>, as a plain literal, with the language information set from the <span>language</span> of <span>the <code>title</code> element</span>, if it is not unknown.
+    </dl>
 
-  <ol>
+   </li>
 
-   <li><p>Prefix every U+005C REVERSE SOLIDUS character (\) in <var
-   title="">value</var> with another U+005C REVERSE SOLIDUS character
-   (\).</p></li>
+   <li>
 
-   <li><p>Prefix every U+002C COMMA character (,) in <var
-   title="">value</var> with a U+005C REVERSE SOLIDUS character
-   (\).</p></li>
+    <p>For each <code>a</code>, <code>area</code>, and
+    <code>link</code> element in the <code>Document</code>, run these
+    substeps:</p>
 
-   <li><p>Prefix every U+003B SEMICOLON character (;) in <var
-   title="">value</var> with a U+005C REVERSE SOLIDUS character
-   (\).</p></li>
+    <ol>
 
-   <li><p>Replace every U+000D CARRIAGE RETURN U+000A LINE FEED
-   character pair (CRLF) in <var title="">value</var> with a U+005C
-   REVERSE SOLIDUS character (\) followed by a U+006E LATIN SMALL
-   LETTER N.</p></li>
+     <li><p>If the element does not have a <code title="">rel</code>
+     attribute, then skip this element.</p></li>
 
-   <li><p>Replace every remaining U+000D CARRIAGE RETURN (CR) or
-   U+000A LINE FEED (LF) character in <var title="">value</var> with a
-   U+005C REVERSE SOLIDUS character (\) followed by a U+006E LATIN
-   SMALL LETTER N.</p></li>
+     <li><p>If the element does not have an <code title="">href</code>
+     attribute, then skip this element.</p></li>
 
-   <li><p>Return the mutated <var title="">value</var>.</p></li>
+     <li><p>If <span title="resolve a URL">resolving</span> the
+     element's <code title="">href</code> attribute relative to the
+     element is not successful, then skip this element.</p></li>
 
-  </ol>
+     <li><p>Otherwise, <span title="split a string on spaces">split
+     the value of the element's <code title="">rel</code> attribute on
+     spaces</span>, obtaining <var title="">list of tokens</var>.</p></li>
 
-  <p class="note">This algorithm can generate invalid vCard output, if
-  the input does not conform to the rules described for the <code
-  title="md-vcard">vcard</code> <span>predefined type</span> and <span
-  title="predefined property name">predefined property
-  names</span>.</p> <!-- of course since vcard doesn't define error
-  handling, this is somewhat problematic. -->
+     <li><p><span title="converted to ASCII lowercase">Convert each token in
+     <var title="">list of tokens</var> to ASCII lowercase</span>.</p></li>
 
+     <li><p>If <var title="">list of tokens</var> contains more than
+     one instance of the token <code title="rel-up">up</code>, then
+     remove all such tokens.</p></li>
 
-  <h4>iCalendar</h4>
+     <li><p>Coalesce duplicate tokens in <var title="">list of
+     tokens</var>.</p></li>
 
-  <p>Given a list of nodes <var title="">nodes</var> in a
-  <code>Document</code>, a user agent must run the following algorithm
-  to <dfn title="extracting vEvent data">extract any <code
-  title="md-vevent">vevent</code> data represented by those
-  nodes</dfn>:</p>
+     <li><p>If <var title="">list of tokens</var> contains both the
+     tokens <code title="rel-alternate">alternate</code> and <code
+     title="rel-stylesheet">stylesheet</code>, then remove them both
+     and replace them with the single (uppercase) token <code
+     title="">ALTERNATE-STYLESHEET</code>.</p></li>
 
-  <ol>
+     <li>
 
-   <li><p>If none of the nodes in <var title="">nodes</var> are <span
-   title="concept-item">items</span> with the type <code
-   title="md-vevent">vevent</code>, then there is no vEvent
-   data. Abort the algorithm, returning nothing.</p></li>
+      <p>For each token <var title="">token</var> in <var
+      title="">list of tokens</var> that contains neither a U+003A
+      COLON character (:) nor a U+002E FULL STOP character (.),
+      generate the following triple:</p>
 
-   <li><p>Let <var title="">output</var> be an empty string.</p></li>
+      <dl class="triple">
+       <dt>subject   <dd> <span>the document's current address</span>
+       <dt>predicate <dd> the concatenation of the string "<code title="">http://www.w3.org/1999/xhtml/vocab#</code>" and <var title="">token</var>, with any characters in <var title="">token</var> that are not valid in the &lt;ifragment> production of the IRI syntax being %-escaped <a href="#refsRFC3987">[RFC3987]</a>
+       <dt>object    <dd> the <span>absolute URL</span> that results from <span title="resolve a URL">resolving</span> the value of the element's <code title="">href</code> attribute relative to the element
+      </dl>
 
-   <li><p><span>Add an iCalendar line</span> with the type "<code
-   title="">BEGIN</code>" and the value "<code title="">VCALENDAR</code>"
-   to <var title="">output</var>.</p></li>
+     </li>
 
-   <li><p><span>Add an iCalendar line</span> with the type "<code
-   title="">PRODID</code>" and the value equal to a
-   user-agent-specific string representing the user agent to <var
-   title="">output</var>.</p></li>
+    </ol>
 
-   <li><p><span>Add an iCalendar line</span> with the type "<code
-   title="">VERSION</code>" and the value "<code title="">2.0</code>"
-   to <var title="">output</var>.</p></li>
+   </li>
 
    <li>
 
-    <p>For each node <var title="">node</var> in <var
-    title="">nodes</var> that is an <span
-    title="concept-item">item</span> with the type <code
-    title="md-vevent">vevent</code>, run the following steps:</p>
+    <p>For each <code>meta</code> element in the <code>Document</code>
+    that has a <code title="attr-meta-name">name</code> attribute and
+    a <code title="attr-meta-content">content</code> attribute, if the
+    value of the <code title="attr-meta-name">name</code> attribute
+    contains neither a U+003A COLON character (:) nor a U+002E FULL
+    STOP character (.), generate the following triple:</p>
 
-    <ol>
+    <dl class="triple">
+     <dt>subject   <dd> <span>the document's current address</span>
+     <dt>predicate <dd> the concatenation of the string "<code title="">http://www.w3.org/1999/xhtml/vocab#</code>" and the value of the element's <code title="attr-meta-name">name</code> attribute, <span>converted to ASCII lowercase</span>, with any characters in the value that are not valid in the &lt;ifragment> production of the IRI syntax being %-escaped <a href="#refsRFC3987">[RFC3987]</a>
+     <dt>object    <dd> the value of the element's <code title="attr-meta-content">content</code> attribute, as a plain literal, with the language information set from the <span>language</span> of the element, if it is not unknown.
+    </dl>
 
-     <li><p><span>Add an iCalendar line</span> with the type "<code
-     title="">BEGIN</code>" and the value "<code title="">VEVENT</code>"
-     to <var title="">output</var>.</p></li>
+   </li>
 
-     <li><p><span>Add an iCalendar line</span> with the type "<code
-     title="">DTSTAMP</code>" and a value consisting of an iCalendar
-     DATE-TIME string representing the current date and time, with the
-     annotation "<code title="">VALUE=DATE-TIME</code>", to <var
-     title="">output</var>.  <a
-     href="#refsRFC2445">[RFC2445]</a></p></li>
+   <li>
+
+    <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>
+
+    <dl class="triple">
+     <dt>subject   <dd> <span>the document's current address</span>
+     <dt>predicate <dd> <code title="">http://purl.org/dc/terms/source</code>
+     <dt>object    <dd> the <span>absolute URL</span> that results from <span title="resolve a URL">resolving</span> the value of the element's <code title="">cite</code> attribute relative to the element
+    </dl>
+
+   </li>
 
-     <li><p>If there is a property named <code
-     title="md-about">about</code> whose <span
-     title="concept-item-corresponding">corresponding item</span> is
-     <var title="">node</var> and the element of the first such property
-     is a <span title="URL property elements">URL property
-     element</span> and has a <span
-     title="concept-property-value">value</span> that is not an <span
-     title="concept-item">item</span>, <span>add an iCalendar line</span>
-     with the type "<code title="">UID</code>" and that property's
-     <span title="concept-property-value">value</span> as the value to
-     <var title="">output</var>.</p></li>
+   <li>
 
-     <li>
+    <p>For each element that is also a <span title="top-level
+    microdata items">top-level microdata item</span>, run the
+    following steps:</p>
 
-      <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="">node</var>: for each name <var title="">name</var>
-      in <var title="">element</var>'s <span>property names</span>, run
-      the appropriate set of substeps from the following list:</p>
+    <ol>
 
-      <dl>
+     <li>
 
-       <dt>If <var title="">name</var> is equal to the string "<code
-       title="md-about">about</code>"</dt>
+      <p><span title="generate the triples for an item">Generate the
+      triples for the item</span>. Let <var title="">item</var> be the
+      subject returned.</p>
 
-       <dt>If the property's <span
-       title="concept-property-value">value</span> is an <span
-       title="concept-item">item</span></dt>
+     </li>
 
-       <dd>
+     <li>
 
-        <p>Skip the property.</p>
+      <p>Generate the following triple:</p>
 
-       </dd>
+      <dl class="triple">
+       <dt>subject   <dd> <span>the document's current address</span>
+       <dt>predicate <dd> <code title="">http://www.w3.org/1999/xhtml/microdata#item</code>
+       <dt>object    <dd> <var title="">item</var>
+      </dl>
 
+     </li>
 
-       <dt>If <var title="">element</var> is a <code>time</code>
-       element</dt>
+    </ol>
 
-       <dd>
+   </li>
 
-        <p>Let <var title="">value</var> be the result of stripping
-        all U+002D HYPHEN-MINUS (-) and U+003A COLON (:) characters
-        from the property's <span
-        title="concept-property-value">value</span>.</p>
+  </ol>
 
-        <p>If the property's <span
-        title="concept-property-value">value</span> is a <span>valid
-        date string</span> then <span>add an iCalendar line</span>
-        with the type <var title="">name</var> and the value <var
-        title="">value</var> to <var title="">output</var>, with the
-        annotation "<code title="">VALUE=DATE</code>".</p>
+  <p>When the user agent is to <dfn>generate the triples for an
+  item</dfn> <var title="">item</var>, it must follow the following
+  steps:</p>
 
-        <p>Otherwise, if the property's <span
-        title="concept-property-value">value</span> is a <span>valid
-        global date and time string</span> then <span>add an iCalendar
-        line</span> with the type <var title="">name</var> and the
-        value <var title="">value</var> to <var title="">output</var>,
-        with the annotation "<code
-        title="">VALUE=DATE-TIME</code>".</p>
+  <ol>
 
-        <p>Otherwise skip the property.</p>
+   <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>
 
-       </dd>
+   <li><p>Let <var title="">type</var> be the <span>item type</span>
+   of <var title="">item</var>, or the empty string, if <var
+   title="">item</var> has no <span>item type</span>.</p></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/microdata#</code>" with the <var
+   title="">type</var>, with any characters in <var
+   title="">type</var> that are not valid in the &lt;ifragment>
+   production of the IRI syntax being %-escaped.</p></li>
 
-       <dt>Otherwise</dt>
+   <li>
 
-       <dd>
+    <p>If <var title="">type</var> is not the empty string, generate
+    the following triple:</p>
 
-        <p><span>Add an iCalendar line</span> with the type <var
-        title="">name</var> and the value <var title="">value</var> to
-        <var title="">output</var>.</p>
+    <dl class="triple">
+     <dt>subject   <dd> <var title="">subject</var>
+     <dt>predicate <dd> <code title="">http://www.w3.org/1999/02/22-rdf-syntax-ns#type</code>
+     <dt>object    <dd> <var title="">type</var>
+    </dl>
 
-       </dd>
+   </li>
 
-      </dl>
+   <li>
 
-     </li>
+    <p>For each element <var title="">element</var> that has one or
+    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>
 
-     <li><p><span>Add an iCalendar line</span> with the type "<code
-     title="">END</code>" and the value "<code title="">VEVENT</code>"
-     to <var title="">output</var>.</p></li>
+    <ol>
 
-    </ol>
+     <li><p>Let <var title="">value</var> be the <span
+     title="concept-property-value">property value</span> of <var
+     title="">element</var>.</p></li>
 
-   </li>
+     <li><p>If <var title="">value</var> is an <span
+     title="concept-item">item</span>, then <span title="generate the
+     triples for an item">generate the triples</span> for <var
+     title="">value</var>, and then replace <var title="">value</var>
+     with the subject returned from those steps.</p></li>
 
-   <li><p><span>Add an iCalendar line</span> with the type "<code
-   title="">END</code>" and the value "<code
-   title="">VCALENDAR</code>" to <var title="">output</var>.</p></li>
+     <!-- 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. -->
 
-  </ol>
+     <li><p>Otherwise, if <var title="">element</var> is not one of
+     the <span>URL property elements</span>, let <var
+     title="">value</var> be a plain literal, with the language
+     information set from the <span>language</span> of the element, if
+     it is not unknown.</p></li>
 
-  <p>When the above algorithm says that the user agent is to <dfn>add
-  an iCalendar line</dfn> consisting of a type <var
-  title="">type</var>, a value <var title="">value</var>, and
-  optionally an annotation, to a string <var title="">output</var>, it
-  must run the following steps:</p>
+     <li>
 
-  <ol>
+      <p>For each name <var title="">name</var> in <var
+      title="">element</var>'s <span>property names</span>, run the
+      appropriate substeps from the following list:</p>
 
-   <li><p>Let <var title="">line</var> be an empty string.</p></li>
+      <dl>
 
-   <li><p>Append <var title="">type</var>, <span>converted to
-   ASCII uppercase</span>, to <var title="">line</var>.</p></li>
+       <dt>If <var title="">name</var> is an <span>absolute
+       URL</span></dt>
 
-   <li>
+       <dd>
 
-    <p>If there is an annotation:</p>
+        <p>Generate the following triple:</p>
 
-    <ol>
+        <dl class="triple">
+         <dt>subject   <dd> <var title="">subject</var>
+         <dt>predicate <dd> <var title="">name</var>
+         <dt>object    <dd> <var title="">value</var>
+        </dl>
 
-     <li><p>Append a U+003B SEMICOLON character (;) to <var
-     title="">line</var>.</p></li>
+       </dd>
 
-     <li><p>Append the annotation to <var
-     title="">line</var>.</p></li>
+       <dt>If <var title="">name</var> contains neither a U+003A COLON
+       character (:) nor a U+002E FULL STOP character (.)</dt>
 
-    </ol>
+       <dd>
 
-   </li>
+        <ol>
 
-   <li><p>Append a U+003A COLON character (:) to <var
-   title="">line</var>.</p></li>
+         <li><p>If <var title="">type</var> is the empty string, then
+         abort these substeps.</p></li>
 
-   <li><p>Prefix every U+005C REVERSE SOLIDUS character (\) in
-   <var title="">value</var> with another U+005C REVERSE SOLIDUS
-   character (\).</p></li>
+         <li><p>Let <var title="">predicate</var> have the same value
+         as <var title="">type</var>.</p></li>
 
-   <li><p>Prefix every U+002C COMMA character (,) in <var
-   title="">value</var> with a U+005C REVERSE SOLIDUS character
-   (\).</p></li>
+         <li><p>If <var title="">predicate</var> does not contain a
+         U+0023 NUMBER SIGN character (#), then append a U+0023 NUMBER
+         SIGN character (#) to <var title="">predicate</var>.</p></li>
 
-   <li><p>Prefix every U+003B SEMICOLON character (;) in <var
-   title="">value</var> with a U+005C REVERSE SOLIDUS character
-   (\).</p></li>
+         <li><p>Append a U+003A COLON character (:) to <var
+         title="">predicate</var>.</p></li> <!-- has to be something
+         not in /name/, so either "." or ":", so that a different
+         type/name combination couldn't generate the same string -->
 
-   <li><p>Replace every U+000D CARRIAGE RETURN U+000A LINE FEED
-   character pair (CRLF) in <var title="">value</var> with a
-   U+005C REVERSE SOLIDUS character (\) followed by a U+006E
-   LATIN SMALL LETTER N.</p></li>
+         <li><p>Append the value of <var title="">name</var> to <var
+         title="">predicate</var>, with any characters in <var
+         title="">name</var> that are not valid in the &lt;ifragment>
+         production of the IRI syntax being %-escaped.</p></li>
 
-   <li><p>Replace every remaining U+000D CARRIAGE RETURN (CR) or
-   U+000A LINE FEED (LF) character in <var title="">value</var>
-   with a U+005C REVERSE SOLIDUS character (\) followed by a
-   U+006E LATIN SMALL LETTER N.</p></li>
+         <li>
 
-   <li><p>Append <var title="">value</var> to <var
-   title="">line</var>.</p></li>
+          <p>Generate the following triple:</p>
 
-   <li><p>Let <var title="">maximum length</var> be 75.</p></li>
+          <dl class="triple">
+           <dt>subject   <dd> <var title="">subject</var>
+           <dt>predicate <dd> the concatenation of the string "<code title="">http://www.w3.org/1999/xhtml/microdata#</code>" and <var title="">predicate</var>, with any characters in <var title="">predicate</var> that are not valid in the &lt;ifragment> production of the IRI syntax being %-escaped <a href="#refsRFC3987">[RFC3987]</a>
+           <dt>object    <dd> <var title="">value</var>
+          </dl>
 
-   <li>
+         </li>
 
-    <p>If and while <var title="">line</var> is longer than <var
-    title="">maximum length</var> Unicode code points long, run the
-    following substeps:</p>
+        </ol>
 
-    <ol>
+       </dd>
 
-     <li><p>Append the first <var title="">maximum length</var>
-     Unicode code points of <var title="">line</var> to <var
-     title="">output</var>.</p></li>
+       <dt>Otherwise</dt>
 
-     <li><p>Remove the first <var title="">maximum length</var>
-     Unicode code points from <var title="">line</var>.</p></li>
+       <dd>
 
-     <li><p>Append a U+000D CARRIAGE RETURN character (CR) to <var
-     title="">output</var>.</p></li>
+        <p>Generate the following triple:</p>
 
-     <li><p>Append a U+000A LINE FEED character (LF) to <var
-     title="">output</var>.</p></li>
+        <dl class="triple">
+         <dt>subject   <dd> <var title="">subject</var>
+         <dt>predicate <dd> the concatenation of the string "<code title="">http://www.w3.org/1999/xhtml/microdata#</code>" and <var title="">name</var>, with any characters in <var title="">name</var> that are not valid in the &lt;ifragment> production of the IRI syntax being %-escaped <a href="#refsRFC3987">[RFC3987]</a>
+         <dt>object    <dd> <var title="">value</var>
+        </dl>
 
-     <li><p>Append a U+0020 SPACE character to <var
-     title="">output</var>.</p></li>
+       </dd>
 
-     <li><p>Let <var title="">maximum length</var> be 74.</p></li>
+      </dl>
+
+     </li>
 
     </ol>
 
    </li>
 
-   <li><p>Append (what remains of) <var title="">line</var> to <var
-   title="">output</var>.</p></li>
-
-   <li><p>Append a U+000D CARRIAGE RETURN character (CR) to <var
-   title="">output</var>.</p></li>
-
-   <li><p>Append a U+000A LINE FEED character (LF) to <var
-   title="">output</var>.</p></li>
+   <li><p>Return <var title="">subject</var>.</p></li>
 
   </ol>
 
-  <p class="note">This algorithm can generate invalid iCalendar
-  output, if the input does not conform to the rules described for the
-  <code title="md-vevent">vevent</code> <span>predefined type</span>
-  and <span title="predefined property name">predefined property
-  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
   agent must run the following algorithm to <dfn title="extracting
   Atom">extract an Atom feed</dfn>:</p>
 
   <ol>
 
    <li><p>If the <code>Document</code> <var title="">source</var> does
@@ -53941,42 +53905,22 @@ END:VCARD</pre>
    documents that contain distinct articles.</p>
 
    <li><p>Let <var title="">R</var> be an empty <span title="XML
    documents">XML</span> <code>Document</code> object whose <span
    title="the document's address">address</span> is user-agent
    defined.</p></li>
 
    <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
-    descendant of, an <code>address</code> element that has no
-    <code>article</code> element ancestors, and that is an <span
-    title="concept-item">item</span> that has the type <code
-    title="md-vcard">vcard</code>, if there is a property <var
-    title="">property</var> named <code title="md-vcard-fn">fn</code>
-    whose <span title="concept-item-corresponding">corresponding
-    item</span> is <var title="">candidate</var>, and the <span
-    title="concept-property-value">value</span> of <var
-    title="">property</var> is not an <span
-    title="concept-item">item</span>, then append an <code
-    title="">author</code> element in the <span>Atom namespace</span>
-    to the root element of <var title="">R</var> whose contents is a
-    text node with its data set to the <span
-    title="concept-property-value">value</span> of <var
-    title="">property</var>.</p>
-
-   </li>
--->
+   <!-- <atom:author> is required either at the feed level (here) or
+   the entry level (below) but we don't provide it -->
 
    <li>
 
     <p>If there is a <code>link</code> element whose <code
     title="attr-link-rel">rel</code> attribute's value includes the
     keyword <code title="rel-icon">icon</code>, and that element also
     has an <code title="attr-link-href">href</code> attribute whose
     value successfully <span title="resolve a url">resolves</span>
     relative to the <code>link</code> element, then append an <code
     title="">icon</code> element in the <span>Atom namespace</span> to
@@ -54192,44 +54136,22 @@ END:VCARD</pre>
 
      <li>
 
       <p>Append a <code title="">title</code> element in the
       <span>Atom namespace</span> to <var title="">E</var> whose
       contents is a text node with its data set to <var
       title="">heading text</var>.</p>
 
      </li>
 
-<!--
-     <li>
-
-      <p>For each element <var title="">candidate</var> that is, or is
-      a descendant of, an <code>address</code> element whose nearest
-      <code>article</code> element ancestor is <var
-      title="">article</var>, and that is an <span
-      title="concept-item">item</span> that has the type <code
-      title="md-vcard">vcard</code>, if there is a property <var
-      title="">property</var> named <code
-      title="md-vcard-fn">fn</code> whose <span
-      title="concept-item-corresponding">corresponding item</span> is
-      <var title="">candidate</var>, and the <span
-      title="concept-property-value">value</span> of <var
-      title="">property</var> is not an <span
-      title="concept-item">item</span>, then append an <code
-      title="">author</code> element in the <span>Atom
-      namespace</span> to <var title="">E</var> whose contents is a
-      text node with its data set to the <span
-      title="concept-property-value">value</span> of <var
-      title="">property</var>.</p>
-
-     </li>
--->
+     <!-- <atom:author> is required either at the feed level (above)
+     or the entry level (here) but we don't provide it -->
 
      <li>
 
       <p>Clone <var title="">article</var> and its descendants into an
       environment that has <span title="concept-bc-noscript">scripting
       disabled</span>, has no <span title="plugin">plugins</span>, and
       fails any attempt to <span title="fetch">fetch</span> any
       resources. Let <var title="">cloned article</var> be the
       resulting clone <code>article</code> element.</p>
 

|