[html5] r4069 - [] (0) Restructure how microdata vocabularies are defined; fix microdata to addr [...]

whatwg at whatwg.org whatwg at whatwg.org
Sun Oct 4 01:50:11 PDT 2009


Author: ianh
Date: 2009-10-04 01:50:10 -0700 (Sun, 04 Oct 2009)
New Revision: 4069

Modified:
   index
   source
Log:
[] (0) Restructure how microdata vocabularies are defined; fix microdata to address some issues found while doing that; clean up the RDF conversion.

Modified: index
===================================================================
--- index	2009-10-04 03:53:09 UTC (rev 4068)
+++ index	2009-10-04 08:50:10 UTC (rev 4069)
@@ -44475,9 +44475,10 @@
 
    <li>A <a href=#valid-reversed-dns-identifier>valid reversed DNS identifier</a>, or</li>
 
-   <li>If the item is a <a href=#typed-item>typed item</a>: a string allowed in
-   this situation according to the specification that defines the
-   <a href=#relevant-type>relevant type</a> for the item, or</li>
+   <li>If the item is a <a href=#typed-item>typed item</a>: a <dfn id=defined-property-name>defined
+   property name</dfn> allowed in this situation according to the
+   specification that defines the <a href=#relevant-type>relevant type</a> for the
+   item, or</li>
 
    <li>If the item is not a <a href=#typed-item>typed item</a>: a string that
    contains no U+002E FULL STOP (.) characters and no U+003A COLON (:)
@@ -44811,9 +44812,6 @@
 
   <h3 id=converting-html-to-other-formats><span class=secno>5.4 </span>Converting HTML to other formats</h3>
 
-  
-
-
   <h4 id=json><span class=secno>5.4.1 </span>JSON</h4>
 
   <p>Given a list of nodes <var title="">nodes</var> in a
@@ -44998,25 +44996,6 @@
        <dt>object    <dd> <var title="">item</var>
       </dl></li>
 
-<!--
-     <li>
-
-      <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>
-
-      <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></li>
 
   </ol><p>When the user agent is to <dfn id=generate-the-triples-for-an-item>generate the triples for an
@@ -45097,10 +45076,14 @@
          <li><p>Let <var title="">predicate</var> have the same value
          as <var title="">type</var>.</li>
 
-         <li><p>If <var title="">predicate</var> does not end in a
+         <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>.</li>
 
+         <li><p>Append a U+003A COLON character (:) to <var title="">predicate</var>.</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>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 <ifragment>
          production of the IRI syntax being %-escaped.</li>
 
@@ -45150,29 +45133,9 @@
    <li><p>Append a <code title="">feed</code> element in the
    <a href=#atom-namespace>Atom namespace</a> to <var title="">R</var>.</li>
 
-<!--
-   <li>
+   <!-- <atom:author> is required either at the feed level (here) or
+   the entry level (below) but we don't provide it -->
 
-    <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>
--->
-
    <li>
 
     <p>If there is a <code><a href=#the-link-element>link</a></code> element whose <code title=attr-link-rel><a href=#attr-link-rel>rel</a></code> attribute's value includes the
@@ -45369,31 +45332,9 @@
 
      </li>
 
-<!--
-     <li>
+     <!-- <atom:author> is required either at the feed level (above)
+     or the entry level (here) but we don't provide it -->
 
-      <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>
--->
-
      <li>
 
       <p>Clone <var title="">article</var> and its descendants into an

Modified: source
===================================================================
--- source	2009-10-04 03:53:09 UTC (rev 4068)
+++ source	2009-10-04 08:50:10 UTC (rev 4069)
@@ -49729,9 +49729,10 @@
 
    <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 (:)
@@ -50128,29 +50129,21 @@
 
 
 <!--END html5-->
-<!--START vocabs-->
 
+  <h3>Microdata vocabularies</h3>
 
-  <h3>Predefined vocabularies</h3>
+<!--START vocabs-->
 
-  <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>
-
-
-
   <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>The following are the type's <span title="predefined property
-  name">predefined property names</span>. They are based on the
+  <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="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
@@ -50158,7 +50151,6 @@
 
   <dl>
 
