This document is a companion to the IIIF Content Search API Specification, Version 2.0. It describes the changes to the API specification made in this major release, including ones that are backwards incompatible with version 1.0, the previous version.
1. Breaking Changes
1.1. External Specifications
1.1.1. Use JSON-LD 1.1 and the Web Annotation Data Model
The Content Search 2.0 API adopts JSON-LD 1.1 and the Web Annotation Data Model in order to align with the IIIF Presentation 3.0 API. See the IIIF Presentation 3.0 API Change Log, Section 1.1 for details.
1.2. Property Naming and Semantics Changes
Several existing properties were renamed for consistency, developer convenience, or to better reflect the intended semantics. Some of the semantics were also clarified based on implementation experience from previous versions.
1.2.1. Rename @id
to id
, @type
to type
These properties were renamed to enable Javascript developers to use the “dot notation” (manifest.id
) instead of the square-brackets-based equivalent needed with the @ character (manifest['@id']
). This follows JSON-LD community best practices established by schema.org, the JSON-LD, Web Annotation and Social Web working groups. See issue #590.
1.2.2. Rename within
to partOf
While renaming properties, within
was renamed to partOf
to follow the same naming convention in ActivityStreams and the Web Annotation Data Model. See issue #1482.
1.2.3. Rework the semantics of Responses
With adoption of the Web Annotation Data Model, the Content Search 1.0 API hits
structure was deprecated in favor of presenting Responses as items
within an AnnotationPage which provides the set of content annotations that contain the match values. Extended information about the matches (for example when one match requires multiple annotations to display, or when one annotation contains multiple matches) is now presented in the annotations
structure of the AnnotationPage. See issue #534.
1.2.4. Update context for new major version
The URI of the context document was updated for the new major version, and thus the value of the @context
is either the new value http://iiif.io/api/search/2/context.json, or includes this as the last item in an array value. See issue #2055.
1.3. Property Value Changes
1.3.1. Use language map pattern for label and value
Where the label
property is used, we have adopted the language map pattern from Prezi3 where the value is a dictionary of language codes, each having an array of string values.
1.4. Classes Changes
1.4.1. Rename TermList
to TermPage
In keeping with the patterns of other IIIF Specifications and the Web Annotation Data Model, we rename the Autocomplete TermList
structure to TermPage
and the terms
property to items
.
1.4.2. Remove Layer
, AnnotationList
in favor of AnnotationCollection
, AnnotationPage
With the adoption of the Web Annotation Data Model, we remove the IIIF specific Layer
in favor of the standard AnnotationCollection
, and AnnotationList
in favor of the equivalent AnnotationPage
. See issue #2126.
2. Non-Breaking Changes
2.1. Additional Features
2.1.1. Add contextualizing
motivation
A new Annotations motivation contextualizing
was created to support returning match results within their context, such as when search interfaces display text before and after the matching text in search results. See issue #2120.
2.1.2. Include highlighting
motivation
The Annotations motivation highlighting
is included in the API to support returning match results as highlighted text, such as when a client may display the entire annotation and highlight the matches within. See issue #2120.
3. Editorial Changes
3.1. Clarifications
3.1.1. Terminology
Added definitions for the terms “embedded” and “referenced” in the IIIF Content Search context.
3.1.2. Search and Autocomplete Services
The section “Declaring Services” was added to clarify and highlight that the Content Search API comprises two distinct Services, the Search Service and the Autocomplete Service, and how to declare each of these Services.
3.2. Style
3.2.1. Restructure document
The document was restructured for clarity, and to remove non-core content that simply described how to make use of external specifications, and especially Web Annotations, to a cookbook and to the IIIF Registry. This enables additional use cases and patterns to be documented without requiring a new version of the specification to describe something that is already possible. It can be managed by the community, rather than via the more rigorous specification process. See issue #2053.
3.2.2. Consistency
The use of code font and capitalization was made consistent for class names, property names and values when used in prose. References to them in lists, especially for implementation requirements, were made consistent.
3.2.3. Examples Improved
The examples were improved to be more intuitive, and cover more of the features available.