delete: <html lang="en" dir="ltr" typeof="bibo:Document w3p:CR" prefix="bibo: http://purl.org/ontology/bibo/ w3p: http://www.w3.org/2001/02pd/rec54#"> insert: <html dir="ltr" typeof="bibo:Document w3p:PR" prefix="bibo: http://purl.org/ontology/bibo/ w3p: http://www.w3.org/2001/02pd/rec54#" lang="en"> delete: <meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport"> insert: <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> Web Annotation Protocol delete: <link href="https://www.w3.org/StyleSheets/TR/2016/W3C-CR" rel="stylesheet"> delete: <meta content="ReSpec 5.0.0" name="generator"> delete: <script type="application/json" id="initialUserConfig"> insert: <script id="initialUserConfig" type="application/json"> insert: <link rel="stylesheet" href="https://www.w3.org/StyleSheets/TR/2016/W3C-PR"> insert: <meta name="generator" content="ReSpec 8.4.1"> insert: <link rel="canonical" href="https://www.w3.org/TR/annotation-protocol/"> delete: <body id="respecDocument" role="document" class="h-entry"> delete: <div id="respecHeader" role="contentinfo" class="head"> insert: <body class="h-entry" role="document" id="respecDocument"> insert: <div class="head" role="contentinfo" id="respecHeader"> delete: <section property="dc:abstract" class="introductory" id="abstract"> delete: <h2 resource="#h-abstract" id="h-abstract"> insert: <section id="abstract" class="introductory" property="dc:abstract">
insert: <h2 id="h-abstract" resource="#h-abstract">

Abstract

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.

The Web Annotation Protocol describes the transport mechanisms for creating and managing annotations in a method that is consistent with the Web Architecture and REST best practices.

delete: <h2 resource="#h-sotd" id="h-sotd"> insert: <h2 id="h-sotd" resource="#h-sotd">

Status of This Document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at https://www.w3.org/TR/.

The Candidate Recommendation exit criteria are listed in the delete: <a href="#candidate-recommendation-exit-criteria"> appendix delete: </a> . Implementers will find test suites on the delete: <a href="https://github.com/w3c/web-platform-tests/"> Web Platform Tests delete: </a> repository. delete: </p> delete: <p> This document was published by the Web Annotation Working Group as a Candidate Proposed Recommendation. This document is intended to become a W3C Recommendation. If you wish to make The insert: <abbr title="World Wide Web Consortium"> W3C insert: </abbr> Membership and other interested parties are invited to review the document and send comments regarding this document, please send them to delete: <a href="mailto:public-annotation@w3.org"> to insert: <a rel="discussion" href="mailto:public-annotation@w3.org"> public-annotation@w3.org ( subscribe , archives ). delete: <abbr title="World Wide Web Consortium"> W3C delete: </abbr> publishes a ) through 14 February 2017. Advisory Committee Representatives should consult their insert: <a href="https://www.w3.org/2002/09/wbs/myQuestionnaires"> WBS questionnaires insert: </a> . Note that substantive technical comments were expected during the Candidate Recommendation to indicate review period that the document is believed to be stable and to encourage implementation by the developer community. This Candidate Recommendation is expected to advance to Proposed Recommendation no earlier than ended 30 September 2016. All comments are welcome.

Please see the Working Group's implementation report .

Publication as a Candidate Proposed Recommendation does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

This document was produced by a group operating under the 5 February 2004 W3C Patent Policy . W3C maintains a public list of any patent disclosures 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 Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy .

This document is governed by the 1 September 2015 W3C Process Document .

delete: <section property="bibo:hasPart" resource="#introduction" typeof="bibo:Chapter" id="introduction" class="informative"> delete: <h2 resource="#h-introduction" id="h-introduction"> insert: <section class="informative" id="introduction" typeof="bibo:Chapter" resource="#introduction" property="bibo:hasPart">
insert: <h2 id="h-introduction" resource="#h-introduction">

1. Introduction

This section is non-normative.

Interoperability between systems has two basic aspects: the syntax and semantics of the data that is moved between the systems, and the transport mechanism for that movement. The HTTP protocol and the Web architecture provides us with a great starting point for a standardized transport layer, and can be used to move content between systems easily and effectively. Building upon these foundations allows us to make use of existing technology and patterns to ensure consistency and ease of development.

The Web Annotation Protocol describes a transport mechanism for creating, managing, and retrieving Annotations. Annotations in this specification are assumed to follow the requirements of the Web Annotation Data Model [ delete: <a href="#bib-annotation-model" class="bibref"> insert: <a class="bibref" href="#bib-annotation-model"> annotation-model ] and Web Annotation Vocabulary [ delete: <a href="#bib-annotation-vocab" class="bibref"> insert: <a class="bibref" href="#bib-annotation-vocab"> annotation-vocab ]. This specification builds upon REST principles and the Linked Data Platform [ delete: <a href="#bib-ldp" class="bibref"> insert: <a class="bibref" href="#bib-ldp"> ldp ] recommendation, and familiarity with it is recommended.

delete: <section property="bibo:hasPart" resource="#aims-of-the-protocol" typeof="bibo:Chapter" id="aims-of-the-protocol"> delete: <h3 resource="#h-aims-of-the-protocol" id="h-aims-of-the-protocol"> insert: <section id="aims-of-the-protocol" typeof="bibo:Chapter" resource="#aims-of-the-protocol" property="bibo:hasPart">
insert: <h3 id="h-aims-of-the-protocol" resource="#h-aims-of-the-protocol">

1.1 Aims of the Protocol

The primary aim of the Web Annotation Protocol is to provide a standard set of interactions that allow annotation clients and servers to interoperate seamlessly. By being able to discover annotation protocol end-points and how to interact with them, clients can be configured either automatically or by the user to store annotations in any compatible remote system, rather than being locked in to a single client and server pair.

delete: <section property="bibo:hasPart" resource="#summary" typeof="bibo:Chapter" id="summary"> delete: <h3 resource="#h-summary" id="h-summary"> insert: <section id="summary" typeof="bibo:Chapter" resource="#summary" property="bibo:hasPart">
insert: <h3 id="h-summary" resource="#h-summary">

1.2 Summary

For those familiar with the Web Annotation model, LDP, and REST, much of the Annotation Protocol will be very obvious. The following aspects are the most important new requirements.

delete: <section property="bibo:hasPart" resource="#conformance" typeof="bibo:Chapter" id="conformance"> delete: <h3 resource="#h-conformance" id="h-conformance"> insert: <section id="conformance" typeof="bibo:Chapter" resource="#conformance" property="bibo:hasPart">
insert: <h3 id="h-conformance" resource="#h-conformance">

1.3 Conformance

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.

The key words MAY , MUST , MUST NOT , RECOMMENDED , SHOULD , and SHOULD NOT are to be interpreted as described in [ delete: <a href="#bib-RFC2119" class="bibref"> insert: <a class="bibref" href="#bib-RFC2119"> RFC2119 ].

delete: <section property="bibo:hasPart" resource="#terminology" typeof="bibo:Chapter" id="terminology"> delete: <h3 resource="#h-terminology" id="h-terminology"> insert: <section id="terminology" typeof="bibo:Chapter" resource="#terminology" property="bibo:hasPart">
insert: <h3 id="h-terminology" resource="#h-terminology">

1.4 Terminology

delete: <dfn id="dfn-iri" data-dfn-type="dfn"> insert: <dfn data-dfn-type="dfn" id="dfn-iri"> IRI
An delete: <a data-link-type="dfn" class="internalDFN" href="#dfn-iri"> insert: <a href="#dfn-iri" class="internalDFN" data-link-type="dfn"> IRI , 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 [ delete: <a href="#bib-rfc3987" class="bibref"> insert: <a class="bibref" href="#bib-rfc3987"> rfc3987 ].
delete: <dfn id="dfn-resource" data-dfn-type="dfn"> insert: <dfn data-dfn-type="dfn" id="dfn-resource"> Resource
An item of interest that delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY be identified by an delete: <a data-link-type="dfn" class="internalDFN" href="#dfn-iri"> insert: <a href="#dfn-iri" class="internalDFN" data-link-type="dfn"> IRI .
Web Server
A program that accepts connections in order to service HTTP requests by sending HTTP responses.
Annotation
A web resource that follows the Web Annotation Data Model [ delete: <a href="#bib-annotation-model" class="bibref"> insert: <a class="bibref" href="#bib-annotation-model"> annotation-model ].
Annotation Server
A Web Server that also makes available and allows the management of Annotations via the protocol described in this document.
Annotation Client
A program that establishes connections to Annotation Servers for the purpose of retrieving and managing Annotations via the protocol described in this document.
Annotation Container
An LDP Container [ delete: <a href="#bib-ldp" class="bibref"> insert: <a class="bibref" href="#bib-ldp"> ldp ] used to manage Annotations.