-
    <dt><dfn title="md-vcard-fn"><code>fn</code></dfn></dt>
 
    <dd>
@@ -50172,7 +50164,7 @@
     <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>
 
@@ -50196,7 +50188,7 @@
     <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>
@@ -50280,7 +50272,7 @@
     <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>
 
@@ -50299,7 +50291,7 @@
     <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>
 
@@ -50318,7 +50310,7 @@
     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>
 
@@ -50337,7 +50329,7 @@
     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>
 
@@ -50356,7 +50348,7 @@
     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>
 
@@ -50380,7 +50372,7 @@
     <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>
 
@@ -50397,7 +50389,7 @@
     <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>
 
@@ -50414,7 +50406,7 @@
     <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>
 
@@ -50445,7 +50437,7 @@
     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
@@ -50454,7 +50446,7 @@
     <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>
 
@@ -50469,7 +50461,7 @@
     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
@@ -50481,7 +50473,7 @@
     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
@@ -50505,7 +50497,7 @@
     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>
 
@@ -50525,7 +50517,7 @@
     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>
 
@@ -50545,7 +50537,7 @@
     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>
 
@@ -50565,7 +50557,7 @@
     <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>
 
@@ -50585,7 +50577,7 @@
     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>
 
@@ -50605,7 +50597,7 @@
     <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>
 
@@ -50625,7 +50617,7 @@
     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>
 
@@ -50648,7 +50640,7 @@
     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
@@ -50660,7 +50652,7 @@
     <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>
 
@@ -50675,7 +50667,7 @@
     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
@@ -50687,7 +50679,7 @@
     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
@@ -50711,7 +50703,7 @@
     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>
 
@@ -50735,7 +50727,7 @@
     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
@@ -50744,7 +50736,7 @@
     <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>
 
@@ -50759,7 +50751,7 @@
     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
@@ -50771,7 +50763,7 @@
     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
@@ -50797,7 +50789,7 @@
     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>
 
@@ -50819,7 +50811,7 @@
     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
@@ -50829,7 +50821,7 @@
     <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>
 
@@ -50844,7 +50836,7 @@
     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
@@ -50856,7 +50848,7 @@
     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
@@ -50880,7 +50872,7 @@
     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>
 
@@ -50898,7 +50890,7 @@
     <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>
 
@@ -50932,7 +50924,7 @@
     <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>
 
@@ -50987,7 +50979,7 @@
     <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>
 
@@ -51005,7 +50997,7 @@
     <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>
 
@@ -51023,7 +51015,7 @@
     <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>
 
@@ -51040,7 +51032,7 @@
     <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>
 
@@ -51054,13 +51046,13 @@
 
     <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>
 
@@ -51082,7 +51074,7 @@
     <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>
 
@@ -51101,7 +51093,7 @@
     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>
 
@@ -51120,7 +51112,7 @@
     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>
 
@@ -51138,7 +51130,7 @@
     <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>
 
@@ -51156,7 +51148,7 @@
     <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>
 
@@ -51181,7 +51173,7 @@
     <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>
 
@@ -51199,7 +51191,7 @@
     <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>
 
@@ -51216,12 +51208,12 @@
     <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>
@@ -51237,7 +51229,7 @@
     <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>
 
@@ -51267,7 +51259,7 @@
     <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>
 
@@ -51295,7 +51287,7 @@
     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
@@ -51304,7 +51296,7 @@
     <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>
 
@@ -51319,7 +51311,7 @@
     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
@@ -51331,7 +51323,7 @@
     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
@@ -51356,7 +51348,7 @@
     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>
 
@@ -51538,22 +51530,764 @@
   </dl>
 
 
