--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ED/microdata-rdf/20120107/index.html Sat Jan 07 15:37:39 2012 -0800
@@ -0,0 +1,1813 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
+<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
+<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,
+ -->
+
+
+
+<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 !important;
+}
+
+.aref {
+ font-family: monospace;
+ font-weight: bold;
+ color: #ff4500 !important;
+}
+
+span.entity { color: red; }
+
+span.element { color: green; }
+</style>
+<style type="text/css">
+/*****************************************************************
+ * ReSpec CSS
+ * Robin Berjon (robin at berjon dot com)
+ * v0.05 - 2009-07-31
+ *****************************************************************/
+
+
+/* --- INLINES --- */
+em.rfc2119 {
+ text-transform: lowercase;
+ font-variant: small-caps;
+ font-style: normal;
+ color: #900;
+}
+
+h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
+h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
+ border: none;
+}
+
+dfn {
+ font-weight: bold;
+}
+
+a.internalDFN {
+ color: inherit;
+ border-bottom: 1px solid #99c;
+ text-decoration: none;
+}
+
+a.externalDFN {
+ color: inherit;
+ border-bottom: 1px dotted #ccc;
+ text-decoration: none;
+}
+
+a.bibref {
+ text-decoration: none;
+}
+
+code {
+ color: #ff4500;
+}
+
+
+/* --- WEB IDL --- */
+pre.idl {
+ border-top: 1px solid #90b8de;
+ border-bottom: 1px solid #90b8de;
+ padding: 1em;
+ line-height: 120%;
+}
+
+pre.idl::before {
+ content: "WebIDL";
+ display: block;
+ width: 150px;
+ background: #90b8de;
+ color: #fff;
+ font-family: initial;
+ padding: 3px;
+ font-weight: bold;
+ margin: -1em 0 1em -1em;
+}
+
+.idlType {
+ color: #ff4500;
+ font-weight: bold;
+ text-decoration: none;
+}
+
+/*.idlModule*/
+/*.idlModuleID*/
+/*.idlInterface*/
+.idlInterfaceID, .idlDictionaryID {
+ font-weight: bold;
+ color: #005a9c;
+}
+
+.idlSuperclass {
+ font-style: italic;
+ color: #005a9c;
+}
+
+/*.idlAttribute*/
+.idlAttrType, .idlFieldType, .idlMemberType {
+ color: #005a9c;
+}
+.idlAttrName, .idlFieldName, .idlMemberName {
+ color: #ff4500;
+}
+.idlAttrName a, .idlFieldName a, .idlMemberName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlMethod*/
+.idlMethType {
+ color: #005a9c;
+}
+.idlMethName {
+ color: #ff4500;
+}
+.idlMethName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlParam*/
+.idlParamType {
+ color: #005a9c;
+}
+.idlParamName {
+ font-style: italic;
+}
+
+.extAttr {
+ color: #666;
+}
+
+/*.idlConst*/
+.idlConstType {
+ color: #005a9c;
+}
+.idlConstName {
+ color: #ff4500;
+}
+.idlConstName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlException*/
+.idlExceptionID {
+ font-weight: bold;
+ color: #c00;
+}
+
+.idlTypedefID, .idlTypedefType {
+ color: #005a9c;
+}
+
+.idlRaises, .idlRaises a.idlType, .idlRaises a.idlType code, .excName a, .excName a code {
+ color: #c00;
+ font-weight: normal;
+}
+
+.excName a {
+ font-family: monospace;
+}
+
+.idlRaises a.idlType, .excName a.idlType {
+ border-bottom: 1px dotted #c00;
+}
+
+.excGetSetTrue, .excGetSetFalse, .prmNullTrue, .prmNullFalse, .prmOptTrue, .prmOptFalse {
+ width: 45px;
+ text-align: center;
+}
+.excGetSetTrue, .prmNullTrue, .prmOptTrue { color: #0c0; }
+.excGetSetFalse, .prmNullFalse, .prmOptFalse { color: #c00; }
+
+.idlImplements a {
+ font-weight: bold;
+}
+
+dl.attributes, dl.methods, dl.constants, dl.fields, dl.dictionary-members {
+ margin-left: 2em;
+}
+
+.attributes dt, .methods dt, .constants dt, .fields dt, .dictionary-members dt {
+ font-weight: normal;
+}
+
+.attributes dt code, .methods dt code, .constants dt code, .fields dt code, .dictionary-members dt code {
+ font-weight: bold;
+ color: #000;
+ font-family: monospace;
+}
+
+.attributes dt code, .fields dt code, .dictionary-members dt code {
+ background: #ffffd2;
+}
+
+.attributes dt .idlAttrType code, .fields dt .idlFieldType code, .dictionary-members dt .idlMemberType code {
+ color: #005a9c;
+ background: transparent;
+ font-family: inherit;
+ font-weight: normal;
+ font-style: italic;
+}
+
+.methods dt code {
+ background: #d9e6f8;
+}
+
+.constants dt code {
+ background: #ddffd2;
+}
+
+.attributes dd, .methods dd, .constants dd, .fields dd, .dictionary-members dd {
+ margin-bottom: 1em;
+}
+
+table.parameters, table.exceptions {
+ border-spacing: 0;
+ border-collapse: collapse;
+ margin: 0.5em 0;
+ width: 100%;
+}
+table.parameters { border-bottom: 1px solid #90b8de; }
+table.exceptions { border-bottom: 1px solid #deb890; }
+
+.parameters th, .exceptions th {
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+ font-family: initial;
+ font-weight: normal;
+ text-shadow: #666 1px 1px 0;
+}
+.parameters th { background: #90b8de; }
+.exceptions th { background: #deb890; }
+
+.parameters td, .exceptions td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+ vertical-align: top;
+}
+
+.parameters tr:first-child td, .exceptions tr:first-child td {
+ border-top: none;
+}
+
+.parameters td.prmName, .exceptions td.excName, .exceptions td.excCodeName {
+ width: 100px;
+}
+
+.parameters td.prmType {
+ width: 120px;
+}
+
+table.exceptions table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ width: 100%;
+}
+
+/* --- TOC --- */
+.toc a {
+ text-decoration: none;
+}
+
+a .secno {
+ color: #000;
+}
+
+/* --- TABLE --- */
+table.simple {
+ border-spacing: 0;
+ border-collapse: collapse;
+ border-bottom: 3px solid #005a9c;
+}
+
+.simple th {
+ background: #005a9c;
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+}
+
+.simple th[scope="row"] {
+ background: inherit;
+ color: inherit;
+ border-top: 1px solid #ddd;
+}
+
+.simple td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+}
+
+.simple tr:nth-child(even) {
+ background: #f0f6ff;
+}
+
+/* --- DL --- */
+.section dd > p:first-child {
+ margin-top: 0;
+}
+
+.section dd > p:last-child {
+ margin-bottom: 0;
+}
+
+.section dd {
+ margin-bottom: 1em;
+}
+
+.section dl.attrs dd, .section dl.eldef dd {
+ margin-bottom: 0;
+}
+
+/* --- EXAMPLES --- */
+pre.example {
+ border-top: 1px solid #ff4500;
+ border-bottom: 1px solid #ff4500;
+ padding: 1em;
+ margin-top: 1em;
+}
+
+pre.example::before {
+ content: "Example";
+ display: block;
+ width: 150px;
+ background: #ff4500;
+ color: #fff;
+ font-family: initial;
+ padding: 3px;
+ font-weight: bold;
+ margin: -1em 0 1em -1em;
+}
+
+/* --- EDITORIAL NOTES --- */
+.issue {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #f00;
+ background: #ffc;
+}
+
+.issue::before {
+ content: "Issue";
+ display: block;
+ width: 150px;
+ margin: -1.5em 0 0.5em 0;
+ font-weight: bold;
+ border: 1px solid #f00;
+ background: #fff;
+ padding: 3px 1em;
+}
+
+.note {
+ margin: 1em 0em 0em;
+ padding: 1em;
+ border: 2px solid #cff6d9;
+ background: #e2fff0;
+}
+
+.note::before {
+ content: "Note";
+ display: block;
+ width: 150px;
+ margin: -1.5em 0 0.5em 0;
+ font-weight: bold;
+ border: 1px solid #cff6d9;
+ background: #fff;
+ padding: 3px 1em;
+}
+
+/* --- Best Practices --- */
+div.practice {
+ border: solid #bebebe 1px;
+ margin: 2em 1em 1em 2em;
+}
+
+span.practicelab {
+ margin: 1.5em 0.5em 1em 1em;
+ font-weight: bold;
+ font-style: italic;
+}
+
+span.practicelab { background: #dfffff; }
+
+span.practicelab {
+ position: relative;
+ padding: 0 0.5em;
+ top: -1.5em;
+}
+
+p.practicedesc {
+ margin: 1.5em 0.5em 1em 1em;
+}
+
+@media screen {
+ p.practicedesc {
+ position: relative;
+ top: -2em;
+ padding: 0;
+ margin: 1.5em 0.5em -1em 1em;
+ }
+}
+
+/* --- SYNTAX HIGHLIGHTING --- */
+pre.sh_sourceCode {
+ background-color: white;
+ color: black;
+ font-style: normal;
+ font-weight: normal;
+}
+
+pre.sh_sourceCode .sh_keyword { color: #005a9c; font-weight: bold; } /* language keywords */
+pre.sh_sourceCode .sh_type { color: #666; } /* basic types */
+pre.sh_sourceCode .sh_usertype { color: teal; } /* user defined types */
+pre.sh_sourceCode .sh_string { color: red; font-family: monospace; } /* strings and chars */
+pre.sh_sourceCode .sh_regexp { color: orange; font-family: monospace; } /* regular expressions */
+pre.sh_sourceCode .sh_specialchar { color: #ffc0cb; font-family: monospace; } /* e.g., \n, \t, \\ */
+pre.sh_sourceCode .sh_comment { color: #A52A2A; font-style: italic; } /* comments */
+pre.sh_sourceCode .sh_number { color: purple; } /* literal numbers */
+pre.sh_sourceCode .sh_preproc { color: #00008B; font-weight: bold; } /* e.g., #include, import */
+pre.sh_sourceCode .sh_symbol { color: blue; } /* e.g., *, + */
+pre.sh_sourceCode .sh_function { color: black; font-weight: bold; } /* function calls and declarations */
+pre.sh_sourceCode .sh_cbracket { color: red; } /* block brackets (e.g., {, }) */
+pre.sh_sourceCode .sh_todo { font-weight: bold; background-color: #00FFFF; } /* TODO and FIXME */
+
+/* Predefined variables and functions (for instance glsl) */
+pre.sh_sourceCode .sh_predef_var { color: #00008B; }
+pre.sh_sourceCode .sh_predef_func { color: #00008B; font-weight: bold; }
+
+/* for OOP */
+pre.sh_sourceCode .sh_classname { color: teal; }
+
+/* line numbers (not yet implemented) */
+pre.sh_sourceCode .sh_linenum { display: none; }
+
+/* Internet related */
+pre.sh_sourceCode .sh_url { color: blue; text-decoration: underline; font-family: monospace; }
+
+/* for ChangeLog and Log files */
+pre.sh_sourceCode .sh_date { color: blue; font-weight: bold; }
+pre.sh_sourceCode .sh_time, pre.sh_sourceCode .sh_file { color: #00008B; font-weight: bold; }
+pre.sh_sourceCode .sh_ip, pre.sh_sourceCode .sh_name { color: #006400; }
+
+/* for Prolog, Perl... */
+pre.sh_sourceCode .sh_variable { color: #006400; }
+
+/* for LaTeX */
+pre.sh_sourceCode .sh_italics { color: #006400; font-style: italic; }
+pre.sh_sourceCode .sh_bold { color: #006400; font-weight: bold; }
+pre.sh_sourceCode .sh_underline { color: #006400; text-decoration: underline; }
+pre.sh_sourceCode .sh_fixed { color: green; font-family: monospace; }
+pre.sh_sourceCode .sh_argument { color: #006400; }
+pre.sh_sourceCode .sh_optionalargument { color: purple; }
+pre.sh_sourceCode .sh_math { color: orange; }
+pre.sh_sourceCode .sh_bibtex { color: blue; }
+
+/* for diffs */
+pre.sh_sourceCode .sh_oldfile { color: orange; }
+pre.sh_sourceCode .sh_newfile { color: #006400; }
+pre.sh_sourceCode .sh_difflines { color: blue; }
+
+/* for css */
+pre.sh_sourceCode .sh_selector { color: purple; }
+pre.sh_sourceCode .sh_property { color: blue; }
+pre.sh_sourceCode .sh_value { color: #006400; font-style: italic; }
+
+/* other */
+pre.sh_sourceCode .sh_section { color: black; font-weight: bold; }
+pre.sh_sourceCode .sh_paren { color: red; }
+pre.sh_sourceCode .sh_attribute { color: #006400; }
+
+</style><link href="http://www.w3.org/StyleSheets/TR/W3C-WD" rel="stylesheet" type="text/css" charset="utf-8" /></head>
+
+<body style="display: inherit; "><div class="head"><p><a href="http://www.w3.org/"><img width="72" height="48" src="http://www.w3.org/Icons/w3c_home" alt="W3C" /></a></p><h1 class="title" id="title">Microdata to RDF</h1><h2 id="subtitle">Transformation from HTML+Microdata to RDF</h2><h2 id="w3c-working-draft-16-january-2012"><acronym title="World Wide Web Consortium">W3C</acronym> Working Draft 16 January 2012</h2><dl><dt>This version:</dt><dd><a href="http://www.w3.org/TR/2012/WD-microdata-rdf-20120116/">http://www.w3.org/TR/2012/WD-microdata-rdf-20120116/</a></dd><dt>Latest published version:</dt><dd><a href="http://www.w3.org/TR/microdata-rdf/">http://www.w3.org/TR/microdata-rdf/</a></dd><dt>Latest editor's draft:</dt><dd><a href="https://dvcs.w3.org/hg/htmldata/raw-file/default/microdata-rdf/index.html">https://dvcs.w3.org/hg/htmldata/raw-file/default/microdata-rdf/index.html</a></dd><dt>Editor:</dt><dd><a href="http://greggkellogg.net/">Gregg Kellogg</a>, Kellogg Associates</dd>
+<dt>Authors:</dt><dd><a href="mailto:ian@hixie.ch">Ian Hickson</a>, Google, Inc.</dd>
+<dd><a href="http://greggkellogg.net/">Gregg Kellogg</a>, Kellogg Associates</dd>
+<dd><a href="http://www.jenitennison.com/">Jeni Tennison</a>, Independent</dd>
+</dl><p class="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> © 2011-2012 <a href="http://www.w3.org/"><acronym title="World Wide Web Consortium">W3C</acronym></a><sup>®</sup> (<a href="http://www.csail.mit.edu/"><acronym title="Massachusetts Institute of Technology">MIT</acronym></a>, <a href="http://www.ercim.eu/"><acronym title="European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. <acronym title="World Wide Web Consortium">W3C</acronym> <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>, <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.</p><hr /></div>
+<div id="abstract" class="introductory section"><h2>Abstract</h2>
+ <p>HTML microdata [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>] is an extension to HTML used to embed machine-readable data into HTML documents.
+ Whereas the microdata specification describes a means of markup, the output format is JSON. This specification
+ describes processing rules that may be used to extract RDF [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>] from an HTML document containing
+ microdata.</p>
+</div><div id="sotd" class="introductory section"><h2>Status of This Document</h2><p><em>This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current <acronym title="World Wide Web Consortium">W3C</acronym> publications and the latest revision of this technical report can be found in the <a href="http://www.w3.org/TR/"><acronym title="World Wide Web Consortium">W3C</acronym> technical reports index</a> at http://www.w3.org/TR/.</em></p>
+<p>This document is an experimental work in progress. The concepts described herein are intended to help
+ provide guidance for a future working group. Implementations of this specification, either producers
+ or consumers, should note that it is likely to change significantly prior to any publication as a Working
+ Draft.</p>
+<p>This document was published by the <a href="http://www.w3.org/2001/sw/interest/">HTML Data Task Force, Semantic Web Interest Group</a> as a First Public Working Draft. If you wish to make comments regarding this document, please send them to <a href="mailto:public-html-data-tf@w3.org">public-html-data-tf@w3.org</a> (<a href="mailto:public-html-data-tf-request@w3.org?subject=subscribe">subscribe</a>, <a href="http://lists.w3.org/Archives/Public/public-html-data-tf/">archives</a>). All feedback is welcome.</p><p>Publication as a Working Draft does not imply endorsement by the <acronym title="World Wide Web Consortium">W3C</acronym> Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.</p><p>This document was produced by a group operating under the <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 <acronym title="World Wide Web Consortium">W3C</acronym> Patent Policy</a>. The group does not expect this document to become a <acronym title="World Wide Web Consortium">W3C</acronym> Recommendation. <acronym title="World Wide Web Consortium">W3C</acronym> maintains a <a href="" rel="disclosure">public list of any patent disclosures</a> made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section 6 of the <acronym title="World Wide Web Consortium">W3C</acronym> Patent Policy</a>.</p></div><div id="toc" class="section"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a><ul class="toc"><li class="tocline"><a href="#background" class="tocxref"><span class="secno">1.1 </span>Background</a></li><li class="tocline"><a href="#use-cases" class="tocxref"><span class="secno">1.2 </span>Use Cases</a></li><li class="tocline"><a href="#issues" class="tocxref"><span class="secno">1.3 </span>Issues</a></li></ul></li><li class="tocline"><a href="#attributes-and-syntax" class="tocxref"><span class="secno">2. </span>Attributes and Syntax</a></li><li class="tocline"><a href="#vocabulary-registry" class="tocxref"><span class="secno">3. </span>Vocabulary Registry</a><ul class="toc"><li class="tocline"><a href="#property-uri-generation" class="tocxref"><span class="secno">3.1 </span>Property URI Generation</a></li><li class="tocline"><a href="#value-ordering" class="tocxref"><span class="secno">3.2 </span>Value Ordering</a></li><li class="tocline"><a href="#value-typing" class="tocxref"><span class="secno">3.3 </span>Value Typing</a></li></ul></li><li class="tocline"><a href="#algorithm" class="tocxref"><span class="secno">4. </span>Algorithm</a><ul class="toc"><li class="tocline"><a href="#algorithm-terms" class="tocxref"><span class="secno">4.1 </span>Algorithm Terms</a></li><li class="tocline"><a href="#rdf-conversion-algorithm" class="tocxref"><span class="secno">4.2 </span>RDF Conversion Algorithm</a></li><li class="tocline"><a href="#generate-the-triples" class="tocxref"><span class="secno">4.3 </span>Generate the triples</a></li><li class="tocline"><a href="#generate-predicate-uri" class="tocxref"><span class="secno">4.4 </span>Generate Predicate URI</a></li><li class="tocline"><a href="#generate-property-values" class="tocxref"><span class="secno">4.5 </span>Generate Property Values</a></li><li class="tocline"><a href="#generate-collection" class="tocxref"><span class="secno">4.6 </span>Generate RDF Collection</a></li></ul></li><li class="tocline"><a href="#markup-examples" class="tocxref"><span class="secno">A. </span>Markup Examples</a></li><li class="tocline"><a href="#example-registry" class="tocxref"><span class="secno">B. </span>Example <span class="tref internalDFN formerLink tref internalDFN" title="registry">registry</span></a><ul class="toc"><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">B.1 </span>Acknowledgements</a></li></ul></li><li class="tocline"><a href="#references" class="tocxref"><span class="secno">C. </span>References</a><ul class="toc"><li class="tocline"><a href="#normative-references" class="tocxref"><span class="secno">C.1 </span>Normative references</a></li><li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">C.2 </span>Informative references</a></li></ul></li></ul></div>
+
+
+
+<div class="informative section" id="introduction">
+
+<!-- OddPage -->
+<h2><span class="secno">1. </span>Introduction</h2><p><em>This section is non-normative.</em></p>
+ <p>This document describes a means of transforming HTML containing microdata into RDF. HTML Microdata [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>]
+ is an extension to HTML used to embed machine-readable data to HTML documents. This specification describes
+ transformation directly to RDF [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].</p>
+ <div class="note">
+ <p>There are a variety of ways in which a mapping from microdata to
+ RDF might be configured to give a result that is closer to the required result for a particular vocabulary. This
+ specification defines terms that can be used as hooks for vocabulary-specific behavior, which could be defined
+ within a <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> or on an implementation-defined basis. However, the HTML Data TF recommends the
+ adoption of a single method of mapping in which every vocabulary is treated as if:</p>
+ <ul>
+ <li><a class="tref internalDFN" title="propertyuri" href="#dfn-propertyuri"><code>propertyURI</code></a> is set to <code>vocabulary</code> </li>
+ <li><a class="tref internalDFN" title="multiplevalues" href="#dfn-multiplevalues"><code>multipleValues</code></a> is set to <code>unordered</code></li>
+ </ul>
+ <p>For background on the trade-offs between these options, see
+ <a href="http://www.w3.org/wiki/Mapping_Microdata_to_RDF">http://www.w3.org/wiki/Mapping_Microdata_to_RDF</a>.</p>
+ </div>
+<div class="informative section" id="background">
+ <h3><span class="secno">1.1 </span>Background</h3><p><em>This section is non-normative.</em></p>
+ <p>Microdata [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>] is a way of embedding data in HTML documents
+ using attributes. The HTML DOM is extended to provide an API for
+ accessing microdata information, and the microdata specification
+ defines how to generate a JSON representation from microdata markup.</p>
+
+ <p>Mapping microdata to RDF enables consumers to merge data expressed
+ in other RDF-based formats with microdata. It facilitates the use of
+ RDF vocabularies within microdata, and enables microdata to be used
+ with the full RDF toolchain. Some use cases for this mapping are
+ described in <a href="use-cases">Section 1.2</a> below.</p>
+
+ <p>Microdata's data model does not align neatly with RDF.</p>
+ <ul>
+ <li>Non-URL microdata properties are disambiguated based on microdata
+ <a class="tref internalDFN" title="item_type" href="#dfn-item_type">item type</a>; an <a class="tref internalDFN" title="item" href="#dfn-item">item</a> with the type <code>http://example.org/Cat</code> can have
+ both the property <code>color</code> and the property <code>http://example.org/color</code>,
+ and these properties are semantically distinct under microdata. In
+ RDF, all properties have IRIs.</li>
+
+ <li>When an item has multiple properties with the same name, the values are
+ always ordered; in RDF, property values are unordered unless they
+ are explicitly listed in an <a class="tref internalDFN" title="rdf_collection" href="#dfn-rdf_collection">RDF Collection</a>.</li>
+
+ <li>A value in microdata is always a simple string which is interpreted
+ by the consuming application. In RDF, values can be tagged with a
+ datatype or a language. According to the microdata specification, the
+ HTML context of microdata markup should not change how microdata is
+ interpreted, so although element names and HTML <code>@lang</code> attributes could
+ be used to provide datatype and language information for RDF data, this
+ would be contrary to the microdata specification.</li>
+ </ul>
+
+ <p>Thus, in some places the needs of RDF consumers violate requirements of
+ the microdata specification. This specification highlights where such
+ violations occur and the reasons for them.</p>
+
+ <p>This specification allows for
+ <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabulary</a>-specific rules that affect the generation of property URIs and value serializations.
+ This is facilitated by a <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> that associates URIs with specific rules based on matching
+ <a class="aref internalDFN" title="itemtype" href="#dfn-itemtype">@itemtype</a> values against registered URI prefixes do determine a vocabulary and potentially
+ vocabulary-specific processing rules.</p>
+
+ <p>This specification also assumes that consumers of RDF generated from
+ microdata may have to process the results in order to, for example,
+ assign appropriate datatypes to <a class="tref internalDFN" title="property_value" href="#dfn-property_value">property value</a>s.</p>
+</div>
+
+<div class="informative section" id="use-cases">
+ <h3><span class="secno">1.2 </span>Use Cases</h3><p><em>This section is non-normative.</em></p>
+ <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 <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabulary</a> 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 <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabulary</a> 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 <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabulary</a>.</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> properties do not take
+ <a href="#rdf-collection">rdf:List</a> values; when they take
+ multiple values they are unordered. The <code>rdfs:range</code> of a GoodRelations
+ property indicates the datatype of the expected value, and GoodRelations
+ processors will expect values to be cast to that type. Language
+ information from the HTML needs to be captured as it is common that
+ multiple values will be used to specify the same information in different
+ languages.</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>
+</div>
+
+<div class="informative section" id="issues">
+ <h3><span class="secno">1.3 </span>Issues</h3><p><em>This section is non-normative.</em></p>
+ <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="http://www.w3.org/2011/htmldata/track/issues/1">ISSUE 1</a></dt><dd>
+ Vocabulary specific parsing for Microdata. This specification attempts to create generic
+ rules for processing microdata with typical RDF vocabularies. A <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> allows
+ for exceptions to the default processing rules for certain well-known vocabularies.
+ </dd>
+ <dt><a href="http://www.w3.org/2011/htmldata/track/issues/2">ISSUE 2</a></dt><dd>
+ Should Microdata-RDF generate XMLLiteral values. This issue has been closed with no change
+ as this would violate microdata's data model.
+ </dd>
+ <dt><a href="http://www.w3.org/2011/htmldata/track/issues/3">ISSUE 3</a></dt><dd>
+ Should the <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> allow property datatype specification. The consensus is that datatypes are only derived from HTML semantics, so that only <time> values have a datatype other than plain.
+ </time></dd>
+ <dt><a href="http://www.w3.org/2011/htmldata/track/issues/4">ISSUE 4</a></dt><dd>
+ Should the <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> allow a <a class="tref internalDFN" title="name" href="#dfn-name">name</a> or URL to be used as an alias for <a class="aref internalDFN" title="itemid" href="#dfn-itemid">@itemid</a>.
+ </dd>
+ </dl>
+
+ <p>The purpose of this specification is to provide input to a future working group that can make decisions
+ about the need for a <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> 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
+ <cite><a href="http://tools.ietf.org/html/rfc3986#section-3.5">fragment</a></cite> made up of the in-scope <a class="tref internalDFN" title="item_type" href="#dfn-item_type">item
+ type</a> and <a class="tref internalDFN" title="properties" href="#dfn-properties">properties</a>.</li>
+ <li>Vocabulary-based URI generation, where the <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabulary</a> is determined from the
+ in-scope <a class="tref internalDFN" title="item_type" href="#dfn-item_type">item type</a>, either through an algorithmic modification of the type URL or by matching the
+ URL against a <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a>. The vocabulary URI is then used to generate property URIs in a namespace
+ parallel to the type URI.</li>
+ <li>When there are multiple <a class="tref internalDFN" title="top-level_item" href="#dfn-top-level_item">top-level item</a>s 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/ns/md#item</code> mapping at all.</li>
+ <li>When an item has multiple values for a given <a class="tref internalDFN" title="property" href="#dfn-property">property</a>, place the values 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>
+</div>
+</div>
+
+<div id="attributes-and-syntax" class="section">
+
+<!-- OddPage -->
+<h2><span class="secno">2. </span>Attributes and Syntax</h2>
+ <p>
+ The microdata specification [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>] defines a number of attributes and the way in which those
+ attributes are to be interpreted. The
+ <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#microdata-dom-api">microdata DOM API</a></cite>
+ provides methods and attributes for retrieving microdata from the HTML DOM.
+ </p><p>For reference, attributes used for specifying and retrieving HTML microdata are referenced here:</p>
+ <dl>
+ <dt><dfn class="adef" title="itemid" id="dfn-itemid">itemid</dfn></dt><dd>
+ An attribute containing a URL used to identify the subject of triples associated with this <a class="tref internalDFN" title="item" href="#dfn-item">item</a>.
+ (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#attr-itemid">Items</a></cite>
+ in [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>]).
+ </dd>
+ <dt><dfn class="adef" title="itemprop" id="dfn-itemprop">itemprop</dfn></dt><dd>
+ An attribute used to identify one or more <a class="tref internalDFN" title="name" href="#dfn-name">name</a>s of an <a class="tref internalDFN" title="item" href="#dfn-item">item</a>s. An <a class="aref internalDFN" title="itemprop" href="#dfn-itemprop">@itemprop</a>
+ contains a space separated list of <dfn title="name" id="dfn-name">name</dfn>s which may either by <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a>s or terms
+ associated with the type of the <a class="tref internalDFN" title="item" href="#dfn-item">item</a> as defined by the referencing <trdf>item</trdf>'s
+ <a class="tref internalDFN" title="item_type" href="#dfn-item_type">item type</a>.
+ (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#attr-itemprop">Items</a></cite>
+ in [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>]).
+ </dd>
+ <dt><dfn class="adef" title="itemref" id="dfn-itemref">itemref</dfn></dt><dd>
+ An additional attribute on an element that references additional elements containing property
+ definitions to be applied to the referencing <a class="tref internalDFN" title="item" href="#dfn-item">item</a>.
+ (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#attr-itemref">Items</a></cite>
+ in [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>]).
+ </dd>
+ <dt><dfn class="adef" title="itemscope" id="dfn-itemscope">itemscope</dfn></dt><dd>
+ An boolean attribute identifying an element as an <a class="tref internalDFN" title="item" href="#dfn-item">item</a>.
+ (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#attr-itemscope">Items</a></cite>
+ in [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>]).
+ </dd>
+ <dt><dfn class="adef" title="itemtype" id="dfn-itemtype">itemtype</dfn></dt><dd>
+ An additional attribute on an element used to specify one or more types of an <a class="tref internalDFN" title="item" href="#dfn-item">item</a>.
+ The <dfn title="item_type" id="dfn-item_type">item type</dfn> of an <a class="tref internalDFN" title="item" href="#dfn-item">item</a> is the first value returned from
+ <code><cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#dom-itemtype">element.itemType</a></cite></code>
+ on the element.
+ The <a class="tref internalDFN" title="item_type" href="#dfn-item_type">item type</a> is also used to resolve non-URL <a class="tref internalDFN" title="name" href="#dfn-name">name</a>s to <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a>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><cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#dom-itemtype">element.itemType</a></cite></code>.
+ (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#attr-itemtype">Items</a></cite>
+ in [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>]).
+ </dd>
+ </dl>
+ <p>In RDF, it is common for people to shorten vocabulary terms via abbreviated URIs that use a 'prefix'
+ and a 'reference'. throughout this document assume that the following vocabulary
+ prefixes have been defined:</p>
+ <table><tbody>
+ <tr>
+ <td>dc:</td>
+ <td>http://purl.org/dc/terms/</td>
+ </tr>
+
+ <tr>
+ <td>md:</td>
+ <td>
+ http://www.w3.org/ns/md#</td>
+ </tr>
+
+ <tr>
+ <td>rdf:</td>
+ <td>
+ http://www.w3.org/1999/02/22-rdf-syntax-ns#</td>
+ </tr>
+
+ <tr>
+ <td>rdfs:</td>
+ <td>
+ http://www.w3.org/2000/01/rdf-schema#</td>
+ </tr>
+
+ <tr>
+ <td>xsd:</td>
+ <td>http://www.w3.org/2001/XMLSchema#</td>
+ </tr>
+ </tbody></table>
+</div>
+
+<div class="informative section" id="vocabulary-registry">
+
+<!-- OddPage -->
+<h2><span class="secno">3. </span>Vocabulary Registry</h2><p><em>This section is non-normative.</em></p>
+ <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 <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabulary</a>. However, microdata doesn't
+ provide sufficient syntactic help in making these decisions. Different vocabularies have different
+ needs.</p>
+ <p>The registry is located at the namespace defined for microdata: <code>http://www.w3.org/ns/md</code> in
+ a variety of formats.</p>
+ <p>The <dfn title="registry" id="dfn-registry">registry</dfn> associates a <dfn title="uri_prefix" id="dfn-uri_prefix">URI prefix</dfn> 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">{
+ "http://schema.org/": {
+ "propertyURI": "vocabulary",
+ "multipleValues": "unordered",
+ "properties": {
+ "tracks": {"multipleValues": "list"}
+ }
+ },
+ "http://microformats.org/profile/hcard": {
+ "propertyURI": "vocabulary",
+ "multipleValues": "list",
+ "properties" {
+ "url": {"multipleValues": "unordered"}
+ }
+ }
+}</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 <a class="tref internalDFN" title="item_type" href="#dfn-item_type">item type</a> with a <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI
+ prefix</a> from this <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> use the the rules described for that prefix within the scope of that
+ <a class="tref internalDFN" title="item_type" href="#dfn-item_type">item type</a>. This mapping currently defines two rules: <a class="tref internalDFN" title="propertyuri" href="#dfn-propertyuri"><code>propertyURI</code></a> and
+ <a class="tref internalDFN" title="multiplevalues" href="#dfn-multiplevalues"><code>multipleValues</code></a> with values to indicate specific behavior. It also allows overrides
+ on a per-property basis; the <a class="tref internalDFN" title="properties" href="#dfn-properties"><code>properties</code></a> key associates an individual <a class="tref internalDFN" title="name" href="#dfn-name">name</a>
+ with overrides for default behavior.
+ The interpretation of these
+ rules is defined in the following sections. If an item has no <a class="tref internalDFN" title="current_type" href="#dfn-current_type">current type</a> or the
+ <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> contains no <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a> matching <a class="tref internalDFN" title="current_type" href="#dfn-current_type">current type</a>, a conforming
+ processor <em class="rfc2119" title="must">must</em> use the default values defined for these rules.</p>
+ <p class="note">The concept of a <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a>, including a hypothetical format, location and updating rules
+ is presented as an abstract concept useful for describing the function of a microdata processor.
+ There are issues surrounding update
+ frequency, URL naming, and how updates are authorized. This spec
+ just considers the semantic content of such a <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> and how it can be used to affect processing without
+ defining its representation or update policies.</p>
+ <p class="issue">Richard Ciganiak has
+ <cite><a href="http://richard.cyganiak.de/2011/10/microdata.html#whitelists">pointed out</a></cite> that
+ "Registry" may be the wrong term, as the proposed <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> doesn't assign identifiers or manage
+ namespace, it simply provides a mapping between <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a>ss and processor behavior and suggests the term
+ "Whitelist". As more than two values are required, and it describes more than binary behavior, this term
+ isn't appropriate either.</p>
+
+<div class="informative section" id="property-uri-generation">
+ <h3><span class="secno">3.1 </span>Property URI Generation</h3><p><em>This section is non-normative.</em></p>
+ <p>For <a class="tref internalDFN" title="name" href="#dfn-name">name</a>s which are not <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a>s,
+ the <dfn title="propertyuri" id="dfn-propertyuri"><code>propertyURI</code></dfn> rule defines the algorithm for generating an <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a>
+ given an <a class="tref internalDFN" title="evaluation_context" href="#dfn-evaluation_context">evaluation context</a> including a <a class="tref internalDFN" title="current_type" href="#dfn-current_type">current type</a>, <a class="tref internalDFN" title="current_name" href="#dfn-current_name">current name</a> and
+ <a class="tref internalDFN" title="current_vocabulary" href="#dfn-current_vocabulary">current vocabulary</a>.</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 <a class="tref internalDFN" title="propertyuri" href="#dfn-propertyuri"><code>propertyURI</code></a> are the following:</p>
+ <dl>
+ <dt><code>contextual</code></dt><dd>
+ The <code>contextual</code> URI generation scheme guarantees that generated property URIs are
+ unique based on the value of <a class="tref internalDFN" title="current_name" href="#dfn-current_name">current name</a>. This is
+ required as the microdata data model requires that <a class="tref internalDFN" title="name" href="#dfn-name">name</a>s are associated with specific
+ items and do not have a global scope. (See <a href="#scheme-context">Step 5</a> in
+ <a href="#generate-predicate-uri">Generate Predicate URI</a>).
+ <div>
+ <p>URI creation uses a base URI with query parameters to indicate the in-scope
+ type and <a class="tref internalDFN" title="name" href="#dfn-name">name</a> list. Consider the following example:</p>
+ <pre class="example"><span itemscope itemtype="http://microformats.org/profile/hcard">
+ <span itemprop="n" itemscope>
+ <span itemprop="given-name">
+ Princeton
+ </span>
+ </span>
+</span></pre>
+ <p>The first <a class="tref internalDFN" title="name" href="#dfn-name">name</a> <em>n</em> generates the URI
+ <code>http://www.w3.org/ns/md?type=http://microformats.org/profile/hcard?prop=n</code>.
+ However, the included <a class="tref internalDFN" title="name" href="#dfn-name">name</a> <em>given-name</em> is included in untyped item.
+ The inherited property URI is used to create a new property URI:
+ <code>http://www.w3.org/ns/md?type=http://microformats.org/profile/hcard?prop=n.given-name</code>.</p>
+ <p>This scheme is compatible with the needs of other RDF serialization formats such as
+ RDF/XML [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-SYNTAX-GRAMMAR">RDF-SYNTAX-GRAMMAR</a></cite>],
+ which rely on <em>QNames</em> for expressing properties. For example, the generated property URIs
+ can be split as follows:
+ </p><pre class="example"><rdf:Description xmlns:hcard="http://www.w3.org/ns/md?type=http://microformats.org/profile/hcard?prop="
+ rdf:type="http://microformats.org/profile/hcard">
+ <hcard:n>
+ <rdf:Description>
+ <hcard:n.given-name>
+ Princeton
+ </hcard:n.given-name>
+ </rdf:Description>
+ </hcard:n>
+</rdf:Description></pre>
+ <p>Looking at another example:</p>
+ <pre class="example"><div itemscope itemtype="http://schema.org/Person">
+ <h2 itemprop="name">Jeni</h2>
+</div></pre>
+ <p>This would generate <code>http://www.w3.org/ns/md?type=http://schema.org/Person&prop=name</code>.</p>
+ </div>
+ </dd>
+ <dt><code>vocabulary</code></dt><dd>
+ The <code>vocabulary</code> URI generation scheme appends <a class="tref internalDFN" title="name" href="#dfn-name">name</a>s that are not
+ <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a>s to the <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a>. When generating property URIs, if the <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a>
+ does not end with a '/' or '#', a '#' is appended to the <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a>. (See <a href="#scheme-vocab">Step 4</a>
+ in
+ <a href="#generate-predicate-uri">Generate Predicate URI</a>.)
+ <div>
+ <p>URI creation uses a base URL with query parameters to indicate the in-scope
+ type and <a class="tref internalDFN" title="name" href="#dfn-name">name</a> list. Consider the following example:</p>
+ <pre class="example"><span itemscope itemtype="http://microformats.org/profile/hcard">
+ <span itemprop="n" itemscope>
+ <span itemprop="given-name">
+ Princeton
+ </span>
+ </span>
+</span></pre>
+ <p>Given the <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a> <code>http://microformats.org/profile/hcard</code>, this
+ would generate <code>http://microformats.org/profile/hcard#n</code> and
+ <code>http://microformats.org/profile/hcard#given-name</code>. Note that the '#' is automatically
+ added as a separator.
+ </p><p>Looking at another example:</p>
+ <pre class="example"><div itemscope itemtype="http://schema.org/Person">
+ <h2 itemprop="name">Jeni</h2>
+</div></pre>
+ <p>Given the <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a> <code>http://schema.org/</code>,
+ this would generate <code>http://schema.org/name</code>. Note that if the <a class="aref internalDFN" title="itemtype" href="#dfn-itemtype">@itemtype</a>
+ were <code>http://schema.org/Person/Teacher</code>, this would generate the same property URI.</p>
+ </div>
+ </dd>
+ </dl>
+ <p>If the <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> contains no match for <a class="tref internalDFN" title="current_type" href="#dfn-current_type">current type</a> implementations act as if
+ there is a <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a> made from the first <a class="aref internalDFN" title="itemtype" href="#dfn-itemtype">@itemtype</a> value by stripping either the <cite><a href="http://tools.ietf.org/html/rfc3986#section-3.5">fragment</a></cite> content or <cite><a href="http://tools.ietf.org/html/rfc3986#section-3.3">last path segment</a></cite>, if the value has no fragment (See
+ [<cite><a class="bibref" rel="biblioentry" href="#bib-RFC3986">RFC3986</a></cite>]).</p>
+ <p class="note">Deconstructing the <a class="aref internalDFN" title="itemtype" href="#dfn-itemtype">@itemtype</a> URL to create or identify a vocabulary URI
+ is a violation of the microdata specification which is necessary to
+ support the use of existing vocabularies designed for use with RDF, and
+ shared or inherited properties within all vocabularies.</p>
+ <p>The default value of <a class="tref internalDFN" title="propertyuri" href="#dfn-propertyuri"><code>propertyURI</code></a> is <code>vocabulary</code>.</p>
+ <pre class="example"><div itemscope itemtype="http://schema.org/Book">
+ <h2 itemprop="title">Just a Geek</h2>
+</div></pre>
+ <p>In this example, assuming no matching entry in the <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a>,
+ the <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a> is constructed by removing the
+ <cite><a href="http://tools.ietf.org/html/rfc3986#section-3.3">last path segment</a></cite>, leaving the URI
+ <code>http://schema.org/</code>. As there is no explicit <a class="tref internalDFN" title="propertyuri" href="#dfn-propertyuri"><code>propertyURI</code></a>,
+ the default <code>vocabulary</code> is used, and the resulting property URI would be
+ <code>http://schema.org/title</code>.</p>
+</div>
+
+<div class="informative section" id="value-ordering">
+ <h3><span class="secno">3.2 </span>Value Ordering</h3><p><em>This section is non-normative.</em></p>
+ <p>For items having multiple values for a given <a class="tref internalDFN" title="property" href="#dfn-property">property</a>,
+ the <dfn title="multiplevalues" id="dfn-multiplevalues"><code>multipleValues</code></dfn> rule defines the algorithm for serializing these values.
+ Microdata uses document order when generating <a class="tref internalDFN" title="property_value" href="#dfn-property_value">property value</a>s, 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. In some cases, it may be useful to retain value ordering.</p>
+ <p>The procedure for generating <a class="tref internalDFN" title="property_value" href="#dfn-property_value">property value</a>s is defined in
+ <a href="#generate-property-values">Generate Property Values</a>.</p>
+ <p>Possible values for <a class="tref internalDFN" title="multiplevalues" href="#dfn-multiplevalues"><code>multipleValues</code></a> are the following:</p>
+ <dl>
+ <dt><code>unordered</code></dt><dd>
+ Values are serialized without ordering using a common subject and predicate.
+ (See <a href="#values-unordered">Step 7</a> in
+ <a href="#generate-property-values">Generate Property Values</a>).
+ </dd>
+ <dt><code>list</code></dt><dd>
+ Multi-valued <a class="aref internalDFN" title="itemprop" href="#dfn-itemprop">@itemprop</a>s are serialized using an <a class="tref internalDFN" title="rdf_collection" href="#dfn-rdf_collection">RDF Collection</a>.
+ (See <a href="#values-list">Step 8</a> in
+ <a href="#generate-property-values">Generate Property Values</a>).
+ </dd>
+ </dl>
+ <p>An example of how this might be specified in a <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> is the following:</p>
+ <pre class="example">{
+ "http://schema.org/": {
+ "propertyURI": "vocabulary",
+ <span class="diff">"multipleValues": "unordered"</span>
+ },
+ "http://microformats.org/profile/hcard": {
+ "propertyURI": "type",
+ <span class="diff">"multipleValues": {"multipleValues": "list"}</span>
+ }
+}</pre>
+ <p>Additionally, some vocabularies may wish to specify this on a per-property basis. For example,
+ within <code>http://schema.org/MusicPlaylist</code> the <code>tracks</code> property might depend on the order
+ of values to to reproduce associated <code>MusicRecording</code> values.</p>
+ <pre class="example">{
+ "http://schema.org/": {
+ "propertyURI": "vocabulary",
+ "multipleValues": "unordered"<span class="diff">,
+ "properties": {
+ "tracks": {"multipleValues": "list"}
+ }</span>
+ }
+}</pre>
+ <p>The <dfn title="properties" id="dfn-properties"><code>properties</code></dfn> key takes a JSON Object as a value, which in turn has keys for each
+ property that is to be given alternate semantics. Each <a class="tref internalDFN" title="name" href="#dfn-name">name</a> is implicitly expanded to it's URI
+ representation as defined in <a href="#generate-predicate-uri">Generate Predicate URI</a>, so that
+ the behavior is the same whether or not the <a class="tref internalDFN" title="name" href="#dfn-name">name</a> is listed as an <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a>.</p>
+ <p>The default value of <a class="tref internalDFN" title="multiplevalues" href="#dfn-multiplevalues"><code>multipleValues</code></a> is <code>unordered</code>.</p>
+ <div class="note">
+ <p>An alternative mechanism would output <em>both</em> unordered and ordered values, to allow an application
+ to choose the most useful representation. For example, consider the following:</p>
+<pre class="example"><div itemscope="" itemtype="http://schema.org/MusicPlaylist">
+ <span itemprop="name">Classic Rock Playlist</span>
+ <meta itemprop="numTracks" content="2"/>
+ <p>Including works by
+ <span itemprop="byArtist">Lynard Skynard</span> and
+ <span itemprop="byArtist">AC/DC</span></p>.
+
+ <div itemprop="tracks" itemscope="" itemtype="http://schema.org/MusicRecording">
+ 1.<span itemprop="name">Sweet Home Alabama</span> -
+ <span itemprop="byArtist">Lynard Skynard</span>
+ <link href="sweet-home-alabama" itemprop="url" />
+ </div>
+
+ <div itemprop="tracks" itemscope="" itemtype="http://schema.org/MusicRecording">
+ 2.<span itemprop="name">Shook you all Night Long</span> -
+ <span itemprop="byArtist">AC/DC</span>
+ <link href="shook-you-all-night-long" itemprop="url" />
+ </div>
+</div></pre>
+ <p>This might generate the following Turtle:</p>
+<pre class="example">@prefix md: <http://www.w3.org/ns/md#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix schema: <http://schema.org/> .
+
+<> md:item [ a schema:MusicPlaylist;
+ schema:name "Classic Rock Playlist";
+ schema:byArtist ("Lynard Skynard" "AC/DC");
+ schema:numTracks "2";
+ schema:tracks _:track1, _:track2, (_:track1 _:track2)
+] .
+_:track1 a schema:MusicRecording;
+ schema:byArtist ("Lynard Skynard");
+ schema:name "Sweet Home Alabama";
+ schema:url <sweet-home-alabama> .
+_:track2 a schema:MusicRecording;
+ schema:byArtist ("AC/DC");
+ schema:name "Shook you all Night Long";
+ schema:url <shook-you-all-night-long> .</pre>
+ <p>By providing both <code>_:track1</code> and <code>_:track2</code> as object values of the playlist
+ along with an RDF Collection containing the ordered values, the data may be queried via a simple
+ query using the playlist subject, or as an ordered collection.</p>
+ </div>
+</div>
+
+<div class="informative section" id="value-typing">
+ <h3><span class="secno">3.3 </span>Value Typing</h3><p><em>This section is non-normative.</em></p>
+ <p>In microdata, all values are strings. In RDF, values may be resources
+ or may be typed with an appropriate datatype.</p>
+ <p> In some cases, the type of a microdata value can be determined from the
+ element on which it is specified. In particular:</p>
+ <ul>
+ <li>URL property elements provide URLs</li>
+ <li><code>time</code> element provides dates and times</li>
+ </ul>
+ <p class="issue">Using information about the content of the document where the microdata
+ is marked up <em>might</em> be a violation of the spirit of the microdata specification, though it does not explicitly say in
+ normative text that consumers cannot use other information from the HTML DOM to interpret microdata.</p>
+
+ <p>Additionally, one possible use of a <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> would allow vocabularies to be marked with datatype information,
+ so that a <code>dc:time</code> value, for example, would be understood to represent a literal with datatype
+ <code>xsd:date</code>. This could be done by adding information for each property in the vocabulary requiring
+ special treatment.</p>
+ <p>This might be represented using a syntax such as the following:</p>
+ <pre class="example">{
+ "http://schema.org/": {
+ "propertyURI": "vocabulary",
+ "multipleValues": "unordered"<span class="diff">,
+ "properties": {
+ "dateCreated": {"datatype": "http://www.w3.org/2001/XMLSchema#date"}
+ }</span>
+ }
+}</pre>
+ <p>The <code>datatype</code> identifies a URI to be used in constructing a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a>.</p>
+
+ <p>In most cases, the relevant datatype for a value can be derived from
+ knowledge of what property the value is for and the syntax of the value
+ itself. Thus, values can be given datatypes in a post-processing step
+ after the mapping of microdata to RDF described by this specification.
+ However, where there is information in the HTML markup, such as knowledge
+ of what element was used to mark up the value, which can help with
+ determining its datatype, that information is used by this specification.</p>
+ <p>This concept is not explored further at this time, but could be developed further in
+ a future revision of this document.</p>
+</div>
+
+<p class="note">If property URI generation was fixed to <code>vocabulary</code>, multiple values always
+ generated both <code>unordered</code> and <code>ordered</code> representations, and there were <code>datatype</code>
+ support, the <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> could be reduced to a simple list of URLs without any further structure necessary.</p>
+</div>
+
+<div id="algorithm" class="section">
+
+<!-- OddPage -->
+<h2><span class="secno">4. </span>Algorithm</h2>
+ <p>
+ Transformation of Microdata to RDF makes use of general processing rules described in [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>]
+ for the treatment of <a class="tref internalDFN" title="item" href="#dfn-item">item</a>s.
+ </p>
+ <div id="algorithm-terms" class="section">
+ <h3><span class="secno">4.1 </span>Algorithm Terms</h3>
+ <dl>
+ <dt><dfn title="absolute_url" id="dfn-absolute_url">absolute URL</dfn></dt><dd>
+ The term <cite><a href="http://dev.w3.org/html5/spec/Overview.html#absolute-url">absolute URL</a></cite>
+ is defined in [<cite><a class="bibref" rel="biblioentry" href="#bib-HTML5">HTML5</a></cite>].
+ </dd>
+ <dt><dfn title="blank_node" id="dfn-blank_node">blank node</dfn></dt><dd>
+ A blank node is a node in a graph that is neither a <a class="tref internalDFN" title="uri_reference" href="#dfn-uri_reference">URI reference</a> nor a <a class="tref internalDFN" title="literal" href="#dfn-literal">literal</a>.
+ <a class="tref internalDFN" title="item" href="#dfn-item">Item</a>s without a <a class="tref internalDFN" title="global_identifier" href="#dfn-global_identifier">global identifier</a> have a blank node allocated to them.
+ (See [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>]).
+ </dd>
+ <dt><dfn title="document_base" id="dfn-document_base">document base</dfn></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">Resolving URLs</a></cite> in
+ [<cite><a class="bibref" rel="biblioentry" href="#bib-HTML5">HTML5</a></cite>].
+ </dd>
+ <dt><dfn title="evaluation_context" id="dfn-evaluation_context">evaluation context</dfn></dt><dd>
+ A data structure including the following elements:
+ <dl>
+ <dt><dfn title="memory" id="dfn-memory">memory</dfn></dt><dd>
+ a mapping of items to subjects, initially empty;
+ </dd>
+ <dt><dfn title="current_name" id="dfn-current_name">current name</dfn></dt><dd>
+ an <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a> for the in-scope <a class="tref internalDFN" title="name" href="#dfn-name">name</a>, used for generating URIs
+ for properties of items without an <a class="tref internalDFN" title="item_type" href="#dfn-item_type">item type</a>;
+ <div class="note">
+ <a class="tref internalDFN" title="current_name" href="#dfn-current_name">current name</a> is required for the <code>contextual</code> property URI generation
+ scheme. Without this scheme, this evaluation context component would not be required.
+ </div>
+ </dd>
+ <dt><dfn title="current_type" id="dfn-current_type">current type</dfn></dt><dd>
+ an <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a> for the <em>current type</em>, used when an <a class="tref internalDFN" title="item" href="#dfn-item">item</a> does not
+ contain an <a class="tref internalDFN" title="item_type" href="#dfn-item_type">item type</a>;
+ </dd>
+ <dt><dfn title="current_vocabulary" id="dfn-current_vocabulary">current vocabulary</dfn></dt><dd>
+ an <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a> for the <em>current vocabulary</em>, from the <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a>.
+ </dd>
+ </dl>
+ </dd>
+ <dt><dfn title="item" id="dfn-item">item</dfn></dt><dd>
+ An <a class="tref internalDFN" title="item" href="#dfn-item">item</a> is described by an element containing an <a class="aref internalDFN" title="itemscope" href="#dfn-itemscope">@itemscope</a> attribute. The list
+ of top-level microdata items may be retrieved using the
+ <a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#microdata-dom-api">Microdata DOM API</a>
+ <code><cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#dom-getitems">document.getItems</a></cite></code>
+ method.
+ </dd>
+ <dt><dfn title="item_properties" id="dfn-item_properties">item properties</dfn></dt><dd>
+ The mechanism for finding the <a class="tref internalDFN" title="item_properties" href="#dfn-item_properties">properties of an item</a> The list
+ of item properties items may be retrieved using the
+ <a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#microdata-dom-api">Microdata DOM API</a>
+ <code><cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#dom-properties">element.properties</a></cite></code>
+ attribute.
+ </dd>
+ <dt><dfn title="fragment-escape" id="dfn-fragment-escape">fragment-escape</dfn></dt><dd>
+ The term <cite><a href="http://dev.w3.org/html5/spec/Overview.html#fragment-escaped">fragment-escape</a></cite>
+ is defined in [<cite><a class="bibref" rel="biblioentry" href="#bib-HTML5">HTML5</a></cite>]. This involves transforming elements added to URLs to ensure that the result
+ remains a valid URL. The following characters are subject to percent escaping:
+ <ul>
+ <li>U+0022 QUOTATION MARK character (")</li>
+ <li>U+0023 NUMBER SIGN character (#)</li>
+ <li>U+0025 PERCENT SIGN character (%)</li>
+ <li>U+003C LESS-THAN SIGN character (<)</li>
+ <li>U+003E GREATER-THAN SIGN character (>)</li>
+ <li>U+005B LEFT SQUARE BRACKET character ([)</li>
+ <li>U+005C REVERSE SOLIDUS character (\)</li>
+ <li>U+005D RIGHT SQUARE BRACKET character (])</li>
+ <li>U+005E CIRCUMFLEX ACCENT character (^)</li>
+ <li>U+007B LEFT CURLY BRACKET character ({)</li>
+ <li>U+007C VERTICAL LINE character (|)</li>
+ <li>U+007D RIGHT CURLY BRACKET character (})</li>
+ </ul>
+ </dd>
+ <dt><dfn title="global_identifier" id="dfn-global_identifier">global identifier</dfn></dt><dd>
+ The value of an <a class="tref internalDFN" title="item" href="#dfn-item">item</a>'s <a class="aref internalDFN" title="itemid" href="#dfn-itemid">@itemid</a> attribute, if it has one. (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#attr-itemscope">Items</a></cite> in
+ [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>]).
+ </dd>
+ <dt><dfn title="literal" id="dfn-literal">literal</dfn></dt><dd>
+ Literals are values such as strings and dates, including <dfn title="typed_literal" id="dfn-typed_literal">typed literal</dfn>s and
+ <dfn title="plain_literal" id="dfn-plain_literal">plain literal</dfn>s.
+ (See [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>]).
+ </dd>
+ <dt><dfn title="property" id="dfn-property">property</dfn></dt><dd>
+ Each <a class="tref internalDFN" title="name" href="#dfn-name">name</a> identifies a <a class="tref internalDFN" title="property" href="#dfn-property">property</a> of an <a class="tref internalDFN" title="item" href="#dfn-item">item</a>.
+ An <a class="tref internalDFN" title="item" href="#dfn-item">item</a> may have multiple elements sharing the same <a class="tref internalDFN" title="name" href="#dfn-name">name</a>, creating
+ a multi-valued <a class="tref internalDFN" title="property" href="#dfn-property">property</a>.
+ </dd>
+ <dt><dfn title="property_names" id="dfn-property_names">property names</dfn></dt><dd>
+ The tokens of an element's <a class="aref internalDFN" title="itemprop" href="#dfn-itemprop">@itemprop</a> attribute. Each token is a <a class="tref internalDFN" title="name" href="#dfn-name">name</a>.
+ (See <cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#property-names">Names: the
+ itemprop attribute</a></cite> in [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>]).
+ </dd>
+ <dt><dfn title="property_value" id="dfn-property_value">property value</dfn></dt><dd>
+ The <a class="tref internalDFN" title="property_value" href="#dfn-property_value">property value</a> of a name-value pair added by an element with an <a class="aref internalDFN" title="itemprop" href="#dfn-itemprop">@itemprop</a>
+ attribute depends on the element.
+ <dl>
+ <dt>If the element has no <a class="aref internalDFN" title="itemprop" href="#dfn-itemprop">@itemprop</a> attribute</dt>
+ <dd>The value is null and no triple should be generated.</dd>
+ <dt>If the element creates an <a class="tref internalDFN" title="item" href="#dfn-item">item</a> (by having an <a class="aref internalDFN" title="itemscope" href="#dfn-itemscope">@itemscope</a> attribute)</dt>
+ <dd>
+ The value is the <a class="tref internalDFN" title="uri_reference" href="#dfn-uri_reference">URI reference</a> or <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a> returned from
+ <a href="#generate-the-triples">generate the triples</a> for that <a class="tref internalDFN" title="item" href="#dfn-item">item</a>.
+ </dd>
+ <dt>If the element is a URL property element (<code>a</code>, <code>area</code>, <code>audio</code>,
+ <code>embed</code>, <code>iframe</code>, <code>img</code>, <code>link</code>, <code>object</code>,
+ <code>source</code>, <code>track</code> or <code>video</code>)</dt>
+ <dd>
+ The value is a <a class="tref internalDFN" title="uri_reference" href="#dfn-uri_reference">URI reference</a> created from <code><cite>
+ <a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#dom-itemvalue">element.itemValue</a></cite></code>.
+ (See relevant attribute descriptions in [<cite><a class="bibref" rel="biblioentry" href="#bib-HTML5">HTML5</a></cite>]).
+ </dd>
+ <dt>If the element is a <code>time</code> element.</dt>
+ <dd>The value is a <a class="tref internalDFN" title="literal" href="#dfn-literal">literal</a> made from <code><cite>
+ <a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#dom-itemvalue">element.itemValue</a></cite></code>.
+ </dd><dd>
+ <dl>
+ <dt>
+ If the value is a
+ <cite><a href="http://dev.w3.org/html5/spec/Overview.html#valid-date-string">
+ valid date string
+ </a></cite>
+ having the lexical form of
+ <cite><a href="http://www.w3.org/TR/xmlschema-2/#date">xsd:date</a></cite> [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-SCHEMA">RDF-SCHEMA</a></cite>].
+ </dt>
+ <dd>
+ The value is a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> composed of the value and
+ <code>http://www.w3.org/2001/XMLSchema#date</code>.
+ </dd>
+ <dt>
+ If the value is a
+ <cite><a href="http://dev.w3.org/html5/spec/Overview.html#valid-time-string">
+ valid time string
+ </a></cite>
+ having the lexical form of
+ <cite><a href="http://www.w3.org/TR/xmlschema-2/#time">xsd:time</a></cite> [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-SCHEMA">RDF-SCHEMA</a></cite>].
+ </dt>
+ <dd>
+ The value is a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> composed of the value and
+ <code>http://www.w3.org/2001/XMLSchema#time</code>.
+ </dd>
+ <dt>
+ If the value is a
+ <cite><a href="http://dev.w3.org/html5/spec/Overview.html#valid-local-date-and-time-string">
+ valid local date and time string
+ </a></cite>
+ or
+ <cite><a href="http://dev.w3.org/html5/spec/Overview.html#valid-global-date-and-time-string">
+ valid global date and time string
+ </a></cite>
+ having the lexical form of
+ <cite><a href="http://www.w3.org/TR/xmlschema-2/#dateTime">xsd:dateTime</a></cite> [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-SCHEMA">RDF-SCHEMA</a></cite>].
+ </dt>
+ <dd>
+ The value is a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> composed of the value and
+ <code>http://www.w3.org/2001/XMLSchema#dateTime</code>.
+ </dd>
+ <dt>
+ If the value is a
+ <cite><a href="http://dev.w3.org/html5/spec/Overview.html#valid-month-string">
+ valid month string
+ </a></cite>
+ having the lexical form of
+ <cite><a href="http://www.w3.org/TR/xmlschema-2/#gYearMonth">xsd:gYearMonth</a></cite> [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-SCHEMA">RDF-SCHEMA</a></cite>].
+ </dt>
+ <dd>
+ The value is a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> composed of the value and
+ <code>http://www.w3.org/2001/XMLSchema#gYearMonth</code>.
+ </dd>
+ <dt>
+ If the value is a
+ <cite><a href="http://dev.w3.org/html5/spec/Overview.html#valid-non-negative-integer">
+ valid non-negative integer
+ </a></cite>
+ having the lexical form of
+ <cite><a href="http://www.w3.org/TR/xmlschema-2/#gYearMonth">xsd:gYear</a></cite> [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-SCHEMA">RDF-SCHEMA</a></cite>].
+ </dt>
+ <dd>
+ The value is a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> composed of the value and
+ <code>http://www.w3.org/2001/XMLSchema#gYearMonth</code>.
+ </dd>
+ <dt>
+ If the value is a
+ <cite><a href="http://dev.w3.org/html5/spec/Overview.html#valid-duration-string">
+ valid duration string
+ </a></cite>
+ having the lexical form of
+ <cite><a href="http://www.w3.org/TR/xmlschema-2/#duration">xsd:duration</a></cite> [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-SCHEMA">RDF-SCHEMA</a></cite>].
+ </dt>
+ <dd>
+ The value is a <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> composed of the value and
+ <code>http://www.w3.org/2001/XMLSchema#duration</code>.
+ </dd>
+ <dt>Otherwise</dt>
+ <dd>
+ The value is a <a class="tref internalDFN" title="plain_literal" href="#dfn-plain_literal">plain literal</a> created from the value with language information set from the <cite><a href="http://dev.w3.org/html5/spec/Overview.html#the-lang-and-xml:lang-attributes">lang</a></cite> IDL attribute
+ of the property element.
+ <p class="note">The HTML
+ <cite><a href="http://dev.w3.org/html5/spec/Overview.html#valid-yearless-date-string">
+ valid yearless date string
+ </a></cite>
+ is similar to
+ <cite><a href="http://www.w3.org/TR/xmlschema-2/#gMonthDay">xsd:gMonthDay</a></cite>,
+ but the lexical forms differ, so it is not included in this conversion.</p>
+ </dd>
+ </dl>
+ <p>See
+ <cite><a href="http://dev.w3.org/html5/spec/Overview.html#the-time-element">
+ The <code>time</code> element
+ </a></cite>
+ in [<cite><a class="bibref" rel="biblioentry" href="#bib-HTML5">HTML5</a></cite>].</p>
+ </dd>
+ <dt>Otherwise</dt>
+ <dd>The value is a <a class="tref internalDFN" title="plain_literal" href="#dfn-plain_literal">plain literal</a> created from <code><cite>
+ <a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#dom-itemvalue">element.itemValue</a></cite></code>
+ with language information set from the
+ <cite><a href="http://dev.w3.org/html5/spec/Overview.html#the-lang-and-xml:lang-attributes">lang</a></cite>
+ IDL attribute of the property element.
+ </dd>
+ </dl>
+ </dd>
+ <dt><dfn title="top-level_item" id="dfn-top-level_item">top-level item</dfn></dt><dd>
+ An <a class="tref internalDFN" title="item" href="#dfn-item">item</a> which does not contain an <a class="aref internalDFN" title="itemprop" href="#dfn-itemprop">@itemprop</a> 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">Associating names with items</a></cite> in [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>]).
+ </dd>
+ <dt><dfn title="uri_reference" id="dfn-uri_reference">URI reference</dfn></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 <a class="tref internalDFN" title="literal" href="#dfn-literal">literal</a> value that may contain a string representation of a
+ URI. (See [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>]).
+ <div class="issue">
+ <p>The HTML5/microdata content model for <code>@href</code>, <code>@src</code>,
+ <code>@data</code>, <a class="aref internalDFN" title="itemtype" href="#dfn-itemtype">@itemtype</a> and <a class="aref internalDFN" title="itemprop" href="#dfn-itemprop">@itemprop</a> and <a class="aref internalDFN" title="itemid" href="#dfn-itemid">@itemid</a> is that of
+ a URL, not a URI or IRI.</p>
+ <p>A proposed mechanism for specifying the range of <a class="tref internalDFN" title="property_value" href="#dfn-property_value">property value</a>s to be URI reference or IRI could
+ allow these to be specified as subject or object using a <code>@content</code> attribute.
+ </p></div>
+ </dd>
+ <dt><dfn title="vocabulary" id="dfn-vocabulary">vocabulary</dfn></dt><dd>
+ A vocabulary is a collection of URIs, suitable for use as an <a class="aref internalDFN" title="itemtype" href="#dfn-itemtype">@itemtype</a> or <a class="aref internalDFN" title="itemprop" href="#dfn-itemprop">@itemprop</a>
+ value, that share a common <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a>. That prefix is the vocabulary URI. A vocabulary URI 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 <a class="aref internalDFN" title="itemtype" href="#dfn-itemtype">@itemtype</a>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>
+ </div>
+
+ <div id="rdf-conversion-algorithm" class="section">
+ <h3><span class="secno">4.2 </span>RDF Conversion Algorithm</h3>
+ <p>A HTML document containing microdata <em class="rfc2119" title="may">may</em> be converted to any other RDF-compatible document
+ format using the algorithm specified in this section.</p>
+ <p>A conforming microdata processor implementing RDF conversion <em class="rfc2119" title="must">must</em> implement a
+ processing algorithm that results in the equivalent triples to those 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 <a class="tref internalDFN" title="top-level_item" href="#dfn-top-level_item">top-level item</a> 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
+ <a class="tref internalDFN" title="evaluation_context" href="#dfn-evaluation_context">evaluation context</a>.
+ Let <em>result</em> be the (<a class="tref internalDFN" title="uri_reference" href="#dfn-uri_reference">URI reference</a> or <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a>) subject returned.
+ </li>
+ <li>
+ Append <em>result</em> to <em>item list</em>.
+ </li>
+ </ol>
+ </li>
+ <li>
+ <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>
+ Generate the following triple:
+ <dl class="triple">
+ <dt>subject</dt>
+ <dd><a class="tref internalDFN" title="document_base" href="#dfn-document_base">Document base</a></dd>
+ <dt>predicate</dt>
+ <dd><code>http://www.w3.org/ns/md#item</code></dd>
+ <dt>object</dt>
+ <dd><em>value</em></dd>
+ </dl>
+ </li>
+ </ol>
+ </div>
+
+ <div id="generate-the-triples" class="section">
+ <h3><span class="secno">4.3 </span>Generate the triples</h3>
+ <p>
+ When the user agent is to Generate triples for an <a class="tref internalDFN" title="item" href="#dfn-item">item</a> <em>item</em>, given an
+ <a class="tref internalDFN" title="evaluation_context" href="#dfn-evaluation_context">Evaluation Context</a>, it must run the following steps:
+ </p>
+ <p class="note">
+ This algorithm has undergone substantial change from the original microdata specification [<cite><a class="bibref" rel="biblioentry" href="#bib-MICRODATA">MICRODATA</a></cite>].
+ </p>
+ <ol class="algorithm">
+ <li>
+ If there is an entry for <em>item</em> in <a class="tref internalDFN" title="memory" href="#dfn-memory">memory</a>, then let <em>subject</em> be the subject of
+ that entry. Otherwise, if <em>item</em> has a <a class="tref internalDFN" title="global_identifier" href="#dfn-global_identifier">global identifier</a> and that
+ <a class="tref internalDFN" title="global_identifier" href="#dfn-global_identifier">global identifier</a> is an <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a>, let <em>subject</em> be that
+ <a class="tref internalDFN" title="global_identifier" href="#dfn-global_identifier">global identifier</a>. Otherwise, let <em>subject</em> be a new <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a>.
+ </li>
+ <li>Add a mapping from <em>item</em> to <em>subject</em> in <a class="tref internalDFN" title="memory" href="#dfn-memory">memory</a></li>
+ <li>
+ For each <em>type</em> returned from
+ <code><cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#dom-itemtype">element.itemType</a></cite></code>
+ of the element defining the <a class="tref internalDFN" title="item" href="#dfn-item">item</a>.
+ <ol class="algorithm">
+ <li>If <em>type</em> is an <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a>, 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 <a class="tref internalDFN" title="uri_reference" href="#dfn-uri_reference">URI reference</a>)</dd>
+ </dl>
+ </li>
+ </ol>
+ </li>
+ <li>
+ Set <em>type</em> to the first value returned from
+ <code><cite><a href="http://www.w3.org/TR/2011/WD-microdata-20110525/#dom-itemtype">element.itemType</a></cite></code>
+ of the element defining the <a class="tref internalDFN" title="item" href="#dfn-item">item</a>.
+ </li><li>
+ If <em>type</em> is not an <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a>, set it to <a class="tref internalDFN" title="current_type" href="#dfn-current_type">current type</a> from the
+ <a class="tref internalDFN" title="evaluation_context" href="#dfn-evaluation_context">Evaluation Context</a> if not empty.
+ </li>
+ <li>If the <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> contains a <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a> that is a character for character match of <em>type</em>
+ up to the length of the <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a>, set <em>vocab</em> as that <a class="tref internalDFN" title="uri_prefix" href="#dfn-uri_prefix">URI prefix</a>.
+ </li><li>Otherwise, if type is not empty, construct <em>vocab</em> by removing everything following the last
+ SOLIDUS U+002F ("/") or NUMBER SIGN U+0023 ("#") from <em>type</em>.</li>
+ <li>Update <a class="tref internalDFN" title="evaluation_context" href="#dfn-evaluation_context">evaluation context</a> setting <a class="tref internalDFN" title="current_vocabulary" href="#dfn-current_vocabulary">current vocabulary</a> to <em>vocab</em>.</li>
+ <li>
+ Set <em>property list</em> to an empty array mapping properties to one or more
+ <em>value</em>s as established below.
+ </li>
+ <li>
+ For each element <em>element</em> that has one or more <a class="tref internalDFN" title="property_names" href="#dfn-property_names">property names</a> and is one of the
+ <a class="tref internalDFN" title="item_properties" href="#dfn-item_properties">properties of the item</a> <em>item</em>, in the order those elements
+ are given by the algorithm that returns the <a class="tref internalDFN" title="item_properties" href="#dfn-item_properties">properties of the item</a>,
+ run the following substep:
+ <ol class="algorithm">
+ <li>
+ For each <em>name</em> in the element's <a class="tref internalDFN" title="property_names" href="#dfn-property_names">property names</a>, run the following substeps:
+ <ol class="algorithm">
+ <li>
+ Let <em>context</em> be a copy of <a class="tref internalDFN" title="evaluation_context" href="#dfn-evaluation_context">evaluation context</a> with <a class="tref internalDFN" title="current_type" href="#dfn-current_type">current type</a> set
+ to <em>type</em>.
+ </li><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 <a class="tref internalDFN" title="current_name" href="#dfn-current_name">current name</a> to <em>predicate</em>.
+ </li>
+ <li>
+ Let <em>value</em> be the <a class="tref internalDFN" title="property_value" href="#dfn-property_value">property value</a> of <em>element</em>.
+ </li>
+ <li>
+ If <em>value</em> is an <a class="tref internalDFN" title="item" href="#dfn-item">item</a>, 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> <em>subject</em>, <em>predicate</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>
+ </div>
+
+ <div id="generate-predicate-uri" class="section">
+ <h3><span class="secno">4.4 </span>Generate Predicate URI</h3>
+ <p>Predicate URI generation makes use of <a class="tref internalDFN" title="current_type" href="#dfn-current_type">current type</a>, <a class="tref internalDFN" title="current_name" href="#dfn-current_name">current name</a>,
+ and <a class="tref internalDFN" title="current_vocabulary" href="#dfn-current_vocabulary">current vocabulary</a> from an <a class="tref internalDFN" title="evaluation_context" href="#dfn-evaluation_context">evaluation context</a> <em>context</em>
+ along with <em>name</em>.</p>
+
+ <ol class="algorithm">
+ <li>If <em>name</em> is an <a class="tref internalDFN" title="absolute_url" href="#dfn-absolute_url">absolute URL</a>, return <em>name</em>
+ as a <a class="tref internalDFN" title="uri_reference" href="#dfn-uri_reference">URI reference</a>.</li>
+ <li>If <a class="tref internalDFN" title="current_type" href="#dfn-current_type">current type</a> from <em>context</em> is null, there can be no <a class="tref internalDFN" title="current_vocabulary" href="#dfn-current_vocabulary">current vocabulary</a>.
+ Return the <a class="tref internalDFN" title="uri_reference" href="#dfn-uri_reference">URI reference</a> that is the <a class="tref internalDFN" title="document_base" href="#dfn-document_base">document base</a> with its <cite><a href="http://tools.ietf.org/html/rfc3986#section-3.5">fragment</a></cite> set to the <a class="tref internalDFN" title="fragment-escape" href="#dfn-fragment-escape">fragment-escape</a>d value
+ of <em>name</em><p></p>
+ <div class="note">
+ This rule is intended to allow for a the case where no type is set, and therefore there is no
+ vocabulary from which to extract rules. For example, if there is a <a class="tref internalDFN" title="document_base" href="#dfn-document_base">document base</a> of
+ <code>http://example.org/doc</code> and an <a class="aref internalDFN" title="itemprop" href="#dfn-itemprop">@itemprop</a> of 'title', a URI will be constructed
+ to be <code>http://example.org/doc#title</code>.
+ </div>
+ </li>
+ <li>Otherwise, if <a class="tref internalDFN" title="current_vocabulary" href="#dfn-current_vocabulary">current vocabulary</a> from <em>context</em> is not null
+ and <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> has an entry for <a class="tref internalDFN" title="current_vocabulary" href="#dfn-current_vocabulary">current vocabulary</a> having a
+ <a class="tref internalDFN" title="propertyuri" href="#dfn-propertyuri">propertyURI</a> entry that is not null, set that as <em>scheme</em>. Otherwise,
+ set <em>scheme</em> to <code>vocabulary</code>.</li>
+ <li id="scheme-vocab">If <em>scheme</em> is <code>vocabulary</code> return the <a class="tref internalDFN" title="uri_reference" href="#dfn-uri_reference">URI reference</a> constructed
+ by appending the <a class="tref internalDFN" title="fragment-escape" href="#dfn-fragment-escape">fragment-escape</a>d value of <em>name</em> to <a class="tref internalDFN" title="current_vocabulary" href="#dfn-current_vocabulary">current vocabulary</a>,
+ separated by a U+0023 NUMBER SIGN character (#) unless the <a class="tref internalDFN" title="current_vocabulary" href="#dfn-current_vocabulary">current vocabulary</a> ends
+ with either a U+0023 NUMBER SIGN character (#) or SOLIDUS U+002F (/).</li>
+ <li id="scheme-context">If <em>scheme</em> is <code>contextual</code>, return the <a class="tref internalDFN" title="uri_reference" href="#dfn-uri_reference">URI reference</a>
+ constructed as follows:
+ <ol class="algorithm">
+ <li>Let <em>s</em> be <a class="tref internalDFN" title="current_type" href="#dfn-current_type">current type</a> from <em>context</em>.</li>
+ <li>If <code>http://www.w3.org/ns/md?type=</code> is a prefix of <em>s</em>,
+ return the concatenation of <em>s</em>, a U+002E FULL STOP character (.) and
+ the <a class="tref internalDFN" title="fragment-escape" href="#dfn-fragment-escape">fragment-escape</a>d value of <em>name</em>.
+ </li>
+ <li>Otherwise, return the concatenation of <code>http://www.w3.org/ns/md?type=</code>,
+ the <a class="tref internalDFN" title="fragment-escape" href="#dfn-fragment-escape">fragment-escape</a>d value of <em>s</em>, the string <code>&prop=</code>,
+ and the <a class="tref internalDFN" title="fragment-escape" href="#dfn-fragment-escape">fragment-escape</a>d value of <em>name</em>.
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </div>
+
+ <div id="generate-property-values" class="section">
+ <h3><span class="secno">4.5 </span>Generate Property Values</h3>
+ <p>Property value serialization makes use of <em>subject</em>, <em>predicate</em> and <em>values</em>.</p>
+
+ <ol class="algorithm">
+ <li>If the <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> contains a URI prefix that is a character for character match of
+ <em>predicate</em> up to the length of the URI prefix, set <em>vocab</em> as that URI prefix.
+ Otherwise set <em>vocab</em> to null.</li>
+ <li>If <em>vocab</em> is not null
+ and <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> has an entry for <em>vocab</em> that is a JSON Object, let
+ <em>registry object</em> be that value. Otherwise set <em>registry object</em> to null.</li>
+ <li>If <em>registry object</em> is not null and <em>registry object</em> contains key
+ <a class="tref internalDFN" title="properties" href="#dfn-properties"><code>properties</code></a>
+ which has a JSON Object value, let <em>properties</em> be that value. Otherwise, set <em>properties</em>
+ to null.</li>
+ <li>If <em>properties</em> is not null, and <em>properties</em> contains a key, which after
+ <a href="#generate-predicate-uri">Generate Predicate URI</a> expansion has a value which is a JSON Object, let
+ <em>property override</em> be that value. Otherwise, set <em>property override</em> to null.</li>
+ <li>If <em>property override</em> contains the key
+ <a class="tref internalDFN" title="multiplevalues" href="#dfn-multiplevalues"><code>multipleValues</code></a>, set that as <em>method</em>.</li>
+ <li>Otherwise, if <em>registry object</em> con contains the key
+ <a class="tref internalDFN" title="multiplevalues" href="#dfn-multiplevalues"><code>multipleValues</code></a>, set that as <em>method</em>.</li>
+ <li>Otherwise, set <em>method</em> to <code>unordered</code>.</li>
+ <li id="values-unordered">If <em>method</em> is <code>unordered</code>,
+ for each <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 id="values-list">Otherwise, if <em>method</em> is <code>list</code>:
+ <ol class="algorithm">
+ <li>Set <em>value</em> to the value returned from <a href="generate-collection">generate an RDF
+ Collection</a>.
+ </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>
+ </div>
+
+ <div id="generate-collection" class="section">
+ <h3><span class="secno">4.6 </span>Generate RDF Collection</h3>
+ <p>
+ An <dfn title="rdf_collection" id="dfn-rdf_collection">RDF Collection</dfn> is a mechanism for defining ordered sequences of objects in RDF (See <cite><a href="http://www.w3.org/TR/rdf-syntax/#collections">RDF Collections</a></cite> in
+ [<cite><a class="bibref" rel="biblioentry" href="#bib-RDF-SCHEMA">RDF-SCHEMA</a></cite>]). 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, <a class="tref internalDFN" title="rdf_collection" href="#dfn-rdf_collection">RDF Collection</a>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 <a class="tref internalDFN" title="item" href="#dfn-item">item</a> 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 <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a> for every value in <em>list</em>.
+ </li>
+ <li>
+ For each pair of <em>bnode</em> from <em>array</em> and <em>value</em> from <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 <em>bnode</em> 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 <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">blank node</a> from <em>array</em>.
+ </li>
+ </ol>
+ </div>
+</div>
+
+<div class="appendix informative section" id="markup-examples">
+
+<!-- OddPage -->
+<h2><span class="secno">A. </span>Markup Examples</h2><p><em>This section is non-normative.</em></p>
+
+<p>The microdata example below expresses book information as an FRBR Work item.</p>
+
+<pre class="example"><dl itemscope
+ itemtype="http://purl.org/vocab/frbr/core#Work"
+ itemid="http://books.example.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="http://purl.org/vocab/frbr/core#realization"
+ itemscope
+ itemtype="http://purl.org/vocab/frbr/core#Expression"
+ itemid="http://books.example.com/products/9780596007683.BOOK">
+ <link itemprop="http://purl.org/dc/terms/type" href="http://books.example.com/product-types/BOOK">
+ Print
+ </dd>
+ <dd itemprop="http://purl.org/vocab/frbr/core#realization"
+ itemscope
+ itemtype="http://purl.org/vocab/frbr/core#Expression"
+ itemid="http://books.example.com/products/9780596802189.EBOOK">
+ <link itemprop="http://purl.org/dc/terms/type" href="http://books.example.com/product-types/EBOOK">
+ Ebook
+ </dd>
+</dl></pre>
+
+<p>Assuming that <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> contains a an entry for <code>http://purl.org/vocab/frbr/core#</code>
+ with <a class="tref internalDFN" title="propertyuri" href="#dfn-propertyuri"><code>propertyURI</code></a> set to <code>vocabulary</code>,
+ this is equivalent to the following Turtle:</p>
+<pre class="example">@prefix dc: <http://purl.org/dc/terms/> .
+@prefix md: <http://www.w3.org/ns/md#> .
+@prefix frbr: <http://purl.org/vocab/frbr/core#> .
+
+<> md:item (<http://books.example.com/works/45U8QJGZSQKDH8N>) .
+
+<http://books.example.com/works/45U8QJGZSQKDH8N> a frbr:Work ;
+ dc:creator "Wil Wheaton"@en ;
+ dc:title "Just a Geek"@en ;
+ frbr:realization <http://books.example.com/products/9780596007683.BOOK>,
+ <http://books.example.com/products/9780596802189.EBOOK> .
+
+<http://books.example.com/products/9780596007683.BOOK> a frbr:Expression ;
+ dc:type <http://books.example.com/product-types/BOOK> .
+
+<http://books.example.com/products/9780596802189.EBOOK> a frbr:Expression ;
+ dc:type <http://books.example.com/product-types/EBOOK> .</pre>
+
+<p>The following snippet of HTML has microdata for two people with the same address. This illustrates two
+ <a class="tref internalDFN" title="item" href="#dfn-item">item</a>s referencing a third item, and how only a single RDF resource definition is created
+ for that third item.</p>
+<pre class="example"><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 <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> contains a an entry for <code>http://microformats.org/profile/hcard</code>
+ with <a class="tref internalDFN" title="propertyuri" href="#dfn-propertyuri"><code>propertyURI</code></a> set to <code>vocabulary</code>,
+ it generates these triples expressed in Turtle:</p>
+
+<pre class="example">@prefix md: <http://www.w3.org/ns/md#> .
+@prefix hcard: <http://microformats.org/profile/hcard#> .
+
+<> md:item (
+ [ a <http://microformats.org/profile/hcard>;
+ hcard:fn "Princeton";
+ hcard:n [ hcard:given-name "Princeton" ];
+ hcard:adr _:a
+ ]
+ [ a <http://microformats.org/profile/hcard>;
+ hcard:fn "Trekkie";
+ hcard:n [ hcard:given-name "Trekkie" ];
+ hcard:adr _:a
+ ]) .
+
+_:a hcard:street-address "Avenue Q" .</pre>
+
+<p>The following snippet of HTML has microdata for a playlist, and illustrates overriding a property
+ to place elements in an RDF Collection:</p>
+<pre class="example"><div itemscope="" itemtype="http://schema.org/MusicPlaylist">
+ <span itemprop="name">Classic Rock Playlist</span>
+ <meta itemprop="numTracks" content="2"/>
+ <p>Including works by
+ <span itemprop="byArtist">Lynard Skynard</span> and
+ <span itemprop="byArtist">AC/DC</span></p>.
+
+ <div itemprop="tracks" itemscope="" itemtype="http://schema.org/MusicRecording">
+ 1.<span itemprop="name">Sweet Home Alabama</span> -
+ <span itemprop="byArtist">Lynard Skynard</span>
+ <link href="sweet-home-alabama" itemprop="url" />
+ </div>
+
+ <div itemprop="tracks" itemscope="" itemtype="http://schema.org/MusicRecording">
+ 2.<span itemprop="name">Shook you all Night Long</span> -
+ <span itemprop="byArtist">AC/DC</span>
+ <link href="shook-you-all-night-long" itemprop="url" />
+ </div>
+</div></pre>
+
+<p>Assuming that <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> contains a an entry for <code>http://schema.org/</code>
+ with <a class="tref internalDFN" title="propertyuri" href="#dfn-propertyuri"><code>propertyURI</code></a> set to <code>vocabulary</code>,
+ <a class="tref internalDFN" title="multiplevalues" href="#dfn-multiplevalues"><code>multipleValues</code></a> set to <code>unordered</code> with the properties
+ <code>track</code> and <code>byArtist</code> having <a class="tref internalDFN" title="multiplevalues" href="#dfn-multiplevalues"><code>multipleValues</code></a> set to <code>list</code>,
+ it generates these triples expressed in Turtle:</p>
+
+<pre class="example">@prefix md: <http://www.w3.org/ns/md#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix schema: <http://schema.org/> .
+
+<> md:item ([ a schema:MusicPlaylist;
+ schema:name "Classic Rock Playlist";
+ schema:byArtist ("Lynard Skynard" "AC/DC");
+ schema:numTracks "2";
+ schema:tracks (
+ [ a schema:MusicRecording;
+ schema:byArtist ("Lynard Skynard");;
+ schema:name "Sweet Home Alabama";
+ schema:url <sweet-home-alabama>]
+ [ a schema:MusicRecording;
+ schema:byArtist ("AC/DC");;
+ schema:name "Shook you all Night Long";
+ schema:url <shook-you-all-night-long>]
+ )]); .</pre>
+
+</div>
+
+<div calss="appendix informative" id="example-registry" class="section">
+
+<!-- OddPage -->
+<h2><span class="secno">B. </span>Example <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a></h2>
+ <p>The following is an example <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a> in JSON format.</p>
+
+ <pre class="example">{
+ "http://schema.org/": {
+ "propertyURI": "vocabulary",
+ "multipleValues": "unordered",
+ "properties": {
+ "blogPosts": {"multipleValues": "list"},
+ "breadcrumb": {"multipleValues": "list"},
+ "byArtist": {"multipleValues": "list"},
+ "creator": {"multipleValues": "list"},
+ "episodes": {"multipleValues": "list"},
+ "events": {"multipleValues": "list"},
+ "founders": {"multipleValues": "list"},
+ "itemListElement": {"multipleValues": "list"},
+ "musicGroupMember": {"multipleValues": "list"},
+ "performerIn": {"multipleValues": "list"},
+ "performers": {"multipleValues": "list"},
+ "producer": {"multipleValues": "list"},
+ "recipeInstructions": {"multipleValues": "list"},
+ "seasons": {"multipleValues": "list"},
+ "subEvents": {"multipleValues": "list"},
+ "tracks": {"multipleValues": "list"}
+ }
+ },
+ "http://microformats.org/profile/hcard": {
+ "propertyURI": "vocabulary",
+ "multipleValues": "unordered"
+ },
+ "http://microformats.org/profile/hcalendar#": {
+ "propertyURI": "vocabulary",
+ "multipleValues": "unordered",
+ "properties": {
+ "categories": {"multipleValues": "list"}
+ }
+ },
+ "http://n.whatwg.org/work": {
+ "propertyURI": "contextual",
+ "multipleValues": "list"
+ }
+}</pre>
+<p></p>
+
+<div class="appendix informative section" id="acknowledgements">
+ <h3><span class="secno">B.1 </span>Acknowledgements</h3><p><em>This section is non-normative.</em></p>
+ <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>
+</div>
+
+
+
+</div><div id="references" class="appendix section">
+<!-- OddPage -->
+<h2><span class="secno">C. </span>References</h2><div id="normative-references" class="section"><h3><span class="secno">C.1 </span>Normative references</h3><dl class="bibliography"><dt id="bib-HTML5">[HTML5]</dt><dd>Ian Hickson; David Hyatt. <a href="http://www.w3.org/TR/html5"><cite>HTML5.</cite></a> 25 May 2011. W3C Working Draft. (Work in progress.) URL: <a href="http://www.w3.org/TR/html5">http://www.w3.org/TR/html5</a>
+</dd><dt id="bib-MICRODATA">[MICRODATA]</dt><dd><cite><a href="http://dev.w3.org/html5/md/">HTML Microdata</a></cite> Ian Hickson Editor. World Wide Web Consortium (work in progress). 18 November 2011. This edition of the HTML Microdata specification is http://dev.w3.org/html5/md/. The <a href="http://dev.w3.org/html5/md/">latest edition of HTML Microdata</a> is available at http://www.w3.org/TR/microdata/
+</dd><dt id="bib-RDF-CONCEPTS">[RDF-CONCEPTS]</dt><dd>Graham Klyne; Jeremy J. Carroll. <a href="http://www.w3.org/TR/2004/REC-rdf-concepts-20040210"><cite>Resource Description Framework (RDF): Concepts and Abstract Syntax.</cite></a> 10 February 2004. W3C Recommendation. URL: <a href="http://www.w3.org/TR/2004/REC-rdf-concepts-20040210">http://www.w3.org/TR/2004/REC-rdf-concepts-20040210</a>
+</dd><dt id="bib-RDF-SCHEMA">[RDF-SCHEMA]</dt><dd>Dan Brickley; Ramanathan V. Guha. <a href="http://www.w3.org/TR/2004/REC-rdf-schema-20040210"><cite>RDF Vocabulary Description Language 1.0: RDF Schema.</cite></a> 10 February 2004. W3C Recommendation. URL: <a href="http://www.w3.org/TR/2004/REC-rdf-schema-20040210">http://www.w3.org/TR/2004/REC-rdf-schema-20040210</a>
+</dd><dt id="bib-RFC3986">[RFC3986]</dt><dd>T. Berners-Lee; R. Fielding; L. Masinter. <a href="http://www.ietf.org/rfc/rfc3986.txt"><cite>Uniform Resource Identifier (URI): Generic Syntax.</cite></a> January 2005. Internet RFC 3986. URL: <a href="http://www.ietf.org/rfc/rfc3986.txt">http://www.ietf.org/rfc/rfc3986.txt</a>
+</dd></dl></div><div id="informative-references" class="section"><h3><span class="secno">C.2 </span>Informative references</h3><dl class="bibliography"><dt id="bib-RDF-SYNTAX-GRAMMAR">[RDF-SYNTAX-GRAMMAR]</dt><dd>Dave Beckett. <a href="http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210"><cite>RDF/XML Syntax Specification (Revised).</cite></a> 10 February 2004. W3C Recommendation. URL: <a href="http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210">http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210</a>
+</dd></dl></div></div></body></html>
\ No newline at end of file