delete: <section property="bibo:hasPart" resource="#web-annotation-protocol-principles" typeof="bibo:Chapter" id="web-annotation-protocol-principles"> delete: <h2 resource="#h-web-annotation-protocol-principles" id="h-web-annotation-protocol-principles"> insert: <section id="web-annotation-protocol-principles" typeof="bibo:Chapter" resource="#web-annotation-protocol-principles" property="bibo:hasPart">
insert: <h2 id="h-web-annotation-protocol-principles" resource="#h-web-annotation-protocol-principles">

2. Web Annotation Protocol Principles

The Web Annotation Protocol is defined using the following basic principles:

delete: <section property="bibo:hasPart" resource="#annotation-retrieval" typeof="bibo:Chapter" id="annotation-retrieval"> delete: <h2 resource="#h-annotation-retrieval" id="h-annotation-retrieval"> insert: <section id="annotation-retrieval" typeof="bibo:Chapter" resource="#annotation-retrieval" property="bibo:hasPart">
insert: <h2 id="h-annotation-retrieval" resource="#h-annotation-retrieval">

3. Annotation Retrieval

The Annotation Server delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST support the following HTTP methods on the Annotation's IRI:

Servers delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD use HTTPS rather than HTTP for all interactions, including retrieval of Annotations.

Servers delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST support the JSON-LD representation using the Web Annotation profile. These responses delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST have a Content-Type header with the application/ld+json media type, and it delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD have the Web Annotation profile IRI of http://www.w3.org/ns/anno.jsonld in the profile parameter.

Servers delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD support a Turtle representation, and delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY support other formats. If more than one representation of the Annotation is available, then the server delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD support content negotiation. Content negotiation for different serializations is performed by including the desired media type in the HTTP Accept header of the request, however clients cannot assume that the server will honor their preferences [ delete: <a href="#bib-rfc7231" class="bibref"> insert: <a class="bibref" href="#bib-rfc7231"> rfc7231 ].

Servers delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY support different JSON-LD profiles. Content negotiation for different JSON-LD profiles is performed by adding a profile parameter to the JSON-LD media type in a space separated, quoted list as part of the Accept header.

Servers delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD use the 200 HTTP status code when no errors occurred while processing the request to retrieve an Annotation, and delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY use 3XX HTTP status codes to redirect to a new location.

The response from the Annotation Server delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST have a Link header entry where the target IRI is http://www.w3.org/ns/ldp#Resource and the rel parameter value is type . The Annotation type of http://www.w3.org/ns/oa#Annotation delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY also be added with the same rel type. This is to let client systems know that the retrieved representation is a Resource and an Annotation, even if the client cannot process the representation's format.

The For HEAD and GET requests, the response delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST have an ETag header with an entity reference value that implements the notion of entity tags from HTTP [ delete: <a href="#bib-rfc7232" class="bibref"> insert: <a class="bibref" href="#bib-rfc7232"> rfc7232 ]. This value will be used by the client when sending update or delete requests.

The response delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST have an Allow header that lists the HTTP methods available for interacting with the Annotation [ delete: <a href="#bib-rfc7231" class="bibref"> insert: <a class="bibref" href="#bib-rfc7231"> rfc7231 ].

If For HEAD and GET requests, if the server supports content negotiation by format or JSON-LD profile, the response delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST have a Vary header with Accept in the value [ delete: <a href="#bib-rfc7231" class="bibref"> insert: <a class="bibref" href="#bib-rfc7231"> rfc7231 ]. This is to ensure that caches understand that the representation changes based on the value of that request header.

Request:
Example 1
  GET   /annotations/anno1  HTTP/1.1  Host  : example.org  Accept  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld" 
Response:
Example 2
 HTTP/1.1  200  OK  Content-Type  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Link  : <http://www.w3.org/ns/ldp#Resource>; rel="type"  ETag  : "_87e52ce126126"  Allow  : PUT,GET,OPTIONS,HEAD,DELETE,PATCH  Vary  : Accept  Content-Length  : 287 delete: <span class="xquery"> {  delete: <span class="hljs-string"> insert: <span class="json">  {  insert: <span class="hljs-attr">  "@context"  :  "http://www.w3.org/ns/anno.jsonld"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/anno1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "created"  :  "2015-01-31T12:03:45Z"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "body"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "TextualBody"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "value"  :  "I like this page!"  }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://www.example.com/index.html"  }  
delete: <section property="bibo:hasPart" resource="#annotation-containers" typeof="bibo:Chapter" id="annotation-containers"> delete: <h2 resource="#h-annotation-containers" id="h-annotation-containers"> insert: <section id="annotation-containers" typeof="bibo:Chapter" resource="#annotation-containers" property="bibo:hasPart">
insert: <h2 id="h-annotation-containers" resource="#h-annotation-containers">

4. Annotation Containers

If the Annotation Server supports the management of Annotations, including one or more of creating, updating, and deleting them, then the following section's requirements apply. The Annotation Protocol is a use of the Linked Data Platform [ delete: <a href="#bib-ldp" class="bibref"> insert: <a class="bibref" href="#bib-ldp"> ldp ] specification, with some additional constraints derived from the Web Annotation Data Model [ delete: <a href="#bib-annotation-model" class="bibref"> insert: <a class="bibref" href="#bib-annotation-model"> annotation-model ].

An Annotation Server delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST provide one or more Containers within which Annotations can be managed: an Annotation Container. An Annotation Container is at the same time both a Container [ delete: <a href="#bib-ldp" class="bibref"> insert: <a class="bibref" href="#bib-ldp"> ldp ] (a service for managing Annotations) and an OrderedCollection [ delete: <a href="#bib-activitystreams-core" class="bibref"> insert: <a class="bibref" href="#bib-activitystreams-core"> activitystreams-core ] (an ordered list of Annotations). It can have descriptive and technical information associated with it to allow clients to present it to a user in order to allow her to decide if it should be used or not. The classes, properties and representations for the Collection model are described in the Web Annotation Data Model, and the mappings to Activity Streams provided in the Web Annotation Vocabulary [ insert: <cite> insert: <a class="bibref" href="#bib-annotation-vocab"> annotation-vocab insert: </a> insert: </cite> ].

Annotation Containers delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD implement the LDP Basic Container specification, but delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY instead implement another type of Container, such as a Direct or Indirect Container, to fulfill business needs. Annotation Containers delete: <em title="MAY" class="rfc2119"> MAY The URI of an Annotation Container insert: <em class="rfc2119" title="MUST NOT"> MUST NOT have any IRI, but it delete: <em title="MUST" class="rfc2119"> a query or fragment component, and the path component insert: <em class="rfc2119" title="MUST"> MUST end in a "/" character.

Implementations delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD use HTTPS rather than HTTP for all interactions with Annotation Containers.

The creation, management, and structure of Annotation Containers are beyond the scope of this specification. Please see the Linked Data Platform specification [ delete: <a href="#bib-ldp" class="bibref"> insert: <a class="bibref" href="#bib-ldp"> ldp ] for additional information.

delete: <section property="bibo:hasPart" resource="#container-retrieval" typeof="bibo:Chapter" id="container-retrieval"> delete: <h3 resource="#h-container-retrieval" id="h-container-retrieval"> insert: <section id="container-retrieval" typeof="bibo:Chapter" resource="#container-retrieval" property="bibo:hasPart">
insert: <h3 id="h-container-retrieval" resource="#h-container-retrieval">