+  <h5>Conversion to vCard</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 vCard data
+  represented by those nodes</dfn> (only the first vCard is
+  returned):</p>
+
+  <ol>
+
+   <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>
+
+   <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>
+
+   <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>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>
+
+   <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>
+
+   <li><p>Let <var title="">first-n</var>, <var
+   title="">first-org</var>, and <var title="">first-fn</var> be
+   null.</p></li>
+
+   <li>
+
+    <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>
+
+     <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>
+
+      <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>
+
+       <dd>
+
+        <ol>
+
+         <li><p>If <var title="">first-n</var> is null, let <var
+         title="">first-n</var> be <var title="">element</var>.</p></li>
+
+         <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>
+
+         <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>
+
+       <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>
+
+         <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>
+
+         <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>
+
+         <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-region">region</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 the first vCard subproperty</span> named
+         <code title="md-vcard-adr-postal-code">postal-code</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 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>
+
+        </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-org">org</code></dt>
+
+       <dd>
+
+        <ol>
+
+         <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>
+
+         <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>
+
+         <li>
+
+          <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>
+
+          <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><p>Append a U+003B SEMICOLON character (;) to <var
+           title="">value</var>.</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>
+
+          </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>
+       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>
+
+       <dd>
+
+        <ol>
+
+         <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>Add a parameter named "<code title="">VALUE</code>"
+         whose value is "<code title="">VCARD</code>" to <var
+         title="">parameters</var>.</p></li>
+
+        </ol>
+
+       </dd>
+
+       <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>
+
+        <ol>
+
+         <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>
+
+         <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>
+
+        </ol>
+
+       </dd>
+
+       <dt>Otherwise (the property's <span
+       title="concept-property-value">value</span> is not an <span
+       title="concept-item">item</span>)</dt>
+
+       <dd>
+
+        <ol>
+
+         <li>
+
+          <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>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>
+
+         </li>
+
+         <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>
+
+         <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>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>Prefix every U+005C REVERSE SOLIDUS character (\) in
+         <var title="">value</var> with another U+005C REVERSE SOLIDUS
+         character (\).</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>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>
+
+         <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>
+
+       </dd>
+
+      </dl>
+
+     </li>
+
+     <li>
+
+      <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>
+
+     </li>
+
+    </ol>
+
+   </li>
+
+   <li>
+
+    <p>If <var title="">first-n</var> is null, then run the following
+    substeps:</p>
+
+    <ol>
+
+     <li><p>If <var title="">first-fn</var> is also null, then skip
+     the remainder of these substeps.</p></li>
+
+     <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>
+
+     <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>
+
+     <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>
+
+     <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>
+
+      <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>
+
+      <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>
+
+     </li>
+
+     <li>
+
+      <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>
+
+      <p>Then, skip the remainder of these substeps.</p>
+
+     </li>
+
+     <li>
+
+      <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>
+
+      <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>
+
+     </li>
+
+     <li>
+
+      <p><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 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>
+
+     </li>
+
+    </ol>
+
+   </li>
+
+   <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>
+
+  </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>
+
+  <ol>
+
+   <li><p>Let <var title="">line</var> be an empty string.
+
+   <li><p>Append <var title="">type</var>, <span>converted to
+   ASCII uppercase</span>, to <var title="">line</var>.</p></li>
+
+   <li>
+
+    <p>If there are any parameters, then for each parameter, in the
+    order that they were added, run these substeps:</p>
+
+    <ol>
+
+     <li><p>Append a U+003B SEMICOLON character (;) to <var
+     title="">line</var>.</p></li>
+
+     <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>
+
+     <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>
+
+   <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>
+
+   <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>
+
+     <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>
+
+     <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>
+
+     <li><p>Append a U+000A LINE FEED character (LF) to <var
+     title="">output</var>.</p></li>
+
+     <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>
+
+    </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>
+
+  </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>
+
+  <ol>
+
+   <li><p>Let <var title="">value</var> be the empty string.</p></li>
+
+   <li>
+
+    <p>For each property named <var title="">subname</var> in the item
+    <var title="">subitem</var>, 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>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>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>
+
+   </li>
+
+   <li><p>Return <var title="">value</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>
+
+   <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><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>
+
+   <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>
+
+  </ol>
+
+  <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>
+
+   <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>Prefix every U+002C COMMA character (,) in <var
+   title="">value</var> with a U+005C REVERSE SOLIDUS character
+   (\).</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>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>
+
+   <li><p>Return the mutated <var title="">value</var>.</p></li>
+
+  </ol>
+
+  <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. -->
+
+
+
   <h5>Examples</h5>
 
   <div class="example">
 
