CINXE.COM
Web Annotation Data Model
<!DOCTYPE html> <html dir="ltr" typeof="bibo:Document w3p:REC" prefix="bibo: http://purl.org/ontology/bibo/ w3p: http://www.w3.org/2001/02pd/rec54#" lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta property="dc:language" content="en" lang=""> <style> /* github.com style (c) Vasily Polovnyov <vast@whiteants.net> */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-quote { color: #998; font-style: italic; } .hljs-keyword, .hljs-selector-tag, .hljs-subst { color: #333; font-weight: bold; } .hljs-number, .hljs-literal, .hljs-variable, .hljs-template-variable, .hljs-tag .hljs-attr { color: #008080; } .hljs-string, .hljs-doctag { color: #d14; } .hljs-title, .hljs-section, .hljs-selector-id { color: #900; font-weight: bold; } .hljs-subst { font-weight: normal; } .hljs-type, .hljs-class .hljs-title { color: #458; font-weight: bold; } .hljs-tag, .hljs-name, .hljs-attribute { color: #000080; font-weight: normal; } .hljs-regexp, .hljs-link { color: #009926; } .hljs-symbol, .hljs-bullet { color: #990073; } .hljs-built_in, .hljs-builtin-name { color: #0086b3; } .hljs-meta { color: #999; font-weight: bold; } .hljs-deletion { background: #fdd; } .hljs-addition { background: #dfd; } .hljs-emphasis { font-style: italic; } .hljs-strong { font-weight: bold; } </style> <style> /* --- EXAMPLES --- */ div.example-title { min-width: 7.5em; color: #b9ab2d; } div.example-title span { text-transform: uppercase; } aside.example, div.example, div.illegal-example { padding: 0.5em; margin: 1em 0; position: relative; clear: both; } div.illegal-example { color: red } div.illegal-example p { color: black } aside.example, div.example { padding: .5em; border-left-width: .5em; border-left-style: solid; border-color: #e0cb52; background: #fcfaee; } aside.example div.example { border-left-width: .1em; border-color: #999; background: #fff; } aside.example div.example div.example-title { color: #999; } </style> <style> /* --- ISSUES/NOTES --- */ div.issue-title, div.note-title, div.ednote-title, div.warning-title { padding-right: 1em; min-width: 7.5em; color: #b9ab2d; } div.issue-title { color: #e05252; } div.note-title, div.ednote-title { color: #2b2; } div.warning-title { color: #f22; } div.issue-title span, div.note-title span, div.ednote-title span, div.warning-title span { text-transform: uppercase; } div.note, div.issue, div.ednote, div.warning { margin-top: 1em; margin-bottom: 1em; } .note>p:first-child, .ednote>p:first-child, .issue>p:first-child, .warning>p:first-child { margin-top: 0 } .issue, .note, .ednote, .warning { padding: .5em; border-left-width: .5em; border-left-style: solid; } div.issue, div.note, div.ednote, div.warning { padding: 1em 1.2em 0.5em; margin: 1em 0; position: relative; clear: both; } span.note, span.ednote, span.issue, span.warning { padding: .1em .5em .15em; } .issue { border-color: #e05252; background: #fbe9e9; } .note, .ednote { border-color: #52e052; background: #e9fbe9; } .warning { border-color: #f11; border-width: .2em; border-style: solid; background: #fbe9e9; } .warning-title:before { content: "⚠"; /*U+26A0 WARNING SIGN*/ font-size: 3em; float: left; height: 100%; padding-right: .3em; vertical-align: top; margin-top: -0.5em; } li.task-list-item { list-style: none; } input.task-list-item-checkbox { margin: 0 0.35em 0.25em -1.6em; vertical-align: middle; } </style> <style id="respec-mainstyle"> /***************************************************************** * ReSpec 3 CSS * Robin Berjon - http://berjon.com/ *****************************************************************/ /* Override code highlighter background */ .hljs { background: transparent !important; } /* --- INLINES --- */ em.rfc2119 { text-transform: lowercase; 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; } cite .bibref { font-style: normal; } code { color: #C83500; } th code { color: inherit; } /* --- TOC --- */ .toc a, .tof a { text-decoration: none; } a .secno, a .figno { color: #000; } ul.tof, ol.tof { list-style: none outside none; } .caption { margin-top: 0.5em; font-style: italic; } /* --- 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; } .respec-hidden { display: none; } #respec-ui { position: fixed; display: flex; flex-direction: row-reverse; top: 20px; right: 20px; width: 202px; text-align: right; } #respec-pill, .respec-info-button { background: #fff; height: 2.5em; color: rgb(120, 120, 120); border: 1px solid #ccc; box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, .5); } .respec-info-button { border: none; opacity: .5; border-radius: 2em; margin-right: 1em; min-width: 3.5em; } .respec-info-button:focus { opacity: 1; transition: opacity .2s; } #respec-pill:disabled { font-size: 2.8px; text-indent: -9999em; border-top: 1.1em solid rgba(40, 40, 40, 0.2); border-right: 1.1em solid rgba(40, 40, 40, 0.2); border-bottom: 1.1em solid rgba(40, 40, 40, 0.2); border-left: 1.1em solid #ffffff; transform: translateZ(0); animation: respec-spin .5s infinite linear; box-shadow: none; } #respec-pill:disabled, #respec-pill:disabled:after { border-radius: 50%; width: 10em; height: 10em; } @keyframes respec-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } #respec-pill:hover, #respec-pill:focus { color: rgb(0, 0, 0); background-color: rgb(245, 245, 245); transition: color .2s; } #respec-menu { position: absolute; margin: 0; padding: 0; font-family: sans-serif; background: #fff; box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, .5); width: 200px; display: none; text-align: left; margin-top: 32px; font-size: .8em; } #respec-menu li { list-style-type: none; margin: 0; padding: 0; } .respec-save-button { background: #fff; border: 1px solid #000; border-radius: 5px; padding: 5px; margin: 5px; display: block; width: 100%; color: #000; text-decoration: none; text-align: center; font-size: inherit; } #respec-ui button:focus, #respec-pill:focus, .respec-option:focus { outline: 0; outline-style: none; } #respec-pill-error { background-color: red; color: white; } #respec-pill-warning { background-color: orange; color: white; } .respec-warning-list, .respec-error-list { margin: 0; padding: 0; list-style: none; font-family: sans-serif; background-color: rgb(255, 251, 230); font-size: .9em; } .respec-warning-list li, .respec-error-list li { padding: 0.4em 0.7em; } .respec-warning-list li::before { content: "⚠️"; padding-right: .5em; } .respec-warning-list li { color: rgb(92, 59, 0); border-bottom: thin solid rgb(255, 245, 194); } .respec-error-list, .respec-error-list li { background-color: rgb(255, 240, 240); } .respec-error-list li::before { content: "💥"; padding-right: .5em; } .respec-error-list li { padding: 0.4em 0.7em; color: rgb(92, 59, 0); border-bottom: thin solid rgb(255, 215, 215); } #respec-overlay { display: block; opacity: 0; position: fixed; z-index: 10000; top: 0px; left: 0px; height: 100%; width: 100%; background: #000; } .respec-modal { display: block; position: fixed; opacity: 0; z-index: 11000; margin: auto; top: 10%; background: #fff; border: 5px solid #666; min-width: 20%; width: 85%; padding: 0; max-height: 80%; overflow-y: auto; margin: 0 -.5cm } @media screen and (min-width: 78em) { .respec-modal { width: 64%; } } .respec-modal h3 { margin: 0; padding: .2em; text-align: center; color: black; background: linear-gradient(to bottom, rgba(238, 238, 238, 1) 0%, rgba(238, 238, 238, 1) 50%, rgba(204, 204, 204, 1) 100%); font-size: 1em; } .respec-modal .inside p { padding-left: 1cm; } #respec-menu button.respec-option { background: white; padding: 0 .2cm; border: none; width: 100%; text-align: left; font-size: inherit; padding: 1.2em 1.2em; } #respec-menu button.respec-option:hover, #respec-menu button:focus { background-color: #eeeeee; } .respec-cmd-icon { padding-right: .5em; } #respec-ui button.respec-option:last-child { border: none; border-radius: inherit; } .respec-offending-element { display: inline-block; position: relative; background: url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=) bottom repeat-x; } .respec-dfn-list { column-count: 2; } .respec-dfn-list li { list-style: none; } @media print { .removeOnSave { display: none; } } </style> <title>Web Annotation Data Model</title> <style> .model { empty-cells: show; border-collapse: collapse; margin-bottom: .5ex; border: 1px solid black; width: 100%; } .model th { padding: 3px; border: 1px solid #404040; text-align: center; font-weight: bold; font-family: sans-serif; } .model td { padding: 5px; border: 1px solid #404040; text-align: left; font-family: sans-serif; } </style> <!--[if lt IE 9]><script src='https://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]--> <link rel="stylesheet" href="https://www.w3.org/StyleSheets/TR/2016/W3C-REC"> <link rel="canonical" href="https://www.w3.org/TR/annotation-model/"> <meta name="generator" content="ReSpec 10.5.1"> <script id="initialUserConfig" type="application/json"> { "specStatus": "REC", "prEnd": "2017-02-14", "shortName": "annotation-model", "errata": "https://www.w3.org/annotation/errata/", "editors": [ { "name": "Robert Sanderson", "company": "J. Paul Getty Trust", "companyURL": "http://getty.edu/", "mailto": "rsanderson@getty.edu", "extras": [ { "name": "<img src='orcid_logo.png' alt='orcid logo' />", "href": "http://orcid.org/0000-0003-0782-2704", "class": "orcid" }] }, { "name": "Paolo Ciccarese", "url": "http://www.paolociccarese.info", "company": "Massachusetts General Hospital", "companyUrl": "", "mailto": "paolo.ciccarese@gmail.com " }, { "name": "Benjamin Young", "url": "http://bigbluehat.com/", "company": "John Wiley & Sons, Inc.", "companyURL": "http://www.wiley.com/", "mailto": "byoung@bigbluehat.com" }], "implementationReportURI": "https://w3c.github.io/test-results/annotation-model/all.html", "crEnd": "2016-12-20", "previousMaturity": "PR", "previousPublishDate": "2017-01-17", "previousURI": "http://www.w3.org/TR/2017/PR-annotation-model-20170117/", "publishDate": "2017-02-23", "edDraftURI": "http://w3c.github.io/web-annotation/", "wg": "Web Annotation Working Group", "wgURI": "http://www.w3.org/annotation/", "wgPublicList": "public-annotation", "wgPatentURI": "https://www.w3.org/2004/01/pp-impl/73180/status", "localBiblio": { "iana-media-types": { "title": "Media Types", "href": "http://www.iana.org/assignments/media-types/", "publisher": "IANA (Internet Assigned Numbers Authority)" }, "w3c-language-tags": { "title": "Language Tags in HTML and XML", "href": "https://www.w3.org/International/articles/language-tags/", "publisher": "W3C" }, "cfi": { "authors": [ "Peter Sorotokin", "Garth Conboy", "Brady Duga", "John Rivlin", "Don Beaver", "Kevin Ballard", "Alastair Fettes", "Daniel Weck" ], "title": "EPUB Canonical Fragment Identifiers", "href": "http://www.idpf.org/epub/linking/cfi/epub-cfi-20140628.html", "publisher": "IDPF", "rawDate": "2014-06-26", "status": "Recommended Specification" }, "annotation-vocab": { "authors": [ "Robert Sanderson", "Paolo Ciccarese", "Benjamin Young" ], "title": "Web Annotation Vocabulary", "href": "http://www.w3.org/TR/annotation-vocab/", "publisher": "W3C", "rawDate": "2017-02-23", "status": "REC" }, "annotation-protocol": { "authors": [ "Robert Sanderson" ], "title": "Web Annotation Protocol", "href": "http://www.w3.org/TR/annotation-protocol/", "publisher": "W3C", "rawDate": "2017-02-23", "status": "REC" } }, "otherLinks": [ { "key": "Repository", "data": [ { "value": "Github Repository", "href": "https://github.com/w3c/web-annotation" }] }, { "key": "Changes", "data": [ { "value": "Diff to previous version", "href": "diff.html" }, { "value": "Commit history", "href": "https://github.com/w3c/web-annotation/commits/gh-pages" }] }], "alternateFormats": [ { "uri": "annotation-model.epub", "label": "ePub" }] } </script> </head> <body aria-busy="false" class="h-entry" role="document" id="respecDocument"> <div class="head" role="contentinfo" id="respecHeader"> <p> <a class="logo" href="https://www.w3.org/"><img src="https://www.w3.org/StyleSheets/TR/2016/logos/W3C" alt="W3C" width="72" height="48"></a> </p> <h1 class="title p-name" id="title" property="dcterms:title">Web Annotation Data Model</h1> <h2 id="w3c-recommendation-23-february-2017"><abbr title="World Wide Web Consortium">W3C</abbr> Recommendation <time property="dcterms:issued" class="dt-published" datetime="2017-02-23">23 February 2017</time></h2> <dl> <dt>This version:</dt> <dd><a class="u-url" href="https://www.w3.org/TR/2017/REC-annotation-model-20170223/">https://www.w3.org/TR/2017/REC-annotation-model-20170223/</a></dd> <dt>Latest published version:</dt> <dd><a href="https://www.w3.org/TR/annotation-model/">https://www.w3.org/TR/annotation-model/</a></dd> <dt>Latest editor's draft:</dt> <dd><a href="http://w3c.github.io/web-annotation/">http://w3c.github.io/web-annotation/</a></dd> <dt>Implementation report:</dt> <dd><a href="https://w3c.github.io/test-results/annotation-model/all.html">https://w3c.github.io/test-results/annotation-model/all.html</a></dd> <dt>Previous version:</dt> <dd><a rel="dcterms:replaces" href="https://www.w3.org/TR/2017/PR-annotation-model-20170117/">https://www.w3.org/TR/2017/PR-annotation-model-20170117/</a></dd> <dt>Editors:</dt> <dd class="p-author h-card vcard" property="bibo:editor" resource="_:editor0"><span property="rdf:first" typeof="foaf:Person"><span property="foaf:name" class="p-name fn">Robert Sanderson</span>, <a property="foaf:workplaceHomepage" class="p-org org h-org h-card" href="http://getty.edu/">J. Paul Getty Trust</a>, <span class="ed_mailto"><a class="u-email email" property="foaf:mbox" href="mailto:rsanderson@getty.edu">rsanderson@getty.edu</a></span>, <span class="orcid"><a href="http://orcid.org/0000-0003-0782-2704" property="rdfs:seeAlso"><img src="orcid_logo.png" alt="orcid logo"></a></span></span> <span property="rdf:rest" resource="_:editor1"></span> </dd> <dd class="p-author h-card vcard" resource="_:editor1"><span property="rdf:first" typeof="foaf:Person"><meta property="foaf:name" content="Paolo Ciccarese"><a class="u-url url p-name fn" property="foaf:homepage" href="http://www.paolociccarese.info">Paolo Ciccarese</a>, Massachusetts General Hospital, <span class="ed_mailto"><a class="u-email email" property="foaf:mbox" href="mailto:paolo.ciccarese@gmail.com ">paolo.ciccarese@gmail.com </a></span></span> <span property="rdf:rest" resource="_:editor2"></span> </dd> <dd class="p-author h-card vcard" resource="_:editor2"><span property="rdf:first" typeof="foaf:Person"><meta property="foaf:name" content="Benjamin Young"><a class="u-url url p-name fn" property="foaf:homepage" href="http://bigbluehat.com/">Benjamin Young</a>, <a property="foaf:workplaceHomepage" class="p-org org h-org h-card" href="http://www.wiley.com/">John Wiley & Sons, Inc.</a>, <span class="ed_mailto"><a class="u-email email" property="foaf:mbox" href="mailto:byoung@bigbluehat.com">byoung@bigbluehat.com</a></span></span> <span property="rdf:rest" resource="rdf:nil"></span> </dd> <dt>Repository:</dt> <dd> <a href="https://github.com/w3c/web-annotation"> Github Repository </a> </dd> <dt>Changes:</dt> <dd> <a href="diff.html"> Diff to previous version </a> </dd> <dd> <a href="https://github.com/w3c/web-annotation/commits/gh-pages"> Commit history </a> </dd> </dl> <p> Please check the <a href="https://www.w3.org/annotation/errata/"><strong>errata</strong></a> for any errors or issues reported since publication. </p> <p> This document is also available in this non-normative format: <a rel="alternate" href="annotation-model.epub">ePub</a> </p> <p> The English version of this specification is the only normative version. Non-normative <a href="https://www.w3.org/2003/03/Translations/byTechnology?technology=https://www.w3.org/TR/annotation-model/">translations</a> may also be available. </p> <p class="copyright"> <a href="https://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> © 2017 <a href="https://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup> (<a href="https://www.csail.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>, <a href="https://www.ercim.eu/"><abbr title="European Research Consortium for Informatics and Mathematics">ERCIM</abbr></a>, <a href="https://www.keio.ac.jp/">Keio</a>, <a href="http://ev.buaa.edu.cn/">Beihang</a>). <abbr title="World Wide Web Consortium">W3C</abbr> <a href="https://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>, <a href="https://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and <a rel="license" href="https://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply. </p> <hr title="Separator for header"> </div> <section id="abstract" class="introductory" property="dc:abstract"> <h2 id="h-abstract" resource="#h-abstract"><span property="xhv:role" resource="xhv:heading">Abstract</span></h2> <p>Annotations are typically used to convey information about a resource or associations between resources. Simple examples include a comment or tag on a single web page or image, or a blog post about a news article.</p> <p>The Web Annotation Data Model specification describes a structured model and format to enable annotations to be shared and reused across different hardware and software platforms. Common use cases can be modeled in a manner that is simple and convenient, while at the same time enabling more complex requirements, including linking arbitrary content to a particular data point or to segments of timed multimedia resources.</p> <p>The specification provides a specific JSON format for ease of creation and consumption of annotations based on the conceptual model that accommodates these use cases, and the vocabulary of terms that represents it.</p> </section> <section id="sotd" class="introductory"> <h2 id="h-sotd" resource="#h-sotd"><span property="xhv:role" resource="xhv:heading">Status of This Document</span></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 <abbr title="World Wide Web Consortium">W3C</abbr> publications and the latest revision of this technical report can be found in the <a href="https://www.w3.org/TR/"><abbr title="World Wide Web Consortium">W3C</abbr> technical reports index</a> at https://www.w3.org/TR/.</em> </p> <p> This specification was derived from the Open Annotation Community Group's outcomes, and details of the differences between the two are maintained in the <a href="#acknowledgments">Acknowledgment</a> appendix. </p> <p> This document was published by the <a href="https://www.w3.org/annotation/">Web Annotation Working Group</a> as a Recommendation. If you wish to make comments regarding this document, please send them to <a href="mailto:public-annotation@w3.org">public-annotation@w3.org</a> (<a href="mailto:public-annotation-request@w3.org?subject=subscribe">subscribe</a>, <a href="https://lists.w3.org/Archives/Public/public-annotation/">archives</a>). All comments are welcome. </p> <p> Please see the Working Group's <a href="https://w3c.github.io/test-results/annotation-model/all.html">implementation report</a>. </p> <p> This document has been reviewed by <abbr title="World Wide Web Consortium">W3C</abbr> Members, by software developers, and by other <abbr title="World Wide Web Consortium">W3C</abbr> groups and interested parties, and is endorsed by the Director as a <abbr title="World Wide Web Consortium">W3C</abbr> Recommendation. It is a stable document and may be used as reference material or cited from another document. <abbr title="World Wide Web Consortium">W3C</abbr>'s role in making the Recommendation is to draw attention to the specification and to promote its widespread deployment. This enhances the functionality and interoperability of the Web. </p> <p> This document was produced by a group operating under the <a id="sotd_patent" property="w3p:patentRules" href="https://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>. <abbr title="World Wide Web Consortium">W3C</abbr> maintains a <a href="https://www.w3.org/2004/01/pp-impl/73180/status" rel="disclosure">public list of any patent disclosures</a> made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains <a href="https://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the information in accordance with <a href="https://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section 6 of the <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>. </p> <p>This document is governed by the <a id="w3c_process_revision" href="https://www.w3.org/2015/Process-20150901/">1 September 2015 <abbr title="World Wide Web Consortium">W3C</abbr> Process Document</a>. </p> </section> <nav id="toc"> <h2 class="introductory" id="table-of-contents" resource="#table-of-contents"><span property="xhv:role" resource="xhv:heading">Table of Contents</span></h2> <ol class="toc" role="directory"> <li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a> <ol class="toc"> <li class="tocline"><a href="#aims-of-the-model" class="tocxref"><span class="secno">1.1 </span>Aims of the Model</a></li> <li class="tocline"><a href="#serialization-of-the-model" class="tocxref"><span class="secno">1.2 </span>Serialization of the Model</a></li> <li class="tocline"><a href="#conformance" class="tocxref"><span class="secno">1.3 </span>Conformance</a> <ol class="toc"> <li class="tocline"><a href="#conformance-requirements-related-to-selectors" class="tocxref"><span class="secno">1.3.1 </span>Conformance Requirements Related to Selectors</a></li> </ol> </li> <li class="tocline"><a href="#terminology" class="tocxref"><span class="secno">1.4 </span>Terminology</a></li> </ol> </li> <li class="tocline"><a href="#web-annotation-principles" class="tocxref"><span class="secno">2. </span>Web Annotation Principles</a></li> <li class="tocline"><a href="#web-annotation-framework" class="tocxref"><span class="secno">3. </span>Web Annotation Framework</a> <ol class="toc"> <li class="tocline"><a href="#annotations" class="tocxref"><span class="secno">3.1 </span>Annotations</a></li> <li class="tocline"><a href="#bodies-and-targets" class="tocxref"><span class="secno">3.2 </span>Bodies and Targets</a> <ol class="toc"> <li class="tocline"><a href="#external-web-resources" class="tocxref"><span class="secno">3.2.1 </span>External Web Resources</a></li> <li class="tocline"><a href="#classes" class="tocxref"><span class="secno">3.2.2 </span>Classes</a></li> <li class="tocline"><a href="#segments-of-external-resources" class="tocxref"><span class="secno">3.2.3 </span>Segments of External Resources</a></li> <li class="tocline"><a href="#embedded-textual-body" class="tocxref"><span class="secno">3.2.4 </span>Embedded Textual Body</a></li> <li class="tocline"><a href="#string-body" class="tocxref"><span class="secno">3.2.5 </span>String Body</a></li> <li class="tocline"><a href="#cardinality-of-bodies-and-targets" class="tocxref"><span class="secno">3.2.6 </span>Cardinality of Bodies and Targets</a></li> <li class="tocline"><a href="#choice-between-bodies" class="tocxref"><span class="secno">3.2.7 </span>Choice Between Bodies</a></li> </ol> </li> <li class="tocline"><a href="#other-properties" class="tocxref"><span class="secno">3.3 </span>Other Properties</a> <ol class="toc"> <li class="tocline"><a href="#lifecycle-information" class="tocxref"><span class="secno">3.3.1 </span>Lifecycle Information</a></li> <li class="tocline"><a href="#agents" class="tocxref"><span class="secno">3.3.2 </span>Agents</a></li> <li class="tocline"><a href="#intended-audience" class="tocxref"><span class="secno">3.3.3 </span>Intended Audience</a></li> <li class="tocline"><a href="#accessibility-of-content" class="tocxref"><span class="secno">3.3.4 </span>Accessibility of Content</a></li> <li class="tocline"><a href="#motivation-and-purpose" class="tocxref"><span class="secno">3.3.5 </span>Motivation and Purpose</a></li> <li class="tocline"><a href="#rights-information" class="tocxref"><span class="secno">3.3.6 </span>Rights Information</a></li> <li class="tocline"><a href="#other-identities" class="tocxref"><span class="secno">3.3.7 </span>Other Identities</a></li> </ol> </li> </ol> </li> <li class="tocline"><a href="#specific-resources" class="tocxref"><span class="secno">4. </span>Specific Resources</a> <ol class="toc"> <li class="tocline"><a href="#purpose-for-external-web-resources" class="tocxref"><span class="secno">4.1 </span>Purpose for External Web Resources</a></li> <li class="tocline"><a href="#selectors" class="tocxref"><span class="secno">4.2 </span>Selectors</a> <ol class="toc"> <li class="tocline"><a href="#fragment-selector" class="tocxref"><span class="secno">4.2.1 </span>Fragment Selector</a></li> <li class="tocline"><a href="#css-selector" class="tocxref"><span class="secno">4.2.2 </span>CSS Selector</a></li> <li class="tocline"><a href="#xpath-selector" class="tocxref"><span class="secno">4.2.3 </span>XPath Selector</a></li> <li class="tocline"><a href="#text-quote-selector" class="tocxref"><span class="secno">4.2.4 </span>Text Quote Selector</a></li> <li class="tocline"><a href="#text-position-selector" class="tocxref"><span class="secno">4.2.5 </span>Text Position Selector</a></li> <li class="tocline"><a href="#data-position-selector" class="tocxref"><span class="secno">4.2.6 </span>Data Position Selector</a></li> <li class="tocline"><a href="#svg-selector" class="tocxref"><span class="secno">4.2.7 </span>SVG Selector</a></li> <li class="tocline"><a href="#range-selector" class="tocxref"><span class="secno">4.2.8 </span>Range Selector</a></li> <li class="tocline"><a href="#refinement-of-selection" class="tocxref"><span class="secno">4.2.9 </span>Refinement of Selection</a></li> </ol> </li> <li class="tocline"><a href="#states" class="tocxref"><span class="secno">4.3 </span>States</a> <ol class="toc"> <li class="tocline"><a href="#time-state" class="tocxref"><span class="secno">4.3.1 </span>Time State</a></li> <li class="tocline"><a href="#request-header-state" class="tocxref"><span class="secno">4.3.2 </span>Request Header State</a></li> <li class="tocline"><a href="#refinement-of-state" class="tocxref"><span class="secno">4.3.3 </span>Refinement of State</a></li> </ol> </li> <li class="tocline"><a href="#styles" class="tocxref"><span class="secno">4.4 </span>Styles</a></li> <li class="tocline"><a href="#rendering-software" class="tocxref"><span class="secno">4.5 </span>Rendering Software</a></li> <li class="tocline"><a href="#scope-of-a-resource" class="tocxref"><span class="secno">4.6 </span>Scope of a Resource</a></li> </ol> </li> <li class="tocline"><a href="#collections" class="tocxref"><span class="secno">5. </span>Collections</a> <ol class="toc"> <li class="tocline"><a href="#annotation-collection" class="tocxref"><span class="secno">5.1 </span>Annotation Collection</a></li> <li class="tocline"><a href="#annotation-page" class="tocxref"><span class="secno">5.2 </span>Annotation Page</a></li> </ol> </li> <li class="tocline"><a href="#media_selector" class="tocxref"><span class="secno">A. </span>Correspondence Among Media Types and Selectors</a> <ol class="toc"> <li class="tocline"><a href="#additional-media-types-selector-combination" class="tocxref"><span class="secno">A.1 </span>Additional Media Types/Selector Combination</a></li> </ol> </li> <li class="tocline"><a href="#complete-example" class="tocxref"><span class="secno">B. </span>Complete Example</a></li> <li class="tocline"><a href="#index-of-json-keys" class="tocxref"><span class="secno">C. </span>Index of JSON Keys</a></li> <li class="tocline"><a href="#sets-of-bodies-and-targets" class="tocxref"><span class="secno">D. </span>Sets of Bodies and Targets</a></li> <li class="tocline"><a href="#acknowledgments" class="tocxref"><span class="secno">E. </span>Acknowledgments</a></li> <li class="tocline"><a href="#candidate-recommendation-exit-criteria" class="tocxref"><span class="secno">F. </span>Candidate Recommendation Exit Criteria</a></li> <li class="tocline"><a href="#changes-from-previous-versions" class="tocxref"><span class="secno">G. </span>Changes from Previous Versions</a> <ol class="toc"> <li class="tocline"><a href="#changes-from-the-proposed-recommendation-of-2017-01-17" class="tocxref"><span class="secno">G.1 </span>Changes from the Proposed Recommendation of 2017-01-17</a></li> <li class="tocline"><a href="#changes-from-the-candidate-recommendation-of-2016-11-22" class="tocxref"><span class="secno">G.2 </span>Changes from the Candidate Recommendation of 2016-11-22</a></li> <li class="tocline"><a href="#changes-from-the-candidate-recommendation-of-2016-09-06" class="tocxref"><span class="secno">G.3 </span>Changes from the Candidate Recommendation of 2016-09-06</a></li> <li class="tocline"><a href="#changes-from-the-candidate-recommendation-of-2016-07-05" class="tocxref"><span class="secno">G.4 </span>Changes from the Candidate Recommendation of 2016-07-05</a></li> <li class="tocline"><a href="#changes-from-the-working-draft-of-2016-03-31" class="tocxref"><span class="secno">G.5 </span>Changes from the Working Draft of 2016-03-31</a></li> <li class="tocline"><a href="#changes-from-the-open-annotation-draft" class="tocxref"><span class="secno">G.6 </span>Changes from the Open Annotation Draft</a></li> </ol> </li> <li class="tocline"><a href="#references" class="tocxref"><span class="secno">H. </span>References</a> <ol class="toc"> <li class="tocline"><a href="#normative-references" class="tocxref"><span class="secno">H.1 </span>Normative references</a></li> <li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">H.2 </span>Informative references</a></li> </ol> </li> </ol> </nav> <section class="informative" id="introduction" typeof="bibo:Chapter" resource="#introduction" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-introduction" resource="#h-introduction"><span property="xhv:role" resource="xhv:heading"><span class="secno">1. </span>Introduction</span> </h2> <p><em>This section is non-normative.</em></p> <p>Annotating, the act of creating associations between distinct pieces of information, is a pervasive activity online in many guises. Web citizens make comments about online resources using either tools built in to the hosting website, external web services, or the functionality of an annotation client. Comments about shared photos or videos, reviews of products, or even social network mentions of web resources could all be considered as annotations. In addition, there are a plethora of "sticky note" systems and stand-alone multimedia annotation systems. This specification describes a common approach to expressing these annotations, and more. </p> <p>The Web Annotation Data Model provides an extensible, interoperable framework for expressing annotations such that they can easily be shared between platforms, with sufficient richness of expression to satisfy complex requirements while remaining simple enough to also allow for the most common use cases, such as attaching a piece of text to a single web resource.</p> <p>An annotation is considered to be a set of connected resources, typically including a body and target, and conveys that the body is related to the target. The exact nature of this relationship changes according to the intention of the annotation, but the body is most frequently somehow "about" the target. This perspective results in a basic model with three parts, depicted below. The full model supports additional functionality, enabling content to be embedded within the annotation, selecting arbitrary segments of resources, choosing the appropriate representation of a resource and providing styling hints to help clients render the annotation appropriately. Annotations created by or intended for machines are also possible, ensuring that the Data Web is not ignored in favor of only considering the human-oriented Document Web.</p> <img src="images/intro_model.png" alt="Basic Model: Annotation, Body and Target" width="400"> <p>The Web Annotation Data Model does not prescribe a transport protocol for creating, managing and retrieving annotations. Instead it describes a resource oriented structure and serialization of that structure that could be carried over many different protocols. The related [<cite><a class="bibref" href="#bib-annotation-protocol">annotation-protocol</a></cite>] specification describes a recommended transport layer, which may be adopted separately.</p> <section id="aims-of-the-model" typeof="bibo:Chapter" resource="#aims-of-the-model" property="bibo:hasPart"> <h3 id="h-aims-of-the-model" resource="#h-aims-of-the-model"><span property="xhv:role" resource="xhv:heading"><span class="secno">1.1 </span>Aims of the Model</span> </h3> <p> The primary aim of the Web Annotation Data Model is to provide a standard description model and format to enable annotations to be shared between systems. This interoperability may be either for sharing with others, or the migration of private annotations between devices or platforms. The shared annotations must be able to be integrated into existing collections and reused without loss of significant information. The model should cover as many annotation use cases as possible, while keeping the simple annotations easy and expanding from that baseline to make complex uses possible. </p> <p> The Web Annotation Data Model is a single, consistent model that can be used by all interested parties. All efforts have been made to keep the implementation costs for both producers and consumers to a minimum. A single method of fulfilling a use case is strongly preferred over multiple methods, unless there are existing standards that need to be accommodated or there is a significant cost associated with using only a single method. While the Data Model is built using Linked Data fundamentals, the design is intended to allow rich and performant non-graph-based implementations. As such, inferencing and other graph-based queries are explicitly not a priority for optimization in the design of the model. </p> </section> <section id="serialization-of-the-model" typeof="bibo:Chapter" resource="#serialization-of-the-model" property="bibo:hasPart"> <h3 id="h-serialization-of-the-model" resource="#h-serialization-of-the-model"><span property="xhv:role" resource="xhv:heading"><span class="secno">1.2 </span>Serialization of the Model</span> </h3> <p> The examples throughout the document are serialized as [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>] using the Context given in Appendix A of the Annotation Vocabulary [<cite><a class="bibref" href="#bib-annotation-vocab">annotation-vocab</a></cite>], which is the preferred serialization format. The media type of this format is defined in Section 3 of the Annotation Protocol [<cite><a class="bibref" href="#bib-annotation-protocol">annotation-protocol</a></cite>] as <code>application/ld+json;profile="http://www.w3.org/ns/anno.jsonld"</code>. </p> <p>When the only information that is recorded in the annotation is the <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRI</a> of a resource, then that IRI is used as the value of the relationship, as in <a href="#annotations">Example 1</a>. When there is more information about the resource, the IRI is the value of the <code>id</code> property of the object which is the value of the relationship, as in <a href="#external-web-resources">Example 2</a>.</p> </section> <section id="conformance" typeof="bibo:Chapter" resource="#conformance" property="bibo:hasPart"> <h3 id="h-conformance" resource="#h-conformance"><span property="xhv:role" resource="xhv:heading"><span class="secno">1.3 </span>Conformance</span> </h3> <p> As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative. </p> <p id="respecRFC2119">The key words <em class="rfc2119">MAY</em>, <em class="rfc2119">MUST</em>, <em class="rfc2119">MUST NOT</em>, <em class="rfc2119">NOT RECOMMENDED</em>, <em class="rfc2119">RECOMMENDED</em>, <em class="rfc2119">SHOULD</em>, and <em class="rfc2119">SHOULD NOT</em> are to be interpreted as described in [<cite><a class="bibref" href="#bib-RFC2119">RFC2119</a></cite>]. </p> <section id="conformance-requirements-related-to-selectors" typeof="bibo:Chapter" resource="#conformance-requirements-related-to-selectors" property="bibo:hasPart"> <h4 id="h-conformance-requirements-related-to-selectors" resource="#h-conformance-requirements-related-to-selectors"><span property="xhv:role" resource="xhv:heading"><span class="secno">1.3.1 </span>Conformance Requirements Related to Selectors</span> </h4> <p>Not all <a href="#selectors">Selectors</a> are relevant for all media types; some combinations are meaningless or not formally defined. An implementation may therefore ignore certain types of Selectors in case the corresponding media types are not handled by that particular implementation.</p> <p>The table in <a href="#media_selector" class="sec-ref"><span class="secno">A.</span> <span class="sec-title">Correspondence Among Media Types and Selectors</span></a> shows the correspondence among the main media types addressed in this specification and Selector types. The meaning of the table elements, and their effect on implementation conformance, is as follows.</p> <ul> <li>A “✔︎” sign in the table means that the Selector type is relevant for that particular media types. A conforming implementation <em class="rfc2119" title="MUST">MUST</em> implement that particular combination <em>if</em> it handles the corresponding media type.</li> <li>A “✘” sign in the table means that the Selector type is not relevant for that particular media types. Conforming implementations <em class="rfc2119" title="SHOULD">SHOULD</em> ignore that particular combination.</li> <li>A “?” means that it is not possible to specify, in general, whether that particular combination is meaningful (e.g., fragment identifiers are defined for specific media types, i.e., specific text media types other than plain text may have fragments defined but they are not listed in the table). In other cases the usefulness of such combination is not clear (e.g., Data Position selectors for binary images). Conforming implementations <em class="rfc2119" title="MAY">MAY</em> implement that particular combination.</li> </ul> </section> </section> <section id="terminology" typeof="bibo:Chapter" resource="#terminology" property="bibo:hasPart"> <h3 id="h-terminology" resource="#h-terminology"><span property="xhv:role" resource="xhv:heading"><span class="secno">1.4 </span>Terminology</span> </h3> <dl> <dt><dfn data-dfn-type="dfn" id="dfn-iri">IRI</dfn></dt> <dd>An <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRI</a>, or Internationalized Resource Identifier, is an extension to the URI specification to allow characters from Unicode, whereas URIs must be made up of a subset of ASCII characters. There is a mapping algorithm for translating between IRIs and the equivalent encoded URI form. IRIs are defined by [<cite><a class="bibref" href="#bib-rfc3987">rfc3987</a></cite>].</dd> <dt><dfn data-dfn-type="dfn" id="dfn-resource">Resource</dfn></dt> <dd>An item of interest that <em class="rfc2119" title="MAY">MAY</em> be identified by an <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRI</a>.</dd> <dt><dfn data-dfn-type="dfn" id="dfn-web-resource">Web Resource</dfn></dt> <dd>A <a href="#dfn-resource" class="internalDFN" data-link-type="dfn">Resource</a> that <em class="rfc2119" title="MUST">MUST</em> be identified by an <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRI</a>, as described in the Web Architecture [<cite><a class="bibref" href="#bib-webarch">webarch</a></cite>]. Web Resources <em class="rfc2119" title="MAY">MAY</em> be dereferencable via their IRI.</dd> <dt><dfn data-dfn-type="dfn" id="dfn-external-web-resource">External Web Resource</dfn></dt> <dd>A <a href="#dfn-web-resource" class="internalDFN" data-link-type="dfn">Web Resource</a> which is not part of the representation of the Annotation, such as a web page, image, or video. External Web Resources are dereferencable from their <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRI</a>.</dd> <dt><dfn data-dfn-type="dfn" id="dfn-property">Property</dfn></dt> <dd>A feature of a <a href="#dfn-resource" class="internalDFN" data-link-type="dfn">Resource</a>, that often has a particular data type. In the model sections, the term "Property" is used to refer to only those features which are <em>not</em> <a href="#dfn-relationship" class="internalDFN" data-link-type="dfn">Relationships</a> and instead have a literal value such as a string, integer or date. The valid values for a Property are thus any data type other than object, or an array containing members of that data type if more than one is allowed.</dd> <dt><dfn data-dfn-type="dfn" id="dfn-relationship">Relationship</dfn></dt> <dd>In the model sections, the term "Relationship" is used to distinguish those features that refer to other <a href="#dfn-resource" class="internalDFN" data-link-type="dfn">Resources</a>, either by reference to the <a href="#dfn-resource" class="internalDFN" data-link-type="dfn">Resource</a>'s <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRI</a> or by including a description of the <a href="#dfn-resource" class="internalDFN" data-link-type="dfn">Resource</a> in the Annotation's representation. The valid values for a Relationship are: a quoted string containing an IRI, an object that has the "id" property, or an array containing either of these if more than one is allowed.</dd> <dt><dfn data-dfn-type="dfn" id="dfn-class">Class</dfn></dt> <dd><a href="#dfn-resource" class="internalDFN" data-link-type="dfn">Resources</a> may be divided, conceptually, into groups called "classes"; members of a class are known as <a href="#dfn-instance" class="internalDFN" data-link-type="dfn">Instances</a> of the class. Resources are associated with a particular class through <a href="#dfn-type" class="internalDFN" data-link-type="dfn">typing</a>. Classes are identified by <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRIs</a>, i.e., they are also <a href="#dfn-web-resource" class="internalDFN" data-link-type="dfn">Web Resources</a> themselves.</dd> <dt><dfn data-dfn-type="dfn" id="dfn-type">Type</dfn></dt> <dd>A special <a href="#dfn-relationship" class="internalDFN" data-link-type="dfn">Relationship</a> that associates an <a href="#dfn-instance" class="internalDFN" data-link-type="dfn">Instance</a> of a class to the <a href="#dfn-class" class="internalDFN" data-link-type="dfn">Class</a> it belongs to.</dd> <dt><dfn data-dfn-type="dfn" id="dfn-instance">Instance</dfn></dt> <dd>An element of a group of <a href="#dfn-resource" class="internalDFN" data-link-type="dfn">Resources</a> represented by a particular <a href="#dfn-class" class="internalDFN" data-link-type="dfn">Class</a>.</dd> </dl> </section> </section> <!-- End Introduction --> <section id="web-annotation-principles" typeof="bibo:Chapter" resource="#web-annotation-principles" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-web-annotation-principles" resource="#h-web-annotation-principles"><span property="xhv:role" resource="xhv:heading"><span class="secno">2. </span>Web Annotation Principles</span> </h2> <p> The Web Annotation Data Model is defined using the following basic principles: </p> <ul> <li>An Annotation is a rooted, directed graph that represents a relationship between resources.</li> <li>There are two primary types of resource that participate in this relationship, Bodies and Targets.</li> <li>Annotations have 0 or more Bodies.</li> <li>Annotations have 1 or more Targets.</li> <li>The content of the Body resources is related to, and typically "about", the content of the Target resources.</li> <li>Annotations, Bodies and Targets may have their own properties and relationships, typically including creation and descriptive information.</li> <li>The intent behind the creation of an Annotation or the inclusion of a particular Body or Target is an important property and represented by a Motivation resource.</li> </ul> <p></p> <p> The following principles describe additional distinctions regarding the exact nature of Target and Body: </p> <ul> <li>The Target or Body resource may be more specific than the entity identified by the resource's <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRI</a> alone.</li> <li>In particular, <ul> <li>The Target or Body resource may be a specific segment of the resource.</li> <li>The Target or Body resource may be styled in a specific way.</li> <li>The Target or Body resource may be a specific state of the resource.</li> <li>The Target or Body resource may be included in the Annotation to play a specific role.</li> <li>The Target or Body resource may be any combination of the above.</li> </ul> </li> <li>The resource with these constraints is a separate resource from the Annotation, Body or Target, and is called a SpecificResource.</li> <li>The SpecificResource refers to the source resource and the constraints that make it more specific.</li> <li>The identity of the SpecificResource is separate from the descriptions of the constraints.</li> <li>The Body resource may be a choice between multiple resources.</li> </ul> <p></p> <p> The properties of external resources, such as Bodies and Targets, included in the Annotation document are intended as hints to the client, and are not to be considered authoritative information. This includes properties such as the created time, the creating agent, the modification time, any rights assertions, format, language or text direction of the external resource. </p> </section> <section id="web-annotation-framework" typeof="bibo:Chapter" resource="#web-annotation-framework" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-web-annotation-framework" resource="#h-web-annotation-framework"><span property="xhv:role" resource="xhv:heading"><span class="secno">3. </span>Web Annotation Framework</span> </h2> <section id="annotations" typeof="bibo:Chapter" resource="#annotations" property="bibo:hasPart"> <h3 id="h-annotations" resource="#h-annotations"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.1 </span>Annotations</span> </h3> <p> An Annotation is a Web Resource. Typically, an Annotation has a single Body, which is a comment or other descriptive resource, and a single Target that the Body is somehow "about". The Annotation likely also has additional descriptive properties. </p> <p><b>Example Use Case:</b> Alice has written a post that makes a comment about a particular web page. Her client creates an Annotation with the post as the body resource, and the web page as the target resource.</p> <h3 id="model">Model</h3> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>@context</td> <td>Property</td> <td>The context that determines the meaning of the JSON as an Annotation. <br>The Annotation <em class="rfc2119" title="MUST">MUST</em> have 1 or more <code>@context</code> values and <code>http://www.w3.org/ns/anno.jsonld</code> <em class="rfc2119" title="MUST">MUST</em> be one of them. If there is only one value, then it <em class="rfc2119" title="MUST">MUST</em> be provided as a string.</td> </tr> <tr> <td>id</td> <td>Property</td> <td>The identity of the Annotation. <br>An Annotation <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRI</a> that identifies it.</td> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The type of the Annotation. <br>An Annotation <em class="rfc2119" title="MUST">MUST</em> have 1 or more types, and the <code>Annotation</code> class <em class="rfc2119" title="MUST">MUST</em> be one of them.</td> </tr> <tr> <td>Annotation</td> <td>Class</td> <td>The class for Web Annotations. <br>The <code>Annotation</code> class <em class="rfc2119" title="MUST">MUST</em> be associated with an Annotation using <code>type</code>.</td> </tr> <tr> <td>body</td> <td>Relationship</td> <td>The relationship between an Annotation and its Body. <br>There <em class="rfc2119" title="SHOULD">SHOULD</em> be 1 or more <code>body</code> relationships associated with an Annotation but there <em class="rfc2119" title="MAY">MAY</em> be 0. </td> </tr> <tr> <td>target</td> <td>Relationship</td> <td>The relationship between an Annotation and its Target. <br>There <em class="rfc2119" title="MUST">MUST</em> be 1 or more <code>target</code> relationships associated with an Annotation. </td> </tr> </tbody> </table> <h3 id="example">Example</h3> <div class="example"> <div class="example-title marker"><span>Example 1</span><span style="text-transform: none">: Basic Annotation Model</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/post1"</span>, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.com/page1"</span> }</pre> </div> </section> <section id="bodies-and-targets" typeof="bibo:Chapter" resource="#bodies-and-targets" property="bibo:hasPart"> <h3 id="h-bodies-and-targets" resource="#h-bodies-and-targets"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.2 </span>Bodies and Targets</span> </h3> The Web is distributed, with different systems working together to provide access to content. Annotations can be used to link those resources together, being referenced as the Body and Target. The Target resource is always an External Web Resource, but the Body may also be embedded within the Annotation. External Web Resources may be separately dereferenced to retrieve a representation of their state, whereas the embedded Body does not need to be dereferenced as the representation is included within the Annotation's representation. <section id="external-web-resources" typeof="bibo:Chapter" resource="#external-web-resources" property="bibo:hasPart"> <h4 id="h-external-web-resources" resource="#h-external-web-resources"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.2.1 </span>External Web Resources</span> </h4> <p>Web Resources are identified with a <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRI</a> and have various properties, often including a format or language for the resource's content. This information may be recorded as part of the Annotation, even if the representation of the resource must be retrieved from the Web.</p> <p><b>Example Use Case:</b> Beatrice records a long analysis of a patent, and publishes the audio on her website as an mp3. She then creates an Annotation with the mp3 as the body, and the PDF of the patent as the target.</p> <h4 id="model-1">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>id</td> <td>Property</td> <td>The <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRI</a> that identifies the Body or Target resource. <br>Bodies or Targets which are External Web Resources <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>id</code> with the value of the resource's <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRI</a>. </td> </tr> <tr> <td>format</td> <td>Property</td> <td>The format of the Web Resource's content. <br>The Body or Target <em class="rfc2119" title="SHOULD">SHOULD</em> have exactly 1 format associated with it, but <em class="rfc2119" title="MAY">MAY</em> have 0 or more. The value of the property <em class="rfc2119" title="SHOULD">SHOULD</em> be the media-type of the format, following the [<cite><a class="bibref" href="#bib-rfc6838">rfc6838</a></cite>] specification.</td> </tr> <tr> <td>language</td> <td>Property</td> <td>The language of the Web Resource's content. <br>The Body or Target <em class="rfc2119" title="SHOULD">SHOULD</em> have exactly 1 language associated with it, but <em class="rfc2119" title="MAY">MAY</em> have 0 or more, for example if the language cannot be identified or the resource contains a mix of languages. The value of the property <em class="rfc2119" title="SHOULD">SHOULD</em> be a language code following the [<cite><a class="bibref" href="#bib-bcp47">bcp47</a></cite>] specification.</td> </tr> <tr> <td>processingLanguage</td> <td>Property</td> <td>The language to use for text processing algorithms such as line breaking, hyphenation, which font to use, and similar. <br>Each Body and Target <em class="rfc2119" title="MAY">MAY</em> have exactly 1 <code>processingLanguage</code>. The value of the property <em class="rfc2119" title="SHOULD">SHOULD</em> be a language code following the [<cite><a class="bibref" href="#bib-bcp47">bcp47</a></cite>] specification. If this property is not present and the <code>language</code> property is present with a single value, then the client <em class="rfc2119" title="SHOULD">SHOULD</em> use that language for processing requirements.</td> </tr> <tr> <td>textDirection</td> <td>Relationship</td> <td>The overall base direction of the text in the resource. <br>The Body or Target <em class="rfc2119" title="MAY">MAY</em> have exactly 1 textDirection associated with it. The value of the property <em class="rfc2119" title="MUST">MUST</em> be one of the directions defined below (<code>ltr</code>, <code>rtl</code>, or <code>auto</code>). </td> </tr> <tr> <td>ltr</td> <td>Instance</td> <td>The direction that indicates the value of the resource is explicitly directionally isolated left-to-right text.</td> </tr> <tr> <td>rtl</td> <td>Instance</td> <td>The direction that indicates the value of the resource is explicitly directionally isolated right-to-left text.</td> </tr> <tr> <td>auto</td> <td>Instance</td> <td>The direction that indicates the value of the resource is explicitly directionally isolated text, and the direction is to be programmatically determined using the value.</td> </tr> </tbody> </table> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note1"><span>Note</span></div> <div class=""> The [<cite><a class="bibref" href="#bib-iana-media-types">iana-media-types</a></cite>] document provides the official registry of media types that can be used with the <code>format</code> property. The [<cite><a class="bibref" href="#bib-w3c-language-tags">w3c-language-tags</a></cite>] article provides a good overview of the values that implementers can expect to encounter in the <code>language</code> property. The notion of text direction and the definitions of <code>auto</code>, <code>ltr</code> and <code>rtl</code> values are taken explicitly from the HTML5 [<cite><a class="bibref" href="#bib-html5">html5</a></cite>] <code>dir</code> attribute. Please also note that if information provided by the external resource contradicts the information provided by the annotation about it, then the external resource is authoritative and the information from the annotation should be disregarded. </div> </div> <h4 id="example-1">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 2</span><span style="text-transform: none">: External Web Resources</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno2"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/analysis1.mp3"</span>, <span class="hljs-attr">"format"</span>: <span class="hljs-string">"audio/mpeg"</span>, <span class="hljs-attr">"language"</span>: <span class="hljs-string">"fr"</span> }, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.gov/patent1.pdf"</span>, <span class="hljs-attr">"format"</span>: <span class="hljs-string">"application/pdf"</span>, <span class="hljs-attr">"language"</span>: [<span class="hljs-string">"en"</span>, <span class="hljs-string">"ar"</span>], <span class="hljs-attr">"textDirection"</span>: <span class="hljs-string">"ltr"</span>, <span class="hljs-attr">"processingLanguage"</span>: <span class="hljs-string">"en"</span> } }</pre> </div> </section> <section id="classes" typeof="bibo:Chapter" resource="#classes" property="bibo:hasPart"> <h4 id="h-classes" resource="#h-classes"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.2.2 </span>Classes</span> </h4> <p>It is useful for clients to know the general type of a Web Resource in advance. If the client cannot render videos, then knowing that the Body is a video will allow it to avoid needlessly downloading a potentially large content stream. For resources that do not have obvious media types, such as many data formats, it is also useful for a client to know that a resource with the format <code>text/csv</code> should not simply be rendered as plain text, despite the first part of the media type, whereas <code>application/pdf</code> may be able to be rendered by the user agent despite the main type being 'application'.</p> <p><b>Example Use Case:</b> Corina shoots a video of her comment about a website on her phone and uploads it. She associates the video with the website via an Annotation, and her client adds types as a hint to consuming systems.</p> <h4 id="model-2">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The type of the Body or Target resource. <br>The Body or Target <em class="rfc2119" title="MAY">MAY</em> have 1 or more <code>type</code>s, and if so, the value <em class="rfc2119" title="SHOULD">SHOULD</em> be drawn from the list of classes below, but <em class="rfc2119" title="MAY">MAY</em> come from other vocabularies.</td> </tr> <tr> <td>Dataset</td> <td>Class</td> <td>The class for a resource which encodes data in a defined structure.</td> </tr> <tr> <td>Image</td> <td>Class</td> <td>The class for image resources, primarily intended to be seen.</td> </tr> <tr> <td>Video</td> <td>Class</td> <td>The class for video resources, with or without audio.</td> </tr> <tr> <td>Sound</td> <td>Class</td> <td>The class for a resource primarily intended to be heard.</td> </tr> <tr> <td>Text</td> <td>Class</td> <td>The class for a resource primarily intended to be read.</td> </tr> </tbody> </table> <h4 id="example-2">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 3</span><span style="text-transform: none">: Typing of Body and Target</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno3"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/video1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Video"</span> }, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/website1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Text"</span> } }</pre> </div> </section> <section id="segments-of-external-resources" typeof="bibo:Chapter" resource="#segments-of-external-resources" property="bibo:hasPart"> <h4 id="h-segments-of-external-resources" resource="#h-segments-of-external-resources"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.2.3 </span>Segments of External Resources</span> </h4> <p>Many Annotations involve part of an External Web Resource, rather than its entirety. In the Web [<cite><a class="bibref" href="#bib-webarch">webarch</a></cite>], segments of resources are identified using <a href="#dfn-iri" class="internalDFN" data-link-type="dfn">IRIs</a> with a fragment component that at the same time both describes how to extract the segment of interest from the resource, and identifies the extracted content. For simple Annotations, it is valuable to be able to use these IRIs with a fragment component as the identifier for either Body or Target. </p> <p><b>Example Use Case:</b> Dawn wants to describe a particular region of an image. She highlights that area in her client and types in the description. Her client then constructs an IRI with an appropriate fragment component as the target.</p> <h4 id="model-3">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>id</td> <td>Property</td> <td>The IRI that identifies the Body or Target resource. <br>Bodies or Targets which are External Web Resources <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>id</code> with the value of the resource's IRI, and that IRI <em class="rfc2119" title="MAY">MAY</em> have a fragment component. </td> </tr> </tbody> </table> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note2"><span>Note</span></div> <div class="">Note that other properties of resources such as <code>type</code>, <code>format</code> and <code>language</code>, plus those described in the <a href="#other-properties">Other Properties</a> section below, can be applied to the segment of the resource, just like for the full resource.</div> </div> <p> It is important to be aware of the consequences of using an IRI with a fragment component, and the restrictions that using them places on implementations. </p> <ul> <li>Fragments are defined with respect to individual media types. For example, HTML has a specific set of semantics regarding the meaning of the fragment part of the IRI.</li> <li>Not every media type has a fragment specification. For example, Office documents might have a media-type and be published on the web, but not have semantics associated with the fragment part of the IRI.</li> <li>Even if a media type does have a fragment definition, it is often not possible to describe the segment of interest sufficiently precisely. For example, fragments for HTML cannot be used to describe an arbitrary range of text.</li> <li>It is not possible to determine with certainty what is being identified without knowing the media type, as the same fragment string might be possible in different specifications. For example, the same fragment string could identify either a rectangular area in an image, or a strangely named section of an HTML document.</li> <li>IRIs with a fragment component are not compatible with other methods of describing the segment more specifically. For example, it is not possible to describe how to retrieve the correct representation, add style information, or associate a role with the resource, using such IRIs. The method to accomplish these requirements is described in the <a href="#fragment-selector">Fragment Selector</a> portion of the <a href="#specific-resources">Specific Resources</a> section.</li> <li>As IRIs are considered to be opaque strings, annotation systems may not discover annotations with fragment components when searching by means of the IRI without the fragment. For example, an Annotation with the Target <code>http://example.com/image.jpg#xywh=1,1,1,1</code> would not be discovered in a simple search for <code>http://example.com/image.jpg</code>, even though it is part of it.</li> </ul> For more information regarding the use of IRIs with fragment components, please see the Best Practices for Fragment Identifiers and Media Type Definitions [<cite><a class="bibref" href="#bib-fragid-best-practices">fragid-best-practices</a></cite>]. <p></p> <h4 id="example-3">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 4</span><span style="text-transform: none">: IRIs with Fragment Components</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno4"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/description1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.com/image1#xywh=100,100,300,300"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Image"</span>, <span class="hljs-attr">"format"</span>: <span class="hljs-string">"image/jpeg"</span> } }</pre> </div> </section> <section id="embedded-textual-body" typeof="bibo:Chapter" resource="#embedded-textual-body" property="bibo:hasPart"> <h4 id="h-embedded-textual-body" resource="#h-embedded-textual-body"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.2.4 </span>Embedded Textual Body</span> </h4> <p>In many situations, the Body of the Annotation will be in a text format, and created at the same time as the Annotation without a separate IRI. In these cases, the Body's text can be included as part of the Annotation to avoid having to interact with multiple systems. The Body may also have the features of External Web Resources, including especially the language of the text and the format that it is conveyed in.</p> <p><b>Example Use Case:</b> Emily writes a comment about how much she likes an image on a photo sharing website. Her client creates an Annotation with the comment embedded within it, and adds that it is in French and formatted using HTML.</p> <h4 id="model-4">Model</h4> The fundamental features of a Textual Body are: <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>id</td> <td>Property</td> <td>The IRI that identifies the Textual Body. <br>The Body <em class="rfc2119" title="MAY">MAY</em> have exactly 1 IRI that identifies it.</td> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The type of the Textual Body resource. <br>The Body <em class="rfc2119" title="SHOULD">SHOULD</em> have the <code>TextualBody</code> class, and <em class="rfc2119" title="MAY">MAY</em> have other classes.</td> </tr> <tr> <td>TextualBody</td> <td>Class</td> <td>A class assigned to the Body for embedding textual resources within the Annotation. <br>The Body <em class="rfc2119" title="SHOULD">SHOULD</em> have the <code>TextualBody</code> class.</td> </tr> <tr> <td>value</td> <td>Property</td> <td>The character sequence of the content of the Textual Body.<br> There <em class="rfc2119" title="MUST">MUST</em> be exactly 1 <code>value</code> property associated with the TextualBody.</td> </tr> </tbody> </table> <p>Systems <em class="rfc2119" title="SHOULD">SHOULD</em> assume that Textual Bodies have the <code>Text</code> class, described in <a href="#classes">Classes</a> above, even if it is not explicitly included in the <code>type</code> property. </p> <p>The properties of External Web Resources, such as <code>language</code> and <code>format</code> also apply to embedded Textual Body resources.</p> <h4 id="example-4">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 5</span><span style="text-transform: none">: Textual Body</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno5"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"type"</span> : <span class="hljs-string">"TextualBody"</span>, <span class="hljs-attr">"value"</span> : <span class="hljs-string">"<p>j'adore !</p>"</span>, <span class="hljs-attr">"format"</span> : <span class="hljs-string">"text/html"</span>, <span class="hljs-attr">"language"</span> : <span class="hljs-string">"fr"</span> }, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.org/photo1"</span> }</pre> </div> </section> <section id="string-body" typeof="bibo:Chapter" resource="#string-body" property="bibo:hasPart"> <h4 id="h-string-body" resource="#h-string-body"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.2.5 </span>String Body</span> </h4> <p> The simplest type of Body is a plain text string, without additional information or properties. This type of Body is useful for the simplest of Annotations only, and is <em class="rfc2119" title="NOT RECOMMENDED">NOT RECOMMENDED</em> for uses where the Body may need to be referred to from outside of the Annotation. </p> <p><b>Example Use Case</b> Franceska wants to create a quick Annotation from a simple, command line client. She creates the JSON serialization in a text file and sends it to her Annotation server to maintain.</p> <h4 id="model-5">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>bodyValue</td> <td>Property</td> <td>The string value of the Body of the Annotation. <br>There <em class="rfc2119" title="MAY">MAY</em> be exactly 1 <code>bodyValue</code> for an Annotation, and the value <em class="rfc2119" title="MUST">MUST</em> conform to the requirements below. If the <code>bodyValue</code> property is present, then the <code>body</code> relationship <em class="rfc2119" title="MUST NOT">MUST NOT</em> also be present.</td> </tr> </tbody> </table> <p> There are several restrictions on when this form may be used and how it is to be interpreted. <br>The string Body: </p> <ul> <li><em class="rfc2119" title="MUST">MUST</em> be a single <code>xsd:string</code> and the data type <em class="rfc2119" title="MUST NOT">MUST NOT</em> be expressed in the serialization.</li> <li><em class="rfc2119" title="MUST NOT">MUST NOT</em> have a language associated with it.</li> <li><em class="rfc2119" title="MUST">MUST</em> be interpreted as if it were the value of the <code>value</code> property of a Textual Body.</li> <li><em class="rfc2119" title="MUST">MUST</em> be interpreted as if the Textual Body resource had a <code>format</code> property with the value <code>text/plain</code>.</li> <li><em class="rfc2119" title="MUST NOT">MUST NOT</em> have the value of other properties of the Textual Body inferred from similar properties on the Annotation resource.</li> </ul> <p></p> <p>If any of the interpretations above are not correct, then the <a href="#embedded-textual-body"><code>TextualBody</code> construction</a> <em class="rfc2119" title="MUST">MUST</em> be used instead.</p> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note3"><span>Note</span></div> <div class="">Systems <em class="rfc2119" title="MAY">MAY</em> rewrite Annotations to instead use the <a href="#embedded-textual-body"><code>TextualBody</code> construction</a>, rather than maintaining the <code>bodyValue</code> form. The <code>TextualBody</code> construction is preferred, as language and format information are important for clients processing the Annotation.</div> </div> <h4 id="example-5">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 6</span><span style="text-transform: none">: String Body</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno6"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"bodyValue"</span>: <span class="hljs-string">"Comment text"</span>, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.org/target1"</span> }</pre> </div> Which is equivalent to: <div class="example"> <div class="example-title marker"><span>Example 7</span><span style="text-transform: none">: Equivalent Textual Body</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno7"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TextualBody"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"Comment text"</span>, <span class="hljs-attr">"format"</span>: <span class="hljs-string">"text/plain"</span> }, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.org/target1"</span> }</pre> </div> </section> <section id="cardinality-of-bodies-and-targets" typeof="bibo:Chapter" resource="#cardinality-of-bodies-and-targets" property="bibo:hasPart"> <h4 id="h-cardinality-of-bodies-and-targets" resource="#h-cardinality-of-bodies-and-targets"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.2.6 </span>Cardinality of Bodies and Targets</span> </h4> <p>Some Annotations may not have a Body at all, such as a simple highlight or bookmark without any accompanying text. It is also possible for an Annotation to have multiple Bodies and/or Targets. In this case, each Body is considered to be equally related to each Target individually, rather than to the set of all of the Targets.</p> <p><b>Example Use Case:</b> Gretchen highlights a particular region of her ebook in green and, knowing what such a highlight means, she does not give a comment. Her client associates a stylesheet with the Annotation, and does not create a body at all.</p> <p><b>Example Use Case:</b> Hannah associates a tag and a description with two images using a single annotation.</p> <h4 id="model-6">Model</h4> <p>The <code>body</code> relationship is omitted when there is no Body for the Annotation.</p> <p>The <code>body</code> and/or <code>target</code> relationships of the Annotation may be arrays rather than a single object. The values may be either strings containing the IRI of the resource or objects.</p> <h4 id="example-6">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 8</span><span style="text-transform: none">: Annotations without a Body</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno8"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.org/ebook1"</span> }</pre> </div> <div class="example"> <div class="example-title marker"><span>Example 9</span><span style="text-transform: none">: Multiple Bodies or Targets</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno9"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: [ <span class="hljs-string">"http://example.org/description1"</span>, { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TextualBody"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"tag1"</span> } ], <span class="hljs-attr">"target"</span>: [ <span class="hljs-string">"http://example.org/image1"</span>, <span class="hljs-string">"http://example.org/image2"</span> ] }</pre> </div> </section> <section id="choice-between-bodies" typeof="bibo:Chapter" resource="#choice-between-bodies" property="bibo:hasPart"> <h4 id="h-choice-between-bodies" resource="#h-choice-between-bodies"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.2.7 </span>Choice Between Bodies</span> </h4> <p>A Choice has an ordered list of resources from which an application should select only one to process or display. The order is given from the most preferable to least preferable, according to the Annotation's creator or publisher.</p> <p><b>Example Use Case:</b> Irina writes up her discussion of a particular website in both French and English. As the two posts are equivalent, there is no need to display both, and instead she wants French speakers to see the French comment, and everyone else to see the English version. Her client creates as Choice with the English comment listed first.</p> <h4 id="model-7">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>id</td> <td>Property</td> <td>The IRI that identifies the Choice. <br>The Choice <em class="rfc2119" title="MAY">MAY</em> have exactly 1 IRI that identifies it.</td> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The type of the resource. <br>The Choice <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>type</code>, and it <em class="rfc2119" title="MUST">MUST</em> be the <code>CHOICE</code> class.</td> </tr> <tr> <td>Choice</td> <td>Class</td> <td>A construction that conveys to a consuming application that it <em class="rfc2119" title="SHOULD">SHOULD</em> select one of the listed resources to display to the user, and not render all of them.</td> </tr> <tr> <td>items</td> <td>Relationship</td> <td>A list of resources to choose from, with the default option listed first.</td> </tr> </tbody> </table> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note4"><span>Note</span></div> <div class="">Clients <em class="rfc2119" title="MAY">MAY</em> use any algorithm to determine which resource to choose, and <em class="rfc2119" title="SHOULD">SHOULD</em> make use of the information present to do so automatically, but <em class="rfc2119" title="MAY">MAY</em> present a list and require the user to make the decision.</div> </div> <h4 id="example-7">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 10</span><span style="text-transform: none">: Choice</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno10"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Choice"</span>, <span class="hljs-attr">"items"</span>: [ { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/note1"</span>, <span class="hljs-attr">"language"</span>: <span class="hljs-string">"en"</span> }, { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/note2"</span>, <span class="hljs-attr">"language"</span>: <span class="hljs-string">"fr"</span> } ] }, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.org/website1"</span> }</pre> </div> </section> </section> <!-- Bodies and Targets --> <section id="other-properties" typeof="bibo:Chapter" resource="#other-properties" property="bibo:hasPart"> <h3 id="h-other-properties" resource="#h-other-properties"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.3 </span>Other Properties</span> </h3> It is often important to have information about the context in which the Annotation and any External Web Resources were created, modified and used. In particular, <ul> <li>When was the resource created, modified or generated</li> <li>Who created, modified or generated the serialized form of the Annotation or other resource, and who is it intended for</li> <li>Why was the resource included in the annotation, or the annotation created</li> <li>What other identities the resource has</li> <li>How can the resource be used, according to its rights and licensing</li> </ul> <div class="note"> <div class="note-title marker" aria-level="4" role="heading" id="h-note5"><span>Note</span></div> <div class=""> Beyond the features described in this section, other properties <em class="rfc2119" title="MAY">MAY</em> be added features of the Annotation or any resource in the model. Please see the Extension section of [<cite><a class="bibref" href="#bib-annotation-vocab">annotation-vocab</a></cite>] for more information about how to do this.</div> </div> <section id="lifecycle-information" typeof="bibo:Chapter" resource="#lifecycle-information" property="bibo:hasPart"> <h4 id="h-lifecycle-information" resource="#h-lifecycle-information"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.3.1 </span>Lifecycle Information</span> </h4> <p> The person, organization or machine responsible for the Annotation or referenced resource deserves credit for their contribution, and the time at which those resources are created is useful for display ordering and filtering out old, potentially irrelevant content. The creator of the Annotation is also useful for determining the trustworthiness of the Annotation. The software used to create and serialize the Annotation, along with when that activity occurred, is useful for both advertising and debugging issues. </p> <p><b>Example Use Case:</b> Jane writes a review of a restaurant online, and wishes to be associated with that review so that her friends know that it was her review and can trust it. Her client adds her account's identity, and its own identity, to the Annotation and the appropriate timestamps for when the resources were created.</p> <h4 id="model-8">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>creator</td> <td>Relationship</td> <td>The agent responsible for creating the resource. This may be either a human, an organization or a software agent. <br>There <em class="rfc2119" title="SHOULD">SHOULD</em> be exactly 1 <code>creator</code> relationship for Annotation and Body, but <em class="rfc2119" title="MAY">MAY</em> be 0 or more than 1, as the resource's creator may wish to remain anonymous, or multiple agents may have worked together on it. The relationships <em class="rfc2119" title="MAY">MAY</em> be associated with other resources.</td> </tr> <tr> <td>created</td> <td>Property</td> <td>The time at which the resource was created. <br>There <em class="rfc2119" title="SHOULD">SHOULD</em> be exactly 1 <code>created</code> property for Annotation and Body, and <em class="rfc2119" title="MUST NOT">MUST NOT</em> be more than 1. The property <em class="rfc2119" title="MAY">MAY</em> be associated with other resources. The datetime <em class="rfc2119" title="MUST">MUST</em> be a <a href="https://www.w3.org/TR/xmlschema-2/#dateTime">xsd:dateTime</a> with the UTC timezone expressed as "Z".</td> </tr> <tr> <td>generator</td> <td>Relationship</td> <td>The agent responsible for generating the serialization of the Annotation. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or more <code>generator</code> relationships per Annotation</td> </tr> <tr> <td>generated</td> <td>Property</td> <td>The time at which the Annotation serialization was generated. <br>There <em class="rfc2119" title="MAY">MAY</em> be exactly 1 <code>generated</code> property per Annotation, and <em class="rfc2119" title="MUST NOT">MUST NOT</em> be more than 1. The datetime <em class="rfc2119" title="MUST">MUST</em> be a <a href="https://www.w3.org/TR/xmlschema-2/#dateTime">xsd:dateTime</a> with the UTC timezone expressed as "Z".</td> </tr> <tr> <td>modified</td> <td>Property</td> <td>The time at which the resource was modified, after creation. <br>There <em class="rfc2119" title="MAY">MAY</em> be exactly 1 <code>modified</code> property for Annotation and Body, and <em class="rfc2119" title="MUST NOT">MUST NOT</em> be more than 1. The property <em class="rfc2119" title="MAY">MAY</em> be associated with other resources. The datetime <em class="rfc2119" title="MUST">MUST</em> be a <a href="https://www.w3.org/TR/xmlschema-2/#dateTime">xsd:dateTime</a> with the UTC timezone expressed as "Z".</td> </tr> </tbody> </table> <h4 id="example-8">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 11</span><span style="text-transform: none">: Lifecycle Information</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno11"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"creator"</span>: <span class="hljs-string">"http://example.org/user1"</span>, <span class="hljs-attr">"created"</span>: <span class="hljs-string">"2015-01-28T12:00:00Z"</span>, <span class="hljs-attr">"modified"</span>: <span class="hljs-string">"2015-01-29T09:00:00Z"</span>, <span class="hljs-attr">"generator"</span>: <span class="hljs-string">"http://example.org/client1"</span>, <span class="hljs-attr">"generated"</span>: <span class="hljs-string">"2015-02-04T12:00:00Z"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.net/review1"</span>, <span class="hljs-attr">"creator"</span>: <span class="hljs-string">"http://example.net/user2"</span>, <span class="hljs-attr">"created"</span>: <span class="hljs-string">"2014-06-02T17:00:00Z"</span> }, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.com/restaurant1"</span> }</pre> </div> </section> <section id="agents" typeof="bibo:Chapter" resource="#agents" property="bibo:hasPart"> <h4 id="h-agents" resource="#h-agents"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.3.2 </span>Agents</span> </h4> <p> More information about the agents involved in the creation of an Annotation is normally required beyond an IRI that identifies them. This includes whether they are an individual, a group or a piece of software and properties such as real name, account nickname, and email address. </p> <p><b>Example Use Case:</b> Kelly wants to submit an Annotation to a system that does not manage her identity, and would like a pseudonym to be displayed. Her client adds this information to the Annotation to send to the service.</p> <h4 id="model-9">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>id</td> <td>Property</td> <td>The IRI that identifies the agent. <br>An Agent <em class="rfc2119" title="SHOULD">SHOULD</em> have exactly 1 IRI that identifies it, and <em class="rfc2119" title="MUST NOT">MUST NOT</em> have more than 1.</td> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The type of the Agent. <br>An Agent <em class="rfc2119" title="SHOULD">SHOULD</em> have 1 or more classes, from those listed below.</td> </tr> <tr> <td>Person</td> <td>Class</td> <td>The class for a human agent.</td> </tr> <tr> <td>Organization</td> <td>Class</td> <td>The class for an organization, as opposed to an individual.</td> </tr> <tr> <td>Software</td> <td>Class</td> <td>The class for a software agent, such as a user's client or a machine learning system that creates Annotations.</td> </tr> <tr> <td>name</td> <td>Property</td> <td>The name of the agent. <br>Each agent <em class="rfc2119" title="SHOULD">SHOULD</em> have exactly 1 <code>name</code> property, and <em class="rfc2119" title="MAY">MAY</em> have 0 or more.</td> </tr> <tr> <td>nickname</td> <td>Property</td> <td>The nickname of the agent. <br>Each agent <em class="rfc2119" title="SHOULD">SHOULD</em> have exactly 1 <code>nickname</code> property, and <em class="rfc2119" title="MAY">MAY</em> have 0.</td> </tr> <tr> <td>email</td> <td>Relationship</td> <td>The email address associated with the agent, using the mailto: IRI scheme [<cite><a class="bibref" href="#bib-rfc6086">rfc6086</a></cite>]. <br>Each agent <em class="rfc2119" title="MAY">MAY</em> have 1 or more <code>email</code> addresses.</td> </tr> <tr> <td>email_sha1</td> <td>Property</td> <td>The text representation of the result of applying the sha1 algorithm to the email IRI of the agent, including the 'mailto:' prefix and no whitespace. This allows the mail address to be used as an identifier without publishing the address publicly.<br> Each agent <em class="rfc2119" title="MAY">MAY</em> have 1 or more values in the <code>email_sha1</code> property.</td> </tr> <tr> <td>homepage</td> <td>Relationship</td> <td>The home page for the agent.<br>Each agent <em class="rfc2119" title="MAY">MAY</em> have 1 or more home pages.</td> </tr> </tbody> </table> <h4 id="example-9">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 12</span><span style="text-transform: none">: Agents</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno12"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"creator"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/user1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Person"</span>, <span class="hljs-attr">"name"</span>: <span class="hljs-string">"My Pseudonym"</span>, <span class="hljs-attr">"nickname"</span>: <span class="hljs-string">"pseudo"</span>, <span class="hljs-attr">"email_sha1"</span>: <span class="hljs-string">"58bad08927902ff9307b621c54716dcc5083e339"</span> }, <span class="hljs-attr">"generator"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/client1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Software"</span>, <span class="hljs-attr">"name"</span>: <span class="hljs-string">"Code v2.1"</span>, <span class="hljs-attr">"homepage"</span>: <span class="hljs-string">"http://example.org/client1/homepage1"</span> }, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.net/review1"</span>, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.com/restaurant1"</span> }</pre> </div> </section> <section id="intended-audience" typeof="bibo:Chapter" resource="#intended-audience" property="bibo:hasPart"> <h4 id="h-intended-audience" resource="#h-intended-audience"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.3.3 </span>Intended Audience</span> </h4> <p>Beyond the agents that are associated with the creation and management of the Annotation and other resources, it is also useful to know the audience or class of consuming agent that the resource is intended for. This allows for the roles (such as teacher versus student) or properties of the class (such as a suggested age range) of the intended audience to be recorded.</p> <p><b>Example Use Case:</b> Lynda writes some notes about using a particular textbook to teach a class. She adds that the intended audience of the Annotation is teachers (who are using the textbook), to distinguish from other Annotations that might have an audience of the students (who are also using the textbook, but to learn from).</p> <h4 id="model-10">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>id</td> <td>Property</td> <td>The IRI that identifies the Audience. <br>There <em class="rfc2119" title="MAY">MAY</em> be exactly 1 IRI given that identifies the Audience.</td> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The type of the Audience, from the schema.org class structure.<br>The Audience <em class="rfc2119" title="SHOULD">SHOULD</em> have 1 or more <code>type</code>s and they <code><em class="rfc2119" title="SHOULD">SHOULD</em></code> come from the schema.org class structure.</td> </tr> <tr> <td>audience</td> <td>Relationship</td> <td>The relationship between an Annotation and its intended Audience. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or more Audiences for each Annotation.</td> </tr> </tbody> </table> <p>Further properties that describe the audience are used from <a href="http://schema.org/Audience">schema.org's Audience</a> classes. The properties and class names <em class="rfc2119" title="MUST">MUST</em> be prefixed in the JSON with <code>schema:</code> to ensure that they are uniquely distinguished from any other properties or classes.</p> <p> The use of <code>audience</code> does not imply nor enable any access restriction to prevent the annotation from being seen. Systems <em class="rfc2119" title="SHOULD">SHOULD</em> use the information for filtering the display of Annotations based on their knowledge of the user, and not assume that the Annotation or other resources will require authentication and authorization. </p> <h4 id="example-10">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 13</span><span style="text-transform: none">: Audience</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno13"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"audience"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.edu/roles/teacher"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"schema:EducationalAudience"</span>, <span class="hljs-attr">"schema:educationalRole"</span>: <span class="hljs-string">"teacher"</span> }, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.net/classnotes1"</span>, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.com/textbook1"</span> }</pre> </div> </section> <section id="accessibility-of-content" typeof="bibo:Chapter" resource="#accessibility-of-content" property="bibo:hasPart"> <h4 id="h-accessibility-of-content" resource="#h-accessibility-of-content"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.3.4 </span>Accessibility of Content</span> </h4> <p>Access to information is recognized as a basic human right by the United Nations. The Web is able to remove barriers to communication and interaction regardless of various physical impediments. This supports social inclusion, but also increases the potential audience of the information. For resources that are used as the Body or Target of an Annotation, it is valuable to record the features of that resource that provide easier access for users with various and diverse ranges of ability.</p> <p><b>Example Use Case:</b> Megan has very limited ability to hear sound, and prefers to read captions when interacting with videos. She uses her annotation client to make a comment on such a video, and to help others in the same situation, the client includes that the video has this accessibility feature.</p> <h4 id="model-11">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>accessibility</td> <td>Property</td> <td>One or more strings from an enumerated list of values that each describes an accessibility feature that the resource has. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or more accessibility features listed for each Body or Target resource.</td> </tr> </tbody> </table> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note6"><span>Note</span></div> <p class=""> The current list of values is referenced from the <a href="http://schema.org/accessibilityFeature">schema.org description</a> of the <code>accessibilityFeature</code> property. </p> </div> <h4 id="example-11">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 14</span><span style="text-transform: none">: Accessibility</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno14"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"motivation"</span>: <span class="hljs-string">"commenting"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.net/comment1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.com/video1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Video"</span>, <span class="hljs-attr">"accessibility"</span>: <span class="hljs-string">"captions"</span> } }</pre> </div> </section> <section id="motivation-and-purpose" typeof="bibo:Chapter" resource="#motivation-and-purpose" property="bibo:hasPart"> <h4 id="h-motivation-and-purpose" resource="#h-motivation-and-purpose"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.3.5 </span>Motivation and Purpose</span> </h4> <p>In many cases it is important to understand the reasons why the Annotation was created, or why the Textual Body was included in the Annotation, not just the times and agents involved. These reasons are provided by declaring the motivation for the Annotation's creation or the purpose for the inclusion of the Textual Body in the Annotation; the "why" rather than the "who" and "when" described in the previous sections.</p> <p><b>Example Use Case:</b> Noelle annotates a resource intending to bookmark it for future reference, and provides a description and a tag to make it easier to find again. Her client adds the right motivations to the Annotation and the Textual Body resources to capture this.</p> <h4 id="model-12">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>motivation</td> <td>Relationship</td> <td>The relationship between an Annotation and a Motivation. <br>There <em class="rfc2119" title="SHOULD">SHOULD</em> be exactly 1 <code>motivation</code> for each Annotation, and <em class="rfc2119" title="MAY">MAY</em> be 0 or more than 1.</td> </tr> <tr> <td>purpose</td> <td>Relationship</td> <td>The reason for the inclusion of the Textual Body within the Annotation. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or more <code>purpose</code>s associated with a <code>TextualBody</code>.</td> </tr> <tr> <td>Motivation</td> <td>Class</td> <td>The Motivation for an Annotation is a reason for its creation, and might include things like Replying to another annotation, Commenting on a resource, or Linking to a related resource. </td> </tr> <tr> <th colspan="3"><strong>Motivations</strong></th> </tr> <tr> <td>assessing</td> <td>Instance</td> <td> The motivation for when the user intends to assess the target resource in some way, rather than simply make a comment about it. For example to write a review or assessment of a book, assess the quality of a dataset, or provide an assessment of a student's work.</td> </tr> <tr> <td>bookmarking</td> <td>Instance </td> <td> The motivation for when the user intends to create a bookmark to the Target or part thereof. For example an Annotation that bookmarks the point in a text where the reader finished reading.</td> </tr> <tr> <td>classifying</td> <td>Instance </td> <td> The motivation for when the user intends to classify the Target as something. For example to classify an image as a portrait.</td> </tr> <tr> <td>commenting</td> <td>Instance </td> <td> The motivation for when the user intends to comment about the Target. For example to provide a commentary about a particular PDF document.</td> </tr> <tr> <td>describing</td> <td>Instance </td> <td> The motivation for when the user intends to describe the Target, as opposed to (for example) a comment about it. For example describing the above PDF's contents, rather than commenting on their accuracy.</td> </tr> <tr> <td>editing</td> <td>Instance </td> <td> The motivation for when the user intends to request a change or edit to the Target resource. For example an Annotation that requests a typo to be corrected. </td> </tr> <tr> <td>highlighting</td> <td>Instance </td> <td> The motivation for when the user intends to highlight the Target resource or segment of it. For example to draw attention to the selected text that the annotator disagrees with.</td> </tr> <tr> <td>identifying</td> <td>Instance</td> <td>The motivation for when the user intends to assign an identity to the Target. For example to associate the IRI that identifies a city with a mention of the city in a web page.</td> </tr> <tr> <td>linking</td> <td>Instance</td> <td>The motivation for when the user intends to link to a resource related to the Target.</td> </tr> <tr> <td>moderating</td> <td>Instance </td> <td> The motivation for when the user intends to assign some value or quality to the Target. For example annotating an Annotation to moderate it up in a trust network or threaded discussion.</td> </tr> <tr> <td>questioning</td> <td>Instance </td> <td> The motivation for when the user intends to ask a question about the Target. For example to ask for assistance with a particular section of text, or question its veracity.</td> </tr> <tr> <td>replying</td> <td>Instance </td> <td> The motivation for when the user intends to reply to a previous statement, either an Annotation or another resource. For example providing the assistance requested in the above.</td> </tr> <tr> <td>tagging</td> <td>Instance </td> <td> The motivation for when the user intends to associate a tag with the Target.</td> </tr> </tbody> </table> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note7"><span>Note</span></div> <div class=""> For more information about how Motivations can be inter-related and new Motivations created, please see the Annotation Vocabulary document [<cite><a class="bibref" href="#bib-annotation-vocab">annotation-vocab</a></cite>]. <a href="#purpose-for-external-web-resources">Section 4.1</a> describes how to associate a Motivation with and external web resource. </div> </div> <h4 id="example-12">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 15</span><span style="text-transform: none">: Motivation and Purpose</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno15"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"motivation"</span>: <span class="hljs-string">"bookmarking"</span>, <span class="hljs-attr">"body"</span>: [ { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TextualBody"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"readme"</span>, <span class="hljs-attr">"purpose"</span>: <span class="hljs-string">"tagging"</span> }, { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TextualBody"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"A good description of the topic that bears further investigation"</span>, <span class="hljs-attr">"purpose"</span>: <span class="hljs-string">"describing"</span> } ], <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.com/page1"</span> }</pre> </div> </section> <section id="rights-information" typeof="bibo:Chapter" resource="#rights-information" property="bibo:hasPart"> <h4 id="h-rights-information" resource="#h-rights-information"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.3.6 </span>Rights Information</span> </h4> <p>It is common practice to associate a license or rights statement with a resource, in order to describe the conditions under which it may be used. This allows the user to make appropriate use of the resource, as well as allowing some automated systems to confirm that the usage is permitted. As the Annotation, Bodies, and Targets might be created with different licences or rights, each can be described separately. The rights of resources other than the Annotation itself are considered informative hints to a consuming client application.</p> <p><b>Example Use Case:</b> Ophelia writes a review of a product and wishes to be known as the author of the review, however does not mind how the Annotation that relates the review and the product together is used. She asserts these two separate rights statements with the Annotation and Body individually. She does not know the rights asserted on the target resource, so does not specify any.</p> <h4 id="model-13">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>rights</td> <td>Relationship</td> <td>The relationship between an Annotation, Body or Target and a Web Resource that contains the rights statement or license under which the resource may be used. <br>There <em class="rfc2119" title="MAY">MAY</em> be at exactly 0 or more <code>rights</code> statements or licenses linked from each resource, and the value <em class="rfc2119" title="MUST">MUST</em> be an IRI.</td> </tr> </tbody> </table> <h4 id="example-13">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 16</span><span style="text-transform: none">: Rights</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno16"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"rights"</span>: <span class="hljs-string">"https://creativecommons.org/publicdomain/zero/1.0/"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.net/review1"</span>, <span class="hljs-attr">"rights"</span>: <span class="hljs-string">"http://creativecommons.org/licenses/by-nc/4.0/"</span> }, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.com/product1"</span> }</pre> </div> </section> <section id="other-identities" typeof="bibo:Chapter" resource="#other-identities" property="bibo:hasPart"> <h4 id="h-other-identities" resource="#h-other-identities"><span property="xhv:role" resource="xhv:heading"><span class="secno">3.3.7 </span>Other Identities</span> </h4> <p>In a massively distributed system such as the Web, information is often copied. In order to track the provenance of the Annotation and other related resources, it is possible to record additional IRIs that also identify the resource. These may be dereferencable "permalinks", identities assigned by a client offline without any knowledge of the web, or simply the location where the current harvesting system discovered the resource.</p> <p><b>Example Use Case:</b> Petra creates an Annotation and sends it to multiple systems to maintain, one personal and one public. She wants to ensure that the copies can be aligned, and so she sets a UUID as the canonical IRI, allowing the service to assign an HTTP IRI for it. A subsequent system then harvests the public copy, maintaining the canonical UUID as discovered, then moves the original HTTP IRI to <code>via</code>, replacing it with an IRI under its control. </p> <h4 id="model-14">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>canonical</td> <td>Relationship</td> <td>The relationship between an Annotation, Body or Target and the IRI that <em class="rfc2119" title="SHOULD">SHOULD</em> be used to track its identity, regardless of where it is made accessible. If this property is set, then systems <em class="rfc2119" title="MUST NOT">MUST NOT</em> change or delete it. Systems <em class="rfc2119" title="SHOULD NOT">SHOULD NOT</em> assign a canonical IRI without prior agreement if one is not present, as the Annotation could already have a canonical IRI elsewhere. <br>There <em class="rfc2119" title="MAY">MAY</em> be exactly 1 <code>canonical</code> IRI for each resource.</td> </tr> <tr> <td>via</td> <td>Relationship</td> <td>The relationship between an Annotation, Body or Target and the IRI of where that resource was obtained from by the system that is making it available. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or more IRIs provided in <code>via</code> for each resource.</td> </tr> </tbody> </table> <h4 id="example-14">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 17</span><span style="text-transform: none">: Other Identities</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno17"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"canonical"</span>: <span class="hljs-string">"urn:uuid:dbfb1861-0ecf-41ad-be94-a584e5c4f1df"</span>, <span class="hljs-attr">"via"</span>: <span class="hljs-string">"http://other.example.org/anno1"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.net/review1"</span>, <span class="hljs-attr">"rights"</span>: <span class="hljs-string">"http://creativecommons.org/licenses/by/4.0/"</span> }, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.com/product1"</span> }</pre> </div> </section> </section> <!-- /Metadata --> </section> <!-- /Annotation --> <section id="specific-resources" typeof="bibo:Chapter" resource="#specific-resources" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-specific-resources" resource="#h-specific-resources"><span property="xhv:role" resource="xhv:heading"><span class="secno">4. </span>Specific Resources</span> </h2> <p> While it is possible using only the constructions described above to create Annotations that reference parts of resources by using IRIs with a fragment component, there are many situations when this is not sufficient. For example, even a simple circular region of an image, or a diagonal line across it, are not possible. Selecting an arbitrary span of text in an HTML page, perhaps the simplest annotation concept, is also not supported by fragments. Furthermore, there are non-segment use cases that require a client to retrieve a specific state or representation of the resource, to style it in a particular way, to associate a role with the resource that is specific to the Annotation's use of it, or for the Annotation to only apply when the resource is used in a particular context. </p> <p>The Web Annotation Data Model uses a new type of resource to capture these Annotation-specific requirements: a SpecificResource. The SpecificResource is used in between the Annotation and the Body or Target, as appropriate, to capture additional information about how it is used in the Annotation. The descriptions are typically referenced from the SpecificResource as separate entities and can be of various types to capture the different requirements. For example, if the Target of the Annotation is a circular region of an image, then the SpecificResource is the circular region, it is described by a Selector, and is also associated with the source Image resource.</p> <p>Specific Resources and Specifiers <em class="rfc2119" title="MAY">MAY</em> be External Web Resources with their own IRIs, such as in the example for the <a href="#selectors">Selector</a> construction, however it is <em class="rfc2119" title="RECOMMENDED">RECOMMENDED</em> that they be included in the Annotation's representation to avoid requiring unnecessary network interactions to retrieve all of the information needed to process the Annotation.</p> <p> The types of additional specificity that are defined by this document: </p> <ul> <li><a href="#purpose-for-external-web-resources">Purpose:</a> Describe the purpose of including the source resource in the Annotation</li> <li><a href="#selectors">Selector:</a> Describe the desired segment of the source resource for the Annotation</li> <li><a href="#states">State:</a> Describe the desired representation of the source resource for the Annotation</li> <li><a href="#styles">Style:</a> Describe the style in which the source resource should be presented for the Annotation</li> <li><a href="#rendering-software">Rendering:</a> Describe the system used by the client for rendering the resource when the annotation was created</li> <li><a href="#scope-of-a-resource">Scope:</a> Describe the scope in which the source resource applies for the Annotation</li> </ul> <p></p> <h2 id="model-15">Model</h2> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>id</td> <td>Property</td> <td>The identity of the Specific Resource. <br>A Specific Resource <em class="rfc2119" title="MAY">MAY</em> have exactly 1 IRI that identifies it.</td> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The class of the Specific Resource. <br>The Specific Resource <em class="rfc2119" title="SHOULD">SHOULD</em> have the <code>SpecificResource</code> class.</td> </tr> <tr> <td>SpecificResource</td> <td>Class</td> <td>The class for Specific Resources. <br>The <code>SpecificResource</code> class <em class="rfc2119" title="SHOULD">SHOULD</em> be associated with a Specific Resource to be clear as to its role as a more specific region or state of another resource.</td> </tr> <tr> <td>source</td> <td>Relationship</td> <td>The relationship between a Specific Resource and the resource that it is a more specific representation of. <br>There <em class="rfc2119" title="MUST">MUST</em> be exactly 1 <code>source</code> relationship associated with a Specific Resource. The source resource <em class="rfc2119" title="MAY">MAY</em> be described in detail, as defined above, or be just the resource's IRI. </td> </tr> </tbody> </table> <p>The same Specific Resource and Specifier classes are used for both Target and Body. The examples in this section only use one of these, however the same model applies for both.</p> <section id="purpose-for-external-web-resources" typeof="bibo:Chapter" resource="#purpose-for-external-web-resources" property="bibo:hasPart"> <h3 id="h-purpose-for-external-web-resources" resource="#h-purpose-for-external-web-resources"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.1 </span>Purpose for External Web Resources</span> </h3> <p>As well as Textual Bodies, External Web Resources may also be given a Motivation as to their inclusion within the Annotation. This is done using the Specific Resource pattern, as the purpose specifies the way in which the resource is used in the context of the Annotation in the same way as a Selector describes the segment or a State describes the representation.</p> <p><b>Example Use Case:</b> Qitara wants to tag a photo with an identifier for a city, rather than just type the city's name which could be ambiguous. Her client uses a well-known IRI for the city having done a search for it, and creates a Specific Resource to manage that purpose assignment.</p> <h3 id="model-16">Model</h3> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>purpose</td> <td>Relationship</td> <td>The reason for including the Web Resource in the Annotation. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or more Motivations associated with the SpecificResource using <code>purpose</code>.</td> </tr> </tbody> </table> <h3 id="example-15">Example</h3> <div class="example"> <div class="example-title marker"><span>Example 18</span><span style="text-transform: none">: Resource with Purpose</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno18"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"SpecificResource"</span>, <span class="hljs-attr">"purpose"</span>: <span class="hljs-string">"tagging"</span>, <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/city1"</span> }, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/photo1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Image"</span> } }</pre> </div> </section> <section id="selectors" typeof="bibo:Chapter" resource="#selectors" property="bibo:hasPart"> <h3 id="h-selectors" resource="#h-selectors"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.2 </span>Selectors</span> </h3> <p>Many Annotations refer to part of a resource, rather than all of it, as the Target. We call that part of the resource a Segment (of Interest). A Selector is used to describe how to determine the Segment from within the Source resource. The nature of the Selector will be dependent on the type of resource, as the methods to describe Segments from various media-types will differ. Multiple Selectors can be given to describe the same Segment in different ways in order to maximize the chances that it will be discoverable later, and that the consuming user agent will be able to use at least one of the Selectors. </p> <p><b>Example Use Case:</b> Ramona wants to associate a selection of text in a web page, with a slice of a dataset. She selects both using her client, and creates the Annotation with a SpecificResource that has a Selector for each of the Body and the Target.</p> <h3 id="model-17">Model</h3> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>selector</td> <td>Relationship</td> <td>The relationship between a Specific Resource and a Selector. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or more <code>selector</code> relationships associated with a Specific Resource. Multiple Selectors <em class="rfc2119" title="SHOULD">SHOULD</em> select the same content, however some Selectors will not have the same precision as others. Consuming user agents <em class="rfc2119" title="MUST">MUST</em> pick one of the described segments, if they are different. </td> </tr> </tbody> </table> <h3 id="example-16">Example</h3> <div class="example"> <div class="example-title marker"><span>Example 19</span><span style="text-transform: none">: Selectors</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno19"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/page1"</span>, <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"http://example.org/paraselector1"</span> }, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.com/dataset1"</span>, <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"http://example.org/dataselector1"</span> } }</pre> </div> <section id="fragment-selector" typeof="bibo:Chapter" resource="#fragment-selector" property="bibo:hasPart"> <h4 id="h-fragment-selector" resource="#h-fragment-selector"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.2.1 </span>Fragment Selector</span> </h4> <p>As the most well understood mechanism for selecting a Segment is to use the fragment part of an IRI defined by the representation's media type, it is useful to allow this as a description mechanism via a Selector. This allows existing and future fragment specifications to be used with Specific Resources in a consistent way. To be clear about which fragment type is being used, the Selector may refer to the specification that defines it.</p> <p><b>Example Use Case:</b> Sally wants to associate part of a video as the description of an image. She selects the time range within the video and clicks that it is describing the target. Her client then creates the Annotation using a SpecificResource with a FragmentSelector and the <code>describing</code> Motivation. </p> <h4 id="model-18">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The class of the Selector.<br>FragmentSelectors <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>type</code> and the value <em class="rfc2119" title="MUST">MUST</em> be <code>FragmentSelector</code>.</td> </tr> <tr> <td>FragmentSelector</td> <td>Class</td> <td>A resource which describes the Segment through the use of the fragment component of an IRI.</td> </tr> <tr> <td>value</td> <td>Property</td> <td>The contents of the fragment component of an IRI that describes the Segment.<br> The FragmentSelector <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>value</code> property.</td> </tr> <tr> <td>conformsTo</td> <td>Relationship</td> <td>The relationship between the FragmentSelector and the specification that defines the syntax of the IRI fragment in the <code>value</code> property. <br>The Fragment Selector <em class="rfc2119" title="SHOULD">SHOULD</em> have exactly 1 <code>conformsTo</code> link to the specification that defines the syntax of the fragment and <em class="rfc2119" title="MUST NOT">MUST NOT</em> have more than 1.</td> </tr> </tbody> </table> <p>It is <em class="rfc2119" title="RECOMMENDED">RECOMMENDED</em> to use <code>FragmentSelector</code> as a consistent method compatible with other means of describing SpecificResources, rather than using the IRI with a fragment directly. Consuming applications <em class="rfc2119" title="SHOULD">SHOULD</em> be aware of both.</p> <p class="informative"> The following IRIs are some of the specifications that define the semantics of fragments, and hence may be used with the <code>conformsTo</code> relationship. Other IRIs <em class="rfc2119" title="MAY">MAY</em> also be used. </p> <table class="model"> <tbody> <tr> <th>Name</th> <th>Fragment Specification</th> <th>Description</th> </tr> <tr> <td>HTML</td> <td>http://tools.ietf.org/rfc/rfc3236</td> <td>[<cite><a class="bibref" href="#bib-rfc3236">rfc3236</a></cite>] Example: <code>namedSection</code> </td> </tr> <tr> <td>PDF</td> <td>http://tools.ietf.org/rfc/rfc3778</td> <td>[<cite><a class="bibref" href="#bib-rfc3778">rfc3778</a></cite>] Example: <code>page=10&viewrect=50,50,640,480</code></td> </tr> <tr> <td>Plain Text</td> <td>http://tools.ietf.org/rfc/rfc5147</td> <td>[<cite><a class="bibref" href="#bib-rfc5147">rfc5147</a></cite>] Example: <code>char=0,10</code></td> </tr> <tr> <td>XML</td> <td>http://tools.ietf.org/rfc/rfc3023</td> <td>[<cite><a class="bibref" href="#bib-rfc3023">rfc3023</a></cite>] Example: <code>xpointer(/a/b/c)</code></td> </tr> <tr> <td>RDF/XML</td> <td>http://tools.ietf.org/rfc/rfc3870</td> <td>[<cite><a class="bibref" href="#bib-rfc3870">rfc3870</a></cite>] Example: <code>namedResource</code></td> </tr> <tr> <td>CSV</td> <td>http://tools.ietf.org/rfc/rfc7111</td> <td>[<cite><a class="bibref" href="#bib-rfc7111">rfc7111</a></cite>] Example: <code>row=5-7</code></td> </tr> <tr> <td>Media</td> <td>http://www.w3.org/TR/media-frags/</td> <td>[<cite><a class="bibref" href="#bib-media-frags">media-frags</a></cite>] Example: <code>xywh=50,50,640,480</code></td> </tr> <tr> <td>SVG</td> <td>http://www.w3.org/TR/SVG/</td> <td>[<cite><a class="bibref" href="#bib-SVG11">SVG11</a></cite>] Example: <code>svgView(viewBox(50,50,640,480))</code></td> </tr> <tr> <td>EPUB3</td> <td>http://www.idpf.org/epub/linking/cfi/epub-cfi.html</td> <td>[<cite><a class="bibref" href="#bib-cfi">cfi</a></cite>] Example: <code>epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/3:10)</code></td> </tr> </tbody> </table> <p></p> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note8"><span>Note</span></div> <div class=""> The IRI that uses the fragment may be reconstructed by concatenating the <code>source</code>, a <code>#</code>, and the <code>value</code>. For example, the IRI from the example below would be <code>http://example.org/video1#t=30,60</code>. </div> </div> <h4 id="example-17">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 20</span><span style="text-transform: none">: Fragment Selector</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno20"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/video1"</span>, <span class="hljs-attr">"purpose"</span>: <span class="hljs-string">"describing"</span>, <span class="hljs-attr">"selector"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"FragmentSelector"</span>, <span class="hljs-attr">"conformsTo"</span>: <span class="hljs-string">"http://www.w3.org/TR/media-frags/"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"t=30,60"</span> } }, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.org/image1"</span> }</pre> </div> </section> <section id="css-selector" typeof="bibo:Chapter" resource="#css-selector" property="bibo:hasPart"> <h4 id="h-css-selector" resource="#h-css-selector"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.2.2 </span>CSS Selector</span> </h4> <p>One of the most common ways to select elements in the HTML Document Object Model is to use CSS Selectors [<cite><a class="bibref" href="#bib-CSS3-selectors">CSS3-selectors</a></cite>]. CSS Selectors allow for a wide variety of well supported ways to describe the path to an element in a web page, and thus cover many of the basic use cases for Web Annotation. Results are not defined for when a CSS Selector is applied to a representation that does not conform to the Document Object Model.</p> <p>Note that CSS may also be used for <a href="#styles">styling</a> a resource within an annotation. This class is specifically to re-use the CSS Selector mechanism to select a segment of a resource that conforms to the Document Object Model.</p> <p><b>Example Use Case:</b> Teynika selects a paragraph in a web page that she wishes to write a note about. Her client calculates a CSS path that cleanly identifies that element and adds it to the annotation.</p> <h4 id="model-19">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The class of the Selector.<br>CssSelectors <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>type</code> and the value <em class="rfc2119" title="MUST">MUST</em> be <code>CssSelector</code>.</td> </tr> <tr> <td>CssSelector</td> <td>Class</td> <td>The type of the CSS Selector resource. <br>CSS Selectors <em class="rfc2119" title="MUST">MUST</em> have this class associated with them.</td> </tr> <tr> <td>value</td> <td>Property</td> <td>The CSS selection path to the Segment. <br>There <em class="rfc2119" title="MUST">MUST</em> be exactly 1 <code>value</code> associated with a CSS Selector.</td> </tr> </tbody> </table> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note9"><span>Note</span></div> <div class=""> Implementers <em class="rfc2119" title="SHOULD">SHOULD</em> use only commonly supported features of CSS that directly contribute to selection of an element or content, rather than styling or transformation, in order to maximize interoperability between systems. </div> </div> <h4 id="example-18">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 21</span><span style="text-transform: none">: CSS Selector</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno21"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/note1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/page1.html"</span>, <span class="hljs-attr">"selector"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"CssSelector"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"#elemid > .elemclass + p"</span> } } }</pre> </div> </section> <section id="xpath-selector" typeof="bibo:Chapter" resource="#xpath-selector" property="bibo:hasPart"> <h4 id="h-xpath-selector" resource="#h-xpath-selector"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.2.3 </span>XPath Selector</span> </h4> <p>Another common method of selecting elements and content within a resource that supports the Document Object Model (DOM), such as documents in XML or HTML, is to use an XPath selection [<cite><a class="bibref" href="#bib-DOM-Level-3-XPath">DOM-Level-3-XPath</a></cite>]. XPath allows a great deal of flexibility when describing the path through the structure to the selected content. Results are not defined for when an XPath Selector is applied to a representation that does not conform to the DOM.</p> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note10"><span>Note</span></div> <div class=""> Implementers should note that the <a href="https://www.w3.org/TR/html5/syntax.html#optional-tags">HTML5 specification</a> allows parsers to add elements into the DOM that are considered to be missing. XPaths <em class="rfc2119" title="SHOULD">SHOULD</em> be constructed to include these elements, rather than from the element structure in the document. </div> </div> <p><b>Example Use Case:</b> Ulrika selects a span within a table in an HTML page and writes a note about the content. To refer explicitly to this element, her client carefully constructs an XPath to identify it as the target of the Annotation.</p> <h4 id="model-20">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The class of the Selector.<br>XPath Selectors <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>type</code> and the value <em class="rfc2119" title="MUST">MUST</em> be <code>XPathSelector</code>.</td> </tr> <tr> <td>XPathSelector</td> <td>Class</td> <td>The type of the XPath Selector resource. <br>XPath Selectors <em class="rfc2119" title="MUST">MUST</em> have this class associated with them.</td> </tr> <tr> <td>value</td> <td>Property</td> <td>The xpath to the selected segment. <br>There <em class="rfc2119" title="MUST">MUST</em> be exactly 1 <code>value</code> associated with an XPath Selector.</td> </tr> </tbody> </table> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note11"><span>Note</span></div> <div class=""> Implementers <em class="rfc2119" title="SHOULD">SHOULD</em> use only commonly supported features of XPath that directly contribute to selection of an element or content in order to maximize interoperability between systems. </div> </div> <h4 id="example-19">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 22</span><span style="text-transform: none">: XPath Selector</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno22"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/note1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/page1.html"</span>, <span class="hljs-attr">"selector"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"XPathSelector"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"/html/body/p[2]/table/tr[2]/td[3]/span"</span> } } }</pre> </div> </section> <section id="text-quote-selector" typeof="bibo:Chapter" resource="#text-quote-selector" property="bibo:hasPart"> <h4 id="h-text-quote-selector" resource="#h-text-quote-selector"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.2.4 </span>Text Quote Selector</span> </h4> <p>This Selector describes a range of text by copying it, and including some of the text immediately before (a prefix) and after (a suffix) it to distinguish between multiple copies of the same sequence of characters. </p> <p> For example, if the document were again "abcdefghijklmnopqrstuvwxyz", one could select "efg" by a prefix of "abcd", the match of "efg" and a suffix of "hijk". </p> <p><b>Example Use Case:</b> Valeria selects a typo ('anotation') in a web page and adds a comment that it should be replaced with the correct spelling ('annotation').</p> <h4 id="model-21">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The class of the Selector.<br>Text Quote Selectors <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>type</code> and the value <em class="rfc2119" title="MUST">MUST</em> be <code>TextQuoteSelector</code>.</td> </tr> <tr> <td>TextQuoteSelector</td> <td>Class</td> <td>The class for a Selector that describes a textual segment by means of quoting it, plus passages before or after it. <br>The TextQuoteSelector <em class="rfc2119" title="MUST">MUST</em> have this class associated with it.</td> </tr> <tr> <td>exact</td> <td>Property</td> <td>A copy of the text which is being selected, after normalization. <br>Each TextQuoteSelector <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>exact</code> property. </td> </tr> <tr> <td>prefix</td> <td>Property</td> <td>A snippet of text that occurs immediately before the text which is being selected. <br>Each TextQuoteSelector <em class="rfc2119" title="SHOULD">SHOULD</em> have exactly 1 <code>prefix</code> property, and <em class="rfc2119" title="MUST NOT">MUST NOT</em> have more than 1.</td> </tr> <tr> <td>suffix</td> <td>Property</td> <td>The snippet of text that occurs immediately after the text which is being selected. <br>Each TextQuoteSelector <em class="rfc2119" title="SHOULD">SHOULD</em> have exactly 1 <code>suffix</code> property, and <em class="rfc2119" title="MUST NOT">MUST NOT</em> have more than 1.</td> </tr> </tbody> </table> <p>The selection of the text <em class="rfc2119" title="MUST">MUST</em> be in terms of unicode code points (the "character number"), not in terms of code units (that number expressed using a selected data type). Selections <em class="rfc2119" title="SHOULD NOT">SHOULD NOT</em> start or end in the middle of a grapheme cluster. The selection <em class="rfc2119" title="MUST">MUST</em> be based on the <a href="https://www.w3.org/International/questions/qa-visual-vs-logical">logical order</a> of the text, rather than the visual order, especially for bidirectional text. For more information about the character model of text used on the web, see [<cite><a class="bibref" href="#bib-charmod">charmod</a></cite>].</p> <p>The text <em class="rfc2119" title="MUST">MUST</em> be normalized before recording in the Annotation. Thus HTML/XML tags <em class="rfc2119" title="SHOULD">SHOULD</em> be removed, and character entities <em class="rfc2119" title="SHOULD">SHOULD</em> be replaced with the character that they encode. Note that this does not affect the state of the content of the document being annotated, only the way that the content is recorded in the Annotation document.</p> <p>If, after processing the prefix, exact, and suffix, the user agent discovers multiple matching text sequences, then the selection <em class="rfc2119" title="SHOULD">SHOULD</em> be treated as matching all of the matches.</p> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note12"><span>Note</span></div> <div class="">If the content is under copyright or has other rights asserted on its use, then this method of selecting text is potentially dangerous. A user might select the entire text of the document to annotate, which would not be desirable to copy into the Annotation and share. For static texts with access and/or distribution restrictions, the use of the Text Position Selector is perhaps more appropriate. </div> </div> <h4 id="example-20">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 23</span><span style="text-transform: none">: Text Quote Selector</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno23"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/comment1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/page1"</span>, <span class="hljs-attr">"selector"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TextQuoteSelector"</span>, <span class="hljs-attr">"exact"</span>: <span class="hljs-string">"anotation"</span>, <span class="hljs-attr">"prefix"</span>: <span class="hljs-string">"this is an "</span>, <span class="hljs-attr">"suffix"</span>: <span class="hljs-string">" that has some"</span> } } }</pre> </div> </section> <section id="text-position-selector" typeof="bibo:Chapter" resource="#text-position-selector" property="bibo:hasPart"> <h4 id="h-text-position-selector" resource="#h-text-position-selector"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.2.5 </span>Text Position Selector</span> </h4> <p> This Selector describes a range of text by recording the start and end positions of the selection in the stream. Position 0 would be immediately before the first character, position 1 would be immediately before the second character, and so on. The start character is thus included in the list, but the end character is not.</p> <p> For example, if the document was "abcdefghijklmnopqrstuvwxyz", the start was 4, and the end was 7, then the selection would be "efg". </p> <p><b>Example Use Case:</b> Wendy writes a review of an ebook that does not allow its content to be extracted and copied. Her client describes the selection using its start and end position in the content.</p> <h4 id="model-22">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The class of the Selector.<br>Text Position Selectors <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>type</code> and the value <em class="rfc2119" title="MUST">MUST</em> be <code>TextPositionSelector</code>.</td> </tr> <tr> <td>TextPositionSelector</td> <td>Class</td> <td>The class for a Selector which describes a range of text based on its start and end positions. <br>The TextPositionSelector <em class="rfc2119" title="MUST">MUST</em> have this class associated with it.</td> </tr> <tr> <td>start</td> <td>Property</td> <td>The starting position of the segment of text. The first character in the full text is character position 0, and the character is included within the segment. <br>Each TextPositionSelector <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>start</code> property, and the value <em class="rfc2119" title="MUST">MUST</em> be a non-negative integer.</td> </tr> <tr> <td>end</td> <td>Property</td> <td>The end position of the segment of text. The character is not included within the segment. <br>Each TextPositionSelector <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>end</code> property, and the value <em class="rfc2119" title="MUST">MUST</em> be a non-negative integer.</td> </tr> </tbody> </table> <p>The text <em class="rfc2119" title="MUST">MUST</em> be selected and normalized in the same way as for the Text Quote Selector before counting the number of characters to determine the start and end positions.</p> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note13"><span>Note</span></div> <div class=""> The use of this Selector does not require text to be copied from the Source document into the Annotation graph, unlike the Text Quote Selector, but is very brittle with regards to changes to the resource. Any edits or dynamically transcluded content may change the selection, and thus it is <em class="rfc2119" title="RECOMMENDED">RECOMMENDED</em> that a <a href="#states">State</a> be additionally used to help identify the correct representation. </div> </div> <h4 id="example-21">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 24</span><span style="text-transform: none">: Text Position Selector</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno24"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/review1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/ebook1"</span>, <span class="hljs-attr">"selector"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TextPositionSelector"</span>, <span class="hljs-attr">"start"</span>: <span class="hljs-number">412</span>, <span class="hljs-attr">"end"</span>: <span class="hljs-number">795</span> } } }</pre> </div> </section> <section id="data-position-selector" typeof="bibo:Chapter" resource="#data-position-selector" property="bibo:hasPart"> <h4 id="h-data-position-selector" resource="#h-data-position-selector"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.2.6 </span>Data Position Selector</span> </h4> <p> Similar to the Text Position Selector, the Data Position Selector uses the same properties but works at the byte in bitstream level rather than the character in text level.</p> <p><b>Example Use Case:</b> Xena writes comments about regions of online disk images for forensic purposes and describing emulation requirements. Her client generates the start and end positions from the binary stream, rather than the more human readable display she is using.</p> <h4 id="model-23">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The class of the Selector.<br>Data Position Selectors <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>type</code> and the value <em class="rfc2119" title="MUST">MUST</em> be <code>DataPositionSelector</code>.</td> </tr> <tr> <td>DataPositionSelector</td> <td>Class</td> <td>The class for a Selector which describes a range of data based on its start and end positions within the byte stream. <br>The DataPositionSelector <em class="rfc2119" title="MUST">MUST</em> have this class associated with it.</td> </tr> <tr> <td>start</td> <td>Property</td> <td>The starting position of the segment of data. The first byte is character position 0. <br>Each DataPositionSelector <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>start</code> property.</td> </tr> <tr> <td>end</td> <td>Property</td> <td>The end position of the segment of data. The last character is not included within the segment. <br>Each DataPositionSelector <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>end</code> property.</td> </tr> </tbody> </table> <h4 id="example-22">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 25</span><span style="text-transform: none">: Data Position Selector</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno25"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/note1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/diskimg1"</span>, <span class="hljs-attr">"selector"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"DataPositionSelector"</span>, <span class="hljs-attr">"start"</span>: <span class="hljs-number">4096</span>, <span class="hljs-attr">"end"</span>: <span class="hljs-number">4104</span> } } }</pre> </div> </section> <section id="svg-selector" typeof="bibo:Chapter" resource="#svg-selector" property="bibo:hasPart"> <h4 id="h-svg-selector" resource="#h-svg-selector"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.2.7 </span>SVG Selector</span> </h4> <p>An SvgSelector defines an area through the use of the Scalable Vector Graphics [<cite><a class="bibref" href="#bib-SVG11">SVG11</a></cite>] standard. This allows the user to select a non-rectangular area of the content, such as a circle or polygon by describing the region using SVG. The SVG may be either embedded within the Annotation or referenced as an External Web Resource.</p> <p>Note that the SvgSelector uses SVG to select an area of a resource. Segments of an SVG representation may also be selected using selectors, including the FragmentSelector or even an SvgSelector.</p> <p><b>Example Use Case:</b> Yadira is tagging an old map online with a diagonal region for a historical road. Her client creates SVG polygon to describe the region, relative to the image content.</p> <h4 id="model-24">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The class of the Selector.<br>SVG Selectors <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>type</code> and the value <em class="rfc2119" title="MUST">MUST</em> include <code>SvgSelector</code>.</td> </tr> <tr> <td>SvgSelector</td> <td>Class</td> <td>The class for a Selector which defines a shape for the selected area using the SVG standard. <br>The Selector <em class="rfc2119" title="MUST">MUST</em> have this class associated with it. </td> </tr> <tr> <td>value</td> <td>Property</td> <td>The character sequence of the SVG content.<br> There <em class="rfc2119" title="MAY">MAY</em> be exactly 1 <code>value</code> property associated with the Selector, and if so the value of the property <em class="rfc2119" title="MUST">MUST</em> be well-formed SVG XML.</td> </tr> </tbody> </table> <p>The dimensions of the SVG shape or canvas <em class="rfc2119" title="MUST">MUST</em> be relative to the dimensions of the Source resource, such that scaling the shape's size to the full size of the image correctly describes the desired area.</p> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note14"><span>Note</span></div> <div class=""> Implementers <em class="rfc2119" title="SHOULD">SHOULD</em> use only commonly supported features of SVG that directly contribute to describing a region, rather than styling or transformation, in order to maximize interoperability between systems. It is <em class="rfc2119" title="NOT RECOMMENDED">NOT RECOMMENDED</em> to include style information within the SVG element, nor Javascript, animation, text or other non-shape oriented information. Clients <em class="rfc2119" title="SHOULD">SHOULD</em> ignore such information if present. </div> </div> <h4 id="example-23">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 26</span><span style="text-transform: none">: SVG Selector</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno26"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/road1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/map1"</span>, <span class="hljs-attr">"selector"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/svg1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"SvgSelector"</span> } } }</pre> </div> <div class="example"> <div class="example-title marker"><span>Example 27</span><span style="text-transform: none">: SVG Selector, embedded</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno27"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/road1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/map1"</span>, <span class="hljs-attr">"selector"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"SvgSelector"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"<svg:svg> ... </svg:svg>"</span> } } }</pre> </div> </section> <section id="range-selector" typeof="bibo:Chapter" resource="#range-selector" property="bibo:hasPart"> <h4 id="h-range-selector" resource="#h-range-selector"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.2.8 </span>Range Selector</span> </h4> <p>Selections made by users may be extensive and/or cross over internal boundaries in the representation, making it difficult to construct a single selector that robustly describes the correct content. A Range Selector can be used to identify the beginning and the end of the selection by using other Selectors. In this way, two points can be accurately identified using the most appropriate selection mechanisms, and then linked together to form the selection. The selection consists of everything from the beginning of the starting selector through to the beginning of the ending selector, but not including it.</p> <p><b>Example Use Case:</b> Zara wants to comment on two adjacent cells in a table that is part of a web page. She selects the two cells and her client constructs XPaths to the the first cell, and the cell that immediately follows the second. Her client then creates a Range Selector with the first XPath Selector as the start, and the second XPath selector as the end.</p> <h4 id="model-25">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The class of the Selector.<br>Range Selectors <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>type</code> and the value <em class="rfc2119" title="MUST">MUST</em> be <code>RangeSelector</code>.</td> </tr> <tr> <td>RangeSelector</td> <td>Class</td> <td>The type of the Range Selector resource. <br>Range Selectors <em class="rfc2119" title="MUST">MUST</em> have this class associated with them.</td> </tr> <tr> <td>startSelector</td> <td>Relationship</td> <td>The Selector which describes the inclusive starting point of the range. <br>There <em class="rfc2119" title="MUST">MUST</em> be exactly 1 <code>startSelector</code> associated with a Range Selector.</td> </tr> <tr> <td>endSelector</td> <td>Relationship</td> <td>The Selector which describes the exclusive ending point of the range. <br>There <em class="rfc2119" title="MUST">MUST</em> be exactly 1 <code>endSelector</code> associated with a Range Selector. Both <code>startSelector</code> and <code>endSelector</code> <em class="rfc2119" title="SHOULD">SHOULD</em> be of the same class.</td> </tr> </tbody> </table> <h4 id="example-24">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 28</span><span style="text-transform: none">: Range Selector</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno28"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/comment1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/page1.html"</span>, <span class="hljs-attr">"selector"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"RangeSelector"</span>, <span class="hljs-attr">"startSelector"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"XPathSelector"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"//table[1]/tr[1]/td[2]"</span> }, <span class="hljs-attr">"endSelector"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"XPathSelector"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"//table[1]/tr[1]/td[4]"</span> } } } }</pre> </div> </section> <section id="refinement-of-selection" typeof="bibo:Chapter" resource="#refinement-of-selection" property="bibo:hasPart"> <h4 id="h-refinement-of-selection" resource="#h-refinement-of-selection"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.2.9 </span>Refinement of Selection</span> </h4> <p>It may be easier, more reliable or more accurate to specify the segment of interest of a resource as a selection of a selection, rather than as a selection of the complete resource. Particularly for resources that contain other resources, such as various packaging formats, this also allows decomposition of the selection mechanisms when the components do not have unique identifiers. This is accomplished by having selectors chained together, where each refines the results of the previous one.</p> <p><b>Example Use Case:</b> Alexandra selects a paragraph of text and then a short phrase within it to comment on. Her client records the phrase as a TextQuoteSelector that further modifies a FragmentSelector used to identify the paragraph that the phrase is part of.</p> <h4 id="model-26">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>refinedBy</td> <td>Relationship</td> <td>The relationship between a broader selector and the more specific selector that <em class="rfc2119" title="SHOULD">SHOULD</em> be applied to the results of the first. <br>A Selector <em class="rfc2119" title="MAY">MAY</em> be <code>refinedBy</code> 1 or more other Selectors. If more than 1 is given, then they are considered to be alternatives that will result in the same selection.</td> </tr> </tbody> </table> <h4 id="example-25">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 29</span><span style="text-transform: none">: Refinement of Selection</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno29"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/comment1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/page1"</span>, <span class="hljs-attr">"selector"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"FragmentSelector"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"para5"</span>, <span class="hljs-attr">"refinedBy"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TextQuoteSelector"</span>, <span class="hljs-attr">"exact"</span>: <span class="hljs-string">"Selected Text"</span>, <span class="hljs-attr">"prefix"</span>: <span class="hljs-string">"text before the "</span>, <span class="hljs-attr">"suffix"</span>: <span class="hljs-string">" and text after it"</span> } } } }</pre> </div> </section> </section> <!-- /Selectors --> <section id="states" typeof="bibo:Chapter" resource="#states" property="bibo:hasPart"> <h3 id="h-states" resource="#h-states"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.3 </span>States</span> </h3> <p>A State describes the intended state of a resource as applied to the particular Annotation, and thus provides the information needed to retrieve the correct representation of that resource. Web resources change over time, and a State might be used to describe how to recover the intended previous version. Web resources also have multiple formats, and a State might equally be used to describe how to retrieve that particular format. Multiple States may be given to describe the same representation in order to maximize the chances that the representation will be retrievable by the consuming user agent.</p> <p><b>Example Use Case:</b> Britney makes a comment about a web page that changes frequently. Her client records information to allow other clients to hopefully reconstruct the original target of the annotation.</p> <h3 id="model-27">Model</h3> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>state</td> <td>Relationship</td> <td>The relationship between the SpecificResource and the State. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or more <code>state</code> relationships for each SpecificResource. Multiple States <em class="rfc2119" title="SHOULD">SHOULD</em> describe the same representation, however some States will not have the same precision as others. Consuming user agents <em class="rfc2119" title="MUST">MUST</em> pick one of the described representations, if they are different. </td> </tr> </tbody> </table> <p>States <em class="rfc2119" title="MUST">MUST</em> be processed before processing Selector or Style information.</p> <h3 id="example-26">Example</h3> <div class="example"> <div class="example-title marker"><span>Example 30</span><span style="text-transform: none">: State</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno30"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/note1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/page1"</span>, <span class="hljs-attr">"state"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/state1"</span> } } }</pre> </div> <section id="time-state" typeof="bibo:Chapter" resource="#time-state" property="bibo:hasPart"> <h4 id="h-time-state" resource="#h-time-state"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.3.1 </span>Time State</span> </h4> <p>A Time State resource records the time at which the resource is appropriate for the Annotation, typically the time that the Annotation was created and/or a link to a persistent copy of the current version. The timestamp for the resource could be resolved via the Memento protocol, described in RFC 7089 [<cite><a class="bibref" href="#bib-rfc7089">rfc7089</a></cite>].</p> <p><b>Example Use Case:</b> Carla makes a note about the current state of the front page of a news website, and flags that the page is likely to change often. Her client adds in a State with the current time to describe the version of the page being annotated.</p> <h4 id="model-28">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The class of the State.<br>Time States <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>type</code> and the value <em class="rfc2119" title="MUST">MUST</em> be <code>TimeState</code>.</td> </tr> <tr> <td>TimeState</td> <td>Class</td> <td>A description of how to retrieve a representation of the Source resource that is temporally appropriate for the Annotation. <br>The State <em class="rfc2119" title="MUST">MUST</em> have this class associated with it. </td> </tr> <tr> <td>sourceDate</td> <td>Property</td> <td>The timestamp at which the Source resource <em class="rfc2119" title="SHOULD">SHOULD</em> be interpreted for the Annotation. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or more <code>sourceDate</code> properties per TimeState. If there is more than 1, each gives an alternative timestamp at which the Source may be interpreted. The timestamp <em class="rfc2119" title="MUST">MUST</em> be expressed in the <code>xsd:dateTime</code> format, and <em class="rfc2119" title="MUST">MUST</em> use the UTC timezone expressed as "Z". If <code>sourceDate</code> is provided, then <code>sourceDateStart</code> and <code>sourceDateEnd</code> <em class="rfc2119" title="MUST NOT">MUST NOT</em> be provided.</td> </tr> <tr> <td>sourceDateStart</td> <td>Property</td> <td>The timestamp that begins the interval over which the Source resource <em class="rfc2119" title="SHOULD">SHOULD</em> be interpreted for the Annotation. <br>There <em class="rfc2119" title="MAY">MAY</em> be exactly 1 <code>sourceDateStart</code> property per TimeState. The timestamp <em class="rfc2119" title="MUST">MUST</em> be expressed in the <code>xsd:dateTime</code> format, and <em class="rfc2119" title="MUST">MUST</em> use the UTC timezone expressed as "Z". If <code>sourceDateStart</code> is provided then <code>sourceDateEnd</code> <em class="rfc2119" title="MUST">MUST</em> also be provided.</td> </tr> <tr> <td>sourceDateEnd</td> <td>Property</td> <td>The timestamp that ends the interval over which the Source resource <em class="rfc2119" title="SHOULD">SHOULD</em> be interpreted for the Annotation. <br>There <em class="rfc2119" title="MAY">MAY</em> be exactly 1 <code>sourceDateEnd</code> property per TimeState. The timestamp <em class="rfc2119" title="MUST">MUST</em> be expressed in the <code>xsd:dateTime</code> format, and <em class="rfc2119" title="MUST">MUST</em> use the UTC timezone expressed as "Z". If <code>sourceDateEnd</code> is provided then <code>sourceDateStart</code> <em class="rfc2119" title="MUST">MUST</em> also be provided.</td> </tr> <tr> <td>cached</td> <td>Relationship</td> <td>A link to a copy of the Source resource's representation, appropriate for the Annotation. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or more <code>cached</code> relationships per TimeState. If there is more than 1, each gives an alternative copy of the representation. </td> </tr> </tbody> </table> <h4 id="example-27">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 31</span><span style="text-transform: none">: Time State</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno31"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/note1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/page1"</span>, <span class="hljs-attr">"state"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TimeState"</span>, <span class="hljs-attr">"cached"</span>: <span class="hljs-string">"http://archive.example.org/copy1"</span>, <span class="hljs-attr">"sourceDate"</span>: <span class="hljs-string">"2015-07-20T13:30:00Z"</span> } } }</pre> </div> </section> <section id="request-header-state" typeof="bibo:Chapter" resource="#request-header-state" property="bibo:hasPart"> <h4 id="h-request-header-state" resource="#h-request-header-state"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.3.2 </span>Request Header State</span> </h4> <p>As there are potentially many representations that can be delivered from a resource with a single IRI, and a Specific Resource may only apply to one of them, it is important to be able to record the HTTP Request headers that need to be sent to retrieve the correct representation. The HttpRequestState resource maintains a copy of the headers to be replayed when obtaining the representation. </p> <p><b>Example Use Case:</b> Devina retrieves a PDF representation of a web resource that can deliver HTML, PDF or plain text and then writes a description about it. She signals that her description is only about the PDF representation. Her client then includes a State to describe how to retrieve the target representation.</p> <h4 id="model-29">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The class of the State.<br>Request Header States <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>type</code> and the value <em class="rfc2119" title="MUST">MUST</em> be <code>HttpRequestState</code>.</td> </tr> <tr> <td>HttpRequestState</td> <td>Class</td> <td>A description of how to retrieve an appropriate representation of the Source resource for the Annotation, based on the HTTP Request headers to send on the request. <br>The State <em class="rfc2119" title="MUST">MUST</em> have this class associated with it.</td> </tr> <tr> <td>value</td> <td>Property</td> <td>The HTTP request headers to send as a single, complete string. <br>An HttpRequestState <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>value</code> property.</td> </tr> </tbody> </table> <div class="note"> <div class="note-title marker" aria-level="5" role="heading" id="h-note15"><span>Note</span></div> <div class=""> The representation retrieved from the server by the original annotator's client might not be completely determined by request headers alone. For example, the IP address of the client might also determine the language of the representation, based on the language of the country the user was present in at the time. If the server returns a <code>Content-Location</code> header, then the client might instead use it as the <code>target</code> of the Annotation, rather than the IRI that was requested. </div> </div> <h4 id="example-28">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 32</span><span style="text-transform: none">: HTTP Request State</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno32"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/description1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/resource1"</span>, <span class="hljs-attr">"state"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"HttpRequestState"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"Accept: application/pdf"</span> } } }</pre> </div> </section> <section id="refinement-of-state" typeof="bibo:Chapter" resource="#refinement-of-state" property="bibo:hasPart"> <h4 id="h-refinement-of-state" resource="#h-refinement-of-state"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.3.3 </span>Refinement of State</span> </h4> <p>Similar to the <a href="#refinement-of-selection">refinement of selection</a>, it may be easier, more reliable or more accurate to specify the appropriate state of the resource as a hierarchy of atomic State resources. This is particularly appropriate for representing the combination of a State that reflects an internal transformation along with the results of a State that describes an external request. This decomposition is accomplished by having the states chained together in the same way as Selectors.</p> <p>Further, given that the State(s) will likely result in a specific representation, there may be specific Selectors that are appropriate for describing the segment of the representation. In order to accommodate this, States may also be refined by Selectors.</p> <p><b>Example Use Case:</b> Erin writes a comment about a travel e-book which has many versions available over time, and is available in different formats. She is particularly commenting on a specific version and format, so her client adds both a TimeState to capture the time and an HttpRequestState to capture the format, and then a particular FragmentSelector that is appropriate to that format.</p> <h4 id="model-30">Model</h4> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>refinedBy</td> <td>Relationship</td> <td>The relationship between a broader State and either a more specific State or a Selector that <em class="rfc2119" title="SHOULD">SHOULD</em> be applied to the results of the first. <br>Each State <em class="rfc2119" title="MAY">MAY</em> be <code>refinedBy</code> 1 or more other States or Selectors. If more than 1 is given, then they are considered to be alternatives that will result in the same result.</td> </tr> </tbody> </table> <h4 id="example-29">Example</h4> <div class="example"> <div class="example-title marker"><span>Example 33</span><span style="text-transform: none">: Refinement of States</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno33"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/comment1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/ebook1"</span>, <span class="hljs-attr">"state"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TimeState"</span>, <span class="hljs-attr">"sourceDate"</span>: <span class="hljs-string">"2016-02-01T12:05:23Z"</span>, <span class="hljs-attr">"refinedBy"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"HttpRequestState"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"Accept: application/pdf"</span>, <span class="hljs-attr">"refinedBy"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"FragmentSelector"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"page=10"</span>, <span class="hljs-attr">"conformsTo"</span>: <span class="hljs-string">"http://tools.ietf.org/rfc/rfc3778"</span> } } } } }</pre> </div> </section> </section> <!-- /States --> <section id="styles" typeof="bibo:Chapter" resource="#styles" property="bibo:hasPart"> <h3 id="h-styles" resource="#h-styles"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.4 </span>Styles</span> </h3> <p>The interpretation of a particular Annotation, or the Annotation's Body, may rely on the rendering style of the Annotation being consistent across implementations. For Annotations on binary content such as Images or Video, the background color of the Target may not be accessible to the annotation client, and the default coloring may be difficult to perceive, such as a black rectangle rendered as the target area on an image of the night sky. Rendering information is recorded using CSS stylesheets and references to classes defined in those stylesheets.</p> <p><b>Example Use Case:</b> Felicity highlights two paragraphs in a document, and selects in her client that one should be highlighted in red and the other in yellow. She then makes a comment that the yellow part contradicts the red part. Her client records that she selected the red and yellow coloration of the targets. </p> <h3 id="model-31">Model</h3> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The class of the Style.<br>CSS Stylesheets <em class="rfc2119" title="MAY">MAY</em> have a <code>type</code> and if included the value <em class="rfc2119" title="MUST">MUST</em> be <code>CssStylesheet</code>.</td> </tr> <tr> <td>CssStylesheet</td> <td>Class</td> <td>A resource which describes styles for resources participating in the Annotation using CSS. <br>The class <em class="rfc2119" title="MAY">MAY</em> be associated with the stylesheet resource.</td> </tr> <tr> <td>stylesheet</td> <td>Relationship</td> <td>The relationship between an <b>Annotation</b> and the Style. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or 1 <code>stylesheet</code> relationships for each Annotation.</td> </tr> <tr> <td>styleClass</td> <td>Property</td> <td>The name of the class used in the CSS description that <em class="rfc2119" title="SHOULD">SHOULD</em> be applied to the Specific Resource.<br> There <em class="rfc2119" title="MAY">MAY</em> be 0 or more <code>styleClass</code> properties on a Specific Resource.</td> </tr> </tbody> </table> <p>The CSS Stylesheet is associated with the Annotation itself, and the content provides the rendering hints about the Annotation's constituent resources. It <em class="rfc2119" title="MAY">MAY</em> have its own dereferenceable IRI that provides the information, or it may be embedded within the Annotation. This is to avoid having single line stylesheets each associated with different resources, and instead to allow reference to a single IRI that governs the full set of styles for a particular implementation.</p> <p>Publishing systems <em class="rfc2119" title="MUST NOT">MUST NOT</em> assume that they will be processed; they are only provided as hints rather than requirements.</p> <p>When rendering a Specific Resource, consuming applications <em class="rfc2119" title="SHOULD">SHOULD</em> check to see if it has a <code>styleClass</code> property. If it does, then the application <em class="rfc2119" title="SHOULD">SHOULD</em> attempt to locate the appropriate selector in the CSS document, and then apply the css-value block. If a Specific Resource has a <code>styleClass</code> value, but no such class is described by a <code>stylesheet</code> attached to the Annotation, then the <code>styleClass</code> <em class="rfc2119" title="MUST">MUST</em> be ignored.</p> <h3 id="example-30">Example</h3> <div class="example"> <div class="example-title marker"><span>Example 34</span><span style="text-transform: none">: CSS Style</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno34"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"stylesheet"</span>: <span class="hljs-string">"http://example.org/style1"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/comment1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/document1"</span>, <span class="hljs-attr">"styleClass"</span>: <span class="hljs-string">"red"</span> } }</pre> </div> <div class="example"> <div class="example-title marker"><span>Example 35</span><span style="text-transform: none">: CSS Style, embedded</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno35"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"stylesheet"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"CssStylesheet"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">".red { color: red }"</span> }, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/body1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/target1"</span>, <span class="hljs-attr">"styleClass"</span>: <span class="hljs-string">"red"</span> } }</pre> </div> </section> <section id="rendering-software" typeof="bibo:Chapter" resource="#rendering-software" property="bibo:hasPart"> <h3 id="h-rendering-software" resource="#h-rendering-software"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.5 </span>Rendering Software</span> </h3> <p>It may be valuable to know the software that was used to process and/or render the Target resource when the annotation was created. This information can be used by later systems to potentially recreate the environment to ensure that the annotation can be more easily and more accurately reconnected with the appropriate part of the Target's representation. This life cycle information is associated with the Specific Resource, as it is very likely to change between Annotations for the same Target, and thus cannot be associated with the Target resource directly.</p> <p><b>Example Use Case:</b> Gabrielle is using a browser based client to render a PDF of a scholarly article. Her browser uses a particular library to render the PDF as HTML. She annotates a paragraph in the view that she sees, the HTML rendering, and her client records that the library that was used for rendering in the annotation, along with her comment and the target PDF.</p> <h3 id="model-32">Model</h3> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>renderedVia</td> <td>Relationship</td> <td> The relationship between the Specific Resource that represents the Target in the annotation, and the piece of software or other system that was used to render the Target when the annotation was created. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or more <code>renderedVia</code> relationships for each Specific Resource. </td> </tr> </tbody> </table> <div class="note"> <div class="note-title marker" aria-level="4" role="heading" id="h-note16"><span>Note</span></div> <div class="">Other properties may be associated with the rendering system, including such things as schema:softwareVersion, accessibility functions, labels, references to the actual code, and so forth. These extensions are beyond the scope of this specification, but please see the Extensions section of [<cite><a class="bibref" href="#bib-annotation-vocab">annotation-vocab</a></cite>].</div> </div> <h3 id="example-31">Example</h3> <div class="example"> <div class="example-title marker"><span>Example 36</span><span style="text-transform: none">: Rendering Software</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno36"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/comment1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.edu/article.pdf"</span>, <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"http://example.org/selectors/html-selector1"</span>, <span class="hljs-attr">"renderedVia"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.com/pdf-to-html-library"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Software"</span>, <span class="hljs-attr">"schema:softwareVersion"</span>: <span class="hljs-string">"2.5"</span> } } }</pre> </div> </section> <section id="scope-of-a-resource" typeof="bibo:Chapter" resource="#scope-of-a-resource" property="bibo:hasPart"> <h3 id="h-scope-of-a-resource" resource="#h-scope-of-a-resource"><span property="xhv:role" resource="xhv:heading"><span class="secno">4.6 </span>Scope of a Resource</span> </h3> <p>It is sometimes important for an Annotation to capture the context in which it was made, in terms of the resources that the annotator was viewing or using at the time. This does not imply an assertion that the annotation is only valid for the image in the context of that page, it just records that the page was being viewed.</p> <p><b>Example Use Case:</b> Heather makes a comment about an image in a particular web page to say that it is not the right organization's logo. Her client includes the page that the image is being rendered in, however the annotation is associated with the image resource itself.</p> <h3 id="model-33">Model</h3> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>scope</td> <td>Relationship</td> <td>The relationship between a Specific Resource and the resource that provides the scope or context for it in this Annotation. <br>There <em class="rfc2119" title="MAY">MAY</em> be 0 or more <code>scope</code> relationships for each Specific Resource. </td> </tr> </tbody> </table> <h3 id="example-32">Example</h3> <div class="example"> <div class="example-title marker"><span>Example 37</span><span style="text-transform: none">: Scope</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno37"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/note1"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.org/image1"</span>, <span class="hljs-attr">"scope"</span>: <span class="hljs-string">"http://example.org/page1"</span> } }</pre> </div> </section> </section> <!-- /Specific Resources --> <section id="collections" typeof="bibo:Chapter" resource="#collections" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-collections" resource="#h-collections"><span property="xhv:role" resource="xhv:heading"><span class="secno">5. </span>Collections</span> </h2> <p>It is often useful to be able to collect Annotations together into a list, called an Annotation Collection. This list, which is always ordered, serves as a means to refer to the Annotations that are contained within it, and to maintain any information about the Collection itself.</p> <p>The Collection model is divided into two sections: the Annotation Collection that manages the identity of the list and its description, and Annotation Pages that list the Annotations which are members of the Collection.</p> <p><b>Example Use Case:</b> Ingeborg works for a publishing house and has transformed the author's commentary on their steampunk novel into a set of annotations for sale. The company wishes to have them available as an add-on for customers that have already bought the novel, and also in a bundle for new sales.</p> <section id="annotation-collection" typeof="bibo:Chapter" resource="#annotation-collection" property="bibo:hasPart"> <h3 id="h-annotation-collection" resource="#h-annotation-collection"><span property="xhv:role" resource="xhv:heading"><span class="secno">5.1 </span>Annotation Collection</span> </h3> <p>As Annotation Collections might get very large, the model distinguishes between the Collection itself and sequence of component pages that in turn list the Annotations. The Collection maintains information about itself, including creation or descriptive information to aid with discovery and understanding of the Collection, and also references to at least the first Page of Annotations. By starting with the first Annotation in the first Page, and traversing the Pages to the last Annotation of the last Page, all Annotations in the Collection will have been discovered.</p> <p>Annotations <em class="rfc2119" title="MAY">MAY</em> be within multiple Collections at the same time, and the Collection <em class="rfc2119" title="MAY">MAY</em> be created or maintained by agents other than those that create or maintain the included Annotations.</p> <h3 id="model-34">Model</h3> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>@context</td> <td>Property</td> <td>The context that determines the meaning of the JSON as an Annotation Collection. <br>The Collection <em class="rfc2119" title="MUST">MUST</em> have 1 or more <code>@context</code> values and <code>http://www.w3.org/ns/anno.jsonld</code> <em class="rfc2119" title="MUST">MUST</em> be one of them.</td> </tr> <tr> <td>id</td> <td>Property</td> <td>The identity of the Collection.<br>The Collection <em class="rfc2119" title="MUST">MUST</em> have exactly 1 IRI that identifies it.</td> </tr> <tr> <td>type</td> <td>Property</td> <td>The type of the Collection.<br>The Collection <em class="rfc2119" title="MUST">MUST</em> have 1 or more types, and the <code>AnnotationCollection</code> class <em class="rfc2119" title="MUST">MUST</em> be one of them.</td> </tr> <tr> <td>AnnotationCollection</td> <td>Class</td> <td>The class for ordered Collections of Annotations.<br>This class <em class="rfc2119" title="MUST">MUST</em> be associated with the Collection using <code>type</code>.</td> </tr> <tr> <td>label</td> <td>Property</td> <td>A human readable label intended as the name of the Collection.<br>Collections <em class="rfc2119" title="SHOULD">SHOULD</em> have 1 or more <code>label</code>s, and the value <em class="rfc2119" title="MUST">MUST</em> be a string.</td> </tr> <tr> <td>total</td> <td>Property</td> <td>The total number of Annotations in the Collection.<br>Collections <em class="rfc2119" title="SHOULD">SHOULD</em> have exactly 1 <code>total</code>, and if present it <em class="rfc2119" title="MUST">MUST</em> be an <code>xsd:nonNegativeInteger</code>. </td> </tr> <tr> <td>first</td> <td>Relationship</td> <td>The first page of Annotations that are included within the Collection.<br>A Collection that has a total number of Annotations greater than 0 <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>first</code> page of Annotations. The first Page <em class="rfc2119" title="MAY">MAY</em> be embedded within the representation of the Collection, or it <em class="rfc2119" title="MAY">MAY</em> be given as an IRI.</td> </tr> <tr> <td>last</td> <td>Relationship</td> <td>The last page of Annotations that are included within the Collection.<br>A Collection that has a total number of Annotations greater than 0 <em class="rfc2119" title="SHOULD">SHOULD</em> have a reference to the IRI of the <code>last</code> page of Annotations.</td> </tr> </tbody> </table> <p>Other properties <em class="rfc2119" title="MAY">MAY</em> be added to the Collection to describe its use, intellectual property rights, provenance and any other features that are considered useful. These properties <em class="rfc2119" title="SHOULD">SHOULD</em> come from those described in this specification if possible, but <em class="rfc2119" title="MAY">MAY</em> come from any appropriate vocabulary.</p> <h3 id="example-33">Example</h3> <div class="example"> <div class="example-title marker"><span>Example 38</span><span style="text-transform: none">: Annotation Collection</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/collection1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"AnnotationCollection"</span>, <span class="hljs-attr">"label"</span>: <span class="hljs-string">"Steampunk Annotations"</span>, <span class="hljs-attr">"creator"</span>: <span class="hljs-string">"http://example.com/publisher"</span>, <span class="hljs-attr">"total"</span>: <span class="hljs-number">42023</span>, <span class="hljs-attr">"first"</span>: <span class="hljs-string">"http://example.org/page1"</span>, <span class="hljs-attr">"last"</span>: <span class="hljs-string">"http://example.org/page42"</span> }</pre> </div> </section> <section id="annotation-page" typeof="bibo:Chapter" resource="#annotation-page" property="bibo:hasPart"> <h3 id="h-annotation-page" resource="#h-annotation-page"><span property="xhv:role" resource="xhv:heading"><span class="secno">5.2 </span>Annotation Page</span> </h3> <p>An Annotation Page is part of an Annotation Collection, and has an ordered list of some or all of the Annotations that are within the Collection. Each Collection may have multiple pages, and these are traversed by following the <code>next</code> and <code>prev</code> links between the pages.</p> <h3 id="model-35">Model</h3> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>@context</td> <td>Property</td> <td>The context that determines the meaning of the JSON as an Annotation Collection Page. <br>If the Page is NOT embedded within a Collection, it <em class="rfc2119" title="MUST">MUST</em> have 1 or more <code>@context</code> values and <code>http://www.w3.org/ns/anno.jsonld</code> <em class="rfc2119" title="MUST">MUST</em> be one of them. If it is embedded, then it <em class="rfc2119" title="SHOULD NOT">SHOULD NOT</em> have an <code>@context</code> property.</td> </tr> <tr> <td>id</td> <td>Property</td> <td>The identity of the Page.<br>The Page <em class="rfc2119" title="MUST">MUST</em> have exactly 1 IRI that provides its identity.</td> </tr> <tr> <td>type</td> <td>Property</td> <td>The type of the Page.<br>The Page <em class="rfc2119" title="MUST">MUST</em> have 1 or more types, and the <code>AnnotationPage</code> class <em class="rfc2119" title="MUST">MUST</em> be one of them.</td> </tr> <tr> <td>AnnotationPage</td> <td>Class</td> <td>The class of Annotation Pages.<br>This class <em class="rfc2119" title="MUST">MUST</em> be associated with the Page using <code>type</code>.</td> </tr> <tr> <td>partOf</td> <td>Relationship</td> <td>The relationship between the Page and the Annotation Collection that it is part of.<br>Each Page <em class="rfc2119" title="SHOULD">SHOULD</em> have a exactly 1 <code>partOf</code> relationship, with the value being either the IRI of the Collection or an object with some or all of the Collections properties, including at least its <code>id</code>.</td> </tr> <tr> <td>items</td> <td>Relationship</td> <td>The list of Annotations that are the members of the Page.<br>Each Page <em class="rfc2119" title="MUST">MUST</em> have an array of 1 or more Annotations as the value of <code>items</code>.</td> </tr> <tr> <td>next</td> <td>Relationship</td> <td>A reference to the next Page in the sequence of pages that make up the Collection.<br>If the current page is not the last page in the Collection, it <em class="rfc2119" title="MUST">MUST</em> have a reference to the IRI of the page that follows it.</td> </tr> <tr> <td>prev</td> <td>Relationship</td> <td>A reference to the previous Page in the sequence of pages that make up the Collection.<br>If the current page is not the first page in the Collection, it <em class="rfc2119" title="SHOULD">SHOULD</em> have a reference to the IRI of the page that it follows.</td> </tr> <tr> <td>startIndex</td> <td>Property</td> <td>The relative position of the first Annotation in the <code>items</code> list, relative to the Annotation Collection. The first entry in the first page is considered to be entry 0.<br>Each Page <em class="rfc2119" title="SHOULD">SHOULD</em> have exactly 1 <code>startIndex</code>, and <em class="rfc2119" title="MUST NOT">MUST NOT</em> have more than 1. The value <em class="rfc2119" title="MUST">MUST</em> be an <code>xsd:nonNegativeInteger</code>.</td> </tr> </tbody> </table> <h3 id="example-34">Example</h3> <div class="example"> <div class="example-title marker"><span>Example 39</span><span style="text-transform: none">: Annotation Page</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/page1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"AnnotationPage"</span>, <span class="hljs-attr">"partOf"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/collection1"</span>, <span class="hljs-attr">"label"</span>: <span class="hljs-string">"Steampunk Annotations"</span>, <span class="hljs-attr">"total"</span>: <span class="hljs-number">42023</span> }, <span class="hljs-attr">"next"</span>: <span class="hljs-string">"http://example.org/page2"</span>, <span class="hljs-attr">"startIndex"</span>: <span class="hljs-number">0</span>, <span class="hljs-attr">"items"</span>: [ { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.net/comment1"</span>, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.com/book/chapter1"</span> }, { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno2"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.net/comment2"</span>, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.com/book/chapter2"</span> } ] }</pre> </div> <div class="example"> <div class="example-title marker"><span>Example 40</span><span style="text-transform: none">: Annotation Collection with Embedded Page</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/collection1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"AnnotationCollection"</span>, <span class="hljs-attr">"label"</span>: <span class="hljs-string">"Two Annotations"</span>, <span class="hljs-attr">"total"</span>: <span class="hljs-number">2</span>, <span class="hljs-attr">"first"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/page1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"AnnotationPage"</span>, <span class="hljs-attr">"startIndex"</span>: <span class="hljs-number">0</span>, <span class="hljs-attr">"items"</span>: [ { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.net/comment1"</span>, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.com/book/chapter1"</span> }, { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno2"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.net/comment2"</span>, <span class="hljs-attr">"target"</span>: <span class="hljs-string">"http://example.com/book/chapter2"</span> } ] } }</pre> </div> </section> </section> <!-- /Lists --> <section id="media_selector" class="appendix" typeof="bibo:Chapter" resource="#media_selector" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-media_selector" resource="#h-media_selector"><span property="xhv:role" resource="xhv:heading"><span class="secno">A. </span>Correspondence Among Media Types and Selectors</span> </h2> <p>The table below shows the relationships among major media types and selector types. It is relevant to the <a href="#conformance" class="sec-ref"><span class="secno">1.3</span> <span class="sec-title">Conformance</span></a> section of this document. </p> <table id="media_table" class="model"> <thead> <tr> <td> </td> <th>Fragment</th> <th>CSS</th> <th>XPath</th> <th>Text Quote</th> <th>Text Position</th> <th>Data Position</th> <th>Svg</th> </tr> </thead> <tbody> <tr> <th>HTML (text/html)</th> <td>✔︎</td> <td>✔︎</td> <td>✔︎</td> <td>✔︎</td> <td>✔︎</td> <td>✘</td> <td>✘</td> </tr> <tr> <th>CSV (text/csv)</th> <td>✔︎</td> <td>✘</td> <td>✘</td> <td>✔︎</td> <td>✔︎</td> <td>✘</td> <td>✘</td> </tr> <tr> <th>Plain Text (text/plain)</th> <td>✔︎</td> <td>✘</td> <td>✘</td> <td>✔︎</td> <td>✔︎</td> <td>✘</td> <td>✘</td> </tr> <tr> <th>Other text files (text/*) </th> <td>?</td> <td>✘</td> <td>✘</td> <td>✔︎</td> <td>✔︎</td> <td>✘</td> <td>✘</td> </tr> <tr> <th>EPUB2, EPUB3 (application/epub+zip)</th> <td>✔︎</td> <td>✘</td> <td>✘</td> <td>✔︎</td> <td>✘</td> <td>✘</td> <td>✘</td> </tr> <tr> <th>PDF (application/pdf) </th> <td>✔︎</td> <td>✘</td> <td>✘</td> <td>✔︎</td> <td>✔︎</td> <td>✘</td> <td>✘</td> </tr> <tr> <th>XML (application/xml, application/*+xml) </th> <td>✔︎</td> <td>✔︎</td> <td>✔︎</td> <td>✔︎</td> <td>✔︎</td> <td>✘</td> <td>✘</td> </tr> <tr> <th>SVG (image/svg+xml)</th> <td>✔︎</td> <td>✔︎</td> <td>✔︎</td> <td>✔︎</td> <td>✔︎</td> <td>✘</td> <td>✔︎</td> </tr> <tr> <th>Image, other than SVG (image/gif, image/jpeg, image/png, image/tiff) </th> <td>✔︎</td> <td>✘</td> <td>✘</td> <td>✘</td> <td>✘</td> <td>?</td> <td>✔︎</td> </tr> <tr> <th>Video (video/*)</th> <td>✔︎</td> <td>✘</td> <td>✘</td> <td>✘</td> <td>✘</td> <td>?</td> <td>✔︎</td> </tr> <tr> <th>Binary Data Files</th> <td>?</td> <td>✘</td> <td>✘</td> <td>✘</td> <td>✘</td> <td>✔︎</td> <td>✘</td> </tr> </tbody> </table> <section class="informative" id="additional-media-types-selector-combination" typeof="bibo:Chapter" resource="#additional-media-types-selector-combination" property="bibo:hasPart"> <h3 id="h-additional-media-types-selector-combination" resource="#h-additional-media-types-selector-combination"><span property="xhv:role" resource="xhv:heading"><span class="secno">A.1 </span>Additional Media Types/Selector Combination</span> </h3> <p><em>This section is non-normative.</em></p> <p>The table below contains some other, possible combinations of media types and selector types, which <em class="rfc2119" title="MAY">MAY</em> be implemented but are not mandated by this specification. Some of these combinations may also form the basis for defining new, implementation-specific selector extensions.</p> <table class="model"> <caption>Additional relationships among other media types and selector types</caption> <thead> <tr> <td> </td> <th>Fragment</th> <th>CSS</th> <th>XPath</th> <th>Text Quote</th> <th>Text Position</th> <th>Data Position</th> <th>Svg</th> </tr> </thead> <tbody> <tr> <th>CSS (text/css)</th> <td>✘</td> <td>✘</td> <td>✘</td> <td>✔︎</td> <td>✔︎</td> <td>✘</td> <td>✘</td> </tr> <tr> <th>TSV (text/tab-separated-values)</th> <td>✔︎<sup>✝</sup></td> <td>✘</td> <td>✘</td> <td>✔︎</td> <td>✔︎</td> <td>✘</td> <td>✘</td> </tr> <tr> <th>RDF/Turtle (text/turtle)</th> <td>✔︎<sup>✝</sup></td> <td>✘</td> <td>✘</td> <td>?</td> <td>?</td> <td>✘</td> <td>✘</td> </tr> <tr> <th>JSON (application/json, application/*+json)</th> <td>✘</td> <td>✘</td> <td>✘</td> <td>✔︎</td> <td>?</td> <td>✘</td> <td>✘</td> </tr> <tr> <th>Programming languages (application/javascript, python files, etc.)</th> <td>✘</td> <td>✘</td> <td>✘</td> <td>✔︎</td> <td>?</td> <td>✘</td> <td>✘</td> </tr> </tbody> <tfoot> <tr> <td colspan="8" style="font-size:70%"> <sup>✝</sup>Fragments are not formally defined through IETF, though there are well-known connections to existing fragments or practices </td> </tr> </tfoot> </table> </section> </section> <section class="appendix informative" id="complete-example" typeof="bibo:Chapter" resource="#complete-example" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-complete-example" resource="#h-complete-example"><span property="xhv:role" resource="xhv:heading"><span class="secno">B. </span>Complete Example</span> </h2> <p><em>This section is non-normative.</em></p> <p><b>Entirely Contrived Example Use Case:</b> Juliet wants to associate a comment that she wrote in English within the annotation or an external mp3 of the same content in German by someone else, plus a tag, with a range of characters from a particular element in an XML representation of a document as it was at a certain point in time, and for it to be displayed in a particular way.</p> <div class="example"> <div class="example-title marker"><span>Example 41</span><span style="text-transform: none">: Complete Example</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno38"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"motivation"</span>: <span class="hljs-string">"commenting"</span>, <span class="hljs-attr">"creator"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/user1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Person"</span>, <span class="hljs-attr">"name"</span>: <span class="hljs-string">"A. Person"</span>, <span class="hljs-attr">"nickname"</span>: <span class="hljs-string">"user1"</span> }, <span class="hljs-attr">"created"</span>: <span class="hljs-string">"2015-10-13T13:00:00Z"</span>, <span class="hljs-attr">"generator"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/client1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Software"</span>, <span class="hljs-attr">"name"</span>: <span class="hljs-string">"Code v2.1"</span>, <span class="hljs-attr">"homepage"</span>: <span class="hljs-string">"http://example.org/homepage1"</span> }, <span class="hljs-attr">"generated"</span>: <span class="hljs-string">"2015-10-14T15:13:28Z"</span>, <span class="hljs-attr">"stylesheet"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/stylesheet1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"CssStylesheet"</span> }, <span class="hljs-attr">"body"</span>: [ { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TextualBody"</span>, <span class="hljs-attr">"purpose"</span>: <span class="hljs-string">"tagging"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"love"</span> }, { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Choice"</span>, <span class="hljs-attr">"items"</span>: [ { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TextualBody"</span>, <span class="hljs-attr">"purpose"</span>: <span class="hljs-string">"describing"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"I really love this particular bit of text in this XML. No really."</span>, <span class="hljs-attr">"format"</span>: <span class="hljs-string">"text/plain"</span>, <span class="hljs-attr">"language"</span>: <span class="hljs-string">"en"</span>, <span class="hljs-attr">"creator"</span>: <span class="hljs-string">"http://example.org/user1"</span> }, { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"SpecificResource"</span>, <span class="hljs-attr">"purpose"</span>: <span class="hljs-string">"describing"</span>, <span class="hljs-attr">"source"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/comment1"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Audio"</span>, <span class="hljs-attr">"format"</span>: <span class="hljs-string">"audio/mpeg"</span>, <span class="hljs-attr">"language"</span>: <span class="hljs-string">"de"</span>, <span class="hljs-attr">"creator"</span>: { <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/user2"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Person"</span> } } } ] } ], <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"SpecificResource"</span>, <span class="hljs-attr">"styleClass"</span>: <span class="hljs-string">"mystyle"</span>, <span class="hljs-attr">"source"</span>: <span class="hljs-string">"http://example.com/document1"</span>, <span class="hljs-attr">"state"</span>: [ { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"HttpRequestState"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"Accept: application/xml"</span>, <span class="hljs-attr">"refinedBy"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TimeState"</span>, <span class="hljs-attr">"sourceDate"</span>: <span class="hljs-string">"2015-09-25T12:00:00Z"</span> } } ], <span class="hljs-attr">"selector"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"FragmentSelector"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"xpointer(/doc/body/section[2]/para[1])"</span>, <span class="hljs-attr">"refinedBy"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TextPositionSelector"</span>, <span class="hljs-attr">"start"</span>: <span class="hljs-number">6</span>, <span class="hljs-attr">"end"</span>: <span class="hljs-number">27</span> } } } }</pre> </div> </section> <section class="appendix informative" id="index-of-json-keys" typeof="bibo:Chapter" resource="#index-of-json-keys" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-index-of-json-keys" resource="#h-index-of-json-keys"><span property="xhv:role" resource="xhv:heading"><span class="secno">C. </span>Index of JSON Keys</span> </h2> <p><em>This section is non-normative.</em></p> <table class="model"> <tbody> <tr> <th>Key</th> <th>Usage</th> </tr> <tr> <td>accessibility</td> <td><a href="#accessibility-of-content">Body, Target</a></td> </tr> <tr> <td>audience</td> <td><a href="#intended-audience">Audience</a></td> </tr> <tr> <td>body</td> <td><a href="#annotations">Annotation</a></td> </tr> <tr> <td>bodyValue</td> <td><a href="#string-body">Annotation</a></td> </tr> <tr> <td>cached</td> <td><a href="#time-state">Time State</a></td> </tr> <tr> <td>canonical</td> <td><a href="#other-identities">Annotation, Body, Target</a></td> </tr> <tr> <td>conformsTo</td> <td><a href="#fragment-selector">Fragment Selector</a></td> </tr> <tr> <td>created</td> <td><a href="#lifecycle-information">Annotation, Body</a></td> </tr> <tr> <td>creator</td> <td><a href="#lifecycle-information">Annotation, Body</a></td> </tr> <tr> <td>email</td> <td><a href="#agents">Agent</a></td> </tr> <tr> <td>email_sha1</td> <td><a href="#agents">Agent</a></td> </tr> <tr> <td>end</td> <td><a href="#text-position-selector">Text Position Selector</a>, <a href="#data-position-selector">Data Position Selector</a></td> </tr> <tr> <td>endSelector</td> <td><a href="#range-selector">Range Selector</a></td> </tr> <tr> <td>exact</td> <td><a href="#text-quote-selector">Text Quote Selector</a></td> </tr> <tr> <td>first</td> <td><a href="#annotation-collection">Annotation Collection</a></td> </tr> <tr> <td>format</td> <td><a href="#external-web-resources">Body, Target</a>, <a href="#svg-selector">SVG Selector</a></td> </tr> <tr> <td>generated</td> <td><a href="#lifecycle-information">Annotation</a></td> </tr> <tr> <td>generator</td> <td><a href="#lifecycle-information">Annotation</a></td> </tr> <tr> <td>homepage</td> <td><a href="#agents">Agents</a></td> </tr> <tr> <td class="top_cell">id</td> <td>Note: Every object <em class="rfc2119" title="MAY">MAY</em> have an <code>id</code>.<br><a href="#annotations">Annotation</a>, <a href="#external-web-resources">Body, Target</a>, <a href="#segments-of-external-resources">Segments of External Resources</a>, <a href="#embedded-textual-body">Embedded Textual Body</a>, <a href="#agents">Agent</a>, <a href="#intended-audience">Audience</a>, <a href="#specific-resources">Specific Resource</a></td> </tr> <tr> <td>items</td> <td><a href="#choice-between-bodies">Choice</a>, <a href="#annotation-page">Annotation Page</a></td> </tr> <tr> <td>label</td> <td><a href="#annotation-collection">Annotation Collection</a></td> </tr> <tr> <td>language</td> <td><a href="#external-web-resources">Body, Target</a></td> </tr> <tr> <td>last</td> <td><a href="#annotation-collection">Annotation Collection</a></td> </tr> <tr> <td>modified</td> <td><a href="#lifecycle-information">Annotation, Body</a></td> </tr> <tr> <td>motivation</td> <td><a href="#motivation-and-purpose">Annotation</a></td> </tr> <tr> <td>name</td> <td><a href="#agents">Agent</a></td> </tr> <tr> <td>nickname</td> <td><a href="#agents">Agent</a></td> </tr> <tr> <td>next</td> <td><a href="#annotation-page">Annotation Page</a></td> </tr> <tr> <td>partOf</td> <td><a href="#annotation-page">Annotation Page</a></td> </tr> <tr> <td>prefix</td> <td><a href="#text-quote-selector">Text Quote Selector</a></td> </tr> <tr> <td>prev</td> <td><a href="#annotation-page">Annotation Page</a></td> </tr> <tr> <td>purpose</td> <td><a href="#motivation-and-purpose">Textual Body</a>, <a href="#purpose-for-external-web-resources">Specific Resource</a></td> </tr> <tr> <td>renderedVia</td> <td><a href="#rendering-software">Specific Resource</a></td> </tr> <tr> <td>rights</td> <td><a href="#rights-information">Annotation, Body, Target</a></td> </tr> <tr> <td>refinedBy</td> <td><a href="#refinement-of-selection">Selector</a>, <a href="#refinement-of-state">State</a></td> </tr> <tr> <td>scope</td> <td><a href="#scope-of-a-resource">Specific Resource</a></td> </tr> <tr> <td>selector</td> <td><a href="#selectors">Specific Resource</a></td> </tr> <tr> <td>source</td> <td><a href="#specific-resources">Specific Resource</a></td> </tr> <tr> <td>sourceDate</td> <td><a href="#time-state">Time State</a></td> </tr> <tr> <td>sourceDateEnd</td> <td><a href="#time-state">Time State</a></td> </tr> <tr> <td>sourceDateStart</td> <td><a href="#time-state">Time State</a></td> </tr> <tr> <td>start</td> <td><a href="#text-position-selector">Text Position Selector</a>, <a href="#data-position-selector">Data Position Selector</a></td> </tr> <tr> <td>startIndex</td> <td><a href="#annotation-page">Annotation Page</a></td> </tr> <tr> <td>startSelector</td> <td><a href="#range-selector">Range Selector</a></td> </tr> <tr> <td>state</td> <td><a href="#states">Specific Resource</a></td> </tr> <tr> <td>styleClass</td> <td><a href="#styles">Specific Resource</a></td> </tr> <tr> <td>stylesheet</td> <td><a href="#styles">Annotation</a></td> </tr> <tr> <td>suffix</td> <td><a href="#text-quote-selector">Text Quote Selector</a></td> </tr> <tr> <td>target</td> <td><a href="#annotations">Annotation</a></td> </tr> <tr> <td>textDirection</td> <td><a href="#external-web-resources">Body, Target</a></td> </tr> <tr> <td>total</td> <td><a href="#annotation-collection">Annotation Collection</a></td> </tr> <tr> <td class="top_cell">type</td> <td>Note: Every object <em class="rfc2119" title="MAY">MAY</em> have a <code>type</code>.<br> <a href="#annotations">Annotation</a>, <a href="#classes">Body, Target</a>, <a href="#embedded-textual-body">Embedded Textual Body</a>, <a href="#agents">Agent</a>, <a href="#intended-audience">Audience</a>, <a href="#specific-resources">Specific Resource</a>, <a href="#fragment-selector">Fragment Selector</a>, <a href="#css-selector">CSS Selector</a>, <a href="#xpath-selector">XPath Selector</a>, <a href="#text-quote-selector">Text Quote Selector</a>, <a href="#text-position-selector">Text Position Selector</a>, <a href="#data-position-selector">Data Position Selector</a>, <a href="#svg-selector">SVG Selector</a>, <a href="#time-state">Time State</a>, <a href="#request-header-state">Request Header State</a>, <a href="#styles">CSS Stylesheet</a></td> </tr> <tr> <td>value</td> <td> <a href="#embedded-textual-body">Textual Body</a>, <a href="#fragment-selector">Fragment Selector</a>, <a href="#css-selector">CSS Selector</a>, <a href="#xpath-selector">XPath Selector</a>, <a href="#svg-selector">SVG Selector</a>, <a href="#request-header-state">Request Header State</a>, <a href="#styles">CSS Stylesheet</a></td> </tr> <tr> <td>via</td> <td><a href="#other-identities">Annotation, Body, Target</a></td> </tr> </tbody> </table> </section> <section class="appendix informative" id="sets-of-bodies-and-targets" typeof="bibo:Chapter" resource="#sets-of-bodies-and-targets" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-sets-of-bodies-and-targets" resource="#h-sets-of-bodies-and-targets"><span property="xhv:role" resource="xhv:heading"><span class="secno">D. </span>Sets of Bodies and Targets</span> </h2> <p><em>This section is non-normative.</em></p> <p> While it is possible to annotate multiple targets, the meaning of that annotation is that each Body applies independently to each of the Targets. This might not be the intent of the annotator, such as when all of the targets are required for the annotation to be correctly understood. In order to allow annotators to capture these requirements, a resource similar to Choice could be used, such as a Composite (unordered) or List (ordered). </p> <p>The technical implementation of this pattern is not difficult, as it is practically identical to Choice, however the implementation of a user interface that can manage a human user's interactions such that the client can recognize the distinctions has proven to be very challenging. As such, the pattern is noted in this appendix for future consideration.</p> <p><b>Example Use Case:</b> Karin comments on a set of web pages as, together, providing evidence towards her research hypothesis. Her client creates a Composite, as there is no inherent order to the set of web pages.</p> <p><b>Example Use Case:</b> Lana tags a list of pages within a book as being important. As the pages have an order in the book, her client creates a List to maintain that order.</p> <p><b>Example Use Case:</b> Melanie annotates a set of images to classify them as portraits. As the classification applies to each image independently, her client creates a Independents resource to group them.</p> <h2 id="proposed-model">Proposed Model</h2> <table class="model"> <tbody> <tr> <th>Term</th> <th>Type</th> <th>Description</th> </tr> <tr> <td>id</td> <td>Property</td> <td>The IRI that identifies the set. <br>The set resource <em class="rfc2119" title="MAY">MAY</em> have exactly 1 IRI that identifies it.</td> </tr> <tr> <td>type</td> <td>Relationship</td> <td>The type of the resource. <br>The set <em class="rfc2119" title="MUST">MUST</em> have exactly 1 <code>type</code> class, taken from the options below.</td> </tr> <tr> <td>Composite</td> <td>Class</td> <td>A set of resources, all of which are required for the Annotation to be correctly interpreted.</td> </tr> <tr> <td>List</td> <td>Class</td> <td>An ordered list of resources, all of which are required in order for the Annotation to be correctly interpreted.</td> </tr> <tr> <td>Independents</td> <td>Class</td> <td>A set of resources, each of which is being annotated separately with the same interpretation as having multiple bodies or targets directly associated with the Annotation. </td> </tr> <tr> <td>items</td> <td>Relationship</td> <td>The list of resources in the <code>Composite</code>, <code>List</code>, or <code>Independents</code>.</td> </tr> </tbody> </table> <h2 id="examples">Examples</h2> <div class="example"> <div class="example-title marker"><span>Example 42</span><span style="text-transform: none">: Composite</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno39"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"motivation"</span>: <span class="hljs-string">"commenting"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TextualBody"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"These pages together provide evidence of the conspiracy"</span> }, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Composite"</span>, <span class="hljs-attr">"items"</span>: [ <span class="hljs-string">"http://example.com/page1"</span>, <span class="hljs-string">"http://example.org/page6"</span>, <span class="hljs-string">"http://example.net/page4"</span> ] } }</pre> </div> <div class="example"> <div class="example-title marker"><span>Example 43</span><span style="text-transform: none">: List</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno40"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"motivation"</span>: <span class="hljs-string">"tagging"</span>, <span class="hljs-attr">"body"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"TextualBody"</span>, <span class="hljs-attr">"value"</span>: <span class="hljs-string">"important"</span> }, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"List"</span>, <span class="hljs-attr">"items"</span>: [ <span class="hljs-string">"http://example.com/book/page1"</span>, <span class="hljs-string">"http://example.com/book/page2"</span>, <span class="hljs-string">"http://example.com/book/page3"</span>, <span class="hljs-string">"http://example.com/book/page4"</span> ] } }</pre> </div> <div class="example"> <div class="example-title marker"><span>Example 44</span><span style="text-transform: none">: Independents</span></div> <pre class="highlight hljs json" aria-busy="false" aria-live="polite">{ <span class="hljs-attr">"@context"</span>: <span class="hljs-string">"http://www.w3.org/ns/anno.jsonld"</span>, <span class="hljs-attr">"id"</span>: <span class="hljs-string">"http://example.org/anno41"</span>, <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Annotation"</span>, <span class="hljs-attr">"motivation"</span>: <span class="hljs-string">"classifying"</span>, <span class="hljs-attr">"body"</span>: <span class="hljs-string">"http://example.org/vocab/art/portrait"</span>, <span class="hljs-attr">"target"</span>: { <span class="hljs-attr">"type"</span>: <span class="hljs-string">"Independents"</span>, <span class="hljs-attr">"items"</span>: [ <span class="hljs-string">"http://example.com/image1"</span>, <span class="hljs-string">"http://example.net/image2"</span>, <span class="hljs-string">"http://example.com/image4"</span>, <span class="hljs-string">"http://example.org/image9"</span> ] } }</pre> </div> </section> <section class="appendix informative" id="acknowledgments" typeof="bibo:Chapter" resource="#acknowledgments" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-acknowledgments" resource="#h-acknowledgments"><span property="xhv:role" resource="xhv:heading"><span class="secno">E. </span>Acknowledgments</span> </h2> <p><em>This section is non-normative.</em></p> <p>The Web Annotation Working Group gratefully acknowledges the contributions of the <a href="https://www.w3.org/community/openannotation/">Open Annotation Community Group</a>. The <a href="http://www.openannotation.org/spec/core">output</a> of the Community Group was fundamental to the current data model. In particular the editors would like to thank Herbert Van de Sompel of Los Alamos National Laboratory for his editorial contributions throughout the Community Group process. </p> <p>The following people have been instrumental in providing thoughts, feedback, reviews, content, criticism and input in the creation of this specification: </p> <div style="margin-left: 3em"> Vladimir Alexiev, Art Barstow, Tim Berners-Lee, Chris Birk, Dan Brickley, Sarven Capadisli, Paolo Ciccarese, Tim Cole, Ray Denenberg, TB Dinesh, Sergiu Gordea, Benjamin Goering, Amy Guy, Ivan Herman, Frederick Hirsch, Antoine Isaac, Jacob Jett, Takeshi Kanai, Gregg Kellogg, Andreas Kuckartz, Randall Leeds, Hugo Manguinhas, Shane McCarron, Ben De Meester, Luc Moreau, Addison Phillips, Davis Salisbury, Robert Sanderson, Felix Sasaki, Doug Schepers, Tzviya Siegman, Stian Soiland-Reyes, Manu Sporny, Nick Stenning, Jon Stroop, Lutz Suhrbier, Kyrce Swenson, Raphaël Troncy, Simeon Warner, Erik Wilde, Dan Whaley, Benjamin Young </div> <p></p> </section> <section class="appendix informative" id="candidate-recommendation-exit-criteria" typeof="bibo:Chapter" resource="#candidate-recommendation-exit-criteria" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-candidate-recommendation-exit-criteria" resource="#h-candidate-recommendation-exit-criteria"><span property="xhv:role" resource="xhv:heading"><span class="secno">F. </span>Candidate Recommendation Exit Criteria</span> </h2> <p><em>This section is non-normative.</em></p> <p>For this specification to be advanced to Proposed Recommendation, there must be at least two independent implementations of each feature described below. Each feature may be implemented by a different set of products, and there is no requirement that any single product implement every feature.</p> <b>Features</b> <p> For the purposes of evaluating exit criteria, the following are considered as features: </p> <ul> <li>The Annotation class and required properties.</li> <li>The Agent class and required properties, as related to an Annotation.</li> <li>The Agent class and required properties, as related to a resource used as the Body of an Annotation.</li> <li>Embedded TextualBody class and required properties.</li> <li>External web resources, used as the Body of an Annotation.</li> <li>A Choice of resources, used as the Body of an Annotation.</li> <li>The SpecificResource class and required properties, used as the Body of an Annotation.</li> <li>External web resources, used as the Target of an Annotation.</li> <li>The SpecificResource class and required properties, used as the Target of an Annotation.</li> <li>The AnnotationCollection class and required properties.</li> <li>The AnnotationPage class and required properties.</li> </ul> <p> Software that does not alter its behavior in the presence or lack of a given feature is not deemed to implement that feature for the purposes of exiting the Candidate recommendation phase. </p> </section> <section class="appendix informative changelog" id="changes-from-previous-versions" typeof="bibo:Chapter" resource="#changes-from-previous-versions" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-changes-from-previous-versions" resource="#h-changes-from-previous-versions"><span property="xhv:role" resource="xhv:heading"><span class="secno">G. </span>Changes from Previous Versions</span> </h2> <p><em>This section is non-normative.</em></p> <section id="changes-from-the-proposed-recommendation-of-2017-01-17" typeof="bibo:Chapter" resource="#changes-from-the-proposed-recommendation-of-2017-01-17" property="bibo:hasPart"> <h3 id="h-changes-from-the-proposed-recommendation-of-2017-01-17" resource="#h-changes-from-the-proposed-recommendation-of-2017-01-17"><span property="xhv:role" resource="xhv:heading"><span class="secno">G.1 </span>Changes from the Proposed Recommendation of 2017-01-17</span> </h3> <p>No significant changes.</p> </section> <section id="changes-from-the-candidate-recommendation-of-2016-11-22" typeof="bibo:Chapter" resource="#changes-from-the-candidate-recommendation-of-2016-11-22" property="bibo:hasPart"> <h3 id="h-changes-from-the-candidate-recommendation-of-2016-11-22" resource="#h-changes-from-the-candidate-recommendation-of-2016-11-22"><span property="xhv:role" resource="xhv:heading"><span class="secno">G.2 </span>Changes from the Candidate Recommendation of 2016-11-22</span> </h3> <ul> <li>Removed unnecessary appendix</li> <li>Updated SVG reference to 1.1</li> </ul> </section> <section id="changes-from-the-candidate-recommendation-of-2016-09-06" typeof="bibo:Chapter" resource="#changes-from-the-candidate-recommendation-of-2016-09-06" property="bibo:hasPart"> <h3 id="h-changes-from-the-candidate-recommendation-of-2016-09-06" resource="#h-changes-from-the-candidate-recommendation-of-2016-09-06"><span property="xhv:role" resource="xhv:heading"><span class="secno">G.3 </span>Changes from the Candidate Recommendation of 2016-09-06</span> </h3> <ul> <li>Move Composite, List and Independents classes to an informative appendix. (These classes were marked as "at Risk" in earlier versions.)</li> <li>Remove the use of Choice with Targets, and associating Agents with Targets.</li> <li>Clarify the possibility of embedding Collection information in a Page using partOf.</li> <li>Improve description of multiple rights statements about resources.</li> <li>Improve description of textDirection and note that value definitions are explicitly from HTML5, as well as the property.</li> <li>Link to the media type in protocol from the introduction.</li> <li>Clarified that processingLanguage should also have a BCP47 formatted value.</li> <li>Clarified that TextualBody can be the source of a Specific Resource, and the target of an Annotation.</li> <li>Add informative principle that features of externally referenced resources described in an Annotation are not intended to be authoritative, and the remote resource is the source of truth about itself.</li> <li>Clarified the scope of the purpose property with respect to TextualBody resources.</li> </ul> </section> <section id="changes-from-the-candidate-recommendation-of-2016-07-05" typeof="bibo:Chapter" resource="#changes-from-the-candidate-recommendation-of-2016-07-05" property="bibo:hasPart"> <h3 id="h-changes-from-the-candidate-recommendation-of-2016-07-05" resource="#h-changes-from-the-candidate-recommendation-of-2016-07-05"><span property="xhv:role" resource="xhv:heading"><span class="secno">G.4 </span>Changes from the Candidate Recommendation of 2016-07-05</span> </h3> <ul> <li>Added CR Exit Criteria</li> </ul> </section> <section id="changes-from-the-working-draft-of-2016-03-31" typeof="bibo:Chapter" resource="#changes-from-the-working-draft-of-2016-03-31" property="bibo:hasPart"> <h3 id="h-changes-from-the-working-draft-of-2016-03-31" resource="#h-changes-from-the-working-draft-of-2016-03-31"><span property="xhv:role" resource="xhv:heading"><span class="secno">G.5 </span>Changes from the Working Draft of 2016-03-31</span> </h3> <p>Significant technical changes in this specification from the <a href="https://www.w3.org/TR/2016/WD-annotation-model-20160331/">Working Draft Published of 2016-03-31</a> are:</p> <ul> <li>Addition of conformance section and media table</li> <li>Remove Content class as unnecessary, and reuse <code>value</code> in place of the previous distinct <code>text</code> property.</li> <li>Rename <code>bodyText</code> to <code>bodyValue</code> following from the removal of the <code>text</code> property.</li> <li>Simplification of <code>SvgSelector</code> and <code>CssStylesheet</code>, following from the removal of <code>Content</code>.</li> <li>Add accessibility section.</li> <li>Clarify normalization requirements for text based selectors, and add <code>textDirection</code> and <code>procesingLanguage</code> properties.</li> <li>Add Independents class to mirror the use of of multiple bodies or targets. Independents, and the re-introduced Composite and List, marked at risk.</li> <li>Revert to the use of xsd:dateTime for dates.</li> <li>Clarify the semantics of multiple selectors, states.</li> <li>Use less ambiguous <code>nickname</code> instead of <code>account</code> for <code>foaf:nick</code>.</li> <li>Remove role requirement for interpretation of <code>bodyValue</code>.</li> </ul> </section> <section id="changes-from-the-open-annotation-draft" typeof="bibo:Chapter" resource="#changes-from-the-open-annotation-draft" property="bibo:hasPart"> <h3 id="h-changes-from-the-open-annotation-draft" resource="#h-changes-from-the-open-annotation-draft"><span property="xhv:role" resource="xhv:heading"><span class="secno">G.6 </span>Changes from the Open Annotation Draft</span> </h3> <p> Significant technical changes in this specification from the <a href="http://www.openannotation.org/spec/core/">Open Annotation Community Group's draft</a> are:</p> <ul> <li>Use intuitive, memorable and developer-friendly names for the JSON-LD keys. (<a href="#annotations">text</a>)</li> <li>Replace the ContentAsText construction which was not taken through the standardization process. (<a href="#embedded-textual-body">text</a>)</li> <li>Allow a string literal as the body via bodyText. (<a href="#string-body">text</a>)</li> <li>Allow an ordered list of options for Choice (<a href="#choice-between-bodies">text</a>).</li> <li>Add additional core lifecycle metadata for resources, including <a href="#rights-information">rights information</a> and <a href="#intended-audience">intended audience</a>. (<a href="#lifecycle-information">text</a>)</li> <li>Align identity equivalence with other standards. (<a href="#other-identities">text</a>)</li> <li>Allow association of Motivation as roles/purposes on a per body or target basis, including alignment of Tags and Semantic Tags. (<a href="#purpose-for-external-web-resources">text</a>)</li> <li>Introduce <a href="#css-selector">CSS Selector</a>, <a href="#xpath-selector">XPath Selector</a> and <a href="#range-selector">Range Selector</a> from implementation experience. </li> <li>Use structure rather than resources for multiple specifiers. (<a href="#refinement-of-selection">text</a>)</li> <li>Add the capability to describe rendering software. (<a href="#rendering-software">text</a>)</li> <li>Add <a href="#annotation-collection">Collections of Annotations</a> as a defined pattern.</li> <li>Separate the ontology [<cite><a class="bibref" href="#bib-annotation-vocab">annotation-vocab</a></cite>] from the model and JSON serialization.</li> <li>Deprecate embedded graphs as an explicit part of the model, instead just include or reference a serialized graph.</li> </ul> </section> </section> <section id="references" class="appendix" typeof="bibo:Chapter" resource="#references" property="bibo:hasPart"> <!--OddPage--> <h2 id="h-references" resource="#h-references"><span property="xhv:role" resource="xhv:heading"><span class="secno">H. </span>References</span> </h2> <section id="normative-references" typeof="bibo:Chapter" resource="#normative-references" property="bibo:hasPart"> <h3 id="h-normative-references" resource="#h-normative-references"><span property="xhv:role" resource="xhv:heading"><span class="secno">H.1 </span>Normative references</span> </h3> <dl class="bibliography" resource=""><dt id="bib-CSS3-selectors">[CSS3-selectors]</dt> <dd><a href="https://www.w3.org/TR/css3-selectors/" property="dc:requires"><cite>Selectors Level 3</cite></a>. Tantek Çelik; Elika Etemad; Daniel Glazman; Ian Hickson; Peter Linss; John Williams et al. W3C. 29 September 2011. W3C Recommendation. URL: <a href="https://www.w3.org/TR/css3-selectors/" property="dc:requires">https://www.w3.org/TR/css3-selectors/</a> </dd><dt id="bib-DOM-Level-3-XPath">[DOM-Level-3-XPath]</dt> <dd><a href="https://www.w3.org/TR/DOM-Level-3-XPath/" property="dc:requires"><cite>Document Object Model (DOM) Level 3 XPath Specification</cite></a>. Ray Whitmer. W3C. 26 February 2004. W3C Note. URL: <a href="https://www.w3.org/TR/DOM-Level-3-XPath/" property="dc:requires">https://www.w3.org/TR/DOM-Level-3-XPath/</a> </dd><dt id="bib-JSON-LD">[JSON-LD]</dt> <dd><a href="https://www.w3.org/TR/json-ld/" property="dc:requires"><cite>JSON-LD 1.0</cite></a>. Manu Sporny; Gregg Kellogg; Markus Lanthaler. W3C. 16 January 2014. W3C Recommendation. URL: <a href="https://www.w3.org/TR/json-ld/" property="dc:requires">https://www.w3.org/TR/json-ld/</a> </dd><dt id="bib-RFC2119">[RFC2119]</dt> <dd><a href="https://tools.ietf.org/html/rfc2119" property="dc:requires"><cite>Key words for use in RFCs to Indicate Requirement Levels</cite></a>. S. Bradner. IETF. March 1997. Best Current Practice. URL: <a href="https://tools.ietf.org/html/rfc2119" property="dc:requires">https://tools.ietf.org/html/rfc2119</a> </dd><dt id="bib-SVG11">[SVG11]</dt> <dd><a href="https://www.w3.org/TR/SVG11/" property="dc:requires"><cite>Scalable Vector Graphics (SVG) 1.1 (Second Edition)</cite></a>. Erik Dahlström; Patrick Dengler; Anthony Grasso; Chris Lilley; Cameron McCormack; Doug Schepers; Jonathan Watt; Jon Ferraiolo; Jun Fujisawa; Dean Jackson et al. W3C. 16 August 2011. W3C Recommendation. URL: <a href="https://www.w3.org/TR/SVG11/" property="dc:requires">https://www.w3.org/TR/SVG11/</a> </dd><dt id="bib-annotation-protocol">[annotation-protocol]</dt> <dd><a href="https://www.w3.org/TR/annotation-protocol/" property="dc:requires"><cite>Web Annotation Protocol</cite></a>. Robert Sanderson. W3C. W3C Recommendation. URL: <a href="https://www.w3.org/TR/annotation-protocol/" property="dc:requires">http://www.w3.org/TR/annotation-protocol/</a> </dd><dt id="bib-annotation-vocab">[annotation-vocab]</dt> <dd><a href="https://www.w3.org/TR/annotation-vocab/" property="dc:requires"><cite>Web Annotation Vocabulary</cite></a>. Robert Sanderson; Paolo Ciccarese; Benjamin Young. W3C. W3C Recommendation. URL: <a href="https://www.w3.org/TR/annotation-vocab/" property="dc:requires">http://www.w3.org/TR/annotation-vocab/</a> </dd><dt id="bib-bcp47">[bcp47]</dt> <dd><a href="https://tools.ietf.org/html/bcp47" property="dc:requires"><cite>Tags for Identifying Languages</cite></a>. A. Phillips; M. Davis. IETF. September 2009. IETF Best Current Practice. URL: <a href="https://tools.ietf.org/html/bcp47" property="dc:requires">https://tools.ietf.org/html/bcp47</a> </dd><dt id="bib-cfi">[cfi]</dt> <dd><a href="http://www.idpf.org/epub/linking/cfi/epub-cfi-20140628.html" property="dc:requires"><cite>EPUB Canonical Fragment Identifiers</cite></a>. Peter Sorotokin; Garth Conboy; Brady Duga; John Rivlin; Don Beaver; Kevin Ballard; Alastair Fettes; Daniel Weck. IDPF. Recommended Specification. URL: <a href="http://www.idpf.org/epub/linking/cfi/epub-cfi-20140628.html" property="dc:requires">http://www.idpf.org/epub/linking/cfi/epub-cfi-20140628.html</a> </dd><dt id="bib-charmod">[charmod]</dt> <dd><a href="https://www.w3.org/TR/charmod/" property="dc:requires"><cite>Character Model for the World Wide Web 1.0: Fundamentals</cite></a>. Martin Dürst; François Yergeau; Richard Ishida; Misha Wolf; Tex Texin et al. W3C. 15 February 2005. W3C Recommendation. URL: <a href="https://www.w3.org/TR/charmod/" property="dc:requires">https://www.w3.org/TR/charmod/</a> </dd><dt id="bib-fragid-best-practices">[fragid-best-practices]</dt> <dd><a href="https://www.w3.org/TR/fragid-best-practices/" property="dc:requires"><cite>Best Practices for Fragment Identifiers and Media Type Definitions</cite></a>. Jeni Tennison. W3C. 25 October 2012. W3C Last Call Working Draft. URL: <a href="https://www.w3.org/TR/fragid-best-practices/" property="dc:requires">https://www.w3.org/TR/fragid-best-practices/</a> </dd><dt id="bib-media-frags">[media-frags]</dt> <dd><a href="https://www.w3.org/TR/media-frags/" property="dc:requires"><cite>Media Fragments URI 1.0 (basic)</cite></a>. Raphaël Troncy; Erik Mannens; Silvia Pfeiffer; Davy Van Deursen. W3C. 25 September 2012. W3C Recommendation. URL: <a href="https://www.w3.org/TR/media-frags/" property="dc:requires">https://www.w3.org/TR/media-frags/</a> </dd><dt id="bib-rfc3023">[rfc3023]</dt> <dd><a href="https://tools.ietf.org/html/rfc3023" property="dc:requires"><cite>XML Media Types</cite></a>. M. Murata; S. St. Laurent; D. Kohn. IETF. January 2001. Proposed Standard. URL: <a href="https://tools.ietf.org/html/rfc3023" property="dc:requires">https://tools.ietf.org/html/rfc3023</a> </dd><dt id="bib-rfc3236">[rfc3236]</dt> <dd><a href="https://tools.ietf.org/html/rfc3236" property="dc:requires"><cite>The 'application/xhtml+xml' Media Type</cite></a>. M. Baker; P. Stark. IETF. January 2002. Informational. URL: <a href="https://tools.ietf.org/html/rfc3236" property="dc:requires">https://tools.ietf.org/html/rfc3236</a> </dd><dt id="bib-rfc3778">[rfc3778]</dt> <dd><a href="https://tools.ietf.org/html/rfc3778" property="dc:requires"><cite>The application/pdf Media Type</cite></a>. E. Taft; J. Pravetz; S. Zilles; L. Masinter. IETF. May 2004. Informational. URL: <a href="https://tools.ietf.org/html/rfc3778" property="dc:requires">https://tools.ietf.org/html/rfc3778</a> </dd><dt id="bib-rfc3870">[rfc3870]</dt> <dd><a href="https://tools.ietf.org/html/rfc3870" property="dc:requires"><cite>application/rdf+xml Media Type Registration</cite></a>. A. Swartz. IETF. September 2004. Informational. URL: <a href="https://tools.ietf.org/html/rfc3870" property="dc:requires">https://tools.ietf.org/html/rfc3870</a> </dd><dt id="bib-rfc3987">[rfc3987]</dt> <dd><a href="https://tools.ietf.org/html/rfc3987" property="dc:requires"><cite>Internationalized Resource Identifiers (IRIs)</cite></a>. M. Duerst; M. Suignard. IETF. January 2005. Proposed Standard. URL: <a href="https://tools.ietf.org/html/rfc3987" property="dc:requires">https://tools.ietf.org/html/rfc3987</a> </dd><dt id="bib-rfc5147">[rfc5147]</dt> <dd><a href="https://tools.ietf.org/html/rfc5147" property="dc:requires"><cite>URI Fragment Identifiers for the text/plain Media Type</cite></a>. E. Wilde; M. Duerst. IETF. April 2008. Proposed Standard. URL: <a href="https://tools.ietf.org/html/rfc5147" property="dc:requires">https://tools.ietf.org/html/rfc5147</a> </dd><dt id="bib-rfc6086">[rfc6086]</dt> <dd><a href="https://tools.ietf.org/html/rfc6086" property="dc:requires"><cite>Session Initiation Protocol (SIP) INFO Method and Package Framework</cite></a>. C. Holmberg; E. Burger; H. Kaplan. IETF. January 2011. Proposed Standard. URL: <a href="https://tools.ietf.org/html/rfc6086" property="dc:requires">https://tools.ietf.org/html/rfc6086</a> </dd><dt id="bib-rfc6838">[rfc6838]</dt> <dd><a href="https://tools.ietf.org/html/rfc6838" property="dc:requires"><cite>Media Type Specifications and Registration Procedures</cite></a>. N. Freed; J. Klensin; T. Hansen. IETF. January 2013. Best Current Practice. URL: <a href="https://tools.ietf.org/html/rfc6838" property="dc:requires">https://tools.ietf.org/html/rfc6838</a> </dd><dt id="bib-rfc7089">[rfc7089]</dt> <dd><a href="https://tools.ietf.org/html/rfc7089" property="dc:requires"><cite>HTTP Framework for Time-Based Access to Resource States -- Memento</cite></a>. H. Van de Sompel; M. Nelson; R. Sanderson. IETF. December 2013. Informational. URL: <a href="https://tools.ietf.org/html/rfc7089" property="dc:requires">https://tools.ietf.org/html/rfc7089</a> </dd><dt id="bib-rfc7111">[rfc7111]</dt> <dd><a href="https://tools.ietf.org/html/rfc7111" property="dc:requires"><cite>URI Fragment Identifiers for the text/csv Media Type</cite></a>. M. Hausenblas; E. Wilde; J. Tennison. IETF. January 2014. Informational. URL: <a href="https://tools.ietf.org/html/rfc7111" property="dc:requires">https://tools.ietf.org/html/rfc7111</a> </dd><dt id="bib-webarch">[webarch]</dt> <dd><a href="https://www.w3.org/TR/webarch/" property="dc:requires"><cite>Architecture of the World Wide Web, Volume One</cite></a>. Ian Jacobs; Norman Walsh. W3C. 15 December 2004. W3C Recommendation. URL: <a href="https://www.w3.org/TR/webarch/" property="dc:requires">https://www.w3.org/TR/webarch/</a> </dd> </dl> </section> <section id="informative-references" typeof="bibo:Chapter" resource="#informative-references" property="bibo:hasPart"> <h3 id="h-informative-references" resource="#h-informative-references"><span property="xhv:role" resource="xhv:heading"><span class="secno">H.2 </span>Informative references</span> </h3> <dl class="bibliography" resource=""><dt id="bib-html5">[html5]</dt> <dd><a href="https://www.w3.org/TR/html5/" property="dc:references"><cite>HTML5</cite></a>. Ian Hickson; Robin Berjon; Steve Faulkner; Travis Leithead; Erika Doyle Navara; Theresa O'Connor; Silvia Pfeiffer. W3C. 28 October 2014. W3C Recommendation. URL: <a href="https://www.w3.org/TR/html5/" property="dc:references">https://www.w3.org/TR/html5/</a> </dd><dt id="bib-iana-media-types">[iana-media-types]</dt> <dd><a href="http://www.iana.org/assignments/media-types/" property="dc:references"><cite>Media Types</cite></a>. IANA (Internet Assigned Numbers Authority). URL: <a href="http://www.iana.org/assignments/media-types/" property="dc:references">http://www.iana.org/assignments/media-types/</a> </dd><dt id="bib-w3c-language-tags">[w3c-language-tags]</dt> <dd><a href="https://www.w3.org/International/articles/language-tags/" property="dc:references"><cite>Language Tags in HTML and XML</cite></a>. W3C. URL: <a href="https://www.w3.org/International/articles/language-tags/" property="dc:references">https://www.w3.org/International/articles/language-tags/</a> </dd> </dl> </section> </section> <p role="navigation" id="back-to-top"><a href="#toc"><abbr title="Back to Top">↑</abbr></a></p> <script src="https://www.w3.org/scripts/TR/2016/fixup.js"></script> </body> </html>