4.1 Container Retrieval

The Annotation Server delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST support the following HTTP methods on the Annotation Container's IRI:

When an HTTP GET request is issued against the Annotation Container, the server delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST return a description of the container. That description delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST be available in JSON-LD, delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD be available in Turtle, and delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY be available in other formats. The JSON-LD serialization of the Container's description delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD use both the LDP context ( http://www.w3c.org/ns/ldp.jsonld ), and the Web Annotation's profile and context [ delete: <a href="#bib-annotation-model" class="bibref"> insert: <a class="bibref" href="#bib-annotation-model"> annotation-model ], unless the request would determine otherwise.

Servers delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD use the 200 HTTP status code if the request is successfully completed without errors and does not require redirection based on the client's preferences.

All supported methods for interacting with the Annotation Container delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD be advertised in the Allow header of the GET , HEAD and OPTIONS responses from the container's IRI . The Allow header delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY also be included on any other responses.

Annotation Containers delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST return a Link header [ delete: <a href="#bib-rfc5988" class="bibref"> insert: <a class="bibref" href="#bib-rfc5988"> rfc5988 ] on all responses with the following components:

All HTTP For HEAD and GET requests, responses from Annotation Containers delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST include an ETag header that implements the notion of entity tags from HTTP [ delete: <a href="#bib-rfc7230" class="bibref"> rfc7230 insert: <a class="bibref" href="#bib-rfc7232"> rfc7232 ]. This value will insert: <em class="rfc2119" title="SHOULD"> SHOULD insert: </em> be used by administrative clients when updating the container by including it in an If-Match request header in the same way as clients wanting to update an Annotation.

If the Accept header is absent from the a GET request, then Annotation Servers delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST respond with a JSON-LD representation of the Annotation Container, however clients with a preference for JSON-LD delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD explicitly request it using an Accept request header.

If the server supports content negotiation by format or JSON-LD profile, the response to a HEAD or GET request from the Annotation Container delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST have a Vary header that includes Accept in the value to ensure that caches can determine that the representation will change based on the value of this header in requests.

Responses from Annotation Containers that support the use of the POST method to create Annotations delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD include an Accept-Post header on responses to GET, HEAD and OPTIONS requests. The value is a comma separated list of media-types that are acceptable for the client to send via POST [ delete: <a href="#bib-ldp" class="bibref"> insert: <a class="bibref" href="#bib-ldp"> ldp ].

Example 3 : Example Annotation Container Headers
  Link  : <http://www.w3.org/ns/ldp#BasicContainer>; rel="type"  Link  : <http://www.w3.org/TR/annotation-protocol/>; rel="http://www.w3.org/ns/ldp#constrainedBy"  ETag  : "0f6b5cd8dc1f754a1738a53b1da34f6b"  Vary  : Accept  Allow  : POST, GET, OPTIONS, HEAD  Accept-Post  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld", text/turtle 
delete: <section property="bibo:hasPart" resource="#container-representations" typeof="bibo:Chapter" id="container-representations"> delete: <h3 resource="#h-container-representations" id="h-container-representations"> insert: <section id="container-representations" typeof="bibo:Chapter" resource="#container-representations" property="bibo:hasPart">
insert: <h3 id="h-container-representations" resource="#h-container-representations">

4.2 Container Representations

As there are likely to be many Annotations in a single Container, the Annotation Protocol adopts the ActivityStreams collection paging mechanism for returning the contents of the Container. Each page Collection Page contains an ordered list with a subset of the managed Annotations, such that if every page is traversed, a client can reconstruct the complete, ordered contents of the container. container/collection. The number of IRIs or Annotation descriptions included on each page is at the server's discretion, and may be inconsistent between pages. The feature or features by which the Annotations are sorted are not explicit in the response.

The requirements for JSON-LD representation of Annotation Collections are defined in the Web Annotation Data Model, and are summarized here. insert: </p>

insert: <p>

The Collection insert: <em class="rfc2119" title="MUST"> MUST insert: </em> have an IRI that identifies it, and insert: <em class="rfc2119" title="MUST"> MUST insert: </em> have at least the insert: <code> AnnotationCollection insert: </code> code> class (the name associated with OrderedCollection in the JSON-LD context) but insert: <em class="rfc2119" title="MAY"> MAY insert: </em> have other types as well, including the type of LDP Container used. It insert: <em class="rfc2119" title="SHOULD"> SHOULD insert: </em> have a human readable insert: <code> label insert: </code> , and insert: <em class="rfc2119" title="MAY"> MAY insert: </em> have other properties such as insert: <code> creator insert: </code> and insert: <code> created insert: </code> . insert: </p>

insert: <p>

If there are greater than zero Annotations in the Container, the representation delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST either include a link to the first page of Annotations as the value of the first property, or include the representation of the first page embedded within the response. If there is more than one page of Annotations, then the representation delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD have a link to the last page using the last property.

The representation of the Container delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD include the total property with the total number of annotations in the Container. The Container insert: <em class="rfc2119" title="SHOULD"> SHOULD insert: </em> include the insert: <code> modified insert: </code> property with the most recent timestamp of when any of the annotations in the Container. This timestamp allows clients to detect when to re-cache data, even if there are the same number of annotations as the same number may have been added and deleted.

The IRI of the Container provided in the response delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD differentiate between whether the pages contain just the IRIs, or the full descriptions of the Annotations. It is delete: <em title="RECOMMENDED" class="rfc2119"> insert: <em class="rfc2119" title="RECOMMENDED"> RECOMMENDED that this be done with a query parameter. The server delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY redirect the client to this IRI and deliver the response there, otherwise it delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST include a Content-Location header with the IRI as its value.

delete: <section property="bibo:hasPart" resource="#container-representation-preferences" typeof="bibo:Chapter" id="container-representation-preferences"> delete: <h4 resource="#h-container-representation-preferences" id="h-container-representation-preferences"> insert: <section id="container-representation-preferences" typeof="bibo:Chapter" resource="#container-representation-preferences" property="bibo:hasPart">
insert: <h4 id="h-container-representation-preferences" resource="#h-container-representation-preferences">

4.2.1 Container Representation Preferences

There are three preferences for Container requests that will govern the representation of the server's responses:

  1. If the client prefers to only receive the Container description and no Annotations (either URI or full descriptions) embedded in the Container response, then it delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST include a Prefer request header with the value return=representation;include="http://www.w3.org/ns/ldp#PreferMinimalContainer" .
  2. If the client prefers to receive the list of Annotations only as IRIs, IRI references, either embedded in the current Container response or future paged responses, then it delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST include a Prefer request header with the value return=representation;include="http://www.w3.org/ns/oa#PreferContainedIRIs" .
  3. If the client prefers to receive complete Annotation descriptions, either in the current Container response or future paged responses, then it delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST include a Prefer request header with the value return=representation;include="http://www.w3.org/ns/oa#PreferContainedDescriptions" .

The client delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY send multiple preferences as the value of the include parameter as defined by the Linked Data Platform [ delete: <a href="#bib-ldp" class="bibref"> insert: <a class="bibref" href="#bib-ldp"> ldp ]. However, the client delete: <em title="MUST NOT" class="rfc2119"> insert: <em class="rfc2119" title="MUST NOT"> MUST NOT include both the PreferContainedIRIs and PreferContainedDescriptions preferences on the same request, as the server cannot honor both at the same time. If the PreferMinimalContainer preference is not given, then the server delete: <em title="MAY" class="rfc2119"> MAY delete: </em> respond with the first page of insert: <em class="rfc2119" title="SHOULD NOT"> SHOULD NOT insert: </em> embed the Annotations embedded within the Container response or it delete: <em title="MAY" class="rfc2119"> MAY delete: </em> provide links references to them, but insert: <em class="rfc2119" title="SHOULD"> SHOULD insert: </em> include a reference to the first and last pages. Annotation Pages. Whether the pages are of IRI references or complete descriptions is governed by the use of insert: <code> PreferContainedIRIs insert: </code> and insert: <code> PreferContainedDescriptions insert: </code> respectively. If no preference is given by the client, the server delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD default to the PreferContainedDescriptions behavior. The server delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY ignore the client's preferences.