-   <p>Here is a long example <code title="md-vcard">vcard</code> for a
-   fictional character called "Jack Bauer":</p>
+   <p>Here is a long example vCard for a fictional character called
+   "Jack Bauer":</p>
 
-   <pre><section id="jack" item="vcard">
+   <pre><section id="jack" itemscope itemtype="http://microformats.org/profile/hcard">
  <h1 itemprop="fn">Jack Bauer</h1>
  <img itemprop="photo" alt="" src="jack-bauer.jpg">
- <p itemprop="org" item>
+ <p itemprop="org" itemscope>
   <span itemprop="organization-name">Counter-Terrorist Unit</span>
   (<span itemprop="organization-unit">Los Angeles Division</span>)
  </p>
  <p>
-  <span itemprop="adr" item>
+  <span itemprop="adr" itemscope>
    <span itemprop="street-address">10201 W. Pico Blvd.</span><br>
    <span itemprop="locality">Los Angeles</span>,
    <span itemprop="region">CA</span>
@@ -51564,9 +52298,9 @@
  </p>
  <h2>Assorted Contact Methods</h2>
  <ul>
-  <li itemprop="tel" item><span itemprop="value">+1 (310) 597
-  3781</span> <span itemprop="type">work</span>
-  <meta itemprop="type" content="pref"></li>
+  <li itemprop="tel" itemscope><span itemprop="value">+1 (310)
+  597 3781</span> <span itemprop="type">work</span> <meta
+  itemprop="type" content="pref"></li>
   <li><a itemprop="url"
   href="http://en.wikipedia.org/wiki/Jack_Bauer">I'm on
   Wikipedia</a> so you can leave a message on my user talk
@@ -51575,23 +52309,24 @@
   href="http://www.jackbauerfacts.com/">Jack Bauer Facts</a></li>
   <li itemprop="email"><a
   href="mailto:j.bauer at la.ctu.gov.invalid">j.bauer at la.ctu.gov.invalid</a></li>
-  <li itemprop="tel" item><span itemprop="value">+1 (310) 555
+  <li itemprop="tel" itemscope><span itemprop="value">+1 (310) 555
   3781</span> <span><meta itemprop="type" content="cell">mobile
   phone</span></li>
  </ul>
- <p itemprop="note">If I'm out in the field, you may be better
- off contacting <span itemprop="agent" item="vcard"><a
+ <p itemprop="note">If I'm out in the field, you may be better off
+ contacting <span itemprop="agent" itemscope
+ itemtype="http://microformats.org/profile/hcard"><a
  itemprop="email" href="mailto:c.obrian at la.ctu.gov.invalid"><span
  itemprop="fn">Chloe O'Brian</span></a></span> if it's about
  work, or ask <span itemprop="agent">Tony Almeida</span> if
- you're interested in the CTU five-a-side football team we're
- trying to get going.</p>
+ you're interested in the CTU five-a-side football team we're trying
+ to get going.</p>
  <ins datetime="2008-07-20T21:00:00+0100">
-  <span itemprop="rev" item>
+  <span itemprop="rev" itemscope>
    <meta itemprop="type" content="date-time">
    <meta itemprop="value" content="2008-07-20T21:00:00+0100">
   </span>
-  <p itemprop="tel" item><strong>Update!</strong>
+  <p itemprop="tel" itemscope><strong>Update!</strong>
   My new <span itemprop="type">home</span> phone number is
   <span itemprop="value">01632 960 123</span>.
  </ins>
@@ -51605,9 +52340,9 @@
    <code>address</code> element) containing an address with two street
    components:</p>
 
-   <pre><address item=vcard>
+   <pre><address itemscope itemtype="http://microformats.org/profile/hcard">
  <strong title="fn">Alfred Person</strong> <br>
- <span itemprop="adr" item>
+ <span itemprop="adr" itemscope>
   <span itemprop="street-address">1600 Amphitheatre Parkway</span> <br>
   <span itemprop="street-address">Building 43, Second Floor</span> <br>
   <span itemprop="locality">Mountain View</span>,
