added ED for 20111028
authorGregg Kellogg <gregg@kellogg-assoc.com>
Sat, 05 Nov 2011 13:53:35 -0700
changeset 17 be6c462f97a0
parent 16 53e66f3a31f2
child 18 8cba9eceddc9
added ED for 20111028
ED/microdata-rdf/20111028/index.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ED/microdata-rdf/20111028/index.html	Sat Nov 05 13:53:35 2011 -0700
@@ -0,0 +1,1115 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Microdata to RDF</title>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<!--
+  === NOTA BENE ===
+  For the three scripts below, if your spec resides on dev.w3 you can check them
+  out in the same tree and use relative links so that they'll work offline,
+  -->
+<script type="text/javascript"
+  src="http://dev.w3.org/2009/dap/ReSpec.js/js/respec.js" class="remove">
+ </script>
+<script type="text/javascript" class="remove">
+
+    var preProc = {
+          apply:  function(c) {
+                    // extend the bibliography entries
+                    berjon.biblio["MICRODATA"] = "<cite><a href=\"http://www.w3.org/TR/2011/WD-microdata-20110525/\">HTML Microdata</a></cite> Ian Hickson Editor. World Wide Web Consortium (work in progress). 25 May 2010. This edition of the HTML Microdata specification is http://www.w3.org/TR/2011/WD-microdata-20110525/. The <a href=\"http://www.w3.org/TR/microdata/\">latest edition of HTML Microdata</a> is available at http://www.w3.org/TR/microdata/";
+
+                    // process the document before anything else is done
+                    var refs = document.querySelectorAll('adef') ;
+                    var adefs = [];
+                    for (var i = 0; i < refs.length; i++) {
+                        var item = refs[i];
+                        var p = item.parentNode ;
+                        var con = item.innerHTML ;
+                        var sp = document.createElement( 'dfn' ) ;
+                        var tit = item.getAttribute('title') ;
+                        if (!tit) {
+                            tit = con;
+                        }
+
+                        if ( adefs[tit]) {
+                          throw "Duplicate definition of attribute '" + tit + "'" ;
+                        }
+                        adefs[tit] = sp ;
+
+                        sp.className = 'adef' ;
+                        sp.title=tit ;
+                        sp.innerHTML = con ;
+                        p.replaceChild(sp, item) ;
+                    }
+                    refs = document.querySelectorAll('aref') ;
+                    for (var i = 0; i < refs.length; i++) {
+                        var item = refs[i];
+                        var p = item.parentNode ;
+                        var con = item.innerHTML ;
+                        var sp = document.createElement( 'a' ) ;
+                        if ( !adefs[con]) {
+                          throw "Reference to undefined attribute '" + con + "'" ;
+                        }
+                        sp.className = 'aref' ;
+                        sp.setAttribute('title', con);
+                        sp.innerHTML = '@'+con ;
+                        p.replaceChild(sp, item) ;
+                    }
+                    // now do terms
+                    refs = document.querySelectorAll('tdef') ;
+                    var tdefs = [];
+                    for (var i = 0; i < refs.length; i++) {
+                        var item = refs[i];
+                        if (!item) continue ;
+                        var p = item.parentNode ;
+                        var con = item.innerHTML ;
+                        var ref = item.getAttribute('title') ;
+                        if (!ref) {
+                            ref = item.textContent ;
+                        }
+                        if (ref) {
+                            ref = ref.replace(/\s+/g, '_').toLowerCase() ;
+                        }
+
+                        if ( tdefs[ref]) {
+                          throw "Duplicate definition of term '" + ref + "'" ;
+                        }
+
+                        var sp = document.createElement( 'dfn' ) ;
+                        tdefs[ref] = sp ;
+                        sp.title = ref ;
+                        sp.innerHTML = con ;
+                        p.replaceChild(sp, item) ;
+                    }
+                    // now term references
+                    refs = document.querySelectorAll('tref') ;
+                    for (var i = 0; i < refs.length; i++) {
+                        var item = refs[i];
+                        if (!item) continue ;
+                        var p = item.parentNode ;
+                        var con = item.innerHTML ;
+                        var ref = item.getAttribute('title') ;
+                        if (!ref) {
+                            ref = item.textContent ;
+                        }
+                        if (ref) {
+                            ref = ref.replace(/\s+/g, '_').toLowerCase() ;
+                        }
+
+                        if ( !tdefs[ref]) {
+                          throw "Reference to undefined term '" + ref + "'" ;
+                        }
+                        var sp = document.createElement( 'a' ) ;
+                        var id = item.textContent ;
+                        sp.className = 'tref' ;
+                        sp.title = ref ;
+                        sp.innerHTML = con ;
+                        p.replaceChild(sp, item) ;
+                    }
+                }
+        } ;
+
+
+      var respecConfig = {
+          // specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
+          specStatus:           "ED",
+          publishDate:          "2011-10-28",
+          copyrightStart:       "2011",
+
+          // the specification's short name, as in http://www.w3.org/TR/short-name/
+          shortName:            "microdata-rdf",
+          subtitle:             "Transformation from HTML+Microdata to RDF",
+          // if you wish the publication date to be other than today, set this
+          // publishDate:  "2009-08-06",
+
+          // if there is a previously published draft, uncomment this and set its YYYY-MM-DD date
+          // and its maturity status
+          previousPublishDate:  "2011-10-11",
+          previousMaturity:     "ED",
+          previousURI:          "https://dvcs.w3.org/hg/htmldata/raw-file/53e66f3a31f2/ED/microdata-rdf/20111011/index.html",
+          //diffTool:             "http://www.aptest.com/standards/htmldiff/htmldiff.pl",
+
+          // if there a publicly available Editor's Draft, this is the link
+          edDraftURI:           "https://dvcs.w3.org/hg/htmldata/microdata-rdf/",
+
+          // if this is a LCWD, uncomment and set the end of its review period
+          // lcEnd: "2009-08-05",
+
+          // if you want to have extra CSS, append them to this list
+          // it is recommended that the respec.css stylesheet be kept
+          extraCSS:             [
+              "http://dev.w3.org/2009/dap/ReSpec.js/css/respec.css",
+          ],
+
+          // editors, add as many as you like
+          // only "name" is required
+          editors:  [
+              { name: "Gregg Kellogg", url: "http://greggkellogg.net/",
+                company: "Kellogg Associates" },
+          ],
+
+          // authors, add as many as you like.
+          // This is optional, uncomment if you have authors as well as editors.
+          // only "name" is required. Same format as editors.
+
+          authors:  [
+              { name: "Ian Hickson", url: "mailto:ian@hixie.ch",
+                company: "Google, Inc." },
+              { name: "Gregg Kellogg", url: "http://greggkellogg.net/",
+                company: "Kellogg Associates" },
+          ],
+
+          // name of the WG
+          wg:           "HTML Data Task Force",
+
+          // URI of the public WG page
+          wgURI:        "http://www.w3.org/wiki/Html-data-tf",
+
+          // name (with the @w3c.org) of the public mailing to which comments are due
+          wgPublicList: "public-html-data-tf",
+
+          // URI of the patent status for this WG, for Rec-track documents
+          // !!!! IMPORTANT !!!!
+          // This is important for Rec-track documents, do not copy a patent URI from a random
+          // document unless you know what you're doing. If in doubt ask your friendly neighbourhood
+          // Team Contact.
+          wgPatentURI:  "",
+          maxTocLevel: 4,
+          preProcess: [ preProc ],
+          //alternateFormats: [ {uri: "diff-20110817.html", label: "diff to previous version"} ],
+      };
+
+      function updateExample(doc, content) {
+        // perform transformations to make it render and prettier
+        content = content.replace(/<!--/, '');
+        content = content.replace(/-->/, '');
+        content = doc._esc(content);
+        content = content.replace(/\*\*\*\*([^*]*)\*\*\*\*/g, '<span class="diff">$1</span>') ;
+        return content ;
+      }
+
+      function updateDTD(doc, content) {
+        // perform transformations to
+        // make it render and prettier
+        content = '<pre class="dtd">' + doc._esc(content) + '</pre>';
+        content = content.replace(/!ENTITY % ([^ \t\r\n]*)/g, '!ENTITY <span class="entity">% $1</span>');
+        content = content.replace(/!ELEMENT ([^ \t$]*)/mg, '!ELEMENT <span class="element">$1</span>');
+        return content;
+      }
+
+      function updateSchema(doc, content) {
+        // perform transformations to
+        // make it render and prettier
+        content = '<pre class="dtd">' + doc._esc(content) + '</pre>';
+        content = content.replace(/&lt;xs:element\s+name=&quot;([^&]*)&quot;/g, '&lt;xs:element name="<span class="element" id="schema_element_$1">$1</span>"') ;
+        return content;
+      }
+
+      function updateTTL(doc, content) {
+        // perform transformations to
+        // make it render and prettier
+        content = '<pre class="sh_sourceCode">' + doc._esc(content) + '</pre>';
+        content = content.replace(/@prefix/g, '<span class="sh_keyword">@prefix</span>');
+        return content;
+      }
+  </script>
+<style>
+.diff { font-weight:bold; color:#0a3; }
+ol.algorithm { counter-reset:numsection; list-style-type: none; }
+ol.algorithm li { margin: 0.5em 0; }
+ol.algorithm li:before {
+  font-weight: bold;
+  counter-increment: numsection;
+  content: counters(numsection, ".") ") ";
+}
+dl.triple { padding: 0 0 0 1em; }
+dl.triple dt, dl.triple dd { margin: 0; display: inline }
+dl.triple dt:after { content: ':'; }
+dl.triple dd:after { content: '\A'; white-space: pre; }
+.adef { 
+	font-family: monospace; 
+	font-weight: bold; 
+    color: #ff4500;
+}
+
+.aref { 
+	font-family: monospace; 
+	font-weight: bold; 
+    color: #ff4500;
+}
+
+span.entity { color: red; }
+
+span.element { color: green; }
+</style>
+</head>
+
+<body>
+<section id="abstract">
+</section>
+
+<section id='sotd'>
+<p>This document is an experimental work in progress.</p>
+</section>
+
+<section>
+  <h1>Introduction</h1>
+  <p>
+    This document describes a means of transforming HTML containing Microdata into RDF. HTML Microdata [[!MICRODATA]]
+    is an extension to HTML used to embed machine-readable data to HTML documents. This specification describes
+    transformation directly to RDF [[RDF-CONCEPTS]].
+  </p>
+
+<section>
+  <h2>Background</h2>
+  <p>Microdata is a way of expressing metadata in HTML documents using attributes. A previous version
+    of Microdata [[!MICRODATA]] included rules for generating RDF, but current Editor's Drafts have removed
+    the explicit transformation procedure. Microdata is now used as an API to access data from within
+    an HTML DOM and as a JSON serialization.</p>
+  <p>The original RDF transformation process created URIs for properties that are expressed as non-absolute
+    URIs. The algorithm was designed to create URIs which were distinct based on the relationship between
+    <aref>itemtype</aref> and <aref>itemprop</aref> contexts. This is required, as the Microdata data model
+    requires that properties maintain distinct semantic meanings in different contexts. However, this
+    form of URI generation is typically different than that used within RDF vocabularies, where
+    properties typically have a common meaning within a given <tref>vocabulary</tref>.</p>
+  <p>Microdata also specifies that items are values are ordered, which is not typically the case for RDF
+    vocabularies. In fact, unless a property has an <code>rdfs:range</code> of <code>rdf:List</code>, or is
+    unspecified, it may not be appropriate to generate an <tref>RDF Collection</tref>.</p>
+  <p>The Microdata JSON serialization does not retain datatype or language information that might be derived
+    from the HTML DOM. The RDF Transformation does retain both datatype and language information when it
+    is available.</p>
+  <p>This specification is an update to the original RDF transformation process in addition to
+    <tref>vocabulary</tref>-specific rules that affect the generation of property URIs and value serializations.
+    This is facilitated by a <tref>registry</tref> that associates URIs with specific rules based on matching
+    <aref>itemtype</aref> values against registered URI prefixes do determine a vocabulary and
+    vocabulary-specific processing rules.</p>
+</section>
+
+<section>
+  <h2>Use Cases</h2>
+  <p>During the period of the task force, a number of use cases were put forth for the use of Microdata
+    in generating RDF:</p>
+  <ul>
+    <li>Semantic search engines such as <a href="http://sindice.com/">Sindice</a> use RDF as their backend data model.
+      They want to gather information expressed using microdata alongside information expressed in RDF-based formats
+      and make it available to others to use, as a service. In these cases, the ultimate consumer, who will need to
+      understand the vocabularies used within the microdata, is the program or person who pulls out data from Sindice.
+      Sindice needs to retain the distinctions in the original Microdata (e.g. ordering of items) and might not have
+      built-in knowledge about the <tref>vocabulary</tref> of interest to the ultimate consumer. In this case, the ultimate consumer
+      is likely to have to map/validate/handle errors in the data they get from Sindice.</li>
+    <li>A consumer such as <a href="http://openelectiondata.org">openelectiondata.org</a> wants to support
+      Microdata-based markup of their <tref>vocabulary</tref> as well as RDFa-based markup, both going into an RDF-based data store.
+      They want to use an off-the-shelf tool to extract the microdata. They want to configure the tool to give them the
+      RDF that is appropriate for their known <tref>vocabulary</tref>.</li>
+    <li>A browser plugin that captures data for the user uses an RDF model as its backend store.
+      Any time it encounters Microdata on a page, it wants to pull that Microdata into the store on the fly.</li>
+    <li><a href="http://purl.org/goodrelations/">GoodRelations</a> require properties to be generated
+      in a flat namespace, not place multiple values within a container. Ideally, a processor would make use
+      of<code>rdfs:range</code> declarations at parse time so properly typed literals could be constructed. It also
+      requires that plain literals retain language information in scope on the HTML element, as it is common that
+      multiple values will be used to specify the same information in different languages. Collection.</li>
+    <li><a href="http://schema.org/">Schema.org</a> has an 
+      <a href="http://schema.org/docs/extension.html">extension mechanism</a> to allow authors to express information
+      that is more detail than the pre-defined types, properties and enumerations. Property URIs are all in the same
+      flat-namespace as types, but authors can add more detail by using a '/' after the type or property to provide
+      more detail. For example, schema.org defines a <em>musicGroupMember</em> property having a URI of
+      <code>http://schema.org/musicGroupMember</code>, and an author might express more detail through an ad-hoc
+      sub-property <em>musicGroupMember/leadVocalist</em>, having the URI
+      <code>http://schema.org/musicGroupMember/leadVocalist</code>.</li>
+  </ul>
+</section>
+
+<section>
+  <h2>Issues</h2>
+  <p>Decisions or open issues in the specification are tracked on the
+    <a href="http://www.w3.org/2011/htmldata/track/issues">Task Force Issue Tracker</a>. These include the
+    following:</p>
+  <dl>
+    <dt><a href="">ISSUE 1</a></dt><dd>Vocabulary specific parsing for Microdata</dd>
+    <dt><a href="">ISSUE 2</a></dt><dd>Should Microdata-RDF generate XMLLiteral values</dd>
+  </dl>
+</section>
+
+<section>
+  <h2>Goals</h2>
+  <p>The purpose of this specification is to provide input to a future working group that can make decisions
+    about the need for a registry and the details of processing. Among the options investigated by
+    the Task Force are the following:</p>
+  <ul>
+    <li>Property URI generation using the original Microdata specification with a base URI and fragment
+      made up of the in-scope <aref>itemtype</aref> and <aref>itemprop</aref> elements.</li>
+    <li>Vocabulary-based URI generation, where the <tref>vocabulary</tref> is determined from the
+      in-scope <aref>itemtype</aref>, either through an algorithmic modification of the type URI or by matching the
+      URI against a <tref>registry</tref>. The vocabulary URI is then used to generate property URIs in a namespace
+      parallel to the type URI.</li>
+    <li>Type-based URI generation, where the URI of the in-scope <aref>itemtype</aref> forms the base of property URI
+      by adding the property to the type URI as a fragment.</li>
+    <li>When there are multiple top-level items in a document, place items in an RDF Collection.
+      Alternatively, simply list the items as multiple values, or do not generate an
+      <code>http://www.w3.org/1999/xhtml/microdata#item</code> mapping at all.</li>
+    <li>When there are multiple values for an <aref>itemprop</aref>, place items in an RDF Collection.
+      Alternatively, do not use collections, use an alternative such as <code>rdf:Seq</code>, or place all values,
+      whether or not multiple, into some form of collection.</li>
+  </ul>
+</section>
+
+<section>
+  <h1>Attributes and Syntax</h1>
+  <p>
+    The Microdata specification [[!MICRODATA]] defines a number of attributes and the way in which those
+    attributes are to be interpreted. This section describes those attributes, with reference to their
+    original definition.
+  </p>
+  <dl>
+    <dt><adef>content</adef></dt><dd>
+      An attribute appropriate for use with the <code>meta</code> element for creating invisible properties.
+    </dd>
+    <dt><adef>data</adef></dt><dd>
+      An attribute appropriate for use with the <code>object</code> element for creating URI<tref>URI
+      reference</tref>s.
+    </dd>
+    <dt><adef>datetime</adef></dt><dd>
+      An attribute appropriate for use with the <code>date</code> element for creating typed literals.
+      <div class="issue">
+        The <code>date</code> element will likely be replaced with something more general purpose.
+      </div>
+    </dd>
+    <dt><adef>href</adef></dt><dd>
+      An attribute appropriate for use with <code>a</code>, <code>area</code> or <code>link</code> elements for
+      creating <tref>URI reference</tref>s.
+    </dd>
+    <dt><adef>itemid</adef></dt><dd>
+      An attribute containing a URI used to identify the subject of triples associated with this <tref>item</tref>.
+      Available through the <cite><a
+      href="http://www.w3.org/TR/2011/WD-microdata-20110525/#microdata-dom-api">Microdata DOM API</a></cite> as
+      <code>element.itemId</code>.
+      (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#attr-itemscope">Section 3.2 Items</a></cite> in [[!MICRODATA]]).
+    </dd>
+    <dt><adef>itemprop</adef></dt><dd>
+      An attribute used to identify one or more properties to one ore more <tref>item</tref>s. An <aref>itemprop</aref>
+      contains a space separated list of <tdef>name</tdef>s which may either by <tref>absolute URI</tref>s or terms
+      associated with the type of the <tref>item</tref> as defined by the referencing <trdf>item</trdf>'s
+      <aref>itemtype</aref>.
+      Available through the <cite><a
+      href="http://www.w3.org/TR/2011/WD-microdata-20110525/#microdata-dom-api">Microdata DOM API</a></cite> as
+      <code>element.itemProp</code>.
+      (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#names:-the-itemprop-attribute">Section 3.3
+      Names: the itemprop attribute</a></cite> of [[!MICRODATA]]).
+    </dd>
+    <dt><adef>itemref</adef></dt><dd>
+      An additional attribute on an <tref>item</tref> that references additional elements containing property
+      definitions to be applied to the referencing <tref>item</tref>. The attribute value is an unordered
+      list of ID references to elements within the same document.
+      Available through the <cite><a
+      href="http://www.w3.org/TR/2011/WD-microdata-20110525/#microdata-dom-api">Microdata DOM API</a></cite> as
+      <code>element.itemRef</code>.
+      (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#attr-itemscope">Section 3.2 Items</a></cite>
+      of [[!MICRODATA]]).
+    </dd>
+    <dt><adef>itemscope</adef></dt><dd>
+      An boolean attribute identifying an element as an item.
+      (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#attr-itemscope">Section 3.2 Items</a></cite>
+      of [[!MICRODATA]]).
+    </dd>
+    <dt><adef>itemtype</adef></dt><dd>
+      An additional attribute on an <tref>item</tref> used to specify the type of an <tref>item</tref>.
+      The specified type is also used to resolve non-URI <tref>name</tref>s to <tref>absolute URI</tref>s.
+      Available through the <cite><a
+      href="http://www.w3.org/TR/2011/WD-microdata-20110525/#microdata-dom-api">Microdata DOM API</a></cite> as
+      <code>element.itemType</code>.
+      (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#attr-itemscope">Section 3.2 Items</a></cite>
+      of [[!MICRODATA]]).
+    </dd>
+    <dt><adef>src</adef></dt><dd>
+      An attribute appropriate for use with <code>audio</code>, <code>embed</code>, <code>iframe</code>,
+      <code>img</code>, <code>source</code>, <code>track</code>, or <code>video</code> elements for creating invisible
+      properties.
+    </dd>
+  </dl>
+</section>
+
+<section>
+  <h1>Vocabulary Registry</h1>
+  <p>In a perfect world, all processors would be able to generate the same output for a given input
+    without regards to the requirements of a particular <tref>vocabulary</tref>. However, Microdata doesn't
+    provide sufficient syntactic help in making these decisions. Different vocabularies have different
+    needs.</p>
+  <p>The <tdef>registry</tdef> associates a <tdef>URI prefix</tdef> with one or more key-value pairs denoting
+  processor behavior. A hypothetical JSON representation of such a registry might be the following:</p>
+<pre class="example" data-transform="updateExample">
+<!--
+{
+  "http://schema.org/": {
+    "propertyURI":    "vocabulary",
+    "multipleValues": "unordered"
+  },
+  "http://microformats.org/profile/hcard": {
+    "propertyURI":    "type",
+    "multipleValues": "list"
+  }
+}
+-->
+</pre>
+  <p>This structure associates mappings for two URIs, <code>http://schema.org/</code> and
+    <code>http://microformats.org/profile/hcard</code>. Items having an <aref>itemtype</aref> with a <tref>URI
+    prefix</tref> from this <tref>registry</tref> use the the rules described for that prefix within the scope of that
+    <aref>itemtype</aref>. This mapping currently defines two rules: <tref><code>propertyURI</code></tref> and
+    <tref><code>multipleValues</code></tref> with values to indicate specific behavior. The interpretation of these
+    rules is defined in the following sections. If an item has no <tref>current type</tref> or the
+    <tref>registry</tref> contains no <tref>URI prefix</tref> matching <tref>current type</tref>, a conforming
+    processor MUST use the default values defined for these rules.</p>
+  <p class="issue">Richard Ciganiak has
+    <cite><a href="http://richard.cyganiak.de/2011/10/microdata.html#whitelists">pointed out</a></cite> that
+    &quot;Registry&quot; may be the wrong term, as the proposed registry doesn't assign identifiers or manage
+    namespace, it simply provides a mapping between URI prefixes and processor behavior and suggests the term
+    &quot;Whitelist&quot;. As more than two values are required, and it describes more than binary behavior, this term
+    isn't appropriate either.</p>
+  <p class="issue">Anytime we discuss maintaining such a database, there are issues surrounding update
+    frequency, URL naming, and how updates are authorized. This remains an open issue. This spec
+    just considers the semantic content of such a list and how it can be used to affect processing without
+    defining its representation or update policies.</p>
+  <p class="issue">The URL of the <tref>registry</tref> must be defined.</p>
+
+<section>
+  <h2>Property URI Generation</h2>
+  <p>For <tref>property names</tref> which are not <tref>absolute URI</tref>s,
+    the <tdef><code>propertyURI</code></tdef> rule defines the algorithm for generating an <tref>absolute URI</tref>
+    given an <tref>evaluation context</tref> including an <tref>current type</tref> and <tref>current
+    property</tref>.</p>
+  <p>The procedure for generating property URIs is defined in
+    <a href="#generate-predicate-URI">Generate Predicate URI</a>.</p>
+  <p>Possible values for <tref><code>propertyURI</code></tref> are the following:</p>
+  <dl>
+    <dt><code>context</code></dt><dd>
+      The <code>context</code> URI generation scheme guarantees that generated property URIs are
+      unique for each <tref>current type</tref> and <tref>current property</tref> combination. This is
+      required as the Microdata model requires that property names are associated with specific
+      items and do not have a global scope.
+    </dd>
+    <dt><code>type</code></dt><dd>
+      The <code>type</code> URI generation scheme appends <tref>property names</tref> that are not
+      <tref>absolute URI</tref>s to <tref>current type</tref> using a "#" separator.
+    </dd>
+    <dt><code>vocabulary</code></dt><dd>
+      The <code>vocabulary</code> URI generation scheme appends <tref>property names</tref> that are not
+      <tref>absolute URI</tref>s to the <tref>URI prefix</tref>.
+    </dd>
+  </dl>
+  <p>The default value of <tref><code>propertyURI</code></tref> is <code>context</code>.</p>
+</section>
+
+<section>
+  <h2>Value Ordering</h2>
+  <p>For items having multiple values for a property,
+    the <tdef><code>multipleValues</code></tdef> rule defines the algorithm for serializing these values.
+    This is required as the Microdata data model requires that values be strictly ordered as defined in
+    <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#microdata-dom-api">Microdata DOM API</a></cite>
+    as <code>element.itemValue</code>. However, many RDF vocabularies expect multiple values to be generated
+    as triples sharing a common subject and predicate.</p>
+    <p>Possible values for <tref><code>multipleValues</code></tref> are the following:</p>
+    <dl>
+      <dt><code>unordered</code></dt><dd>
+        Values are serialized without ordering using a common subject and predicate.
+      </dd>
+      <dt><code>list</code></dt><dd>
+        Multi-valued <aref>itemprop</aref>s are serialized using an <tref>RDF Collection</tref>.
+      </dd>
+    </dl>
+    <p>The default value of <tref><code>multipleValues</code></tref> is <code>list</code>.</p>
+</section>
+</section>
+
+<section>
+  <h1>Algorithm</h1>
+  <p>
+    Transformation of Microdata to RDF makes use of general processing rules described in [[!MICRODATA]]
+    for the treatment of <tref>item</tref>s.
+  </p>
+  <section>
+    <h2>Algorithm Terms</h2>
+    <dl>
+      <dt><tdef>absolute URI</tdef></dt><dd>
+        As defined in [[!RFC3986]], an absolute URI contains both <em>scheme</em> and <em>scheme-specific-part</em>s.
+      </dd>
+      <dt><tdef>blank node</tdef></dt><dd>
+        A blank node is a node in a graph that is neither a <tref>URI reference</tref> nor a <tref>literal</tref>.
+        <tref>Item</tref>s without a <tref>global identifier</tref> have a blank node allocated to them.
+        (See [[RDF-CONCEPTS]]).
+      </dd>
+      <dt><tdef>document base</tdef></dt><dd>
+        The base address of the document being processed, as defined in <cite><a
+        href="http://dev.w3.org/html5/spec/Overview.html#resolving-urls">Section 2.6.3 Resolving URLs</a> of
+        [[!HTML5]]</cite>.
+      </dd>
+      <dt><tdef>evaluation context</tdef></dt><dd>
+        A data structure including the following elements:
+        <dl>
+          <dt><tdef>memory</tdef></dt><dd>
+            a mapping of items to subjects, initially empty
+          </dd>
+          <dt><tdef>current property</tdef></dt><dd>
+            an <tref>absolute URI</tref> for the <em>current property</em>, used for generating URIs
+            for properties of items without an explicit <aref>itemtype</aref>.
+          </dd>
+          <dt><tdef>current type</tdef></dt><dd>
+            an <tref>absolute URI</tref> for the <em>current type</em>, used when an <tref>item</tref> does not
+            contain an explicit <aref>itemtype</aref>
+          </dd>
+          <dt><tdef>current vocabulary</tdef></dt><dd>
+            an <tref>absolute URI</tref> for the <em>current vocabulary</em>, from the <tref>registry</tref>
+          </dd>
+        </dl>
+      </dd>
+      <dt><tdef>item</tdef></dt><dd>
+         An <tref>item</tref> is defined as an element containing an <aref>itemscope</aref> attribute. (See <cite><a
+         href="http://www.w3.org/TR/2011/WD-microdata-20110525/#attr-itemscope">Section 3.2 Items</a></cite> of
+         [[!MICRODATA]]).
+      </dd>
+      <dt><tdef>item properties</tdef></dt><dd>
+        The mechanism for finding the <tref title="item properties">properties of an item</tref> are described in
+        <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#the-properties-of-an-item">Section 3.5
+        Associating names with items</a></cite> of [[!MICRODATA]].
+        Available through the <cite><a
+        href="http://www.w3.org/TR/2011/WD-microdata-20110525/#microdata-dom-api">Microdata DOM API</a></cite> as
+        <code>element.properties</code>.
+      </dd>
+      <dt><tdef>global identifier</tdef></dt><dd>
+        The value of an <tref>item</tref>'s <aref>itemid</aref> attribute, if it has one. (See <cite><a
+        href="http://www.w3.org/TR/2011/WD-microdata-20110525/#attr-itemscope">Section 3.2 Items</a></cite> of
+        [[!MICRODATA]]).
+      </dd>
+      <dt><tdef>literal</tdef></dt><dd>
+        Literals a values such as strings and dates, including <tdef>typed literal</tdef>s and
+        <tdef>plain literal</tdef>s.
+        (See [[RDF-CONCEPTS]]).
+      </dd>
+     <dt><tdef>property names</tdef></dt><dd>
+        The tokens of an element's <aref>itemprop</aref> attribute.
+        (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#property-names">Section 3.3 Names: the
+        itemprop attribute</a></cite> of [[!MICRODATA]]).
+      </dd>
+      <dt><tdef>property value</tdef></dt><dd>
+        The <tref>property value</tref> of a name-value pair added by an element with an <aref>itemprop</aref>
+        attribute depends on the element.
+        Available through the <cite><a
+        href="http://www.w3.org/TR/2011/WD-microdata-20110525/#microdata-dom-api">Microdata DOM API</a></cite> as
+        <code>element.itemValue</code>.
+        (Updated from <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#url-property-elements">Section
+        3.4 Values</a></cite> of [[!MICRODATA]]).
+        <dl>
+          <dt>If the element also has an <aref>itemscope</aref> attribute</dt>
+          <dd>
+            The value is the <tref>item</tref> created by the element as a <tref>URI reference</tref> or
+            <tref>blank node</tref>
+          </dd>
+          <dt>If the element is a <code>meta</code> element</dt>
+          <dd>
+            The value is the <tref>plain literal</tref> created from the value of the element's <aref>content</aref>
+            attribute, if any, or the empty string if there is no such attribute.
+            If the language of the element is known it MUST be used when creating the <tref>plain literal</tref>.
+          </dd>
+          <dt>
+            If the element is an <code>audio</code>, <code>embed</code>, <code>iframe</code>, <code>img</code>,
+            <code>source</code>, <code>track</code>, or <code>video</code> element with a <aref>src</aref> attribute
+          </dt>
+          <dd>
+            The value is a <tref>URI reference</tref> that results from resolving the value of the element's
+            <aref>src</aref> attribute relative to the element at the time the attribute is set.
+          </dd>
+          <dt>
+            If the element is an <code>a</code>, <code>area</code>, or <code>link</code> element with an
+            <aref>href</aref> attribute
+          </dt>
+          <dd>
+            The value is a <tref>URI reference</tref> that results from resolving the value of the element's
+            <aref>href</aref> attribute relative to the element at the time the attribute is set.
+          </dd>
+          <dt>If the element is an <code>object</code> element with a <aref>data</aref> attribute</dt>
+          <dd>
+            The value is <tref>URI reference</tref> that results from resolving the value of the element's
+            <aref>data</aref> attribute relative to the element at the time the attribute is set.
+          </dd>
+          <dt>If the element is a <code>time</code> element with a <aref>datetime</aref> attribute
+            <div class="issue">
+              The <code>time</code> element will likely be replaced with something more general purpose.
+            </div>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                If the value has the lexical form of <cite><a
+                href="http://www.w3.org/TR/xmlschema-2/#date">xsd:date</a></cite> [[!RDF-SCHEMA]].
+              </dt>
+              <dd>
+                The value is a <tref>typed literal</tref> composed of the value and
+                <code>http://www.w3.org/2001/XMLSchema#date</code>.
+              </dd>
+              <dt>
+                If the value has the lexical form of <cite><a
+                href="http://www.w3.org/TR/xmlschema-2/#time">xsd:time</a></cite> [[!RDF-SCHEMA]].
+              </dt>
+              <dd>
+                The value is a <tref>typed literal</tref> composed of the value and
+                <code>http://www.w3.org/2001/XMLSchema#time</code>.
+              </dd>
+              <dt>
+                If the value has the lexical form of <cite><a
+                href="http://www.w3.org/TR/xmlschema-2/#dateTime">xsd:dateTime</a></cite> [[!RDF-SCHEMA]].
+              </dt>
+              <dd>
+                The value is a <tref>typed literal</tref> composed of the value and
+               <code>http://www.w3.org/2001/XMLSchema#dateTime</code>.
+              </dd>
+              <!-- revisit when/if content model for @datetime is updated to allow for xsd:duration
+              <dt>
+                If the value has the lexical form of <cite><a
+                href="http://www.w3.org/TR/xmlschema-2/#duration">xsd:duration</a></cite> [[!RDF-SCHEMA]].
+              </dt>
+              <dd>
+                The value is a <tref>typed literal</tref> composed of the value and
+                <code>http://www.w3.org/2001/XMLSchema#duration</code>.
+              </dd>
+              -->
+              <dt>Otherwise</dt>
+              <dd>The value is a <tref>plain literal</tref> created from the value.</dd>
+            </dl>
+          </dd>
+          <dt>Otherwise</dt>
+          <dd>
+            The value is a <tref>plain literal</tref>, with the language information set from the language of the
+            element, if it is not unknown.
+          </dd>
+        </dl>
+      </dd>
+      <dt><tdef>top-level item</tdef></dt><dd>
+        An <tref>item</tref> which does not contain an <aref>itemprop</aref> attribute.
+        Available through the <cite><a
+        href="http://www.w3.org/TR/2011/WD-microdata-20110525/#microdata-dom-api">Microdata DOM API</a></cite> as
+        <code>document.getItems</code>.
+        (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#top-level-microdata-items">Section 3.5
+        Associating names with items</a></cite> of [[!MICRODATA]]).
+      </dd>
+      <dt><tdef>URI reference</tdef></dt><dd>
+        URI references are suitable to be used in <em>subject</em>, <em>predicate</em> or <em>object</em> positions
+        within an RDF triple, as opposed to a <tref>literal</tref> value that may contain a string representation of a
+        URI. (See [[RDF-CONCEPTS]]).
+      </dd>
+      <dt><tdef>vocabulary</tdef></dt><dd>
+        A vocabulary is a collection of URIs, suitable for use as an <aref>itemtype</aref> or <aref>itemprop</aref>
+        value, that share a common <tref>URI prefix</tref>. That prefix is the vocabulary URI. A vocabulary URL is not
+        allowed to be a prefix of another vocabulary URI.
+        <div class="note">
+          This definition differs from the language in the HTML spec and is just for the purpose of this
+          document. In HTML, a vocabulary is a specification, and doesn't have a URI. In our view, if one
+          specification defines ten <aref>itemtype</aref>s, then these could be treated as one vocabulary or as ten
+          distinct vocabularies; it is entirely up to the vocabulary creator.
+        </div>
+      </dd>
+    </dl>
+  </section>
+
+  <section>
+    <h3>RDF Conversion Algorithm</h3>
+    <p>A HTML document containing Microdata MAY be converted to any other RDF-compatible document
+    format using the algorithm specified in this section.</p>
+    <p>
+      The algorithm below is designed for DOM-based implementations with CSS selector access to elements.
+    </p>
+    <p>
+      A conforming Microdata processor implementing RDF conversion MUST implement a
+      processing algorithm that results in the equivalent triples that the following
+      algorithm generates:
+    </p>
+
+    <p>Set <em>item list</em> to an empty list.</p>
+
+    <ol class="algorithm">
+      <li>For each element that is also a <tref>top-level item</tref> run the following algorithm:
+        <ol class="algorithm">
+          <li>
+            <a href="generate-the-triples">Generate the triples</a> for an item <em>item</em>, using the
+            <tref>evaluation context</tref>.
+            Let <em>result</em> be the (<tref>URI reference</tref> or <tref>blank node</tref>) subject returned.
+          </li>
+          <li>
+            Append <em>result</em> to <em>item list</em>.
+          </li>
+        </ol>
+      </li>
+      <li>
+        If <em>item list</em> contains multiple values, <a
+        href="generate-collection">generate an RDF Collection</a> <em>list</em> from the ordered list of values.
+        Set <em>value</em> to the value returned from <a href="#generate-collection">generate an RDF
+        Collection</a>.
+      </li>
+      <li>
+        Otherwise, if <em>item list</em> contains a single value set <em>value</em> to that value.
+      </li>
+      <li>
+        Generate the following triple:
+        <dl class="triple">
+          <dt>subject</dt>
+          <dd><tref>Document base</tref></dd>
+          <dt>predicate</dt>
+          <dd><code>http://www.w3.org/1999/xhtml/microdata#item</code></dd>
+          <dt>object</dt>
+          <dd><em>value</em></dd>
+        </dl>
+      </li>
+    </ol>
+  </section>
+
+  <section>
+    <h2>Generate the triples</h2>
+    <p>
+      When the user agent is to Generate triples for an <tref>item</tref> <em>item</em>, given an
+      <tref>Evaluation Context</tref>, it must run the following steps:
+    </p>
+    <p class="note">
+      This algorithm has undergone substantial change from the original Microdata specification [[!MICRODATA]].
+    </p>
+    <ol class="algorithm">
+      <li>
+        If there is an entry for <em>item</em> in <tref>memory</tref>, then let <em>subject</em> be the subject of
+        that entry. Otherwise, if <em>item</em> has a <tref>global identifier</tref> and that
+        <tref>global identifier</tref> is an <tref>absolute URI</tref>, let <em>subject</em> be that
+        <tref>global identifier</tref>. Otherwise, let <em>subject</em> be a new <tref>blank node</tref>.
+      </li>
+      <li>Add a mapping from <em>item</em> to <em>subject</em> in <tref>memory</tref></li>
+      <li>
+        If <em>item</em> has an <aref>itemtype</aref> attribute, extract the value as <em>type</em>.
+      </li>
+      <li>If <em>type</em> is an <tref>absolute URI</tref>, generate the following triple:
+        <dl class="triple">
+          <dt>subject</dt>
+          <dd><em>subject</em></dd>
+          <dt>predicate</dt>
+          <dd><code>http://www.w3.org/1999/02/22-rdf-syntax-ns#type</code></dd>
+          <dt>object</dt>
+          <dd><em>type</em> (as a <tref>URI reference</tref>)</dd>
+        </dl>
+      </li>
+      <li>
+        If <em>type</em> is not an <tref>absolute URI</tref>, set it to <tref>current type</tref> from the
+        <tref>Evaluation Context</tref> if not empty.
+      </li>
+      <li>If the registry contains a <tref>URI prefix</tref> that is a character for character match of <em>type</em>
+        up to the length of the <tref>URI prefix</tref>, set <em>vocab</em> as that <tref>URI prefix</tref>.
+      <li>
+        Set <em>property list</em> to an empty mapping between properties and one or more ordered
+        <em>value</em>s as established below.
+      </li>
+      <li>
+        For each element <em>element</em> that has one or more <tref>property names</tref> and is one of the
+        <tref title="item properties">properties of the item</tref> <em>item</em>, in the order those elements
+        are given by the algorithm that returns the <tref title="item properties">properties of the item</tref>,
+        run the following substep:
+        <ol class="algorithm">
+          <li>
+            For each <em>name</em> in the element's <tref>property names</tref>, run the following substeps:
+            <ol class="algorithm">
+              <li>
+                Let <em>context</em> to a copy of <tref>evaluation context</tref> with <tref>current type</tref> set
+                to <em>type</em> and <tref>current vocabulary</tref> set to <em>vocab</em>.
+              <li>
+                Let <em>predicate</em> be the result of <a href="generate-predicate-uri">generate predicate URI</a>
+                using <em>context</em> and <em>name</em>. Update <em>context</em> by setting
+                <tref>current property</tref> to <em>predicate</em>.
+              </li>
+              <li>
+                Let <em>value</em> be the <tref>property value</tref> of <em>element</em>.
+              </li>
+              <li>
+                If <em>value</em> is an <tref>item</tref>, then <a href="generate-the-triples">generate the
+                triples</a> for <em>value</em> using <em>context</em>. Replace <em>value</em> by the subject returned
+                from those steps.
+              </li>
+              <li>
+                Add <em>value</em> to <em>property list</em> for <em>predicate</em>.
+              </li>
+            </ol>
+          </li>
+        </ol>
+      </li>
+      <li>
+        For each <em>predicate</em> in <em>property list</em>:
+        <ol class="algorithm">
+          <li><a href="#generate-property-values">Generate property values</a> using a copy of
+            <tref>evaluation context</tref> with <tref>current property</tref> set to <em>predicate</em> and
+            <tref>current vocabulary</tref> set to <em>vocab</em> along with <em>subject</em> and
+            the list of values associated with <em>predicate</em> from <em>property list</em> as <em>values</em>.
+          </li>
+        </ol>
+      </li>
+      <li>Return <em>subject</em></li>
+    </ol>
+  </section>
+  
+  <section>
+    <h3>Generate Predicate URI</h3>
+    <p>Predicate URI generation makes use of <tref>current type</tref>, <tref>current property</tref>
+      and <tref>current vocabulary</tref> from an <tref>evaluation context</tref> <em>context</em>
+      along with <em>name</em>.</p>
+
+    <ol class="algorithm">
+      <li>If <em>name</em> is an <tref>absolute URI</tref>, return <em>name</em>
+        as a <tref>URI reference</tref>.</li>
+      <li>Otherwise, if <tref>current vocabulary</tref> from <em>context</em> is not null
+        and <tref>registry</tref> has an entry for <tref>current vocabulary</tref> having a
+        <tref>propertyURI</tref> entry that is not null, set that as <em>method</em>. Otherwise,
+        set <em>method</em> to <code>contextual</code>.</li>
+      <li>If <em>method</em> is <code>vocabulary</code> return the <tref>URI reference</tref> constructed
+        by appending the fragment escaped value of <em>name</em> to <tref>current vocabulary</tref>.</li>
+      <li>If <em>method</em> is <code>type</code>, return the <tref>URI reference</tref> constructed as follows:
+        <ol class="algorithm">
+          <li>Let <em>s</em> be <tref>current type</tref> from <em>context</em>.</li>
+          <li>If <em>s</em> does not contain a U+0023 NUMBER SIGN character (#),
+            then append a U+0023 NUMBER SIGN character (#) to <em>s</em>.</li>
+          <li>Return the concatenation of <em>s</em>
+            and the fragment-escaped value of <em>name</em> as a <tref>URI reference</tref>.</li>
+        </ol>
+      </li>
+      <li>Otherwise, if <tref>current type</tref> from <em>context</em> return the
+        <tref>URI reference</tref> constructed as follows:
+        <ol class="algorithm">
+          <li>Let <em>s</em> be <tref>document base</tref>.</li>
+          <li>If <em>s</em> does not contain a U+0023 NUMBER SIGN character (#),
+            then append a U+0023 NUMBER SIGN character (#) to <em>s</em>.</li>
+          <li>Return the concatenation of <em>s</em>
+            and the fragment-escaped value of <em>name</em> as a <tref>URI reference</tref>.</li>
+        </ol>
+      <li>Otherwise, return the <tref>URI reference</tref> constructed as follows:
+        <ol class="algorithm">
+          <li>Let <em>s</em> be <tref>current type</tref> from <em>context</em>.</li>
+          <li>If the last character of <em>s</em> is not a U+003A COLON character (:),
+            append a U+0025 PERCENT SIGN character (%), a U+0032 DIGIT TWO character (2), and a U+0030 DIGIT ZERO
+            character (0) to s.</li>
+          <li>Append the fragment-escaped value of <em>name</em> to <em>s</em>.</li>
+          <li>Return the concatenation of <code>http://www.w3.org/1999/xhtml/microdata#</code>
+            and the fragment-escaped value of <em>s</em> as a <tref>URI reference</tref>.</li>
+        </ol>
+      </li>
+    </ol>
+  </section>
+  
+  <section>
+    <h2>Generate Property Values</h2>
+    <p>Property value serialization makes use of <tref>current vocabulary</tref>
+      from an <tref>evaluation context</tref> <em>context</em> along with <em>subject</em>
+      and <em>values</em>.</p>
+
+    <ol class="algorithm">
+      <li>Let <em>predicate</em> be <tref>current property</tref> from <em>context</em>.</li>
+      <li>If <tref>current vocabulary</tref> from <em>context</em> is not null
+        and <tref>registry</tref> has an entry for <tref>current vocabulary</tref> having a
+        <tref><code>multipleValues</code></tref> entry that is not null, set that as <em>method</em>. Otherwise,
+        set <em>method</em> to <code>list</code>.</li>
+      <li>If <em>method</em> is <code>unordered</code>, foreach <em>value</em> in <em>values</em>, generate
+        the following triple:
+        <dl class="triple">
+          <dt>subject</dt>
+          <dd><em>subject</em></dd>
+          <dt>predicate</dt>
+          <dd><em>predicate</em></dd>
+          <dt>object</dt>
+          <dd><em>value</em></dd>
+        </dl>
+      </li>
+      <li>Otherwise, if <em>method</em> is <code>list</code>:
+        <ol class="algorithm">
+          <li>If <em>values</em> contains multiple values, <a
+            href="generate-collection">generate an RDF Collection</a> <em>list</em> from the ordered list of values.
+            Set <em>value</em> to the value returned from <a href="generate-collection">generate an RDF
+            Collection</a>.
+          </li>
+          <li>
+            Otherwise, if <em>values</em> contains a single value set <em>value</em> to that value.
+          </li>
+          <li>
+            Generate the following triple:
+            <dl class="triple">
+              <dt>subject</dt>
+              <dd><em>subject</em></dd>
+              <dt>predicate</dt>
+              <dd><em>predicate</em></dd>
+              <dt>object</dt>
+              <dd><em>value</em></dd>
+            </dl>
+          </li>
+        </ol>
+      </li>
+    </ol>
+  </section>
+
+  <section id="generate-collection">
+    <h2>Generate RDF Collection</h2>
+    <p>
+      An <tdef>RDF Collection</tdef> is a mechanism for defining ordered sequences of objects in RDF (See <cite><a
+      href="http://www.w3.org/TR/rdf-syntax/#collections">Section 5.2 RDF Collections</a></cite> in
+      [[!RDF-SCHEMA]]). As the RDF data-model is that of an unordered graph, a linking method using properties
+      <code>rdf:first</code> and <code>rdf:next </code>is required to be able to specify a particular order.
+    </p>
+    <p>
+      In the Microdata to RDF mapping, <tref>RDF Collection</tref>s are used when an item has more than one value
+      associated with a given property to ensure that the original document order is maintained. The following
+      procedure should be used to generate triples when an <tref>item</tref> property has more than one value
+      (contained in <em>list</em>):
+    </p>
+    <ol class="algorithm">
+      <li>
+        Create a new array <em>array</em> containing a <tref>blank node</tref> for every value in <em>list</em>.
+      </li>
+      <li>
+        For each pair of <em>bnode</em> and <em>value</em> from <em>array</em> and <em>list</em> the following
+        triple is generated:
+        <dl class="triple">
+          <dt>subject</dt>
+          <dd><em>bnode</em></dd>
+          <dt>predicate</dt>
+          <dd><code>http://www.w3.org/1999/02/22-rdf-syntax-ns#first</code></dd>
+          <dt>object</dt>
+          <dd><em>value</em></dd>
+        </dl>
+      </li>
+      <li>
+        For each <em>bnode</em> in <em>array</em> the following triple is generated:
+        <dl class="triple">
+          <dt>subject</dt>
+          <dd><em>bnode</em></dd>
+          <dt>predicate</dt>
+          <dd><code>http://www.w3.org/1999/02/22-rdf-syntax-ns#rest</code></dd>
+          <dt>object</dt>
+          <dd>
+            next element in <em>array</em> or, if that does not exist,
+            <code>http://www.w3.org/1999/02/22-rdf-syntax-ns#nil</code>
+          </dd>
+        </dl>
+      </li>
+      <li>
+        Return the first <tref>blank node</tref> from <em>array</em>.
+      </li>
+    </ol>
+  </section>
+</section>
+
+<section class="appendix">
+<h2>Markup Examples</h2>
+
+<p>The Microdata example below expresses book information as an FRBR Work item.</p>
+
+<pre class="example" data-transform="updateExample">
+<!--
+<dl itemscope
+    itemtype="http://purl.org/vocab/frbr/core#Work"
+    itemid="http://purl.oreilly.com/works/45U8QJGZSQKDH8N"
+    lang="en">
+ <dt>Title</dt>
+ <dd><cite itemprop="http://purl.org/dc/terms/title">Just a Geek</cite></dd>
+ <dt>By</dt>
+ <dd><span itemprop="http://purl.org/dc/terms/creator">Wil Wheaton</span></dd>
+ <dt>Format</dt>
+ <dd itemprop="realization"
+     itemscope
+     itemtype="http://purl.org/vocab/frbr/core#Expression"
+     itemid="http://purl.oreilly.com/products/9780596007683.BOOK">
+  <link itemprop="http://purl.org/dc/terms/type" href="http://purl.oreilly.com/product-types/BOOK">
+  Print
+ </dd>
+ <dd itemprop="realization"
+     itemscope
+     itemtype="http://purl.org/vocab/frbr/core#Expression"
+     itemid="http://purl.oreilly.com/products/9780596802189.EBOOK">
+  <link itemprop="http://purl.org/dc/terms/type" href="http://purl.oreilly.com/product-types/EBOOK">
+  Ebook
+ </dd>
+</dl>
+-->
+</pre>
+
+<p>Assuming that <tref>registry</tref> contains a an entry for <code>http://purl.org/vocab/frbr/core#</code>
+  with <tref><code>propertyURI</code></tref> set to <code>vocabulary</code>,
+  this is equivalent to the following Turtle:</p>
+<pre class="example" data-transform="updateExample">
+<!--
+@base <http://books.example.com/> .
+@prefix dc: <http://purl.org/dc/terms/> .
+@prefix md: <http://www.w3.org/1999/xhtml/microdata#> .
+@prefix frbr: <http://purl.org/vocab/frbr/core#> .
+
+<> md:item <works/45U8QJGZSQKDH8N> .
+
+<works/45U8QJGZSQKDH8N> a frbr:Work ;
+  dc:creator "Wil Wheaton"@en ;
+  dc:title "Just a Geek"@en ;
+  frbr:realization (
+    <products/9780596007683.BOOK>
+    <products/9780596802189.EBOOK>
+  ) .
+
+<products/9780596007683.BOOK> a frbr:Expression ;
+  dc:type <product-types/BOOK> .
+
+<products/9780596802189.EBOOK> a frbr:Expression ;
+  dc:type <product-types/EBOOK> .
+-->
+</pre>
+
+<p>The following snippet of HTML has microdata for two people with the same address:</p>
+<pre class="example" data-transform="updateExample">
+<!--
+<p>
+ Both
+ <span itemscope itemtype="http://microformats.org/profile/hcard#" itemref="home">
+   <span itemprop="fn"
+       ><span itemprop="n" itemscope
+       ><span itemprop="given-name">Princeton</span></span></span>
+  </span>
+ and
+ <span itemscope itemtype="http://microformats.org/profile/hcard#" itemref="home">
+   <span itemprop="fn"
+     ><span itemprop="n" itemscope
+       ><span itemprop="given-name">Trekkie</span></span></span>
+  </span>
+ live at
+ <span id="home" itemprop="adr" itemscope>
+   <span itemprop="street-address">Avenue Q</span>.
+ </span>
+</p>
+-->
+</pre>
+
+<p>Assuming that <tref>registry</tref> contains a an entry for <code>http://microformats.org/profile/hcard</code>
+  with <tref><code>propertyURI</code></tref> set to <code>type</code>,
+  it generates these triples expressed in Turtle:</p>
+
+<pre class="example" data-transform="updateExample">
+<!--
+@prefix md: <http://www.w3.org/1999/xhtml/microdata#> .
+@prefix hcard: <http://microformats.org/profile/hcard#> .
+
+<> md:item
+  [ a hcard:;
+    hcard:fn "Princeton";
+    hcard:n [ hcard:given-name "Princeton" ];
+    hcard:adr _:a
+  ],
+  [ a hcard:;
+    hcard:fn "Trekkie";
+    hcard:n [ hcard:given-name "Trekkie" ];
+    hcard:adr _:a
+  ] .
+
+_:a hcard:street-address "Avenue Q" .
+-->
+</pre>
+
+</section>
+
+<section class="appendix informative">
+  <h1>Acknowledgements</h1>
+  <p>Thanks to Richard Cyganiak for property URI and vocabulary terminology and the general excellent
+    consideration of practical problems in generating RDF from Microdata.</p>
+</section>
+
+</body>
+</html>