delete: <section property="bibo:hasPart" resource="#representations-without-annotations" typeof="bibo:Chapter" id="representations-without-annotations"> delete: <h4 resource="#h-representations-without-annotations" id="h-representations-without-annotations"> insert: <section id="representations-without-annotations" typeof="bibo:Chapter" resource="#representations-without-annotations" property="bibo:hasPart">
insert: <h4 id="h-representations-without-annotations" resource="#h-representations-without-annotations">

4.2.2 Representations without Annotations

If the client requests the minimal representation of an Annotation Container, the response delete: <em title="MUST NOT" class="rfc2119"> insert: <em class="rfc2119" title="MUST NOT"> MUST NOT include either the ldp:contains predicate nor embed the first page of Annotations within the response.

The linked pages delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD follow any PreferContainedDescriptions or PreferContainedIRIs preferences.

The server delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY return a representation without embedded Annotations, even if the PreferMinimalContainer preference is not supplied.

Request:
Example 4 : Container Request without Annotations
  GET   /annotations/  HTTP/1.1  Host  : example.org  Accept  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Prefer  : return=representation;include="http://www.w3.org/ns/ldp#PreferMinimalContainer http://www.w3.org/ns/oa#PreferContainedIRIs" 
Response:
Example 5 : Container Response without Annotations
 HTTP/1.1  200  OK  Content-Type  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  ETag  : "_87e52ce123123"  Link  : <http://www.w3.org/ns/ldp#BasicContainer>; rel="type"  Link  : <http://www.w3.org/TR/annotation-protocol/>; rel="http://www.w3.org/ns/ldp#constrainedBy"  Allow  : POST,GET,OPTIONS,HEAD  Vary  : Accept  Content-Length  : 368 delete: <span class="xquery"> {  delete: <span class="hljs-string"> insert: <span class="json">  {  insert: <span class="hljs-attr">  "@context"  : [  "http://www.w3.org/ns/anno.jsonld"  ,  "http://www.w3.org/ns/ldp.jsonld"  ], delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/?iris=1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  : [  "BasicContainer"  ,  "AnnotationCollection"  ], delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "total"  :  42023  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "modified"  insert: </span>  :  insert: <span class="hljs-string">  "2016-07-20T12:00:00Z"  insert: </span>  ,  insert: <span class="hljs-attr">  "label"  :  "A Container for Web Annotations"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "first"  :  "http://example.org/annotations/?iris=1&page=0"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "last"  :  "http://example.org/annotations/?iris=1&page=42"  }  
delete: <section property="bibo:hasPart" resource="#representations-with-annotation-iris" typeof="bibo:Chapter" id="representations-with-annotation-iris"> delete: <h4 resource="#h-representations-with-annotation-iris" id="h-representations-with-annotation-iris"> insert: <section id="representations-with-annotation-iris" typeof="bibo:Chapter" resource="#representations-with-annotation-iris" property="bibo:hasPart">
insert: <h4 id="h-representations-with-annotation-iris" resource="#h-representations-with-annotation-iris">

4.2.3 Representations with Annotation IRIs

If the Server supports Container preferences, it delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST respond to PreferContainedIRIs with a response containing an AnnotationPage as the value of first with its items containing only the IRIs of the contained Annotations.

The linked pages delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD follow the PreferContainedIRIs preference.

The PreferContainedIRIs and the PreferContainedDescriptions preferences are mutually exclusive.

Request for embedded IRIs:
Example 6 : Container Request (Embedded IRIs)
  GET   /annotations/  HTTP/1.1  Host  : example.org  Accept  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Prefer  : return=representation;include="http://www.w3.org/ns/oa#PreferContainedIRIs" 
Response:
Example 7 : Container Response (Embedded IRIs)
 HTTP/1.1  200  OK  Content-Type  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Content-Location  : http://example.org/annotations/?iris=1  ETag  : "_87e52ce123123"  Link  : <http://www.w3.org/ns/ldp#BasicContainer>; rel="type"  Link  : <http://www.w3.org/TR/annotation-protocol/>; rel="http://www.w3.org/ns/ldp#constrainedBy"  Allow  : POST,GET,OPTIONS,HEAD  Vary  : Accept, Prefer  Content-Length  : 397 delete: <span class="xquery"> {  delete: <span class="hljs-string"> insert: <span class="json">  {  insert: <span class="hljs-attr">  "@context"  : [  "http://www.w3.org/ns/anno.jsonld"  ,  "http://www.w3.org/ns/ldp.jsonld"  ], delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/?iris=1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  : [  "BasicContainer"  ,  "AnnotationCollection"  ], delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "total"  :  42023  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "modified"  insert: </span>  :  insert: <span class="hljs-string">  "2016-07-20T12:00:00Z"  insert: </span>  ,  insert: <span class="hljs-attr">  "label"  :  "A Container for Web Annotations"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "first"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/?iris=1&page=0"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "AnnotationPage"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "next"  :  "http://example.org/annotations/?iris=1&page=1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "items"  : [  "http://example.org/annotations/anno1"  ,  "http://example.org/annotations/anno2"  ,  "http://example.org/annotations/anno3"  ,  "http://example.org/annotations/anno4"  ,  "http://example.org/annotations/anno5"  ,  "http://example.org/annotations/anno6"  , ...  "http://example.org/annotations/anno999"  , ] }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "last"  :  "http://example.org/annotations/?iris=1&page=42"  }  
delete: <section property="bibo:hasPart" resource="#representations-with-annotation-descriptions" typeof="bibo:Chapter" id="representations-with-annotation-descriptions"> delete: <h4 resource="#h-representations-with-annotation-descriptions" id="h-representations-with-annotation-descriptions"> insert: <section id="representations-with-annotation-descriptions" typeof="bibo:Chapter" resource="#representations-with-annotation-descriptions" property="bibo:hasPart">
insert: <h4 id="h-representations-with-annotation-descriptions" resource="#h-representations-with-annotation-descriptions">

4.2.4 Representations with Annotation Descriptions

If the Server supports Container preferences, it delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST respond to PreferContainedDescriptions with a response containing an AnnotationPage as the value of first with its items containing complete, inline Annotations.

The linked pages delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD follow the PreferContainedDescriptions preference.

The PreferContainedIRIs and the PreferContainedDescriptions preferences are mutually exclusive.

Request for embedded descriptions:
Example 8 : Container Request (Embedded Descriptions)
  GET   /annotations/  HTTP/1.1  Host  : example.org  Accept  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Prefer  : return=representation;include="http://www.w3.org/ns/oa#PreferContainedDescriptions" 