@@ -51619,10 +52354,11 @@
 
   <div class="example">
 
-   <p>The <span title="md-vcard">vCard</span> vocabulary can be used
-   to just mark up people's names:</p>
+   <p>The vCard vocabulary can be used to just mark up people's
+   names:</p>
 
-   <pre><span itemscope itemtype=vcard><span itemprop=fn>George Washington</span></span></pre>
+   <pre><span itemscope itemtype="http://microformats.org/profile/hcard"
+><span itemprop=fn>George Washington</span></span></pre>
 
    <p>This creates a single item with a single name-value pair, with
    the name "fn" and the value "George Washington". This is defined to
@@ -51638,15 +52374,18 @@
 
   </div>
 
+<!--END vCard-->
 
-
   <h4>vEvent</h4>
 
-  <p>An item with the <span>predefined type</span> <dfn
-  title="md-vevent"><code>vevent</code></dfn> represents an event.</p>
+<!--START vEvent-->
 
-  <p>The following are the type's <span title="predefined property
-  name">predefined property names</span>. They are based on the
+  <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>
@@ -51670,7 +52409,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -51688,7 +52427,7 @@
     <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>
+    <code title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -51715,7 +52454,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -51732,7 +52471,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -51749,7 +52488,7 @@
     <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>
+    <code title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -51806,7 +52545,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -51823,7 +52562,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -51843,7 +52582,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -51866,7 +52605,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -51887,7 +52626,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -51901,8 +52640,9 @@
     <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
+    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
@@ -51926,9 +52666,11 @@
     <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>
+    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>
 
    </dd>
 
@@ -51946,7 +52688,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -51966,9 +52708,11 @@
     <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>
+    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>
 
    </dd>
 
@@ -51991,7 +52735,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -52012,7 +52756,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -52041,12 +52785,12 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
 
-   <!-- UID not included - use "about" -->
+   <!-- UID not included - use "itemid" -->
 
 
    <dt><dfn title="md-vevent-exdate"><code>exdate</code></dfn></dt>
@@ -52063,7 +52807,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -52082,7 +52826,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -52115,7 +52859,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -52134,7 +52878,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -52152,7 +52896,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -52173,7 +52917,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -52190,7 +52934,7 @@
     <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>
+    title="md-vevent">http://microformats.org/profile/hcalendar</code>.</p>
 
    </dd>
 
@@ -52258,16 +53002,263 @@
   </ol>
 
 
+  <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 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-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 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><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><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 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><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><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>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></dt>
+
+       <dd>
+
+        <p>Skip the property.</p>
+
+       </dd>
+
+
+       <dt>If <var title="">element</var> is a <code>time</code>
+       element</dt>
+
+       <dd>
+
+        <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>
+
+        <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>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>
+
+        <p>Otherwise skip the property.</p>
+
+       </dd>
+
+
+       <dt>Otherwise</dt>
+
+       <dd>
+
+        <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>
+
+       </dd>
+
+      </dl>
+
+     </li>
+
+     <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>
+
+   </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>
+
+  </ol>
+
+  <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>
+
+  <ol>
+
+   <li><p>Let <var title="">line</var> be an empty string.</p></li>
+
+   <li><p>Append <var title="">type</var>, <span>converted to
+   ASCII uppercase</span>, to <var title="">line</var>.</p></li>
+
+   <li>
+
+    <p>If there is an annotation:</p>
+
+    <ol>
+
+     <li><p>Append a U+003B SEMICOLON character (;) to <var
+     title="">line</var>.</p></li>
+
+     <li><p>Append the annotation to <var
+     title="">line</var>.</p></li>
+
+    </ol>
+
+   </li>
+
+   <li><p>Append a U+003A COLON character (:) to <var
+   title="">line</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>Prefix every U+002C COMMA character (,) in <var
+   title="">value</var> with a U+005C REVERSE SOLIDUS character
+   (\).</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>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>
+
+   <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>
+
+   <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>
+
+     <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>
+
+     <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>
+
+     <li><p>Append a U+000A LINE FEED character (LF) to <var
+     title="">output</var>.</p></li>
+
+     <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>
+
+    </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>
+
+  </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">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. -->
+
+
+
   <h5>Examples</h5>
 
 <!-- get more from http://www.ietf.org/rfc/rfc2445.txt -->
 
   <div class="example">
 
