You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1824 lines
110 KiB
1824 lines
110 KiB
<?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 type="text/css">
|
|
.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-12-january-2012"><acronym title="World Wide Web Consortium">W3C</acronym> Working Draft 12 January 2012</h2><dl><dt>This version:</dt><dd><a href="http://www.w3.org/TR/2012/WD-microdata-rdf-20120112/">http://www.w3.org/TR/2012/WD-microdata-rdf-20120112/</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> © 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. W3C <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
|
|
provide guidance for a possible future Working Group chartered to provide a Recommendation
|
|
for this transformation. As a consequence, implementers of this specification, either producers
|
|
or consumers, should note that it may change prior to any possible publication as a Recommendation.</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. The disclosure obligations
|
|
of the Participants of this group are described in the <a href="http://www.w3.org/2003/12/swa/swig-charter">charter</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 class="tref internalDFN" title="rdf_collection" href="#dfn-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.
|
|
</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 <a class="tref internalDFN" title="item" href="#dfn-item">item</a>'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/#names:-the-itemprop-attribute">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://www.w3.org/TR/2011/WD-html5-20110525/urls.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://www.w3.org/TR/2011/WD-html5-20110525/urls.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-document-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://www.w3.org/TR/2011/WD-html5-20110525/urls.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://www.w3.org/TR/2011/WD-html5-20110525/common-microsyntaxes.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://www.w3.org/TR/2011/WD-html5-20110525/common-microsyntaxes.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://www.w3.org/TR/2011/WD-html5-20110525/common-microsyntaxes.html#valid-local-date-and-time-string">
|
|
valid local date and time string
|
|
</a></cite>
|
|
or
|
|
<cite><a href="http://www.w3.org/TR/2011/WD-html5-20110525/common-microsyntaxes.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://www.w3.org/TR/2011/WD-html5-20110525/common-microsyntaxes.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://www.w3.org/TR/2011/WD-html5-20110525/common-microsyntaxes.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 has 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>.
|
|
<p class="note">The referenced version of [<cite><a class="bibref" rel="biblioentry" href="#bib-HTML5">HTML5</a></cite>] does not include a <em>duration</em> data type,
|
|
but it is in the Editor's Draft and is expected to be included in a
|
|
forthcoming update to the Working Draft</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 the value with language information set from the <cite><a href="http://www.w3.org/TR/2011/WD-html5-20110525/elements.html#the-lang-and-xml:lang-attributes">lang</a></cite> IDL attribute
|
|
of the property element.
|
|
<p class="note">The HTML
|
|
<em>valid yearless date string</em>
|
|
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://www.w3.org/TR/2011/WD-html5-20110525/rendering.html#the-time-element-0">
|
|
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://www.w3.org/TR/2011/WD-html5-20110525/elements.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 class="appendix informative section" id="example-registry">
|
|
|
|
<!-- OddPage -->
|
|
<h2><span class="secno">B. </span>Example <a class="tref internalDFN" title="registry" href="#dfn-registry">registry</a></h2><p><em>This section is non-normative.</em></p>
|
|
<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>
|
|
|