Example 9 : Container Response (Embedded Descriptions)
 HTTP/1.1  200  OK  Content-Type  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Allow  : GET,OPTIONS,HEAD  Vary  : Accept, Prefer  Content-Length  : 924 delete: <span class="xquery"> {  delete: <span class="hljs-string"> insert: <span class="json">  {  insert: <span class="hljs-attr">  "@context"  : [  "http://www.w3.org/ns/anno.jsonld"  ,  "http://www.w3.org/ns/ldp.jsonld"  ], delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/?iris=0"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  : [  "BasicContainer"  ,  "AnnotationCollection"  ], delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "total"  :  42023  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "modified"  insert: </span>  :  insert: <span class="hljs-string">  "2016-07-20T12:00:00Z"  insert: </span>  ,  insert: <span class="hljs-attr">  "label"  :  "A Container for Web Annotations"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "first"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/?iris=0&page=0"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "AnnotationPage"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "next"  :  "http://example.org/annotations/?iris=0&page=1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "items"  : [ { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/anno1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "body"  :  "http://example.net/body1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://example.com/page1"  }, { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/anno2"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "body"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "TextualBody"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "value"  :  "I like this!"  }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://example.com/book1"  } // ... { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/anno50"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "body"  :  "http://example.org/texts/description1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://example.com/images/image1"  } ] }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "last"  :  "http://example.org/annotations/?iris=0&page=840"  }  
delete: <section property="bibo:hasPart" resource="#annotation-pages" typeof="bibo:Chapter" id="annotation-pages"> delete: <h3 resource="#h-annotation-pages" id="h-annotation-pages"> insert: <section id="annotation-pages" typeof="bibo:Chapter" resource="#annotation-pages" property="bibo:hasPart">
insert: <h3 id="h-annotation-pages" resource="#h-annotation-pages">

4.3 Annotation Pages

Individual pages are instances of delete: <code> CollectionPage delete: </code> . the Activity Streams insert: <code> OrderedCollectionPage insert: </code> class, which is refered to as insert: <code> AnnotationPage insert: </code> in the Web Annotation JSON-LD context. The page contains the Annotations, either via their IRIs or full descriptions, in the items property.

The requirements for JSON-LD representation of Annotation Collections Pages are defined in the Web Annotation Data Model, and are summarized here. insert: </p>

insert: <p>

The Annotation Page insert: <em class="rfc2119" title="MUST"> MUST insert: </em> have an IRI that identifies it, and insert: <em class="rfc2119" title="MUST"> MUST insert: </em> have at least the insert: <code> AnnotationPage insert: </code> class but insert: <em class="rfc2119" title="MAY"> MAY insert: </em> have other types as well. If the Page is not the last Page in the Collection, then it insert: <em class="rfc2119" title="MUST"> MUST insert: </em> have a reference to the Page which follows it using the insert: <code> next insert: </code> property. If the Page is not the first Page in the Collection, it insert: <em class="rfc2119" title="SHOULD"> SHOULD insert: </em> have a reference ot the previous Page using the insert: <code> prev insert: </code> property. Pages insert: <em class="rfc2119" title="SHOULD"> SHOULD insert: </em> give the position of the first Annotation in the insert: <code> items insert: </code> list relative to the order of the Collection using the zero-based insert: <code> startIndex insert: </code> property. insert: </p>

insert: <p>

Each page delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST have a link to the container Collection that it is part of, using the partOf property. If it is not the first page, it delete: <em title="MUST" class="rfc2119"> MUST delete: </em> have a link to the previous page in the sequence, using the delete: <code> prev delete: </code> property. If it is not the last page, it delete: <em title="MUST" class="rfc2119"> MUST delete: </em> have a link to the next page in the sequence, using the delete: <code> next delete: </code> property. The description of the Collection insert: <em class="rfc2119" title="SHOULD"> SHOULD insert: </em> include both the insert: <code> total insert: </code> and insert: <code> modified insert: </code> properties. The response delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY include other properties of the Collection in the response, including the total number of items such as the insert: <code> label insert: </code> or insert: <code> first insert: </code> and insert: <code> last page insert: </code> links.

The client delete: <em title="SHOULD NOT" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD NOT"> SHOULD NOT send the Prefer header when requesting the page, Page, as it has already been taken into account when requesting the Container. Collection.

This specification does not require any particular functionality when a client makes requests other than GET, HEAD or OPTIONS to a page.

As the delete: <code> CollectionPage delete: </code> Page is not a an LDP Container, it does not have the requirement to include a Link header with a type. That the URLs can could be constructed with query parameters added to the Container's IRI is an implementation convenience, and does not imply the type of the resource.

insert: <p>

insert: <b> Embedded IRIs Interaction Example insert: </b> insert: </p>

Request:
Example 10 : Page Request
  GET   /annotations/?iris=1&page=0  HTTP/1.1  Host  : example.org  Accept  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld" 
Response:
Example 11 : Page Response (Embedded IRIs)
 HTTP/1.1  200  OK  Content-Type  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Allow  : GET,OPTIONS,HEAD  Vary  : Accept, Prefer  Accept   Content-Length  : 630 delete: <span class="xquery"> {  delete: <span class="hljs-string"> insert: <span class="json">  {  insert: <span class="hljs-attr">  "@context"  :  "http://www.w3.org/ns/anno.jsonld"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/?iris=1&page=0"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "AnnotationPage"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "partOf"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/?iris=1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "total"  :  42023  ,  insert: <span class="hljs-attr">  "modified"  insert: </span>  :  insert: <span class="hljs-string">  "2016-07-20T12:00:00Z"  insert: </span>  ,  }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "startIndex"  insert: </span>  :  insert: <span class="hljs-number">  0  insert: </span>  ,  insert: <span class="hljs-attr">  "next"  :  "http://example.org/annotations/?iris=1&page=1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "items"  : [  "http://example.org/annotations/anno1"  ,  "http://example.org/annotations/anno2"  ,  "http://example.org/annotations/anno3"  ,  "http://example.org/annotations/anno4"  ,  "http://example.org/annotations/anno5"  ,  "http://example.org/annotations/anno6"  , ...  "http://example.org/annotations/anno999"  , ] }  
insert: </div>
insert: <p>

insert: <b> Embedded Descriptions Interaction Example insert: </b> insert: </p>

insert: <div>
Request:
Example 12 : Page Request (Embedded Descriptions)
  GET   /annotations/?iris=0&page=0  HTTP/1.1  Host  : example.org  Accept  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld" 
Example 13 : Page Response (Embedded Descriptions)
 HTTP/1.1  200  OK  Content-Type  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Allow  : GET,OPTIONS,HEAD  Vary  : Accept, Prefer  Content-Length  : 924 delete: <span class="xquery"> {  delete: <span class="hljs-string"> insert: <span class="json">  {  insert: <span class="hljs-attr">  "@context"  :  "http://www.w3.org/ns/anno.jsonld"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/?iris=0&page=0"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "AnnotationPage"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "partOf"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/?iris=0"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "total"  :  42023  ,  insert: <span class="hljs-attr">  "modified"  insert: </span>  :  insert: <span class="hljs-string">  "2016-07-20T12:00:00Z"  insert: </span>  ,  }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "startIndex"  insert: </span>  :  insert: <span class="hljs-number">  0  insert: </span>  ,  insert: <span class="hljs-attr">  "next"  :  "http://example.org/annotations/?iris=0&page=1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "items"  : [ { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/anno1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "body"  :  "http://example.net/body1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://example.com/page1"  }, { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/anno2"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "body"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "TextualBody"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "value"  :  "I like this!"  }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://example.com/book1"  } // ... { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/anno50"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "body"  :  "http://example.org/texts/description1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://example.com/images/image1"  } ] }  
delete: <section property="bibo:hasPart" resource="#discovery-of-annotation-containers" typeof="bibo:Chapter" id="discovery-of-annotation-containers"> delete: <h3 resource="#h-discovery-of-annotation-containers" id="h-discovery-of-annotation-containers"> insert: <section id="discovery-of-annotation-containers" typeof="bibo:Chapter" resource="#discovery-of-annotation-containers" property="bibo:hasPart">
insert: <h3 id="h-discovery-of-annotation-containers" resource="#h-discovery-of-annotation-containers">

4.4 Discovery of Annotation Containers

As the IRI for Annotation Containers delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY be any IRI, and it is unlikely that every Web Server will support the functionality, it is important to be able to discover the availability of these services.

Any resource delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY link to an Annotation Container when Annotations on the resource delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD be created within the referenced Container. This link is carried in an HTTP Link header and the value of the rel parameter delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST be http://www.w3.org/ns/oa#annotationService .

For HTML representations of resources, the equivalent link tag in the header of the document delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY also be used.

For an example image resource, a GET request and response with a link to the above Annotation Container might look like:

Request:
Example 14
  GET   /images/logo.jpg  HTTP/1.1  Host  : example.com 
Response:
Example 15
 HTTP/1.1  200  OK  Content-Type  : image/jpeg  Link  : <http://example.org/annotations/>; rel="http://www.w3.org/ns/oa#annotationService"  Allow  : GET  Content-Length  : 76983 delete: <span class="css"> delete: <span class="hljs-selector-attr"> insert: <span class="json">  [...] delete: </span>  
delete: <section property="bibo:hasPart" resource="#creation-updating-and-deletion-of-annotations" typeof="bibo:Chapter" id="creation-updating-and-deletion-of-annotations"> delete: <h2 resource="#h-creation-updating-and-deletion-of-annotations" id="h-creation-updating-and-deletion-of-annotations"> insert: <section id="creation-updating-and-deletion-of-annotations" typeof="bibo:Chapter" resource="#creation-updating-and-deletion-of-annotations" property="bibo:hasPart">
insert: <h2 id="h-creation-updating-and-deletion-of-annotations" resource="#h-creation-updating-and-deletion-of-annotations">

5. Creation, Updating and Deletion of Annotations

delete: <section property="bibo:hasPart" resource="#create-a-new-annotation" typeof="bibo:Chapter" id="create-a-new-annotation"> delete: <h3 resource="#h-create-a-new-annotation" id="h-create-a-new-annotation"> insert: <section id="create-a-new-annotation" typeof="bibo:Chapter" resource="#create-a-new-annotation" property="bibo:hasPart">
insert: <h3 id="h-create-a-new-annotation" resource="#h-create-a-new-annotation">

5.1 Create a New Annotation

New Annotations are created via a POST request to an Annotation Container. The Annotation, serialized as JSON-LD, is sent in the body of the request. All of the known information about the Annotation delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD be sent, and if there are already IRIs associated with the resources, they delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD be included. The serialization delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD use the Web Annotation JSON-LD profile, and servers delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY reject other contexts even if they would otherwise produce the same model. The server delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY reject content that is not considered an Annotation according to the Web Annotation specification [ delete: <a href="#bib-annotation-model" class="bibref"> insert: <a class="bibref" href="#bib-annotation-model"> annotation-model ].

Upon receipt of an Annotation, the server delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY assign IRIs to any resource or blank node in the Annotation, and delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST assign an IRI to the Annotation resource in the id property, even if it already has one provided. The server delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD use HTTPS IRIs when those resources are able to be retrieved individually. The IRI for the Annotation delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST be the IRI of the Container with an additional component added to the end.

The server delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY add information to the Annotation. Possible additional information includes the agent that created it, the time of the Annotation's creation, or additional types and formats of the constituent resources.

If the Annotation contains a canonical link, property, then it delete: <em title="MUST" class="rfc2119"> that reference insert: <em class="rfc2119" title="MUST"> MUST be maintained without change. If the Annotation has an IRI in the id property, then it delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD be copied to the via property, and the IRI assigned by the server, server at which the Annotation will be available, delete: <em title="MUST" class="rfc2119"> available insert: <em class="rfc2119" title="MUST"> MUST be put in the id field to replace it.

The server delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST respond with a 201 Created response if the creation is successful, and an appropriate error code otherwise. The response delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST have a Location header with the Annotation's new IRI.

Request:
Example 16
  POST   /annotations/  HTTP/1.1  Host  : example.org  Accept  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Content-Type  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Content-Length  : 202 delete: <span class="xquery"> {  delete: <span class="hljs-string"> insert: <span class="json">  {  insert: <span class="hljs-attr">  "@context"  :  "http://www.w3.org/ns/anno.jsonld"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "body"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "TextualBody"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "value"  :  "I like this page!"  }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://www.example.com/index.html"  }  
Response:
Example 17
 HTTP/1.1  201  CREATED  Allow  : PUT,GET,OPTIONS,HEAD,DELETE,PATCH  Location  : http://example.org/annotations/anno1  Content-Type  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Content-Length  : 287  ETag  : "_87e52ce126126" delete: <span class="xquery"> {  delete: <span class="hljs-string"> insert: <span class="json">  {  insert: <span class="hljs-attr">  "@context"  :  "http://www.w3.org/ns/anno.jsonld"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/anno1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "created"  :  "2015-01-31T12:03:45Z"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "body"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "TextualBody"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "value"  :  "I like this page!"  }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://www.example.com/index.html"  }  
delete: <section property="bibo:hasPart" resource="#suggesting-an-iri-for-an-annotation" typeof="bibo:Chapter" id="suggesting-an-iri-for-an-annotation"> delete: <h3 resource="#h-suggesting-an-iri-for-an-annotation" id="h-suggesting-an-iri-for-an-annotation"> insert: <section id="suggesting-an-iri-for-an-annotation" typeof="bibo:Chapter" resource="#suggesting-an-iri-for-an-annotation" property="bibo:hasPart">
insert: <h3 id="h-suggesting-an-iri-for-an-annotation" resource="#h-suggesting-an-iri-for-an-annotation">

5.2 Suggesting an IRI for an Annotation

The IRI path segment that is appended to the Container IRI for a resource delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY be suggested by the Annotation Client by using the Slug HTTP header on the request when the resource is created. The server delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD use this name, so long as it does not already identify an existing resource, but delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY ignore it and use an automatically assigned name.

Request:
Example 18
  POST   /annotations/  HTTP/1.1  Host  : example.org  Accept  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Content-Type  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Content-Length  : 202  Slug  : "my_first_annotation" delete: <span class="xquery"> {  delete: <span class="hljs-string"> insert: <span class="json">  {  insert: <span class="hljs-attr">  "@context"  :  "http://www.w3.org/ns/anno.jsonld"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "body"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "TextualBody"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "value"  :  "I like this page!"  }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://www.example.com/index.html"  }  
Response:
Example 19
 HTTP/1.1  201  CREATED  Link  : <http://www.w3.org/ns/ldp#BasicContainer>; rel="type"  Allow  : PUT,GET,OPTIONS,HEAD,DELETE,PATCH  Location  : http://example.org/annotations/my_first_annotation  Content-Type  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  ETag  : "_87e52ce126126"  Vary  : Accept  Content-Length  : 301 delete: <span class="xquery"> {  delete: <span class="hljs-string"> insert: <span class="json">  {  insert: <span class="hljs-attr">  "@context"  :  "http://www.w3.org/ns/anno.jsonld"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/my_first_annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "created"  :  "2015-01-31T12:03:45Z"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "body"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "TextualBody"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "value"  :  "I like this page!"  }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://www.example.com/index.html"  }  
delete: <section property="bibo:hasPart" resource="#update-an-existing-annotation" typeof="bibo:Chapter" id="update-an-existing-annotation"> delete: <h3 resource="#h-update-an-existing-annotation" id="h-update-an-existing-annotation"> insert: <section id="update-an-existing-annotation" typeof="bibo:Chapter" resource="#update-an-existing-annotation" property="bibo:hasPart">
insert: <h3 id="h-update-an-existing-annotation" resource="#h-update-an-existing-annotation">

5.3 Update an Existing Annotation

Annotations can be updated by using a PUT request to replace the entire state of the Annotation. Annotation Servers delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD support this method. Servers delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY also support using a PATCH request to update only the aspects of the Annotation that have changed, but that functionality is not specified in this document.

Replacing the Annotation with a new state delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST be done with the PUT method, where the body of the request is the intended new state of the Annotation. The client delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD use the If-Match header with a value of the ETag it received from the server before the editing process began, to avoid collisions of multiple users modifying the same Annotation at the same time. This feature is not mandatory to support, as not every system will have multiple users with the potential to change a single Annotation, or use cases might dictate situatins in which overwriting is the desired behavior.

Servers delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD reject update requests that modify the values of the canonical or via properties, if they have been already set. set, unless business logic allows the request to be trusted as authoritatively correctly a previous error.

If successful, the server delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST return a 200 OK status with the Annotation as the body according to the content-type requested. As with creation, the server delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST return the new state of the Annotation in the response.

Request:
Example 20
  PUT   /annotations/anno1  HTTP/1.1  Host  : example.org  Accept  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Content-Type  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  Content-Length  : 294  If-Match  : "_87e52ce126126" delete: <span class="xquery"> {  delete: <span class="hljs-string"> insert: <span class="json">  {  insert: <span class="hljs-attr">  "@context"  :  "http://www.w3.org/ns/anno.jsonld"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/anno1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "created"  :  "2015-02-01T10:13:40Z"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "body"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "TextualBody"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "value"  :  "I REALLY like this page!"  }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://www.example.com/index.html"  }  
Response:
Example 21
 HTTP/1.1  200  OK  Content-Type  : application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"  ETag  : "_87e52ce234234"  Link  : <http://www.w3.org/ns/ldp#Resource>; rel="type"  Allow  : PUT,GET,OPTIONS,HEAD,DELETE,PATCH  Vary  : Accept  Content-Length  : 331 delete: <span class="xquery"> {  delete: <span class="hljs-string"> insert: <span class="json">  {  insert: <span class="hljs-attr">  "@context"  :  "http://www.w3.org/ns/anno.jsonld"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "id"  :  "http://example.org/annotations/anno1"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "Annotation"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "created"  :  "2015-02-01T10:13:40Z"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "modified"  :  "2015-02-02T20:43:19Z"   "body"  : { delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "type"  :  "TextualBody"  , delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "value"  :  "I REALLY like this page!"  }, delete: <span class="hljs-string"> insert: <span class="hljs-attr">  "target"  :  "http://www.example.com/index.html"  }  
delete: <section property="bibo:hasPart" resource="#delete-an-existing-annotation" typeof="bibo:Chapter" id="delete-an-existing-annotation"> delete: <h3 resource="#h-delete-an-existing-annotation" id="h-delete-an-existing-annotation"> insert: <section id="delete-an-existing-annotation" typeof="bibo:Chapter" resource="#delete-an-existing-annotation" property="bibo:hasPart">
insert: <h3 id="h-delete-an-existing-annotation" resource="#h-delete-an-existing-annotation">

5.4 Delete an Existing Annotation

Clients delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST use the DELETE HTTP method to request that an Annotation be deleted by the server. Annotation Servers delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD support this method. Clients delete: <em title="SHOULD" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD"> SHOULD send the ETag of the Annotation in the If-Match header to ensure that it is operating against the most recent version of the Annotation.

If the DELETE request is successfully processed, then the server delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST return a 204 status response. The IRIs of deleted Annotations delete: <em title="SHOULD NOT" class="rfc2119"> insert: <em class="rfc2119" title="SHOULD NOT"> SHOULD NOT be re-used for subsequent Annotations. The IRI of the deleted Annotation delete: <em title="MUST" class="rfc2119"> insert: <em class="rfc2119" title="MUST"> MUST be removed from the Annotation Container it was created in. There are no requirements made on the body of the response, and it delete: <em title="MAY" class="rfc2119"> insert: <em class="rfc2119" title="MAY"> MAY be empty.

Request:
Example 22
  DELETE   /annotations/anno1  HTTP/1.1  Host  : example.org  If-Match  : "_87e52ce126126" 
Response:
Example 23
 HTTP/1.1  204  NO CONTENT  Content-Length  : 0 
delete: <section property="bibo:hasPart" resource="#error-conditions" typeof="bibo:Chapter" id="error-conditions" class="informative"> delete: <h2 resource="#h-error-conditions" id="h-error-conditions"> insert: <section class="informative" id="error-conditions" typeof="bibo:Chapter" resource="#error-conditions" property="bibo:hasPart">
insert: <h2 id="h-error-conditions" resource="#h-error-conditions">

6. Error Conditions

This section is non-normative.

There are inevitably situations where errors occur when retrieving or managing Annotations. The use of the HTTP status codes below provides a method for clients to understand the reason why a request has failed. Some of the situations that might occur, and the preferred HTTP status code are given below. This list is intended to be informative and explanatory, rather than imposing additional requirements beyond those already established by HTTP.

Code Example Situation
400 The Annotation Client sent a request which the Annotation Server cannot process due to the request not following the appropriate specifications.
401 The Annotation Client is not authorized to perform the requested operation, such as creating or deleting an Annotation, as it did not supply authentication credentials.
403 The Annotation Client is not authorized to perform the requested operation, as the authentication credentials supplied did not meet the requirements of a particular access control policy for the Annotation or Annotation Container.
404 The Annotation or Annotation Container requested does not exist.
405 The requested HTTP method is not allowed for the resource, such as trying to POST to an Annotation Container page, or trying to PATCH an Annotation when that functionality is not supported.
406 The requested format for the Annotation or Annotation Container's representation is not available, for example if a client requested RDF/XML and the server does not support that (optional) transformation.
409 The Annotation Client tried to set or change a value that the server does not allow Clients to modify, such as the containment list of an Annotation Container or server set modification timestamps.
410 The Annotation is known to have existed in the past and was deleted.
412 The Annotation Client supplied an If-Match header that did not match the ETag of the Annotation being modified.
415 The Annotation Client sent an entity-body that is not able to be processed by the Server, such as non-Annotation or in a context that is unrecognized.
delete: <section property="bibo:hasPart" resource="#containers-for-related-resources" typeof="bibo:Chapter" id="containers-for-related-resources"> delete: <h2 resource="#h-containers-for-related-resources" id="h-containers-for-related-resources"> insert: <section id="containers-for-related-resources" typeof="bibo:Chapter" resource="#containers-for-related-resources" property="bibo:hasPart"> delete: <section property="bibo:hasPart" resource="#candidate-recommendation-exit-criteria" typeof="bibo:Chapter" id="candidate-recommendation-exit-criteria" class="appendix informative"> delete: <h2 resource="#h-candidate-recommendation-exit-criteria" id="h-candidate-recommendation-exit-criteria"> insert: <section class="appendix informative" id="candidate-recommendation-exit-criteria" typeof="bibo:Chapter" resource="#candidate-recommendation-exit-criteria" property="bibo:hasPart">
insert: <h2 id="h-candidate-recommendation-exit-criteria" resource="#h-candidate-recommendation-exit-criteria">

A. Candidate Recommendation Exit Criteria

This section is non-normative.

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.

Features

For the purposes of evaluating exit criteria, the following operations are considered as features:

Each feature must be implemented according to the requirements given in the specification, regarding the HTTP headers, status codes, and entity body. 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.

delete: <section property="bibo:hasPart" resource="#changes-from-previous-versions" typeof="bibo:Chapter" id="changes-from-previous-versions" class="appendix informative changelog"> delete: <h2 resource="#h-changes-from-previous-versions" id="h-changes-from-previous-versions"> insert: <section class="appendix informative changelog" id="changes-from-previous-versions" typeof="bibo:Chapter" resource="#changes-from-previous-versions" property="bibo:hasPart">
insert: <h2 id="h-changes-from-previous-versions" resource="#h-changes-from-previous-versions">

B. Changes from Previous Versions

This section is non-normative.

delete: <section property="bibo:hasPart" resource="#changes-from-the-candidate-recommendation-of-2016-07-12" typeof="bibo:Chapter" id="changes-from-the-candidate-recommendation-of-2016-07-12"> delete: <h3 resource="#h-changes-from-the-candidate-recommendation-of-2016-07-12" id="h-changes-from-the-candidate-recommendation-of-2016-07-12"> insert: <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">
insert: <h3 id="h-changes-from-the-candidate-recommendation-of-2016-09-06" resource="#h-changes-from-the-candidate-recommendation-of-2016-09-06">

B.1 insert: </span> Changes from the Candidate Recommendation of 2016-09-06 insert: </span> insert: </h3>

insert: <p>

Editorial changes in this specification from the insert: <a href="http://www.w3.org/TR/2016/CR-annotation-protocol-20160906/"> Candidate Recommendation of 2016-09-06 insert: </a> are: insert: </p>

insert: <ul> insert: </section>
insert: <section id="changes-from-the-candidate-recommendation-of-2016-07-12" typeof="bibo:Chapter" resource="#changes-from-the-candidate-recommendation-of-2016-07-12" property="bibo:hasPart">
insert: <h3 id="h-changes-from-the-candidate-recommendation-of-2016-07-12" resource="#h-changes-from-the-candidate-recommendation-of-2016-07-12">

insert: <span property="xhv:role" resource="xhv:heading"> insert: <span class="secno"> B.2 Changes from the Candidate Recommendation of 2016-07-12

Editorial changes in this specification from the Candidate Recommendation of 2016-07-12 are:

delete: <section property="bibo:hasPart" resource="#changes-from-the-working-draft-of-2016-03-31" typeof="bibo:Chapter" id="changes-from-the-working-draft-of-2016-03-31"> delete: <h3 resource="#h-changes-from-the-working-draft-of-2016-03-31" id="h-changes-from-the-working-draft-of-2016-03-31"> insert: <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">
insert: <h3 id="h-changes-from-the-working-draft-of-2016-03-31" resource="#h-changes-from-the-working-draft-of-2016-03-31">

B.2 B.3 Changes from the Working Draft of 2016-03-31

Significant technical changes in this specification from the Working Draft Published of 2016-03-31 are:

delete: <section property="bibo:hasPart" resource="#acknowledgments" typeof="bibo:Chapter" id="acknowledgments" class="appendix"> delete: <h2 resource="#h-acknowledgments" id="h-acknowledgments"> insert: <section class="appendix" id="acknowledgments" typeof="bibo:Chapter" resource="#acknowledgments" property="bibo:hasPart">
insert: <h2 id="h-acknowledgments" resource="#h-acknowledgments">

C. Acknowledgments

The Web Annotation Working Group gratefully acknowledges the contributions of the Open Annotation Community Group . The output of the Community Group was fundamental to the current data model and protocol.

The following people have been instrumental in providing thoughts, feedback, reviews, content, criticism and input in the creation of this specification:

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, Mark Nottingham, 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

delete: <section property="bibo:hasPart" resource="#references" typeof="bibo:Chapter" id="references" class="appendix"> delete: <h2 resource="#h-references" id="h-references"> insert: <section id="references" class="appendix" typeof="bibo:Chapter" resource="#references" property="bibo:hasPart">
insert: <h2 id="h-references" resource="#h-references">

D. References

delete: <section property="bibo:hasPart" resource="#normative-references" typeof="bibo:Chapter" id="normative-references"> delete: <h3 resource="#h-normative-references" id="h-normative-references"> insert: <section id="normative-references" typeof="bibo:Chapter" resource="#normative-references" property="bibo:hasPart">
insert: <h3 id="h-normative-references" resource="#h-normative-references">

D.1 Normative references

delete: <dl resource="" class="bibliography"> insert: <dl class="bibliography" resource="">
[RFC2119]
S. Bradner. IETF. delete: <a property="dc:requires" href="https://tools.ietf.org/html/rfc2119"> insert: <a href="https://tools.ietf.org/html/rfc2119" property="dc:requires"> Key words for use in RFCs to Indicate Requirement Levels . March 1997. Best Current Practice. URL: delete: <a property="dc:requires" href="https://tools.ietf.org/html/rfc2119"> insert: <a href="https://tools.ietf.org/html/rfc2119" property="dc:requires"> https://tools.ietf.org/html/rfc2119
[activitystreams-core]
James Snell; Evan Prodromou. W3C. delete: <a property="dc:requires" href="https://www.w3.org/TR/activitystreams-core/"> insert: <a href="https://www.w3.org/TR/activitystreams-core/" property="dc:requires"> Activity Streams 2.0 . 12 July 15 December 2016. W3C Working Draft. Candidate Recommendation. URL: delete: <a property="dc:requires" href="https://www.w3.org/TR/activitystreams-core/"> insert: <a href="https://www.w3.org/TR/activitystreams-core/" property="dc:requires"> https://www.w3.org/TR/activitystreams-core/
[annotation-model]
Robert Sanderson; Paolo Ciccarese; Benjamin Young. W3C. delete: <a property="dc:requires" href="http://www.w3.org/TR/2016/CR-annotation-model-20160906/"> insert: <a href="http://www.w3.org/TR/2017/PR-annotation-model-20170117/" property="dc:requires"> Web Annotation Data Model . W3C Candidate Proposed Recommendation. URL: delete: <a property="dc:requires" href="http://www.w3.org/TR/2016/CR-annotation-model-20160906/"> http://www.w3.org/TR/2016/CR-annotation-model-20160906/ insert: <a href="http://www.w3.org/TR/2017/PR-annotation-model-20170117/" property="dc:requires"> http://www.w3.org/TR/2017/PR-annotation-model-20170117/
[annotation-vocab]
Robert Sanderson; Paolo Ciccarese; Benjamin Young. W3C. delete: <a property="dc:requires" href="http://www.w3.org/TR/2016/CR-annotation-vocab-20160906/"> insert: <a href="http://www.w3.org/TR/2017/PR-annotation-vocab-20170117/" property="dc:requires"> Web Annotation Vocabulary . W3C Candidate Proposed Recommendation. URL: delete: <a property="dc:requires" href="http://www.w3.org/TR/2016/CR-annotation-vocab-20160906/"> http://www.w3.org/TR/2016/CR-annotation-vocab-20160906/ insert: <a href="http://www.w3.org/TR/2017/PR-annotation-vocab-20170117/" property="dc:requires"> http://www.w3.org/TR/2017/PR-annotation-vocab-20170117/
[cors]
Anne van Kesteren. W3C. delete: <a property="dc:requires" href="https://www.w3.org/TR/cors/"> insert: <a href="https://www.w3.org/TR/cors/" property="dc:requires"> Cross-Origin Resource Sharing . 16 January 2014. W3C Recommendation. URL: delete: <a property="dc:requires" href="https://www.w3.org/TR/cors/"> insert: <a href="https://www.w3.org/TR/cors/" property="dc:requires"> https://www.w3.org/TR/cors/
[ldp]
Steve Speicher; John Arwe; Ashok Malhotra. W3C. delete: <a property="dc:requires" href="https://www.w3.org/TR/ldp/"> insert: <a href="https://www.w3.org/TR/ldp/" property="dc:requires"> Linked Data Platform 1.0 . 26 February 2015. W3C Recommendation. URL: delete: <a property="dc:requires" href="https://www.w3.org/TR/ldp/"> insert: <a href="https://www.w3.org/TR/ldp/" property="dc:requires"> https://www.w3.org/TR/ldp/
[rfc3987]
M. Duerst; M. Suignard. IETF. delete: <a property="dc:requires" href="https://tools.ietf.org/html/rfc3987"> insert: <a href="https://tools.ietf.org/html/rfc3987" property="dc:requires"> Internationalized Resource Identifiers (IRIs) . January 2005. Proposed Standard. URL: delete: <a property="dc:requires" href="https://tools.ietf.org/html/rfc3987"> insert: <a href="https://tools.ietf.org/html/rfc3987" property="dc:requires"> https://tools.ietf.org/html/rfc3987
[rfc5988]
M. Nottingham. IETF. delete: <a property="dc:requires" href="https://tools.ietf.org/html/rfc5988"> insert: <a href="https://tools.ietf.org/html/rfc5988" property="dc:requires"> Web Linking . October 2010. Proposed Standard. URL: delete: <a property="dc:requires" href="https://tools.ietf.org/html/rfc5988"> insert: <a href="https://tools.ietf.org/html/rfc5988" property="dc:requires"> https://tools.ietf.org/html/rfc5988 delete: </a> delete: </dd> delete: <dt id="bib-rfc7230"> [rfc7230] delete: </dt> delete: <dd> R. Fielding, Ed.; J. Reschke, Ed.. IETF. delete: <a property="dc:requires" href="https://tools.ietf.org/html/rfc7230"> delete: <cite> Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing delete: </cite> delete: </a> . June 2014. Proposed Standard. URL: delete: <a property="dc:requires" href="https://tools.ietf.org/html/rfc7230"> https://tools.ietf.org/html/rfc7230
[rfc7231]
R. Fielding, Ed.; J. Reschke, Ed.. IETF. delete: <a property="dc:requires" href="https://tools.ietf.org/html/rfc7231"> insert: <a href="https://tools.ietf.org/html/rfc7231" property="dc:requires"> Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content . June 2014. Proposed Standard. URL: delete: <a property="dc:requires" href="https://tools.ietf.org/html/rfc7231"> insert: <a href="https://tools.ietf.org/html/rfc7231" property="dc:requires"> https://tools.ietf.org/html/rfc7231
[rfc7232]
R. Fielding, Ed.; J. Reschke, Ed.. IETF. delete: <a property="dc:requires" href="https://tools.ietf.org/html/rfc7232"> insert: <a href="https://tools.ietf.org/html/rfc7232" property="dc:requires"> Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests . June 2014. Proposed Standard. URL: delete: <a property="dc:requires" href="https://tools.ietf.org/html/rfc7232"> insert: <a href="https://tools.ietf.org/html/rfc7232" property="dc:requires"> https://tools.ietf.org/html/rfc7232