-   <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>Here is an example of a page that uses the vEvent vocabulary to
+   mark up an event:</p>
 
-   <pre><body item="vevent">
+   <pre><body item="http://microformats.org/profile/hcalendar">
  ...
  <h1 itemprop="summary">Bluesday Tuesday: Money Road</h1>
  ...
@@ -52289,7 +53280,7 @@
    this:</p>
 
    <pre>function getCalendar(node) {
-  while (node && !node.item.contains('vevent'))
+  while (node && (!node.nodeScope || !node.itemType == 'http://microformats.org/profile/hcalendar'))
     node = node.parentNode;
   if (!node) {
     alert('No event data found.');
@@ -52299,6 +53290,8 @@
   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 < node.properties.length; propIndex += 1) {
     var prop = node.properties[propIndex];
     var value = prop.contents;
@@ -52315,8 +53308,8 @@
       value = value.replace(/,/g, \\,');
       value = value.replace(/\n/g, '\\n');
     }
-    for (var nameIndex = 0; nameIndex < prop.itemprop.length; nameIndex += 1) {
-      var name = prop.itemprop[nameIndex];
+    for (var nameIndex = 0; nameIndex < prop.itemProp.length; nameIndex += 1) {
+      var name = prop.itemProp[nameIndex];
       if (!name.match(':') && !name.match('.'))
         calendar += name.toUpperCase() + parameters + ':' + value + '\r\n';
     }
@@ -52328,7 +53321,7 @@
    <p>The same page could offer some markup, such as the following,
    for copy-and-pasting into blogs:</p>
 
-   <pre><div item="vevent">
+   <pre><div itemscope itemtype="http://microformats.org/profile/hcalendar">
  <p>I'm going to
  <strong itemprop="summary">Bluesday Tuesday: Money Road</strong>,
  <time itemprop="dtstart" datetime="2009-05-05T19:00:00Z">May 5th at 7pm</time>
@@ -52341,43 +53334,41 @@
 
   </div>
 
+<!--END vEvent-->
 
-
   <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>
+<!--START work-->
 
-       <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>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>
 
-  <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>
+  <p>The following are the type's <span title="defined property
+  name">defined property names</span>.</p>
 
-  <p>The following are the type's <span title="predefined property
-  name">predefined property names</span>.</p>
-
   <dl>
 
 
+   <dt><dfn title="md-work-work"><code>work</code></dfn></dt>
+
+   <dd>
+
+    <p>Identifies the work being described.</p>
+
+    <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-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>
+
+   </dd>
+
+
    <dt><dfn title="md-work-title"><code>title</code></dfn></dt>
 
    <dd>
@@ -52387,7 +53378,7 @@
     <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-work">http://n.whatwg.org/work</code>.</p>
 
    </dd>
 
@@ -52401,12 +53392,14 @@
 
     <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>
+    <code
+    title="md-vcard">http://microformats.org/profile/hcard</code>, or
+    text.</p>
 
     <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>
+    title="md-work">http://n.whatwg.org/work</code>.</p>
 
    </dd>
 
@@ -52424,19 +53417,39 @@
     <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-work">http://n.whatwg.org/work</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>
 
+  <h5>Conversion to RDF</h5>
 
+  <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>
+
+  <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>".
+
+  <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>".
+
+  <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>".
+
+
+
+
   <h5>Examples</h5>
 
   <div class="example">
@@ -52460,58 +53473,17 @@
 
   </div>
 
+  <!--END work-->
 
+  <!--END vocabs-->
+
+
   <!--START html5-->
 
   <div class="impl">
 
   <h3>Converting HTML to other formats</h3>
 
-  <!--END html5-->
-
-  <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>
-
-  <ul>
-
-   <li><span>The document's current address</span>.</li>
-
-   <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>
-
-   <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>
-
-   <li>For each property, its <span title="property
-   names">name</span>.</li>
-
-   <li>For each property, its <span
-   title="concept-property-value">value</span> (which might be a
-   further <span title="concept-item">item</span>).</li>
-
-   <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>
-
-<!--(RDF only currently)
-   <li>For each property, the <span>language</span> of the element
-   that adds the property.</li>
--->
-
-  </ul>
-
-  <!--START html5-->
-  <!--END vocabs-->
-
-
   <h4>JSON</h4>
 
   <p>Given a list of nodes <var title="">nodes</var> in a
@@ -52752,25 +53724,6 @@
 
      </li>
 
-<!--
-     <li>
-
-      <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>
-
-      <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>
 
    </li>
@@ -52881,10 +53834,15 @@
          <li><p>Let <var title="">predicate</var> have the same value
          as <var title="">type</var>.</p></li>
 
-         <li><p>If <var title="">predicate</var> does not end in a
+         <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>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>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 <ifragment>
@@ -52932,1001 +53890,7 @@
 
   </ol>
 
-<!--END html5-->
-<!--START vocabs-->
 
-  <h4>vCard</h4>
-
-  <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>
-
-  <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>
-
-   <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>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>
-
-   <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>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>
-
-    <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>Let <var title="">parameters</var> be an empty set of
-     name-value pairs.</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>
-
-      <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>
-
-       <dd>
-
-        <ol>
-
-         <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>
-
-         <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>
-
-       <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>
-
-         <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>
-
-         <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>
-
-         <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-region">region</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 the first vCard subproperty</span> named
-         <code title="md-vcard-adr-postal-code">postal-code</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 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>
-
-        </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-org">org</code></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 the first vCard subproperty</span> named
-         <code
-         title="md-vcard-org-organization-name">organization-name</code>
-         in <var title="">subitem</var>.</p>
-
-         <li>
-
-          <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>
-
-          <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><p>Append a U+003B SEMICOLON character (;) to <var
-           title="">value</var>.</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>
-
-          </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>
-       with the type <code title="md-vcard">vcard</code> and <var
-       title="">name</var> is <code
-       title="md-vcard-agent">agent</code></dt>
-
-       <dd>
-
-        <ol>
-
-         <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>Add a parameter named "<code title="">VALUE</code>"
-         whose value is "<code title="">VCARD</code>" to <var
-         title="">parameters</var>.</p></li>
-
-        </ol>
-
-       </dd>
-
-       <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>
-
-        <ol>
-
-         <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>
-
-         <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>
-
-        </ol>
-
-       </dd>
-
-       <dt>Otherwise (the property's <span
-       title="concept-property-value">value</span> is not an <span
-       title="concept-item">item</span>)</dt>
-
-       <dd>
-
-        <ol>
-
-         <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>
-
-         <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>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>Prefix every U+005C REVERSE SOLIDUS character (\) in
-         <var title="">value</var> with another U+005C REVERSE SOLIDUS
-         character (\).</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>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>
-
-         <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>
-
-       </dd>
-
-      </dl>
-
-     </li>
-
-     <li>
-
-      <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>
-
-     </li>
-
-    </ol>
-
-   </li>
-
-   <li>
-
-    <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>
-
-    <ol>
-
-     <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>
-
-     <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>
-
-     <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>
-
-     <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>
-
-     <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>
-
-      <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>
-
-      <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>
-
-     </li>
-
-     <li>
-
-      <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>
-
-      <p>Then, skip the remainder of these substeps.</p>
-
-     </li>
-
-     <li>
-
-      <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>
-
-      <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>
-
-     </li>
-
-     <li>
-
-      <p><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 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>
-
-     </li>
-
-    </ol>
-
-   </li>
-
-   <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>
-
-  </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>
-
-  <ol>
-
-   <li><p>Let <var title="">line</var> be an empty string.
-
-   <li><p>Append <var title="">type</var>, <span>converted to
-   ASCII uppercase</span>, to <var title="">line</var>.</p></li>
-
-   <li>
-
-    <p>If there are any parameters, then for each parameter, in the
-    order that they were added, run these substeps:</p>
-
-    <ol>
-
-     <li><p>Append a U+003B SEMICOLON character (;) to <var
-     title="">line</var>.</p></li>
-
-     <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>
-
-     <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>
-
-   <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>
-
-   <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>
-
-     <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>
-
-     <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>
-
-     <li><p>Append a U+000A LINE FEED character (LF) to <var
-     title="">output</var>.</p></li>
-
-     <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>
-
-    </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>
-
-  </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>
-
-  <ol>
-
-   <li><p>Let <var title="">value</var> be the empty string.</p></li>
-
-   <li>
-
-    <p>For each property named <var title="">subname</var> in the item
-    <var title="">subitem</var>, 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>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>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>
-
-   </li>
-
-   <li><p>Return <var title="">value</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>
-
-   <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><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>
-
-   <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>
-
-  </ol>
-
-  <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>
-
-   <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>Prefix every U+002C COMMA character (,) in <var
-   title="">value</var> with a U+005C REVERSE SOLIDUS character
-   (\).</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>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>
-
-   <li><p>Return the mutated <var title="">value</var>.</p></li>
-
-  </ol>
-
-  <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. -->
-
-
-  <h4>iCalendar</h4>
-
-  <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>
-
-  <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-vevent">vevent</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 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><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><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 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>
-
-    <ol>
-
-     <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><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 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>
-
-      <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>
-
-      <dl>
-
-       <dt>If <var title="">name</var> is equal to the string "<code
-       title="md-about">about</code>"</dt>
-
-       <dt>If the property's <span
-       title="concept-property-value">value</span> is an <span
-       title="concept-item">item</span></dt>
-
-       <dd>
-
-        <p>Skip the property.</p>
-
-       </dd>
-
-
-       <dt>If <var title="">element</var> is a <code>time</code>
-       element</dt>
-
-       <dd>
-
-        <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>
-
-        <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>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>
-
-        <p>Otherwise skip the property.</p>
-
-       </dd>
-
-
-       <dt>Otherwise</dt>
-
-       <dd>
-
-        <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>
-
-       </dd>
-
-      </dl>
-
-     </li>
-
-     <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>
-
-   </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>
-
-  </ol>
-
-  <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>
-
-  <ol>
-
-   <li><p>Let <var title="">line</var> be an empty string.</p></li>
-
-   <li><p>Append <var title="">type</var>, <span>converted to
-   ASCII uppercase</span>, to <var title="">line</var>.</p></li>
-
-   <li>
-
-    <p>If there is an annotation:</p>
-
-    <ol>
-
-     <li><p>Append a U+003B SEMICOLON character (;) to <var
-     title="">line</var>.</p></li>
-
-     <li><p>Append the annotation to <var
-     title="">line</var>.</p></li>
-
-    </ol>
-
-   </li>
-
-   <li><p>Append a U+003A COLON character (:) to <var
-   title="">line</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>Prefix every U+002C COMMA character (,) in <var
-   title="">value</var> with a U+005C REVERSE SOLIDUS character
-   (\).</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>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>
-
-   <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>
-
-   <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>
-
-     <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>
-
-     <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>
-
-     <li><p>Append a U+000A LINE FEED character (LF) to <var
-     title="">output</var>.</p></li>
-
-     <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>
-
-    </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>
-
-  </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
@@ -53948,29 +53912,9 @@
    <li><p>Append a <code title="">feed</code> element in the
    <span>Atom namespace</span> to <var title="">R</var>.</p></li>
 
-<!--
-   <li>
+   <!-- <atom:author> is required either at the feed level (here) or
+   the entry level (below) but we don't provide it -->
 
-    <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>
--->
-
    <li>
 
     <p>If there is a <code>link</code> element whose <code
@@ -54199,31 +54143,9 @@
 
      </li>
 
-<!--
-     <li>
+     <!-- <atom:author> is required either at the feed level (above)
+     or the entry level (here) but we don't provide it -->
 
-      <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>
--->
-
      <li>
 
       <p>Clone <var title="">article</var> and its descendants into an




More information about the Commit-Watchers mailing list