翻译者:Wu Gang

原文链接:https://iiif.io/api/presentation/3.0/

image.png

本文档状态

此版本:3.0.0
最新稳定版本:3.0.0
上一版本:2.1.1
编辑:

版权所有 © 2012-2021 编辑和贡献者。由 IIIF 联盟根据 CC-BY 许可发布,请参阅 免责声明


目录

以下在范围之内:

  • 不直接支持为收集和发现提供元数据。 对进一步描述性资源进行引用的属性可以使用,并鼓励使用。
  • 对象内搜索,则由 IIIF 内容搜索 API 描述。

本文档随附展示 API Cookbook,演示了IIIF的激励性使用案例,还包含说明如何实现目标的示例。

1.2. 术语

本规范使用如下术语:

  • 嵌入(embedded):当一个资源 (A) 嵌入到一个嵌入资源 (B) 中时,资源 A 的完整 JSON 表示存在于资源 B 的 JSON 表示中,并且对资源 A 的 URI 解引用译者注:dereferencing目前尚无公认译法,本文档译为“解引用”,取“将引用解回所指之物(资源、值)”的含义。参考RFC 3986 (URI: Generic Syntax),以及博客https://blog.csdn.net/hax/article/details/2110199不会产生附加信息。 示例:Canvas A 嵌入到Manifest B。
  • 引用(referenced):当从一个引用资源 (B) 中引用一个资源 (A) 时,资源 A 的不完整 JSON 表示存在于资源 B 的 JSON 表示中,并且对资源 A 的 URI 解引用会产生附加信息。示例:从 Collection B 中引用 Manifest A。
  • HTTP(S): HTTP 或 HTTPS URI 机制和互联网协议。

本文档中的术语数组array),JSON 对象object),数字number),字符串string),和布尔值boolean)应按照 Javascript Object Notation (JSON) 规范的定义进行解释。
本文档中的关键字必须must)、禁止must not)、必须required)、必须shall)、禁止shall not)、推荐should)、不推荐should not)、推荐recommended)、可选(may)和可选optional)的解释如 RFC2119 中所述。

2. 资源类型概览

上述目标需要一个模型,其中可以表征复合对象(通过 Manifest 资源)和对象的单独视图(Canvas 资源)。每个视图都可以引用图像、音频、视频和其他内容资源,以使其能够被恰当地渲染呈现。复合对象还可以具有分段;例如,一本书可能有几页的章节,或者一个剧本可能被分成幕和场景(Range 资源),并且可能有成组的这样对象(Collection 资源)。这些资源类型及其属性构成了 IIIF 展示 API。
本节概述了规范中使用的资源类型(或类)。它们将在第5节中进行更详细的介绍。

2.1. 定义类型

本规范定义如下资源类型:
IIIF 展示 API 3.0 - 图7

Collection

Manifests 和/或更多 Collection 的有序列表。Collections 允许 Manifests 和子 Collection 分组形成分层结构以进行展示,这可以用于生成导航、显示来自搜索的动态结果,或为任何其他目的提供固定的相关资源集合。

Manifest

复合对象的结构和属性的描述。它携带着客户端向用户呈现内容所需的信息,例如标题和其他关于对象或其传达的智力劳动的描述性信息。每个 Manifest 通常描述如何呈现单个复合对象,例如书籍、雕像或音乐专辑。

Canvas

一个虚拟容器,表示对象的特定视图,并具有与其关联或部分关联的内容资源。Canvas 在空间和时间上为内容的布局提供了参考框架。画布的概念是从 PDF 和 HTML 等标准或 Photoshop 和 PowerPoint 等应用程序借鉴而来的,其中最初空白的显示表面上有通过 Annotations “绘制”并收集在 Annotation Page 中的图像、视频、文本和其他内容。

Range

Canvas 和/或更多 Range 的有序列表. Range 允许Canvas 或其部分以某种方式分组在一起。这可能是出于基于内容的原因,例如可能在目录或剧本中的一组场景中进行描述。同样,物理特征也可能很重要,例如早期书籍中的页面聚集,或者当录制的音乐被拆分到不同的物理载体(例如两张 CD)时。

2.2. 附加类型

本规范使用了 Web Annotation Data Model 规范中定义的类型,特别是以下内容:

Annotation Page

Annotation 的有序列表,通常与一个Canvas相关联,但也可以从其他类型的资源中引用。Annotation Pages收集和排序Annotation列表,这些列表反过来又提供关于作为 Canvas 一部分的资源或内容的注释。

Annotation

Annotation 将内容资源与 Canvas 相关联。可视和/或可听资源使用的机制与转录、评论、标签和其他内容相同。这为对齐信息提供了唯一的统一方法,并为区分部分资源和部分画布提供了基于标准的框架。由于Annotation 可以稍后添加,这促成了一种分布式系统,其中发布者可以将其内容与其他人创建的描述对齐。与 Annotation 相关的功能还可能依赖于其他类,如 SpecificResource、Choice 或 Selectors。

Content

通过注释与画布相关的图像、音频、视频或文本等 Web 资源,或提供任何资源的表示。

Annotation Collection

Annotation Page 的有序列表。Annotation Collection 允许记录更高级别的注释分组。例如,中世纪法语文档的所有英文翻译的 Annotation 可以与转录或现代法语版本分开,或者导演对电影的评论可以与脚本分开。

3. 资源属性

本规范定义的大多数属性可能与上述任何资源类型相关联,并且可能具有多个值。属性与它们所关联的资源相关,因此Manifest上的label属性是Manifest的人类可读标签,而Canvas上的相同label属性是该特定视图的人类可读标签。
附录 A 汇总了哪些类具有哪些属性的规定。
其他属性也是允许的,可以通过本地扩展,也可以通过 IIIF 社区认可的扩展。如果客户端发现其不理解的属性,则 必须 忽略它们。有关扩展的更多信息,请参阅关联数据上下文和扩展部分。
本节还定义了每个类别和属性组合的客户端的处理规定。这些规定适用于旨在用于向用户呈现整个资源的通用客户端实现,而不一定适用于具有专门用途的消费应用程序或可能用于构建客户端的单个组件实现。包含这些规定为发布者提供了一个基线期望,即他们该如何期望那些宣称符合本规范的实现在处理其内容时的行为。

3.1. 描述性属性

这些属性描述或表示与其关联的资源,并且通常呈现给用户。

label

人类可读的标签、名称或标题。如果人类需要区分该资源与类似资源(例如对象、页面或用于显示图像的选项),则 label 属性将显示为资源的简短文本替代物。label 属性可以完全国际化,并且每种语言都可以具有多个值。此模式在 languages 部分中详细描述。
属性的值 必须 是一个JSON对象,如 languages 部分所述。

  • Collection 必须 至少有一个条目具有 label 属性。
    客户端 必须 呈现 Collection 上的 label。
  • Manifest 必须 至少有一个条目具有 label 属性。
    客户端 必须 呈现 Manifest 上的 label。
  • 推荐 Canvas 至少有一个条目具有 label 属性。
    客户端 必须 呈现 Canvas 上的 label,并且 推荐 为没有标签的 Canvas 生成 label。
  • 内容资源 可选 至少有一个条目具有 label 属性。如果同一个 Canvas 上有内容资源 Choice,则推荐在至少一个条目上至少具有 label 属性。
    客户端 可选 呈现内容资源上的 label,并 推荐 在作为部分 Choice 的时候予以呈现。
  • 推荐 Range 至少有一个条目具有 label 属性。
    客户端 必须 呈现 Range 上的 label。
  • 推荐 Annotation Collection 至少有一个条目具有 label 属性。
    推荐 客户端呈现 Annotation Collection 上的 label。
  • 其他类型资源 可选 至少有一个条目具有 label 属性。
    客户端 可选 呈现其他类型资源上的 label。

    1. { "label": { "en": [ "Example Object Title" ] } }

    metadata

    当用户与资源交互时向用户显示的有序描述列表,以人类可读的 label 和 value 条目对的形式给出。这些条目的内容仅用于展示;不推荐 去推断其描述性语义。条目可以用来传达关于对象创建、物理描述、所有权信息或其他目的的信息。
    metadata 属性的值必须是一个JSON对象数组,数组中的每一项都有 label 和 value 属性。如 languages 一节所述,label 和 value 的值都必须是JSON对象。

  • 推荐 Collection 至少有一项具有 metadata 属性。
    客户端 必须 呈现 Collection 上的 metadata。

  • 推荐 Manifest 至少有一项具有 metadata 属性。
    客户端 必须 呈现 Manifest 上的 metadata。
  • Canvas 可选 至少有一项具有 metadata 属性。
    推荐 客户端呈现 Canvas 上的 metadata。
  • 其他类型资源可选 至少有一项具有 metadata 属性。
    客户端 可选 呈现其他类型资源上的 metadata。

推荐 客户端按照提供的顺序显示条目。推荐 客户端应预期在 value 属性上碰到长文本,并恰当地呈现它们,例如使用展开按钮或选项卡界面。

  1. {
  2. "metadata": [
  3. {
  4. "label": { "en": [ "Creator" ] },
  5. "value": { "en": [ "Anne Artist (1776-1824)" ] }
  6. }
  7. ]
  8. }

summary

在不显示资源的 metadata 条目时传递给用户的简短文本摘要。这可以用作项级搜索结果的简要描述,也可以用于小屏幕环境,或者在 metadata 属性当前未呈现时作为替代用户界面。summary 属性遵循与上面描述的 label 属性相同的模式。
属性值 必须 是一个 JSON 对象,如 languages 一节所述。

  • 推荐 Collection 至少有一个条目具有 summary 属性。
    推荐 客户端呈现 Collection 上的 summary。
  • 推荐 Manifest 至少有一个条目具有 summary 属性。
    推荐 客户端呈现 Manifest 上的 summary。
  • Canvas 可选 至少有一个条目具有 summary 属性。
    推荐 客户端呈现 Canvas 上的 summary。
  • 其他类型资源 可选 至少有一个条目具有 summary 属性。
    客户端 可选 呈现其他类型资源上的 summary 。

    1. { "summary": { "en": [ "This is a summary of the object." ] } }

    requiredStatement

    在显示或使用资源时 必须 显示的文本。例如,requiredStatement 属性可以用来显示版权或所有权声明、所有权和/或出版机构的确认,或者出版机构认为对显示给用户至关重要的任何其他文本。鉴于潜在客户端用户界面差异很大,在客户端初始状态下,并不总是能够向用户显示此声明。如果最初是隐藏的,客户端 必须 使暴露它的方法尽可能明显。
    属性值 必须 是一个 JSON 对象,具有 label 和 value 属性,与 metadata 属性条目的方式相同。label 和 value 的值 必须 是 JSON 对象,如 languages 一节所述。

  • 任何资源类型 可选 具有 requiredStatement 属性。
    客户端 必须 呈现每个资源类型上的 requiredStatement。

    1. {
    2. "requiredStatement": {
    3. "label": { "en": [ "Attribution" ] },
    4. "value": { "en": [ "Provided courtesy of Example Institution" ] }
    5. }
    6. }

    rights

    标识适用于资源内容(如Manifest的JSON或图像的像素)的许可或权利声明的字符串。其值 必须 取自于知识共享(Creative Commons)许可 URI,RightsStatements.org 权利声明 URI,或那些通过扩展机制添加的 URI所形成的集合。该属性的包含是用于提供信息的,例如可用于显示代表权利主张的图标。
    如果直接向用户显示权限信息是所需的交互,或者需要一个发布者定义的标签,那么 推荐 使用requiredStatement 属性或在 metadata 属性中包含这些信息。
    其值 必须 是字符串。如果值取自知识共享(Creative Commons)或者RightsStatements.org,则字符串 必须 是该规范定义的URI。

  • 任何资源类型 可选 具有 rights 属性。
    客户端 可选 呈现任何资源类型上的 rights。

    1. { "rights": "http://creativecommons.org/licenses/by/4.0/" }

    机器可操作的 URI 和为用户的链接
    用于知识共享(Creative Commons)和 RightsStatements.org 的机器可操作 URI 都是 http URI。这两种情况下,人类的描述都可以从等价的 https URI 中获得。客户端可能希望重写提供给用户的链接,以使用这些等价的 https URI。

    provider

    对提供资源内容作出贡献的组织或个人。客户端可以将该信息显示给用户,以致谢提供者的贡献。这与requiredStatement 属性不同,因为数据是结构化的,允许客户端做更多的工作,而不仅仅是显示文本,而是在不同的接口中使用关于人员和组织的更丰富的信息。组织或个人被表示为 Agent 资源。

  • Agent 必须 有 id 属性,其值 必须 是字符串。字符串 必须 是标识代理的 URI。

  • Agent 必须 有 type 属性,其值 必须 是字符串“Agent”。
  • Agent 必须 有 label 属性,其值 必须 是一个 JSON 对象,如 languages 一节所述。
  • 推荐 Agent 有 homepage 属性,其值 必须 是一组 JSON 对象,如 homepage 一节所述。
  • 推荐 Agent 有 logo 属性,其值 必须 是一组 JSON 对象,如 logo 一节所述。
  • 推荐 Agent 有 seeAlso 属性,其值 必须 是一组 JSON 对象,如 seeAlso 一节所述。

该值 必须 是一个 JSON 对象数组,数组中的每一项都符合 Agent 的结构,如上所述。

  • 推荐 Collection 至少有一项具有 provider 属性。
    客户端 必须 呈现 Collection 上的 provider。
  • 推荐 Manifest 至少有一项具有 provider 属性。
    客户端 必须 呈现 Manifest 上的 provider。
  • 其他类型资源 可选 至少有一项具有 provider 属性。
    推荐 客户端呈现其他类型资源上的 provider。

    1. {
    2. "provider": [
    3. {
    4. "id": "https://example.org/about",
    5. "type": "Agent",
    6. "label": { "en": [ "Example Organization" ] },
    7. "homepage": [
    8. {
    9. "id": "https://example.org/",
    10. "type": "Text",
    11. "label": { "en": [ "Example Organization Homepage" ] },
    12. "format": "text/html"
    13. }
    14. ],
    15. "logo": [
    16. {
    17. "id": "https://example.org/images/logo.png",
    18. "type": "Image",
    19. "format": "image/png",
    20. "height": 100,
    21. "width": 120
    22. }
    23. ],
    24. "seeAlso": [
    25. {
    26. "id": "https://data.example.org/about/us.jsonld",
    27. "type": "Dataset",
    28. "format": "application/ld+json",
    29. "profile": "https://schema.org/"
    30. }
    31. ]
    32. }
    33. ]
    34. }

    thumbnail

    一个内容资源,如小图像或短音频剪辑,用于表示具有 thumbnail 属性的资源。 一个资源 可选 地拥有多个具有相同或不同类型和格式的缩略图资源。该值 必须 是一个JSON对象数组,每个对象 必须 具有 id 和type 属性,并 推荐 具有 format 属性。图像和视频 推荐 具有 width 和 height 属性,并且基于时间的媒体 推荐 具有 duration 属性。推荐 为图像提供 IIIFImageAPI 服务,以支持调整大小等操作。

  • 推荐 Collection 至少有一项具有 thumbnail 属性。
    推荐 客户端呈现 Collection 上的 thumbnail。

  • 推荐 Manifest 至少有一项具有 thumbnail 属性。
    推荐 客户端呈现 Manifest 上的 thumbnail。
  • Canvas 可选 至少有一项具有 thumbnail 属性。如果有多个资源组成视图,则 推荐 _Canvas 具有 thumbnail 属性。
    推荐 _客户端呈现 Canvas 上的 thumbnail。
  • 内容资源可选 至少有一项具有 thumbnail 属性。如果内容资源是资源 Choice 组件中的一个选项,则 推荐 内容资源至少有一项具有 thumbnail 属性。
    推荐 客户端呈现内容资源上的 thumbnail。
  • 其他类型资源 可选 至少有一项具有 thumbnail 属性。
    客户端 可选 呈现其他类型资源上的 thumbnail。

    1. {
    2. "thumbnail": [
    3. {
    4. "id": "https://example.org/img/thumb.jpg",
    5. "type": "Image",
    6. "format": "image/jpeg",
    7. "width": 300,
    8. "height": 200
    9. }
    10. ]
    11. }

    navDate

    在基于日期的用户界面(如日历或时间轴)中将资源呈现给用户时,客户端可用于导航目的的日期。建议 在 metadata 属性中包含更具描述性的日期范围,以便直接显示给用户,供人类使用。如果资源包含具有duration 属性的Canvas,则给定的日期时间对应于资源开始的导航日期时间。例如,Range 包含一个Canvas,它表示一组记录一个历史事件的视频内容,navDate 是所记录事件的第一个时刻的日期时间。
    其值 必须 是一个 XSD dateTime 文字. 其值 必须 有一个时区,并且 建议 以UTC和 Z 时区指示符给出,但也 可选 改为以 +hh:mm 形式的偏移量给出。

  • Collection 可选 具有 navDate 属性。
    客户端 可选 呈现 Collection 上的 navDate。

  • Manifest 可选 具有 navDate 属性。
    客户端 可选 呈现 Manifest 上的 navDate。
  • Range 可选 具有 navDate 属性。
    客户端 可选 呈现 Range 上的 navDate。
  • Canvas 可选 具有 navDate 属性。
    客户端 可选 呈现 Canvas 上的 navDate。
  • 其他类型资源 禁止 具有 navDate 属性.
    推荐 客户端忽略其他类型资源上的 navDate。

    1. { "navDate": "2010-01-01T00:00:00Z" }

    placeholderCanvas

    在具有 placeholderCanvas 属性的资源的主要内容呈现之前,或作为该内容的广告或替带的,提供额外内容供使用的单个画布。示例包括在用户开始播放之前用来代表视频内容的图像、文本和声音;或者用来吸引用户注意力的电影海报。placeholderCanvas 提供的内容不同于thumbnail:客户端可能使用 thumbnail 来汇总和导航多个资源,然后显示来自 placeholderCanvas 的内容,作为单个资源初始展示的一部分。作为占位符的Canvas 可能具有与拥有 placeholderCanvas 属性的资源的 Canvas 不同的尺寸。
    客户端在展示资源时 可选 显示关联的作为占位符的 Canvas 的内容。当有不止一个这样的Canvas可用时,例如,如果为当前选定的Range和当前Manifest提供了placeholderCanvas,则 推荐 客户端选择最适合于内容的一个。不推荐 发布者假设作为占位符的Canvas会被所有客户端处理。推荐 客户端注意避免呈现的占位符 Canvas 中基于时间的媒体与具有 placeholderCanvas 属性的资源内容之间发生冲突。
    其值 必须 是一个带有 id 和 type 属性的 JSON 对象,并且 可选 具有 Canvas 的其他属性。type 的值 必须 是字符串 Canvas。对象 禁止 具有 placeholderCanvas 属性,也禁止具有 accompanyingCanvas 属性。

  • Collection 可选 具有 placeholderCanvas 属性。
    客户端 可选 呈现 Collection 上的 placeholderCanvas。

  • Manifest 可选 具有 placeholderCanvas 属性。
    客户端 可选 呈现 Manifest 上的 placeholderCanvas。
  • Canvas 可选 具有 placeholderCanvas 属性。
    客户端 可选 呈现 Canvas 上的 placeholderCanvas。
  • Range 可选 具有 placeholderCanvas 属性。
    客户端 可选 呈现 Range 上的 placeholderCanvas。
  • 其他类型资源 禁止 具有 placeholderCanvas 属性。
    推荐 客户端忽略其他类型资源上的 placeholderCanvas。

    1. {
    2. "placeholderCanvas": {
    3. "id": "https://example.org/iiif/1/canvas/placeholder",
    4. "type": "Canvas",
    5. "height": 1400,
    6. "width": 1200
    7. }
    8. }

    accompanyingCanvas

    一个单独的Canvas,在呈现带有 accompanyingCanvas 属性的资源时提供额外的内容供使用。示例包括在仅持续时间的 Canvas 播放音频时显示的图像; 或在用户浏览纯图像清单时播放的背景音频。示例包括在仅限持续时间的 Canvas 播放音频时所显示的图像;或用户正在浏览纯图像 Manifest 时所播放的背景音频。
    客户端 可选 在展示资源时显示伴随 Cavas 的内容。与上述的 placeholderCanvas 一样,当有不止一个伴随Canvas 可用时,推荐 客户端选择最适合内容的一个。不推荐 发布者假设伴随 Canvas 会被所有客户端处理。推荐 客户端注意避免伴随 Canvas 中的基于时间的媒体与具有 accompanyingCanvas 属性的资源的内容之间发生冲突。
    其值 必须 是一个带有 id 和 type 属性的 JSON 对象,并且 可选 具有 Canvas 的其他属性。type 的值必须 是字符串 Canvas。对象 禁止 具有 placeholderCanvas 属性,也禁止具有 accompanyingCanvas 属性。

  • Collection 可选 具有 accompanyingCanvas 属性。
    客户端 可选 呈现 Collection 上的 accompanyingCanvas 。

  • Manifest 可选 具有 accompanyingCanvas 属性。
    客户端 可选 呈现 Manifest 上的 accompanyingCanvas 。
  • Canvas 可选 具有 accompanyingCanvas 属性。
    客户端 可选 呈现 Canvas 上的 accompanyingCanvas 。
  • Range 可选 具有 accompanyingCanvas 属性。
    客户端 可选 呈现 Range 上的 accompanyingCanvas 。
  • 其他类型资源 禁止 具有 accompanyingCanvas 属性。
    推荐 客户端忽略其他类型资源上的 accompanyingCanvas。

    1. {
    2. "accompanyingCanvas": {
    3. "id": "https://example.org/iiif/1/canvas/accompany",
    4. "type": "Canvas",
    5. "duration": 180.0
    6. }
    7. }

    3.2. 技术属性

    这些属性描述了资源的技术特征,并且通常由客户端处理以理解如何呈现资源。

    id

    标识资源的URI。如果资源仅在嵌入到另一个资源中时才可用(有关“嵌入”的解释,请参阅术语部分),例如 Manifest 中的 Range,则该 URI 可选 为在嵌入资源的 URI 末尾跟上一个唯一片段。但对于 Canvas 却非如此,它 必须 有自己的不带片段的 URI。
    其值 必须 是字符串,并且该值 必须 是本规范中定义的资源的 HTTP(S) URI。如果资源可以通过HTTP(S)检索到,则 URI 必须 是发布它的URI。外部资源(如 profile)可选 具有由其他社区定义的非HTTP(S) URI。
    id 属性中存在 HTTP(S) URI 并不意味着该 URI 将始终是可解引用的。如果带有 id 属性的资源是被嵌入 的,则也可选 为是解引用的。如果资源是被引用的(同样,请参阅 术语部分了解“引用”的解释),则它 必须 是可解引用的。资源的定义 提供了进一步的指导。

  • 所有的资源类型 必须 具有 id 属性。
    客户端 可选 呈现任意资源类型上的 id,并 推荐 呈现 Collection,Manifests 和 Canvas 上的 id。

    1. { "id": "https://example.org/iiif/1/manifest" }

    type

    资源的类型或类。对于为本规范所定义的类,type 的值将在下面描述每个类的章节中描述。
    对于内容资源,type 的值取自其他规范。下表给出了对常见内容类型(例如图像、文本或音频)的建议。
    出现在 service 属性值中的 JSON 对象将有许多不同的类,可以使用在注册的上下文文档中定义的特定属性来区分不同种类服务。
    其值 必须 是字符串。

  • 所有的资源类型 必须 有 type 属性.
    客户端 必须 处理,并 可选 呈现任何资源类型上的 type。 | 类 | 描述 | | —- | —- | | Dataset | 不打算直接呈现给人类的数据 | | Image | 主要用于显示的二维可视化资源,例如可能用 HTML 标签 IIIF 展示 API 3.0 - 图8 呈现的 | | Model | 旨在与人类交互的三(或更多)维模型 | | Sound | 主要用于聆听的听觉资源,例如可能用 HTML 标签

    呈现的 |

  1. { "type": "Image" }

format

内容资源的特定媒体类型(通常称为MIME类型),例如 image/jpeg。这对于区分整体上相同的资源类型的不同格式很重要,例如区分XML文本和纯文本。
注意,这不同于 ImageAPI 中的 formats 属性,后者提供了在该API中使用的扩展。在这种情况下使用它是不合适的,因为 format 可以用于任意内容资源,而不仅仅是图像。
其值 必须 是字符串,并且 推荐 是资源被解引用时返回的 Content-Type 报头的值。

  • 推荐 内容资源具有 format 属性。
    客户端 可选 呈现任意内容资源的 format。
  • 禁止 其他类型资源具有 format 属性。
    推荐 客户端忽略其他类型资源上的 format。

以下待修正。。。。。。。。。。。。。。。

  1. { "format": "application/xml" }

language

在这个外部资源的内容中使用的一种或几种语言。这个属性已经可以在 Web 注释模型中用于作为Annotation 主体或目标的内容资源,但是它也 可选 用于从主页、呈现和partOf引用的资源。
该值 必须 是字符串数组。数组中的每一项都 必须 是有效的语言代码,如languages一节所述。

  • 外部资源的 language 属性 推荐 至少包含一个项。

推荐 客户处理外部资源的 language。

  • 禁止 其他类型的资源有 language 属性。
    推荐 客户端忽略其他类型资源上的 language。

    1. { "language": [ "en" ] }

    profile

    资源中可用的模式或命名功能集。概要文件可以进一步阐明外部资源或服务的 type 和/或 format,允许客户自定义他们对具有 profile 属性的资源的处理。
    该值 必须 是一个字符串,可以从 profiles registry 获取,也可以是一个URI。

  • 推荐 _seeAlso 或 service 属性引用的资源具有 profile 属性。
    推荐 _客户端处理服务或外部资源的 profile。

  • 其他类型的资源 可选 具有 profile 属性。
    客户端 可选 处理其他类型资源的 profile。

    1. { "profile": "https://example.org/profile/statuary" }

    height

    Canvas 或外部内容资源的高度。对于内容资源,值以像素为单位。对于 Canvas,值没有单位。与宽度相结合,它传达了内容资源所在空间的纵横比。
    其值 必须 是正整数。

  • Canvas 可选 有 height 属性。如果有 height,则也 必须 有 width。
    客户端 必须 处理 Canvas 上的 height。

  • 推荐 内容资源具有 height 属性,其值以像素为单位,如果适用于资源类型的话。
    推荐 客户端处理内容资源上的 height。
  • 禁止 其他类型的资源有 height 属性。
    推荐 客户端忽略其他类型资源上的 height。

    1. { "height": 1800 }

    width

    Canvas 或外部内容资源的宽度。对于内容资源,值以像素为单位。对于 Canvas,值没有单位。与高度相结合,传达了内容资源所在空间的高宽比。
    其值 必须 是正整数。

  • Canvas可选 有 width 属性。如果有 width,则也 必须 有 height。
    客户端 必须 处理 Canvas 上的 width。

  • 推荐 内容资源具有 width 属性,其值以像素为单位,如果适合资源类型的话。
    推荐 客户处理内容资源上的 width。
  • 禁止 其他类型的资源有 width 属性。
    推荐 客户端忽略其他类型资源上的 width。

    1. { "width": 1200 }

    duration

    Canvas 或外部内容资源的持续时间,单位为秒。
    其值 必须 是一个正浮点数。

  • Canvas可选具有duration属性。
    客户端 必须 处理 Canvas 上的 duration 。

  • 如果适合资源类型,推荐 内容资源具有 duration 属性。
    推荐 客户端处理内容资源上的 duration 。
  • 禁止 其他类型的资源有 duration。
    推荐 客户端忽略其他类型的资源上的 duration。

    1. { "duration": 125.0 }

    viewingDirection

    一组 Canvas 推荐 显示给用户的方向。该规范在下表中定义了四个方向值。其他的可以在外部定义为扩展
    其值 必须 是字符串。

  • Collection 可选 具有 viewingDirection 属性。
    推荐 客户端处理集合上的 viewingDirection。

  • Manifest可选 具有 viewingDirection 属性。
    推荐 客户端处理 Manifest 上的 viewingDirection。
  • Range可选 具有 viewingDirection 属性。
    客户端 可选 处理 Range 上的 viewingDirection。
  • 禁止 其他类型的资源有 viewingDirection 属性。
    推荐 客户端忽略其他类型的资源上的 viewingDirection。 | 值 | 描述 | | —- | —- | | left-to-right | 对象从左到右显示。如果未指定,则为默认值。 | | right-to-left | 对象从右到左显示。 | | top-to-bottom | 对象从上到下显示。 | | bottom-to-top | 对象从下往上显示。 |
  1. { "viewingDirection": "left-to-right" }

behavior

内容发布者希望客户端在呈现资源时使用的一组用户体验特性。该规范定义了下表中的值。其他的可以在外部定义为扩展
为了确定控制特定资源的行为,引用当前资源的资源有四个继承规则:

  • Collection 从它们的引用 Collection 继承行为。
  • Manifests 从任何引用 Collection 继承行为。
  • Canvas 从其引用的 Manifest 继承行为,但 从任何引用的 Range 继承行为,因为可能有几个具有不同行为的 Range。
  • Range 从任何引用 Range 和引用 Manifest 继承行为。

只有当 Range 被选择或者以其他方式处于用户当前与资源交互的上下文时,客户端才应该解释 Range 上的行为。在带有值为 paged 的 behavior 属性的 Manifest 中,带有值为 continuous 的 behavior 属性的 Range 将意味着 Manifest 的 Canvas 应该以分页的方式呈现,除非该 Range 被选中查看,则其所包括的Canvas 将仅在这种情况下呈现为虚拟拼接在一起。这种情况可能会发生,例如,当一个物理卷轴被切成页面,并与其他页面绑定到一个抄本中,而发布者希望提供给用户卷轴的原始形式的体验。
行为值的描述有一组与它们不相关联的其他值,这意味着同一资源 禁止 同时拥有该集合中的两个或多个值。为了确定哪个是有效的,推荐 客户端遵循上面的继承规则,从最近的资源获取值。非分离行为值的可能排列的用户界面效果依赖于客户端,建议实现者在 IIIF cookbook中查找相关方法。
预计未来澄清
在后续的小版本中,应该进一步澄清behavior 值之间交互的含义。
其值 必须 是字符串数组。

  • 任何资源类型都 可选 有至少一项具有 behavior 属性。
    推荐 客户端处理任何资源类型上的 behavior。 | 值 | 描述 | | —- | —- | | | 时间行为 | | auto-advance | 在Collection, Manifest, Canvas, 和Range上有效,这些Collection, Manifest, Canvas 和 Range 包括或至少包含 duration 维度的 Canvas。当客户端到达具有此行为的 duration 维度的 Canvas 或 Range 中指定的段的末尾时,推荐 立即进入下一个 Canvas 或片段并予以呈现。如果当前上下文中没有后续的 Canvas,则应该忽略此行为。当应用到一个 Collection 时,客户端应该将下一个 Manifest 的第一个 Canvas 作为上一个 Manifest 的最后一个 Canvas 来对待,尊重任何指定的 start 属性。与 no-auto-advance 不相交。 | | no-auto-advance | 在Collection, Manifest, Canvas 和Range上有效,这些Collection, Manifest, Canvas 和 Range 包括或至少包含 duration 维度的 Canvas。当客户端到达具有此行为的 duration 维度的 Canvas 或片段的末尾时,禁止 继续到下一个 Canvas(如果有的话)。如果没有指定,这是缺省的时间行为。与 auto-advance 不相交。 | | repeat | 在 Collection 和 Manifest 上有效,其中包括至少具有 duration 维度的 Canvas。当客户端到达资源中最后一个 Canvas 的 duration 末尾时,同时 behavior 值 auto-advance 有效,那么对于具有 behavior 值为 repeat 的资源, 推荐 客户端回到第一个 Canvas 或 Canvas 片段,并再次开始播放。如果 behavior 值 auto-advance 无效,那么 推荐 客户端呈现一个导航控件,让用户手动返回到第一个 Canvas 或片段。与 no-repeat 不相交。 | | no-repeat | 在 Collection 和 Manifest 上有效,其中包括至少具有 duration 维度的 Canvas。当客户端到达资源中最后一个 Canvas 的 duration 末尾时,禁止 客户端返回到第一个 Canvas,或者 Canvas 片段。如果没有指定,这是缺省的时间行为。与 repeat 不相交。 | | | 布局行为 | | unordered | 对 Collection, Manifest 和 Range 有效。具有这种行为的资源中包含的 Canvas 没有固有的顺序,推荐 用户界面避免向用户暗示顺序。与 individuals, continuous 和 paged 不相交。 | | individuals | 在 Collection, Manifest 和 Range 上有效。对于具有此行为的集合,所包含的每个Manifest 都是给定顺序的不同对象。对于 Manifest 和Range,所包含的 Canvas 是不同的视图,不推荐 在翻页界面中显示。如果没有指定,这是缺省的布局行为。与 unordered, continuous 和 paged 不相交。 | | continuous | 在 Collection, Manifest 和 Range上有效,其中包括至少具有 height 和 width 维度的 Canvas。具有这种行为的资源中包含的 Canvas 是部分视图,适当的呈现可能会显示虚拟拼接在一起的所有 Canvas,比如分割成部分的长卷轴。这个行为对音频资源没有影响。Manifest 的 viewingDirection 将决定 Canvas 的适当安排。与unordered, individuals 和 paged 不相交。 | | paged | 在 Collection, Manifest, 和 Range 上有效,其中包括至少具有 height 和 width 维度的 Canvas。资源中包含的具有此行为的 Canvas 表示的视图 推荐 显示在翻页界面(如果有的话)中。第一个 Canvas 是一个单一视图(第一个recto),因此第二个 Canvas 很可能代表第一个 Canvas 中对象的背面。如果不是这样,请查看behavior 值 non-paged。与unordered, individuals, continuous, facing-pages 和 non-paged 不相交。 | | facing-pages | 仅在 Canvas 上有效,其中 Canvas 至少有 height 和 width 维度。在具有 behavior value paged 的 Manifest 中,具有此行为的 Canvas 必须 自己显示,因为它们描述了打开的两个部分。如果所有的 Canvas 都是这样,则不可能翻页,所以简单使用 individuals 代替。与 paged 和 non-paged 不相交。 | | non-paged | 仅在 Canvas 上有效,其中 Canvas 至少有 height 和 width 维度。具有此行为的Canvas 禁止 在翻页界面中显示,在确定页面顺序时 必须 跳过。如果当前 Manifest 没有 behavior 值 paged,则 必须 忽略此行为。与 paged 和 facing-pages 不相交。 | | | 集合行为 | | multi-part | 仅对 Collection 有效。具有此行为的 Collection 由多个 Manifest 或 Collection 组成,这些 Collection 共同构成逻辑整体或连续集合的一部分,如多卷书籍或一套期刊。客户端可以将这些 Collection 呈现为内容表而不是缩略图,或者提供可以轻松地从一个成员推进到下一个成员的查看接口。与 together 不相交。 | | together | 仅对 Collection 有效。推荐 客户端用自己的控件在单独的查看区域中一次性向用户显示所有子 Manifest。推荐 客户捕捉到试图创建太多的观看区域。不推荐 将此行为解释为应用于任何子资源的成员。与 multi-part 不相交。 | | | 范围行为 | | sequence | 仅对 Range 有效,其中 Range 被引用在 Manifest 的 structures 属性中。具有此行为的 Range 表示 Manifest 的 items 属性中列出的 Canvas 的不同顺序,推荐 与此顺序交互的用户界面使用选定 Range 内的顺序,而不是 items 的缺省顺序。与thumbnail-nav 和 no-nav 不相交。 | | thumbnail-nav | 仅对 Range 有效。客户端 可选 使用具有这种行为的 Range 来显示基于缩略图的替代导航或概述,如视频的时间轴上的常规关键帧,或长卷轴的部分。不推荐 客户使用它们来生成常规的目录。具有此行为的 Range 的子 Ranges 必须 具有合适的 thumbnail 属性。与 sequence 和 no-nav 不相交。 | | no-nav | 仅对 Range 有效。具有此行为的 Range 禁止 在导航层次结构中显示给用户。这允许 Range 存在捕获无感兴趣内容的未命名区域,比如一本书开始处的一组空白页面,或表演部分之间的死气沉沉,这些仍是 Manifest 的一部分,但不需要直接导航。与 sequence 和 thumbnail-nav 不相交。 | | | 杂项行为 | | hidden | 在 Annotation Collection、Annotation Page、Annotation、Specific Resource 和Choice 上有效。如果提供了这种行为,则 不推荐 客户端在缺省情况下呈现资源,而是允许用户打开和关闭资源。此行为不会继承,因为它在 Collection, Manifest, Canvas 和 Range 上无效。 |
  1. { "behavior": [ "auto-advance", "individuals" ] }

timeMode

一种与 Annotation 相关联的模式,用于呈现任何基于时间的媒体,或者可以认为具有持续时间,用作该Annotation 的 body 资源。注意,timeMode 与 Annotation 的关联意味着 body 中的不同资源不能有不同的值。该规范定义了下表中指定的值。其他的可以在外部定义为扩展
其值 必须 是字符串。

  • Annotation 可选 具有 timeMode 属性.
    推荐 客户端处理 Annotation 上的 timeMode。 | 值 | 描述 | | —- | —- | | trim | 如果内容资源的持续时间比它所关联的部分 Canvas 的持续时间长,那么在 Canvas 的持续时间结束时,内容资源的回放也 必须 结束。如果内容资源的持续时间比它所关联的 Canvas 部分的持续时间短,那么,对于视频资源,推荐 最后一帧持续在屏幕上,直到 Canvas 部分的持续时间结束。例如,一个120秒的视频被注释到 Canvas 上,持续时间为100秒,它只会播放前100秒,而省略后20秒。 | | scale | 通过缩放使内容资源的持续时间与它关联的 Canvas 部分的持续时间相匹配。例如,将一个120秒的视频注释到 Canvas 上,持续时间为60秒,就会以双倍速度播放。 | | loop | 如果内容资源比 Canvas 的 duration 短,则 必须 重复它以填充整个持续时间。如前所述,超过duration 的资源 必须 进行修剪。例如,如果一个持续时间为20秒的音频流被注释到一个持续时间为30秒的 Canvas 上,它将被播放1.5次。 |
  1. { "timeMode": "trim" }

3.3. 链接属性

这些属性是资源之间的引用或链接,并分为外部引用(链接对象位于 IIIF 空间之外)和内部引用(链接对象是 IIIF 资源)。客户端通常创建一个指向资源的链接,该链接可以由用户激活,或者直接与链接的资源交互,以改善用户体验。

3.3.1. 外部链接

homepage

关于具有 homepage 属性的资源所表示的对象的网页。网页通常由负责对象的组织发布,也可能由内容管理系统或其他编目系统生成。资源 必须 能够直接显示给用户。相关但不是主页的资源 必须 添加到 metadata 属性中,并使用适当的 label 或 value 来描述关系。
该属性的值 必须 是一个 JSON 对象数组,每个对象 必须 有 id、type 和 label 属性,推荐 有 format 属性,还 可选 有 language 属性。

  • 任何资源类型都 可选 有 homepage 属性。
    推荐 客户端呈现 Collection、Manifest 或 Canvas上的 homepage,也 可选 呈现其他类型的资源上的 homepage。

模型对齐
请注意,与Web注释数据模型相比,该规范对用于 homepage 属性的 JSON 模式有更严格的规定。IIIF 规定是兼容的,但是找到的 Agent 的主页可能只有一个 URI,或者可能是一个具有其他属性的 JSON 对象。有关更多信息,请参阅上下文冲突 一节。

  1. {
  2. "homepage": [
  3. {
  4. "id": "https://example.com/info/",
  5. "type": "Text",
  6. "label": { "en": [ "Homepage for Example Object" ] },
  7. "format": "text/html",
  8. "language": [ "en" ]
  9. }
  10. ]
  11. }


logo

表示与之关联的 Agent 资源的小图像资源。当资源显示或使用时,徽标 必须 清楚地呈现,而不能裁剪、旋转或以其他方式扭曲图像。推荐 为该图像提供 IIIF 图像 API 服务,以便进行其他操作(如调整大小)。
当存在多个徽标时,推荐 客户端根据徽标属性中的信息只选择其中一个。例如,客户端可以根据可用标识的 height 和 width 属性选择合适的长宽比标识。客户端 可选 通过检查定义为扩展的属性来决定徽标。
该属性的值 必须 是一个 JSON 对象数组,每个对象 必须 具有 id 和 type 属性,并且 推荐 具有format。type 的值 必须 为“Image”。

  • 推荐 Agent 资源具有 logo 属性。
    客户端 必须 呈现 Agent 资源上的 logo。

    1. {
    2. "logo": [
    3. {
    4. "id": "https://example.org/img/logo.jpg",
    5. "type": "Image",
    6. "format": "image/jpeg",
    7. "height": 100,
    8. "width": 120
    9. }
    10. ]
    11. }

    rendering

    一种资源,它是具有 rendering 属性的资源的替代的非 IIIF 表示形式。这种表示通常不能绘制到单个 Canvas 上,因为它们要么包含太多视图,要么具有不兼容的维度,要么是需要额外呈现功能的复合资源。呈现资源 必须 能够直接显示给人类用户,尽管表示可能在 IIIF 客户端之外。资源 禁止 有启动页或其他中介对其访问的间隙资源。如果需要访问控制,那么 推荐 使用 IIIF 认证 API。例如,将一本书呈现为 PDF 或 EPUB、带有建筑图像的幻灯片或雕像的3D模型。
    其值 必须 是 JSON 对象数组。每个条目 必须 有 id, type 和 label 属性,并且 推荐 有 format 属性。

  • 任何资源类型都 可选 至少有一项具有 rendering 属性。
    推荐 客户端呈现 Collection, Manifest 或 Canvas 上的 rendering,并且 可选 呈现其他类型资源上的 rendering。

    1. {
    2. "rendering": [
    3. {
    4. "id": "https://example.org/1.pdf",
    5. "type": "Text",
    6. "label": { "en": [ "PDF Rendering of Book" ] },
    7. "format": "application/pdf"
    8. }
    9. ]
    10. }

    service

    客户端可以直接与之交互的服务,并获得使用具有 service 属性的资源的附加信息或功能,例如从一幅图像到关联的 IIIF 图像 API 服务的基 URI。推荐 服务资源具有与之相关联的附加信息,以便客户端能够确定如何适当地使用它。有关当前已知的服务类型的详细信息,请参阅 Service Registry 文档。
    其值 必须 是 JSON 对象数组。每个对象将根据服务的定义具有属性,但 必须 具有 id 或 @id 和 type 或 @type 属性。推荐 每个对象有一个 profile 属性。

  • 每个资源类型 可选 至少有一项具有 service 属性。
    客户端 可选 处理任何资源类型上的 service,并且 推荐 处理 IIIF 图像 API 服务.

    1. {
    2. "service": [
    3. {
    4. "id": "https://example.org/service",
    5. "type": "ExampleExtensionService",
    6. "profile": "https://example.org/docs/service"
    7. }
    8. ]
    9. }

    为了跨版本一致性,该规范为 type 或 @type 属性定义了以下值,以便与其他 IIIF API 向后兼容。这些 API 的未来版本将定义它们自己的类型。这些 type 值是旧版本兼容性所必需的扩展。

规范
ImageService1 图像 API 版本 1
ImageService2 图像 API 版本 2
SearchService1 搜索 API 版本 1
AutoCompleteService1 搜索 API 版本 1
AuthCookieService1 认证 API 版本 1
AuthTokenService1 认证 API 版本 1
AuthLogoutService1 认证 API 版本 1

推荐 实现应准备好识别旧规范使用的 @id 和 @type 属性名,以及 id 和 type。注意,不推荐 @context 键出现在 service 中,而是应该包含在文档的开头。下面的示例包括版本2和版本3的 IIIF 图像 API 服务。

  1. {
  2. "service": [
  3. {
  4. "@id": "https://example.org/iiif2/image1/identifier",
  5. "@type": "ImageService2",
  6. "profile": "http://iiif.io/api/image/2/level2.json"
  7. },
  8. {
  9. "id": "https://example.org/iiif3/image1/identifier",
  10. "type": "ImageService3",
  11. "profile": "level2"
  12. }
  13. ]
  14. }

services

文档最顶部资源上的一个或多个服务定义的列表,通常由多个后续资源共享。这允许将这些共享服务收集在一个地方,而不是让它们的信息在整个文档中重复很多次,或者要求消费客户机遍历整个文档结构来查找信息。服务所应用的资源 必须 仍然具有 service 属性,如上所述,其中服务资源至少具有 id 和 type 或 @id 和 @type 属性。这允许客户端知道服务应用于该资源。services 属性的使用由发布系统自行决定。
当客户端遇到定义仅包含 id 和 type 的服务属性时,建议检查最顶部资源上的 services 属性以确定扩展的定义。如果服务不在 services 列表中,并且客户端需要更多信息才能使用服务,那么推荐解引用服务的 id (或 @id),以便检索服务描述。
其值 必须 是 JSON 对象数组。每个对象 必须 是一个服务资源,如上所述。

  • Collection 可选 具有 services 属性,如果它是响应文档中最顶层的 Collection。
    推荐 客户端处理 Collection 上的 services。
  • Manifest 可选 具有 services 属性。
    推荐 客户端处理 Manifest 上的 services。

    1. {
    2. "services": [
    3. {
    4. "@id": "https://example.org/iiif/auth/login",
    5. "@type": "AuthCookieService1",
    6. "profile": "http://iiif.io/api/auth/1/login",
    7. "label": "Login to Example Institution",
    8. "service": [
    9. {
    10. "@id": "https://example.org/iiif/auth/token",
    11. "@type": "AuthTokenService1",
    12. "profile": "http://iiif.io/api/auth/1/token"
    13. }
    14. ]
    15. }
    16. ]
    17. }

    seeAlso

    一种机器可读的资源,如与具有 seeAlso 属性的当前资源相关的 XML 或 RDF 描述。应该给出资源的属性,以帮助客户在多个描述(如果提供了)之间进行选择,并适当地使用文档。如果资源和文档之间的关系需要更具体,那么文档应该包括该关系,而不是 IIIF 资源。其他 IIIF 资源也是 seeAlso 的有效目标,例如链接到描述相关对象的 Manifest。文档的 URI 必须 以特定格式标识数据的单一表示形式。例如,如果在 JSON 和 XML 中存在相同的数据,那么应该为每种表示添加不同的资源,使用不同的 id 和 format 属性。
    其值 必须 是 JSON 对象数组。每项 必须 有 id 和 type 属性,并且 推荐 有 label、format 和 profile 属性。

  • 任何资源类型 可选 至少有一项具有 seeAlso 属性。
    客户端 可选 处理任意资源类型上的 seeAlso。

    1. {
    2. "seeAlso": [
    3. {
    4. "id": "https://example.org/library/catalog/book1.xml",
    5. "type": "Dataset",
    6. "label": { "en": [ "Bibliographic Description in XML" ] },
    7. "format": "text/xml",
    8. "profile": "https://example.org/profiles/bibliographic"
    9. }
    10. ]
    11. }

    3.3.2. 内部链接

    partOf

    包括具有 partOf 属性的资源的包含资源。当客户端遇到 partOf 属性时,它可能会检索被引用的包含资源(如果它没有被嵌入到当前表示中),以便对包含的资源进行处理。例如,Canvas 上的 partOf 属性可用于引用外部 Manifest,以便发现进一步的相关信息。类似地,Manifest 可以使用 partOf 引用包含的 Collection 来辅助导航。
    其值 必须 是 JSON 对象数组。每个项目 必须 有 id 和 type 属性,并且 推荐 有 label 属性。

  • 任何资源类型 可选 至少有一项具有 partOf 属性。
    客户端 可选 呈现资源类型上的 partOf。

    1. { "partOf": [ { "id": "https://example.org/iiif/1", "type": "Manifest" } ] }

    start

    Canvas,或部分 Canvas,推荐 客户端在初始化具有 start 属性的资源时予以显示。对部分 Canvas 的引用的处理方式与 Ranges 引用部分 Canvas 时相同。该属性允许客户端从第一个包含感兴趣内容的 Canvas 开始,而不需要用户手动导航才能找到它。
    其值 必须 是一个 JSON 对象,必须 具有 id 和 type 属性。对象 必须 要么是一个 Canvas(如下面的第一个示例所示),要么是一个 Specific Resource 带有 Selector 和 值为 Canvas 的 source 属性(如下面的第二个示例所示)。

  • Manifest 可选 具有 start 属性。
    推荐 客户端处理 Manifest 上的 start。

  • Range 可选 具有 start 属性。
    推荐 客户端处理 Range 上的 start。
  • 禁止 其他类型的资源具有 start 属性。
    推荐 客户端忽略其他类型资源上的 start。

    1. { "start": { "id": "https://example.org/iiif/1/canvas/1", "type": "Canvas" } }
    1. {
    2. "start": {
    3. "id": "https://example.org/iiif/1/canvas-segment/1",
    4. "type": "SpecificResource",
    5. "source": "https://example.org/iiif/1/canvas/1",
    6. "selector": {
    7. "type": "PointSelector",
    8. "t": 14.5
    9. }
    10. }
    11. }

    supplementary

    从 Range 到包含该 Range 内容资源的 supplementing Annotation 的 Annotation Collection 的链接。客户端可以使用它在与 Range 交互时从不同的 Canvas 向用户呈现额外的内容,或者跳转到同一 Canvas 中的 Range 的下一部分。例如,Range 可能表示一篇跨越非连续页面的报纸文章,然后使用 supplementary 属性引用一个 Annotation Collection,该集合由记录文本的 Annotation 组成,每个报纸页面分为Annotation Pages。或者,Range 可能代表手稿中已经转录或翻译的部分,当还有其他部分尚未完成时。Annotation Collection 将是分别进行转录或翻译的 Annotation。
    其值 必须 是一个 JSON 对象,必须 具有 id 和 type 属性, 并且 type 必须 是 AnnotationCollection。

  • Range 可选 具有 supplementary 属性。
    客户端 可选 处理 Range 上的 supplementary。

  • 禁止 其他类型的资源具有 supplementary 属性。
    推荐 客户端忽略其他类型资源上的 supplementary。

    1. { "supplementary": { "id": "https://example.org/iiif/1/annos/1", "type": "AnnotationCollection" } }

    3.4. 结构属性

    这些属性通过允许在父类中包含子资源(例如 Manifest 中的 Canvas 或 Collection 中的 Manifest)来定义在 IIIF 中表示的对象的结构。大多数情况下使用 items,但是对于不同类型的结构有两种特殊情况。

    items

    IIIF 展示 API 的大部分功能只是记录子资源在父资源中出现的顺序,例如父 Collection 中的 Collection 或 Manifest,或 Manifest 中的 Canvas。所有这些情况都包含一个属性,items。
    其值 必须 是 JSON 对象数组。每一项 必须 具有 id 和 type 属性。这些项会是不同类型的资源,如下所述。

  • Collection 必须 具有 items 属性。每项 必须 是一个 Collection 或 Manifest。
    客户端 必须 处理 Collection上的 items。

  • Manifest 必须 至少有一项具有 items 属性。每项 必须 是一个Canvas。

客户端 必须 处理 Manifest 上的 items。

  • 推荐 Canvas 至少有一项具有 items 属性。每项 必须 是一个 Annotation Page。
    客户端 必须 处理 Canvas 上的 items。
  • 推荐 Annotation Page 至少有一项具有 items 属性。每项 必须 是一个 Annotation。
    客户端 必须 处理 Annotation Page 上的 items。
  • Range 必须 至少有一项具有 items 属性。每项 必须 是一个源为 Canvas 的 Range,Canvas 或 Specific Resource。
    推荐 客户端 处理 Range上的 items。
  • 禁止 其他类型的资源具有 items 属性。
    推荐 客户端忽略其他类型资源上的 items。

    1. {
    2. "items": [
    3. {
    4. "id": "https://example.org/iiif/manifest1",
    5. "type": "Manifest"
    6. },
    7. {
    8. "id": "https://example.org/iiif/collection1",
    9. "type": "Collection"
    10. },
    11. // ...
    12. ]
    13. }

    structures

    表示为 Manifest 的对象的结构可以使用 Range 的层次结构来描述。Range 可用于描述对象的“目录”或用户可以与之交互的其他结构,超出 Manifest 的 items 属性给出的顺序。层次结构是通过将子 Range 资源嵌套到更高级别 Range 的 items 数组中来构建的。这些层次结构的顶层 Range 是在 structures 属性中给出。
    其值 必须 是 JSON 对象数组。每项 必须 有 id 和 type 属性,并且 type 必须 是 Range。

  • Manifest 可选 具有 structures 属性。
    推荐 客户端处理 Manifest 上的 structures。推荐 第一个层次结构缺省呈现给用户,推荐 更进一步的层次结构作为替代结构能够被用户所选择。

  • 禁止 其他类型的资源具有 structures 属性。
    推荐 客户端忽略其他类型资源上的 structures。

    1. {
    2. "structures": [
    3. {
    4. "id": "https://example.org/iiif/range/1",
    5. "type": "Range",
    6. "items": [ { ... } ]
    7. }
    8. ]
    9. }

    annotations

    包含关于此资源的注释或其他 Annotation 的 Annotation Page 的有序列表,与用于将内容绘制到 Canvas 上的 Annotation 分开。Annotations 的 motivation 禁止 是 painting,Annotation 的目标 必须 包括这个资源或它的一部分。
    其值 必须 是 JSON 对象数组。每项 必须 至少具有 id 和 type 属性。

  • Collection 可选 至少有一项具有 annotations 属性。
    推荐 客户端处理 Collection 上的 annotations。

  • Manifest 可选 至少有一项具有 annotations 属性。
    推荐 客户端处理 Manifest 上的 annotations。
  • Canvas 可选 至少有一项具有 annotations 属性。
    推荐 客户端处理 Canvas 上的 annotations。
  • Range 可选 至少有一项具有 annotations 属性。
    推荐 客户端处理 Range 上的 annotations。
  • 内容资源 可选 至少有一项具有 annotations 属性。
    推荐 客户端处理内容资源上的 annotations。
  • 禁止 其他类型的资源具有 annotations 属性.
    推荐 客户端忽略其他类型资源上的 annotations。
    1. {
    2. "annotations": [
    3. {
    4. "id": "https://example.org/iiif/annotationPage/1",
    5. "type": "AnnotationPage",
    6. "items": [ { ... } ]
    7. }
    8. ]
    9. }

    3.5. 值

    motivation 的值
    该规范为Web Annotation属性的motivation或purpose 定义了两个值,当用于 Specific Resource 或 Textual Body 时。
    虽然任何资源都 可选 是 Annotation 的 target ,但本规范仅定义了以 Canvas 为目标的 Annotation 的动机。这些动机允许客户通过区分提供 Canvas 内容的 Annotation 和具有外部定义动机(通常是关于 Canvas 的注释)的 Annotation 来决定应该如何呈现 Annotation。
    可以在 Annotation 中添加其他动机,以进一步阐明从扩展或其他来源获取的意图。客户 必须 忽略他们不理解的动机值。Web Annotation规范中给出的其他动机值 推荐 在适当的地方使用,展示 API Cookbook中给出了示例。
描述
painting 通过具有值为 painting 的 motivation 的Annotation 与 Canvas 关联的资源 必须 作为 Canvas 的表示形式呈现给用户。内容可以被认为是 Canvas 的一部分。对于目标资源不是 Canvas 的,这种动机的使用是未定义的。例如,具有 motivation 值为 painting 的 Annotation 、Image 的 body 和 Canvas 的目标是将 Image 作为 Canvas 的视觉表示(部分)呈现的指令。类似地,文本 body 将作为 Canvas 的可视表示的(部分)显示,而不是位于用户界面的其他部分。
supplementing 通过具有值为 supplementing 的 motivation 的Annotation 与 Canvas 关联的资源 可选 作为 Canvas 表示的一部分呈现给用户,也 可选 在用户界面的不同部分呈现。内容可以被认为是_来自 _Canvas。对于目标资源不是 Canvas 的,这种动机的使用是未定义的。例如,具有 motivation 值为 supplementing 的Annotation、Image 的 body 和部分 Canvas 的目标是向用户显示该 Image 的指令在 Canvas 上的呈现区域或与之相关的某个地方,并且可以用来提供一个易于阅读的图。类似地,文本 body 将呈现在 Canvas 的目标区域或与之相关的其他区域,可能是 OCR、手动抄写或手写文本的翻译,或带有音频内容的 Canvas 中所述内容的说明文字。

4. JSON-LD 注意事项

本节描述对于所有展示API内容都适用的特性。在大多数情况下,这些都是在本API中有特定用途的 JSON-LD 规范的特性。

4.1. 区分大小写

JSON-LD中的术语是区分大小写的。IIIF 展示 API 响应中的属性和枚举值的情况 必须 与本规范中使用的情况匹配。例如,要指定资源为 Manifest,必须将属性指定为 type 而不是 Type 或 tYpE,且值 必须 指定为 Manifest 而不是 manifest 或 manIfEsT。

4.2. 资源表示

推荐 资源描述嵌入到父资源的JSON描述中,也 可选 通过来自资源 id 属性中给出的 HTTP(S) URI 的单独请求来获得。指向资源的链接 必须 以带有 id 和 type 属性的 JSON 对象的形式给出,并且 推荐 具有 format 或 profile,以提示所引用的资源类型。

  1. {
  2. "rendering": [
  3. {
  4. "id": "https://example.org/content/book.pdf",
  5. "type": "Text",
  6. "label": { "en": [ "Example Book (pdf)" ] },
  7. "format": "application/pdf"
  8. }
  9. ]
  10. }

4.3. 具有多值的属性

API 中任何可以有多个值的属性都 必须 始终以值数组的形式给出,即使该数组中只有一项。

  1. {
  2. "thumbnail": [
  3. {
  4. "id": "https://example.org/images/thumb1.jpg",
  5. "type": "Image",
  6. "format": "image/jpeg"
  7. }
  8. ]
  9. }

4.4. 属性值的语言

语言 可选 与用于显示给用户的 label 和 summary 属性的字符串,以及 metadata 和 requiredStatement 对象的 label 和 value 属性相关联。
这些属性的值 必须 是 JSON 对象,其键是该语言的 BCP 47 语言代码,或者如果语言未知或字符串没有语言,那么其键 必须 是字符串 none。关联的值 必须 是字符串数组,其中每个项都是给定语言的内容。

  1. {
  2. "label": {
  3. "en": [
  4. "Whistler's Mother",
  5. "Arrangement in Grey and Black No. 1: The Artist's Mother"
  6. ],
  7. "fr": [
  8. "Arrangement en gris et noir no 1",
  9. "Portrait de la mère de l'artiste",
  10. "La Mère de Whistler"
  11. ],
  12. "none": [ "Whistler (1871)" ]
  13. }
  14. }

请注意,BCP 47 允许文本的脚本包含在连字符之后,例如 ar-latn,并且客户端应该意识到这种可能性。
在提供多个值的情况下,客户端 必须 使用以下算法来确定要向用户显示哪些值。

  • 如果所有值都与 none 键相关联,则客户端 必须 显示所有这些值。
  • 否则,客户端应该尝试确定用户的语言首选项,如果失败则使用一些默认的语言首选项。然后:
    • 如果任何值具有与之相关联的语言,客户端 必须 显示与该语言相关联的所有值,这些值与该语言首选项最匹配。
    • 如果所有值都具有与之相关联的语言,且没有一个与语言首选项相匹配,则客户端 必须 选择一种语言并显示与该语言相关联的所有值。
    • 如果一些值具有与之相关联的语言,但没有一个与语言首选项相匹配,那么客户端 必须 显示所有没有与之相关联的语言的值。

注意,这不适用于 Annotation 中嵌入的文本 body,它们使用 value 和 language 的Web Annotation 模式作为单独的属性。

4.5. 属性值中的HTML标记

可选 在 metadata 和 requiredStatement 对象的 summary 属性和 value 属性中包含最小的 HTML 标记,以便进行处理。禁止 在 label 或其他属性中使用。它允许内容发布者向文本块添加链接和简单的格式化指令。内容 必须 是格式良好的 XML,因此 必须 包装在 p 或 span 之类的元素中。在 HTML 字符串的任何一边都 禁止 有空格,因此字符串中的第一个字符 必须 是’ < ‘字符,最后一个字符 必须 是’ > ‘字符,允许使用这些字符的应用程序测试值是 HTML 还是纯文本。为了避免非 HTML 字符串与此匹配,推荐 在纯文本以这种方式开始和结束的情况下,在值的末尾添加额外的空白字符。
为了避免 HTML 或脚本注入攻击,客户端 必须 删除:

  • 例如 script,style,object,form,input 等类似标签。
  • 除了 a 标签上的 href,以及 img 标签上的 src 和 alt 之外的所有属性。
  • 所有以非“http:”, “https:”, and “mailto:”字符串开头的 href 属性。
  • CData 部分。
  • XML 注释。
  • 处理指令。

推荐 客户端只允许a,b,br,i,img,p,small,span,sub 和 sup 标签。客户端 可选 选择删除任何和所有标记,因此 不推荐 假定格式将始终呈现。请注意,发布者 可选 包含任意 HTML 内容,以便使用定制的或实验性的应用程序进行处理,而要求客户端假定发布者是不可信的或未知的。

  1. { "summary": { "en-latn": [ "<p>Short <b>summary</b> of the resource.</p>" ] } }

4.6. 关联数据上下文和冲突

响应中的顶层资源 必须 具有 @context 属性,并且 推荐 作为 JSON 表示的第一个键/值对出现。这告诉关联数据处理器如何解释文档。下面的 IIIF 展示 API 上下文 必须 在最顶层的资源中每个响应出现一次,因此 禁止 出现在被嵌入的资源中。例如,当在 Manifest 中嵌入一个 Canvas 时,Canvas 将没有 @context 属性。
@context 属性的值必须是URI http://iiif.io/api/presentation/3/context.json 或者是以URI http://iiif.io/api/presentation/3/context.json 为最后一项的 JSON 数组。进一步的上下文,如本地或注册扩展的上下文,必须 添加在数组的开头。

  1. {
  2. "@context": "http://iiif.io/api/presentation/3/context.json"
  3. }

在本规范或 Web 注释数据模型中定义的属性之外的任何附加属性都 推荐 使用进一步的上下文文档映射到RDF谓词。这些扩展 推荐 被添加到顶层的 @context 属性中,并且 必须 被添加到上面的上下文之前。谓词特定上下文定义(称为作用域上下文)的 JSON-LD 1.1 功能 必须 用于最小化跨扩展冲突。社区使用的扩展 推荐 在扩展注册表中注册,但注册不是强制性的。

  1. {
  2. "@context": [
  3. "http://example.org/extension/context.json",
  4. "http://iiif.io/api/presentation/3/context.json"
  5. ]
  6. }

JSON表达在顶层 禁止 包含 @graph 键。当使用 JSON-LD 1.0 压缩算法直接从 RDF 数据序列化时,可能会创建这个键。相反,应该使用 JSON-LD 框架和/或自定义代码来确保文档的结构符合本规范的定义。

4.7. 上下文之间的术语冲突

在多个 JSON-LD 上下文文档中使用一些常见术语。人们尽一切努力来减少这些冲突,但有些冲突是不可避免的。为了知道在任何给定点上哪个规范是有效的,具有该属性的资源的类是主要的控制因素。因此,基于 Annotation 的资源上的属性使用来自 Web 注释数据模型 的上下文,而由该规范定义的类上的属性使用IIIF 展示 API 上下文的定义。
有一个属性直接冲突— label 属性由两者定义,并且对每个资源都可用。IIIF中 label 的使用遵循了现代化的国际化最佳实践,允许使用上面描述的语言映射构造将语言与值关联起来。Web 注释数据模型仅将其用于 Annotation Collections,并规定格式为字符串。对于这个属性,API 覆盖了来自 Annotation 模型的定义,以确保标签可以一致地用多种语言表示。
以下属性都是由两者定义的,IIIF 表示比 Web 注释数据模型更具体,但不冲突,或从不在同一资源上使用:

  • homepage:在 IIIF 中,资源的主页表示为一个 JSON 对象,而在 Web 注释数据模型中,它也可以是一个字符串。
  • type:在 IIIF 中,类型是单一的,而在 Web 注释数据模型中,可以有多个类型。
  • format:在 IIIF 中,资源的格式也是单一的,而在 Web 注释数据模型中可以有多种格式。
  • language:在 IIIF 中,language 属性总是接受一个数组,而在 Web 注释数据模型中,它可以是一个字符串。
  • start:在 Manifest 上用 start 属性指出 Canvas 或部分 Canvas 的起始,因此是一个 JSON 对象。而在 Web 注释数据模型中,是用在 TextPositionSelector 上给出文本内容起始的偏移量,因此是一个整数。

两者以相同的方式定义 rights、partOf 和 items 属性。

4.8. 关键字映射

JSON-LD 关键字 @id、@type 和 @none 被展示API 关联数据上下文映射为 id、type 和 none 。因此,在符合当前版本的展示 API 的内容中,唯一以 @ 开头的 JSON 键将是 @context。然而,内容可能包括符合更旧规范或使用以 @ 开头的关键字的外部规范的数据。客户端应该会遇到这两种句法。

5. 资源结构

本节提供本规范中使用的资源类型的详细描述。第2节提供了资源类型的概述,并用图表说明了它们之间允许的关系,附录A提供了属性规定的汇总表。

5.1. Collection

Collection 用于列出可供查看的 Manifest。Collection 可选 包括其他 Collection 和 Manifest,以形成树形结构的层次结构。Collection 可能与成套文化遗产资源的策展管理相一致,也称为“收藏”,但也可能完全没有这种相似性。
Collection 的预期用途是允许客户端:

  • 在初始化时加载一组预定义的 Manifest。
  • 接收一组 Manifests(如搜索结果)以进行呈现。
  • 可视化相关 Manifest 的列表或层次结构。
  • 通过可用 Manifest 的列表或层次结构提供导航。

Collection 可选 内联嵌入到其他 Collection 中,例如当 Collection 主要用于将较大的集合细分为更易于管理的部分时,但是 禁止 _Manifest 嵌入到 Collection 中。嵌入式 Collection 也 推荐 有自己的 URI, JSON 描述可以从该 URI 中获得。
可选 从多个 Collection 引用 Manifest 或 Collection。例如,一个机构可能定义四个 Collection:一个针对现代作品,一个针对历史作品,一个针对报纸,以及一个针对书籍。现代报纸 Manifest 将同时出现在现代 Collection 和报纸 Collection 中。或者,该机构可以选择有两个独立的报纸 Collection,并各自以现代和历史的子-Collection 予以引用。
允许带有空 items 属性的 Collection,但不鼓励这样做。例如,如果用户执行的搜索不匹配任何 Manifest,那么服务器
可选 返回一个没有 Manifest 的 Collection 响应。
在 items 属性中引用的 Collection 或 Manifest
必须 具有 id、type 和 label 属性。推荐 _它们有thumbnail 属性。
一个 Collection 文档示例:

  1. {
  2. "@context": "http://iiif.io/api/presentation/3/context.json",
  3. "id": "https://example.org/iiif/collection/top",
  4. "type": "Collection",
  5. "label": { "en": [ "Collection for Example Organization" ] },
  6. "summary": { "en": [ "Short summary of the Collection" ] },
  7. "requiredStatement": {
  8. "label": { "en": [ "Attribution" ] },
  9. "value": { "en": [ "Provided by Example Organization" ] }
  10. },
  11. "items": [
  12. {
  13. "id": "https://example.org/iiif/1/manifest",
  14. "type": "Manifest",
  15. "label": { "en": [ "Example Manifest 1" ] },
  16. "thumbnail": [
  17. {
  18. "id": "https://example.org/manifest1/thumbnail.jpg",
  19. "type": "Image",
  20. "format": "image/jpeg"
  21. }
  22. ]
  23. }
  24. ]
  25. }

注意,尽管Collection 可选 引用来自以前版本API的Collection 或 Manifest,但本文档中包含的信息 必须 遵循当前版本的规定,而不是目标文档的规定。这与 service 的规定形成了对比,因为无法通过 type 区分版本2的 Manifest 和版本3的 Manifest。

5.2. Manifest

Manifest 资源通常表示单个对象和包含在该对象中的任何智力工作或作品。特别地,它包括对象的描述性、权限和关联信息。Manifest 嵌入了应该作为对象视图呈现的 Canvas,并包含足够的信息供客户端初始化自身并开始向用户快速显示某些内容。
id 中的标识符 必须 能够被解引用以检索 Manifest 的 JSON 描述,因此 必须 使用 HTTP(S) URI 机制。
Manifest 必须 有一个 items 属性,它是 JSON-LD 对象数组。每个对象都是一个 Canvas,其规定将在下一节中描述。Manifest 也 可选 有一个 structures 属性,列出一个或多个 Ranges,描述了内容的附加结构,比如可能作为目录呈现。Manifest 可选 有一个 annotations 属性,它包括 Annotation Page 资源,其中的 Annotation 将 Manifest 作为 target。这些通常是注释风格的 Annotation,禁止 以 painting 作为 motivation。

  1. {
  2. // Metadata about this manifest file
  3. "@context": "http://iiif.io/api/presentation/3/context.json",
  4. "id": "https://example.org/iiif/book1/manifest",
  5. "type": "Manifest",
  6. // Descriptive metadata about the object/work
  7. "label": { "en": [ "Book 1" ] },
  8. "metadata": [
  9. {
  10. "label": { "en": [ "Author" ] },
  11. "value": { "none": [ "Anne Author" ] }
  12. },
  13. {
  14. "label": { "en": [ "Published" ] },
  15. "value": {
  16. "en": [ "Paris, circa 1400" ],
  17. "fr": [ "Paris, environ 1400" ]
  18. }
  19. },
  20. {
  21. "label": { "en": [ "Notes" ] },
  22. "value": {
  23. "en": [
  24. "Text of note 1",
  25. "Text of note 2"
  26. ]
  27. }
  28. },
  29. {
  30. "label": { "en": [ "Source" ] },
  31. "value": { "none": [ "<span>From: <a href=\"https://example.org/db/1.html\">Some Collection</a></span>" ] }
  32. }
  33. ],
  34. "summary": { "en": [ "Book 1, written by Anne Author, published in Paris around 1400." ] },
  35. "thumbnail": [
  36. {
  37. "id": "https://example.org/iiif/book1/page1/full/80,100/0/default.jpg",
  38. "type": "Image",
  39. "format": "image/jpeg",
  40. "service": [
  41. {
  42. "id": "https://example.org/iiif/book1/page1",
  43. "type": "ImageService3",
  44. "profile": "level1"
  45. }
  46. ]
  47. }
  48. ],
  49. // Presentation Information
  50. "viewingDirection": "right-to-left",
  51. "behavior": [ "paged" ],
  52. "navDate": "1856-01-01T00:00:00Z",
  53. // Rights Information
  54. "rights": "http://creativecommons.org/licenses/by/4.0/",
  55. "requiredStatement": {
  56. "label": { "en": [ "Attribution" ] },
  57. "value": { "en": [ "Provided by Example Organization" ] }
  58. },
  59. "provider": [
  60. {
  61. "id": "https://example.org/about",
  62. "type": "Agent",
  63. "label": { "en": [ "Example Organization" ] },
  64. "homepage": [
  65. {
  66. "id": "https://example.org/",
  67. "type": "Text",
  68. "label": { "en": [ "Example Organization Homepage" ] },
  69. "format": "text/html"
  70. }
  71. ],
  72. "logo": [
  73. {
  74. "id": "https://example.org/service/inst1/full/max/0/default.png",
  75. "type": "Image",
  76. "format": "image/png",
  77. "service": [
  78. {
  79. "id": "https://example.org/service/inst1",
  80. "type": "ImageService3",
  81. "profile": "level2"
  82. }
  83. ]
  84. }
  85. ],
  86. "seeAlso": [
  87. {
  88. "id": "https://data.example.org/about/us.jsonld",
  89. "type": "Dataset",
  90. "format": "application/ld+json",
  91. "profile": "https://schema.org/"
  92. }
  93. ]
  94. }
  95. ],
  96. // Links
  97. "homepage": [
  98. {
  99. "id": "https://example.org/info/book1/",
  100. "type": "Text",
  101. "label": { "en": [ "Home page for Book 1" ] },
  102. "format": "text/html"
  103. }
  104. ],
  105. "service": [
  106. {
  107. "id": "https://example.org/service/example",
  108. "type": "ExampleExtensionService",
  109. "profile": "https://example.org/docs/example-service.html"
  110. }
  111. ],
  112. "seeAlso": [
  113. {
  114. "id": "https://example.org/library/catalog/book1.xml",
  115. "type": "Dataset",
  116. "format": "text/xml",
  117. "profile": "https://example.org/profiles/bibliographic"
  118. }
  119. ],
  120. "rendering": [
  121. {
  122. "id": "https://example.org/iiif/book1.pdf",
  123. "type": "Text",
  124. "label": { "en": [ "Download as PDF" ] },
  125. "format": "application/pdf"
  126. }
  127. ],
  128. "partOf": [
  129. {
  130. "id": "https://example.org/collections/books/",
  131. "type": "Collection"
  132. }
  133. ],
  134. "start": {
  135. "id": "https://example.org/iiif/book1/canvas/p2",
  136. "type": "Canvas"
  137. },
  138. // List of Services, referenced from within items, structures or annotations
  139. "services": [
  140. {
  141. "@id": "https://example.org/iiif/auth/login",
  142. "@type": "AuthCookieService1",
  143. "profile": "http://iiif.io/api/auth/1/login",
  144. "label": "Login to Example Institution",
  145. "service": [
  146. {
  147. "@id": "https://example.org/iiif/auth/token",
  148. "@type": "AuthTokenService1",
  149. "profile": "http://iiif.io/api/auth/1/token"
  150. }
  151. ]
  152. }
  153. ],
  154. // List of Canvases
  155. "items": [
  156. {
  157. "id": "https://example.org/iiif/book1/canvas/p1",
  158. "type": "Canvas",
  159. "label": { "none": [ "p. 1" ] }
  160. // ...
  161. }
  162. ],
  163. // structure of the resource, described with Ranges
  164. "structures": [
  165. {
  166. "id": "https://example.org/iiif/book1/range/top",
  167. "type": "Range"
  168. // Ranges members should be included here
  169. }
  170. // Any additional top level Ranges can be included here
  171. ],
  172. // Commentary Annotations on the Manifest
  173. "annotations": [
  174. {
  175. "id": "https://example.org/iiif/book1/annotations/p1",
  176. "type": "AnnotationPage",
  177. "items": [
  178. // Annotations about the Manifest are included here
  179. ]
  180. }
  181. ]
  182. }

5.3. Canvas

Canvas 表示一个单独的页面或视图,并充当组装组成显示的不同内容资源的中心点。Canvas 必须 由 URI 标识,并且 必须 是 HTTP(S) URI。Canvas 的 URI 禁止 包含片段(#后面跟有其他字符),因为这样就不可能使用#xywh=(用于空间区域)和/或 #t=(用于时间片段)的媒体片段句法来引用 Canvas 区域片段。Canvas 可选 通过它们的 URI 从 Manifest 中解引用分离出来,也可以被嵌入
推荐 每个 Canvas 都有一个要显示的 label。如果没有提供,推荐 客户端根据 Canvas 在 items 属性中的位置自动生成一个。
内容资源通过Web注解与 Canvas 相关联。作为 Canvas 的一部分呈现的内容 必须 与具有 motivation 值 painting 的Annotation相关联。这些 Annotation 记录在一个或多个 Annotation Pages 的 items 中,在 Canvas 的 items 数组中引用。没有 motivation 值 painting 的 Annotation 禁止 在 items 中引用的页面中,而应该在 annotations 属性中。被引用的外部 Annotation Pages 必须 具有 id 和 type 属性。
源自 Canvas 的内容,例如手册或图像中文本的自动 (OCR) 转录或音频表示中所说的话,必须 与具有值为 supplementing 的 motivation 属性的 Annotation 相关联。Annotations 也 可选 有其他 motivation 值。因此,任何类型的内容都可以通过具有值为 painting 的 motivation 属性的 Annotation 与 Canvas 相关联,这意味着内容是 Canvas 的一部分;具有值为 supplementing 的 motivation 属性的 Annotation,这意味着内容来自 _Canvas,但不一定是它的一部分;或者有其他 motivation 属性值的 Annotation,意味着它在某种程度上是关于 Canvas 的。
Canvas
必须 有矩形长宽比(用 height 和 width 属性描述)和/或 duration 来提供一个时间范围。这些维度允许资源在提供的空间和/或时间范围内与Canvas的特定区域相关联。内容 禁止 与 Canvas 维度之外的空间或时间关联,例如在坐标 0,0 以下、大于高度或宽度、在0秒之前或持续时间之后。具有非为Canvas定义的维度的内容资源 禁止 通过具有值为 painting 的 motivation 属性的 Annotation 与该 Canvas 关联。例如,使用具有值为 painting 的 motivation 属性的 Annotation 将 Image(只有高度和宽度)与一个有全部三个维度的 Canvas 相关联是有效的,但将 Video 资源(具有高度、宽度和持续时间)与没有全部三个维度的 Canvas 相关联则是错误的。这样的资源 推荐 使用 rendering 属性来引用,或者通过在 Annotation 属性中具有 motivation 值而不是 painting 的 annotations 属性来引用。
Parts of Canvas
可选 使用带有 Selector 的特定资源来描述,遵循 Web 注释数据模型中定义的模式。该规范 推荐 使用 FragmentSelector 类,因为它允许通过其他 Selector 进行优化,并与不能直接使用URI片段表示的用例保持一致。Parts of Canvas 可以从 Range 中引用,作为 Annotation 的 body 或 target,或者在 start 属性中引用。
Parts of Canvas 也
可选 通过在 Canvas 的 URI 中附加一个片段来标识,并且这些部分仍然被认为是 Canvas:它们的 type 值是字符串 Canvas。Canvas 的矩形空间部分也 可选 通过在 Canvas 的 URI 末尾附加一个 xywh= 片段来描述。类似地,可选 通过在 Canvas 的 URI 末尾附加一个 t= 片段来描述 Canvas 的时间部分。空间片段和时间片段 可选 在它们之间使用 & 字符予以组合,推荐 时间维度优先。使用 Canvas 没有定义的维度选择区域是错误的,例如 Canvas 的时间区域只有高度和宽度维度。
Canvas
可选 被视为内容资源,用于对其他 Canvas 进行注释。例如,一个带有视频资源和表示字幕或标题的Annotation 的 Canvas(Canvas A)可能会被注释到另一个 Canvas(Canvas B)上。这一模式维护了 Canvas A 的内容相对于 Canvas B 的维度的正确的空间和时间的对齐。
渲染器
必须 将内容缩放到 Canvas 所表示的空间中,并且 推荐 遵循为基于时间的媒体提供的任何 timeMode 值。如果 Canvas 表示物理对象的视图,那么 推荐 Canvas 的空间维度与物理对象的比例相同,推荐 _内容只表示对象。

  1. {
  2. // Metadata about this canvas
  3. "id": "https://example.org/iiif/book1/canvas/p1",
  4. "type": "Canvas",
  5. "label": { "none": [ "p. 1" ] },
  6. "height": 1000,
  7. "width": 750,
  8. "items": [
  9. {
  10. "id": "https://example.org/iiif/book1/content/p1/1",
  11. "type": "AnnotationPage",
  12. "items": [
  13. // Painting Annotations on the Canvas are included here
  14. ]
  15. }
  16. ],
  17. "annotations": [
  18. {
  19. "id": "https://example.org/iiif/book1/comments/p1/1",
  20. "type": "AnnotationPage",
  21. "items": [
  22. // Non-Painting Annotations on the Canvas are included here
  23. ]
  24. }
  25. ]
  26. }

5.4. Range

Range 用于表示对象中的结构,超出 Manifest 的 items 属性中的 Canvas 的缺省顺序,例如报纸栏目或文章,书中章节,或一段音乐中的乐章。Range可以包括Canvas、部分Canvas或其他Range,创建如目录的树状结构。
向Manifest中添加Range的目的是允许客户端显示线性或层次导航界面,使用户能够快速浏览对象的内容。推荐 客户端只向用户提供具有 label 属性且没有值为 no-nav 的 behavior 属性的 Range。不推荐 客户端将 Canvas 的标签作为导航的一部分呈现,如果这是所需的表示,则 必须 创建包裹 Canvas 的 Range。
如果没有 Range 具有值为 sequence 的 behavior 属性,并且 Manifest 也没有值为 unordered 的 behavior,那么 推荐 客户端将 Manifest 的 items 数组中的 Canvas 的顺序作为缺省顺序。如果有一个 Range 具有值为 sequence 的 behavior 属性,那么客户端 必须 改为使用此 Range 进行排序。如果有多个 Range 具有值为sequence 的 behavior 属性,例如第二个Range表示手稿页的替代顺序,那么 推荐 第一个 Range 作为缺省,同时 推荐 其他的可以被选择。具有值为sequence 的 behavior 属性的 Range 必须 直接位于 Manifest 的 structures 属性中,并且 禁止 在其他 Range 中被嵌入引用。这些 Range 可能具有有限的层次嵌套,但是在确定缺省顺序时,客户端不需要遍历非常深的结构。如果 Range 包含部分 Canvas,那么这些部分就是缺省情况下要呈现的内容,并且会在导航显示中生成单独的条目。这允许 Canvas 包含缺省视图之外的内容,如颜色条或标尺。
Range 必须 有 URI,并且 推荐 它们是 HTTP(S) uri。顶层 Range 被嵌入或外部引用到 structures 属性中的 Manifest 中。然后,这些顶层 Range 在 items 属性中嵌入或引用其他 Range、Canvas 或部分 Canvas。items 属性中的每个条目都 必须 是一个 JSON 对象,并且 必须 具有 id 和 type 属性。如果顶层 Range 需要由客户端解引用,那么 禁止 它具有 items 属性,以便客户端能够识别应该检索它以便进行处理。
所有应该被认为是部分 Range 的 Canvas 或部分 Canvas 必须 包含在 Range 的 items 属性中,或后代 Range 的 items 中。
Canvas 和部分 Canvas 不必是连续的,也不必与 Manifest 的 items 属性或任何其他 Range 中的顺序相同。例如,报纸上的文章在不同的栏目中连续出现,从一页的一半开始的章节,或者是代表一段音乐不同部分的一个 canvas 的时间片段。
Range 可选 使用 supplementary 属性链接到具有 Range 内容的 Annotation Collection。引用的 Annotation Collection 将包含以 Range 内 Canvas 区域为目标的 Annotation,并将内容资源链接到这些Canvas。

  1. {
  2. "@context": "http://iiif.io/api/presentation/3/context.json",
  3. "id": "https://example.org/iiif/book1/manifest",
  4. "type": "Manifest",
  5. // Metadata here ...
  6. "items": [
  7. // Canvases here ...
  8. ],
  9. "structures": [
  10. {
  11. "id": "https://example.org/iiif/book1/range/r0",
  12. "type": "Range",
  13. "label": { "en": [ "Table of Contents" ] },
  14. "items": [
  15. {
  16. "id": "https://example.org/iiif/book1/canvas/cover",
  17. "type": "Canvas"
  18. },
  19. {
  20. "id": "https://example.org/iiif/book1/range/r1",
  21. "type": "Range",
  22. "label": { "en": [ "Introduction" ] },
  23. "supplementary": {
  24. "id": "https://example.org/iiif/book1/annocoll/introTexts",
  25. "type": "AnnotationCollection"
  26. },
  27. "items": [
  28. {
  29. "id": "https://example.org/iiif/book1/canvas/p1",
  30. "type": "Canvas"
  31. },
  32. {
  33. "id": "https://example.org/iiif/book1/canvas/p2",
  34. "type": "Canvas"
  35. },
  36. {
  37. "type": "SpecificResource",
  38. "source": "https://example.org/iiif/book1/canvas/p3",
  39. "selector": {
  40. "type": "FragmentSelector",
  41. "value": "xywh=0,0,750,300"
  42. }
  43. }
  44. ]
  45. },
  46. {
  47. "id": "https://example.org/iiif/book1/canvas/backCover",
  48. "type": "Canvas"
  49. }
  50. ]
  51. }
  52. ]
  53. }

5.5. Annotation Page

Image 和其他内容与各自 Canvas 的关联是通过 Annotation 完成的。传统上,Annotation 用于将注释与 Annotation 的文本或主体所涉及的资源相关联,Web Annotation 模型允许任何资源与任何其他资源或其部分相关联,并且它被同时重用于 Canvas 上的注释和绘画资源两者。图像之外的其他资源可能包括对象的全文、音乐记号、音乐表演、图表转录、评论注释、标签、视频、数据等等。
这些 Annotation 被一起收集在 Annotation Page 资源中,它们被包含在 Canvas 的 items 属性中。如果在用户导航到该 Canvas 或对外部页面的引用时应该尽快处理 Annotation,则可以将每个 Annotation Page 全部嵌入。该引用 必须 包括 id 和 type,禁止 包括 items ,并且 可选 包括其他属性,如 behavior。Annotation Page 中的所有 Annotation 都 推荐 以 Canvas 作为它们的 target。推荐 客户端按照 Canvas 中给出的顺序处理 Annotation Page 及其项。发布者可以选择在外部页面之前对嵌入的Annotation Page进行排序,从而加快处理速度,客户端需要对外部页面进行解引用。
Annotation Page 必须 有一个以id表示的HTTP(S) URI,并且 可选 有本规范或Web Annotation规范中定义的任何其他属性。Annotation在Annotation Page的 items 属性中列出。

不兼容性警告
Web Annotation 规范中 label 的定义不会产生符合本规范中为语言定义的结构的 JSON。 鉴于对国际化标签的绝对规定和一致性处理属性的强烈愿望,Annotation 模型类上的 label 属性不符合 Web 注释数据模型的字符串规定。 此问题已提交给 W3C,有望在本标准的未来版本中得到解决。

  1. {
  2. "@context": "http://iiif.io/api/presentation/3/context.json",
  3. "id": "https://example.org/iiif/book1/annopage/p1",
  4. "type": "AnnotationPage",
  5. "items": [
  6. {
  7. "id": "https://example.org/iiif/book1/annopage/p1/a1",
  8. "type": "Annotation"
  9. // ...
  10. },
  11. {
  12. "id": "https://example.org/iiif/book1/annopage/p1/a2",
  13. "type": "Annotation"
  14. // ...
  15. }
  16. ]
  17. }

5.6. Annotation

Annotation 遵循 Web Annotation 数据模型。这里提供的描述是摘要加上任何 IIIF 特定的规定。W3C标准是官方文档。
注解 必须 有自己的 HTTP(S) URI,通过 id 属性传递。根据 Web Annotation Protocol,如果 URI 被解引用,推荐 返回 Annotation 的 JSON-LD 描述。
当使用 Annotation 将内容资源与 Canvas 关联时,内容资源将链接到 Annotation 的 body 中。Canvas 的 URI 必须 在 Annotation 的 target 属性或 target 属性中使用的 Specific Resource 的 source 属性中重复。
注意,当在 Annotation 中使用时,Web Annotation 数据模型为 value 属性定义了不同的模式。例如,Textual Body 或 Fragment Selector 的值是字符串,而不是带有语言和值的 JSON 对象。在这些情况下,必须注意使用正确的字符串形式。
可选 使用 Web Annotation 数据模型的其他特性,比如选择 Canvas 或内容资源的一个片段,或者在 Annotation 中嵌入注释或转录。使用这些高级特性有时会导致 target 不是内容资源,而是 SpecificResource、 Choice 或其他非内容对象的情况。实现应该检查资源的 type,而不是假设它总是用于呈现的内容。
IIIF 社区已经定义了额外的 Selector 类用于与 SpecificResources 一起使用,特别是在无法使用官方的 FragmentSelector 的情况下。有关详细信息,请参阅附加文档。

  1. {
  2. "@context": "http://iiif.io/api/presentation/3/context.json",
  3. "id": "https://example.org/iiif/book1/annotation/p0001-image",
  4. "type": "Annotation",
  5. "motivation": "painting",
  6. "body": {
  7. "id": "https://example.org/images/page1.jpg",
  8. "type": "Image"
  9. },
  10. "target": "https://example.org/iiif/book1/canvas/p1"
  11. }

5.7. Content Resources

内容资源是从 Manifest 或 Collection 中引用的外部 web 资源。包括图像、视频、音频、数据、网页或任何其他格式。
Canvas 一节所述,与 Canvas 相关的内容(因此也是 Manifest 的内容)是由带有 painting 动机的 Annotation 的 body 属性提供的。内容资源也可以从 thumbnail、homepage、logo、rendering 和 seeAlso 属性中引用
内容资源 必须 有一个 id 属性,其值是可以获取资源的 URI。
必须 包含内容资源的类型,并且 推荐 从 type 定义下所列表中获取。推荐包含资源的 format,如果包含,则 推荐 是资源解引用时返回的媒体类型。资源的 profile,如果有的话,也 推荐 将其包括。适当格式的内容资源还 可选 具有 language、height、width 和 duration 属性。内容资源也 可选 具有描述性和链接属性,如第3节所定义。
如果内容资源是一个Image,且 IIIF 图像服务可用,那么内容资源的 id 属性 可选 是一个完整的 URI 指向图像服务支持的任何特定的表示,如 https://example.org/image1/full/1000,/0/default.jpg,但 禁止 只是 IIIF 图像服务的 URI。其 type 值 必须 是字符串 Image。其媒体类型 可选 以 format 列出,其高度和宽度 可选 分别以 height 和 width 的整数值给出。推荐 _Image 使用 service 属性引用服务。
如果需要区分内容资源,那么
推荐 资源具有 label 属性。
Canvas
可选 被视为内容资源,为了在其他 Canvas 上予以注释。在这种情况下,Canvas 可选 _被嵌入到 Annotation 中,或者需要解引用来获得其描述。

  1. {
  2. "@context": "http://iiif.io/api/presentation/3/context.json",
  3. "id": "https://example.org/iiif/book1/annotation/p0001-image",
  4. "type": "Annotation",
  5. "motivation": "painting",
  6. "body": {
  7. "id": "https://example.org/iiif/book1/page1/full/max/0/default.jpg",
  8. "type": "Image",
  9. "label": { "en": [ "Page 1" ], "es": [ "Página 1" ] },
  10. "format": "image/jpeg",
  11. "service": [
  12. {
  13. "id": "https://example.org/iiif/book1/page1",
  14. "type": "ImageService3",
  15. "profile": "level2",
  16. "service": [
  17. {
  18. "@id": "https://example.org/iiif/auth/login",
  19. "@type": "AuthCookieService1"
  20. }
  21. ]
  22. }
  23. ],
  24. "height": 2000,
  25. "width": 1500
  26. },
  27. "target": "https://example.org/iiif/book1/canvas/p1"
  28. }

5.8. Annotation Collection

Annotation Collection 表示应该作为单个整体进行管理的 Annotation Page 的分组,而不管它们的目标是哪个 Canvas 或资源。例如,这允许将构成一本书文本的特定翻译的所有 Annotation 收集在一起。然后,客户端可能会呈现一个用户界面,该用户界面允许根据用户的偏好显示或隐藏 Annotation Collection 中的所有 Annotation。
Annotation Collection 必须 有一个 URI,并且 推荐 是一个 HTTP(S) URI。推荐 它们具有一个 label,可选 具有任何其他的描述性、链接或权限属性。

  1. {
  2. "@context": "http://iiif.io/api/presentation/3/context.json",
  3. "id": "https://example.org/iiif/book1/annocoll/transcription",
  4. "type": "AnnotationCollection",
  5. "label": {"en": ["Diplomatic Transcription"]},
  6. "first": { "id": "https://example.org/iiif/book1/annopage/l1", "type": "AnnotationPage" },
  7. "last": { "id": "https://example.org/iiif/book1/annopage/l120", "type": "AnnotationPage" }
  8. }

对于具有许多 Annotations 的 Annotation Collection,将有许多页面。Annotation Collection 引用顺序列表中的第一页和最后一页,然后页面引用顺序列表中的前一页和下一页。每个页面都是 Annotation Collection 的一部分。

  1. {
  2. "@context": "http://iiif.io/api/presentation/3/context.json",
  3. "id": "https://example.org/iiif/book1/annopage/l1",
  4. "type": "AnnotationPage",
  5. "partOf": {
  6. "id": "https://example.org/iiif/book1/annocoll/transcription",
  7. "type": "AnnotationCollection"
  8. },
  9. "next": {
  10. "id": "https://example.org/iiif/book1/annopage/l2",
  11. "type": "AnnotationPage"
  12. },
  13. "items": [
  14. {
  15. "id": "https://example.org/iiif/book1/annopage/p1/a1",
  16. "type": "Annotation"
  17. // ...
  18. }
  19. ]
  20. }

6. HTTP 请求和响应

本节描述 API 推荐 的请求和响应交互。遵循 REST 和简单 HATEOAS 方法,其中交互将检索资源的描述,并且可以通过从描述中获得的链接进行附加调用。所有的请求都使用 HTTP GET 方法;本规范不包括资源的创建和更新。推荐 实现也支持 HTTP HEAD 请求。

6.1. URI 建议

虽然 API 中的任何资源在技术上都可以接受任何 HTTP(S) URI,但有几个为资源设计 URI 的最佳实践。

  • 推荐 URI 使用 HTTPS 机制, 而不是 HTTP。
  • 不推荐 URI 包括查询参数或片段。
  • 一旦发布,推荐 URI 尽可能持久和不变。
  • 特殊字符 必须 进行编码。

    6.2. 请求

    客户端只需要访问指向展示 API 资源的链接。与IIIFImageAPI请求或其他参数化服务不同,不能假定展示 API 资源的 URI 遵循任何特定模式。

    6.3. 响应

    如上所述,所有响应的格式都是JSON。对于所有具有 HTTP(S) URI 的资源而言,在对 URI 解引用时提供它们的描述是一种良好的做法。如果资源在响应中被引用,而不是被嵌入,那么它 必须 能够被解引用。
    如果服务器接收到一个带有 Accept 报头的请求,推荐 它按照内容协商的规则进行响应。请注意,请求的Accept 报头中提供的内容类型 可选 包括参数,例如 profile 或 charset。
    如果请求不包含 Accept 报头,响应的 HTTP Content-Type 报头的值 推荐 为 application/ld+json (JSON-LD),并带有作为上下文文档的 profile 参数:http://iiif.io/api/presentation/3/context.json
    1. Content-Type: application/ld+json;profile="http://iiif.io/api/presentation/3/context.json"
    如果 Content-Type 报头 application/ld+json 由于服务器配置细节无法生成,那么 推荐 Content-Type 报头改为 application/json(常规 JSON),不带 profile 参数。
    1. Content-Type: application/json
    HTTP 服务器 必须 遵循 CORS 规定,以使基于浏览器的客户机能够检索描述。如果服务器在 Accept 报头中接收到具有上述内容类型之一的请求,推荐 按照内容协商规则使用该内容类型进行响应。在Apache HTTP 服务器实现说明中提供了启用CORS和条件 Content-Type 报头的方法。
    推荐 响应由服务器压缩,因为对于非常重复的数据结构,可以获得显著的性能提升。

    7. 认证

    可能有必要限制对通过展示API提供的描述的访问。由于与描述交互的主要方式是通过web浏览器跨域使用XmlHttpRequests,因此需要考虑对用户进行身份验证和授权访问的最合适方法。所采用的方法在认证规范中进行描述,并要求请求一个令牌以添加到请求中,以标识用户。该令牌也可以用于其他API定义的其他请求。
    可以在 Manifest 中包含图像API服务描述,在这些描述中还可以包含到认证API服务的链接,这些服务需要与图像内容进行交互。首次在 Manifest 中包含认证API服务时,它 必须 是完整的描述。推荐 后续的引用只是服务的 URI,客户端应该通过匹配 URI 从完整的描述中查找详细信息。客户端 必须 预见到 Manifest 中的认证服务描述过期的情况:真实的来源是图像信息文档,或其他引用认证 API 服务的系统。

    附录

    A. 属性规定汇总

    | 图标 | 含义 | | —- | —- | | IIIF 展示 API 3.0 - 图9 | 必须(Required) | | IIIF 展示 API 3.0 - 图10 | 推荐(Recommended) | | IIIF 展示 API 3.0 - 图11 | 可选(Optional) | | IIIF 展示 API 3.0 - 图12 | 禁止(Not Allowed) |

描述性和权利属性

label metadata summary requiredStatement rights navDate language
Collection IIIF 展示 API 3.0 - 图13 IIIF 展示 API 3.0 - 图14 IIIF 展示 API 3.0 - 图15 IIIF 展示 API 3.0 - 图16 IIIF 展示 API 3.0 - 图17 IIIF 展示 API 3.0 - 图18 IIIF 展示 API 3.0 - 图19
Manifest IIIF 展示 API 3.0 - 图20 IIIF 展示 API 3.0 - 图21 IIIF 展示 API 3.0 - 图22 IIIF 展示 API 3.0 - 图23 IIIF 展示 API 3.0 - 图24 IIIF 展示 API 3.0 - 图25 IIIF 展示 API 3.0 - 图26
Canvas IIIF 展示 API 3.0 - 图27 IIIF 展示 API 3.0 - 图28 IIIF 展示 API 3.0 - 图29 IIIF 展示 API 3.0 - 图30 IIIF 展示 API 3.0 - 图31 IIIF 展示 API 3.0 - 图32 IIIF 展示 API 3.0 - 图33
Annotation IIIF 展示 API 3.0 - 图34 IIIF 展示 API 3.0 - 图35 IIIF 展示 API 3.0 - 图36 IIIF 展示 API 3.0 - 图37 IIIF 展示 API 3.0 - 图38 IIIF 展示 API 3.0 - 图39 IIIF 展示 API 3.0 - 图40
AnnotationPage IIIF 展示 API 3.0 - 图41 IIIF 展示 API 3.0 - 图42 IIIF 展示 API 3.0 - 图43 IIIF 展示 API 3.0 - 图44 IIIF 展示 API 3.0 - 图45 IIIF 展示 API 3.0 - 图46 IIIF 展示 API 3.0 - 图47
Range IIIF 展示 API 3.0 - 图48 IIIF 展示 API 3.0 - 图49 IIIF 展示 API 3.0 - 图50 IIIF 展示 API 3.0 - 图51 IIIF 展示 API 3.0 - 图52 IIIF 展示 API 3.0 - 图53 IIIF 展示 API 3.0 - 图54
AnnotationCollection IIIF 展示 API 3.0 - 图55 IIIF 展示 API 3.0 - 图56 IIIF 展示 API 3.0 - 图57 IIIF 展示 API 3.0 - 图58 IIIF 展示 API 3.0 - 图59 IIIF 展示 API 3.0 - 图60 IIIF 展示 API 3.0 - 图61
Content Resources IIIF 展示 API 3.0 - 图62 IIIF 展示 API 3.0 - 图63 IIIF 展示 API 3.0 - 图64 IIIF 展示 API 3.0 - 图65 IIIF 展示 API 3.0 - 图66 IIIF 展示 API 3.0 - 图67 IIIF 展示 API 3.0 - 图68
provider thumbnail placeholderCanvas accompanyingCanvas
Collection IIIF 展示 API 3.0 - 图69 IIIF 展示 API 3.0 - 图70 IIIF 展示 API 3.0 - 图71 IIIF 展示 API 3.0 - 图72
Manifest IIIF 展示 API 3.0 - 图73 IIIF 展示 API 3.0 - 图74 IIIF 展示 API 3.0 - 图75 IIIF 展示 API 3.0 - 图76
Canvas IIIF 展示 API 3.0 - 图77 IIIF 展示 API 3.0 - 图78 IIIF 展示 API 3.0 - 图79* IIIF 展示 API 3.0 - 图80*
Annotation IIIF 展示 API 3.0 - 图81 IIIF 展示 API 3.0 - 图82 IIIF 展示 API 3.0 - 图83 IIIF 展示 API 3.0 - 图84
AnnotationPage IIIF 展示 API 3.0 - 图85 IIIF 展示 API 3.0 - 图86 IIIF 展示 API 3.0 - 图87 IIIF 展示 API 3.0 - 图88
Range IIIF 展示 API 3.0 - 图89 IIIF 展示 API 3.0 - 图90 IIIF 展示 API 3.0 - 图91 IIIF 展示 API 3.0 - 图92
AnnotationCollection IIIF 展示 API 3.0 - 图93 IIIF 展示 API 3.0 - 图94 IIIF 展示 API 3.0 - 图95 IIIF 展示 API 3.0 - 图96
Content Resources IIIF 展示 API 3.0 - 图97 IIIF 展示 API 3.0 - 图98 IIIF 展示 API 3.0 - 图99 IIIF 展示 API 3.0 - 图100

*作为 placeholderCanvas 或 accompanyingCanvas 属性值的 Canvas 本身可能没有这两个属性。

技术属性

id type format profile height width duration viewingDirection behavior timeMode
Collection IIIF 展示 API 3.0 - 图101 IIIF 展示 API 3.0 - 图102 IIIF 展示 API 3.0 - 图103 IIIF 展示 API 3.0 - 图104 IIIF 展示 API 3.0 - 图105 IIIF 展示 API 3.0 - 图106 IIIF 展示 API 3.0 - 图107 IIIF 展示 API 3.0 - 图108 IIIF 展示 API 3.0 - 图109 IIIF 展示 API 3.0 - 图110
Manifest IIIF 展示 API 3.0 - 图111 IIIF 展示 API 3.0 - 图112 IIIF 展示 API 3.0 - 图113 IIIF 展示 API 3.0 - 图114 IIIF 展示 API 3.0 - 图115 IIIF 展示 API 3.0 - 图116 IIIF 展示 API 3.0 - 图117 IIIF 展示 API 3.0 - 图118 IIIF 展示 API 3.0 - 图119 IIIF 展示 API 3.0 - 图120
Canvas IIIF 展示 API 3.0 - 图121 IIIF 展示 API 3.0 - 图122 IIIF 展示 API 3.0 - 图123 IIIF 展示 API 3.0 - 图124 IIIF 展示 API 3.0 - 图125* IIIF 展示 API 3.0 - 图126* IIIF 展示 API 3.0 - 图127 IIIF 展示 API 3.0 - 图128 IIIF 展示 API 3.0 - 图129 IIIF 展示 API 3.0 - 图130
Annotation IIIF 展示 API 3.0 - 图131 IIIF 展示 API 3.0 - 图132 IIIF 展示 API 3.0 - 图133 IIIF 展示 API 3.0 - 图134 IIIF 展示 API 3.0 - 图135 IIIF 展示 API 3.0 - 图136 IIIF 展示 API 3.0 - 图137 IIIF 展示 API 3.0 - 图138 IIIF 展示 API 3.0 - 图139 IIIF 展示 API 3.0 - 图140
Annotation Page IIIF 展示 API 3.0 - 图141 IIIF 展示 API 3.0 - 图142 IIIF 展示 API 3.0 - 图143 IIIF 展示 API 3.0 - 图144 IIIF 展示 API 3.0 - 图145 IIIF 展示 API 3.0 - 图146 IIIF 展示 API 3.0 - 图147 IIIF 展示 API 3.0 - 图148 IIIF 展示 API 3.0 - 图149 IIIF 展示 API 3.0 - 图150
Range IIIF 展示 API 3.0 - 图151 IIIF 展示 API 3.0 - 图152 IIIF 展示 API 3.0 - 图153 IIIF 展示 API 3.0 - 图154 IIIF 展示 API 3.0 - 图155 IIIF 展示 API 3.0 - 图156 IIIF 展示 API 3.0 - 图157 IIIF 展示 API 3.0 - 图158 IIIF 展示 API 3.0 - 图159 IIIF 展示 API 3.0 - 图160
Annotation Collection IIIF 展示 API 3.0 - 图161 IIIF 展示 API 3.0 - 图162 IIIF 展示 API 3.0 - 图163 IIIF 展示 API 3.0 - 图164 IIIF 展示 API 3.0 - 图165 IIIF 展示 API 3.0 - 图166 IIIF 展示 API 3.0 - 图167 IIIF 展示 API 3.0 - 图168 IIIF 展示 API 3.0 - 图169 IIIF 展示 API 3.0 - 图170
Content Resources IIIF 展示 API 3.0 - 图171 IIIF 展示 API 3.0 - 图172 IIIF 展示 API 3.0 - 图173 IIIF 展示 API 3.0 - 图174 IIIF 展示 API 3.0 - 图175 IIIF 展示 API 3.0 - 图176 IIIF 展示 API 3.0 - 图177 IIIF 展示 API 3.0 - 图178 IIIF 展示 API 3.0 - 图179 IIIF 展示 API 3.0 - 图180

如果 Canvas 有 height 和 width 中的一种,它 必须 有另一种,如这些属性的定义所述。
*Linking Properties

seeAlso service homepage rendering partOf start supplementary services
Collection IIIF 展示 API 3.0 - 图181 IIIF 展示 API 3.0 - 图182 IIIF 展示 API 3.0 - 图183 IIIF 展示 API 3.0 - 图184 IIIF 展示 API 3.0 - 图185 IIIF 展示 API 3.0 - 图186 IIIF 展示 API 3.0 - 图187 IIIF 展示 API 3.0 - 图188
Manifest IIIF 展示 API 3.0 - 图189 IIIF 展示 API 3.0 - 图190 IIIF 展示 API 3.0 - 图191 IIIF 展示 API 3.0 - 图192 IIIF 展示 API 3.0 - 图193 IIIF 展示 API 3.0 - 图194 IIIF 展示 API 3.0 - 图195 IIIF 展示 API 3.0 - 图196
Canvas IIIF 展示 API 3.0 - 图197 IIIF 展示 API 3.0 - 图198 IIIF 展示 API 3.0 - 图199 IIIF 展示 API 3.0 - 图200 IIIF 展示 API 3.0 - 图201 IIIF 展示 API 3.0 - 图202 IIIF 展示 API 3.0 - 图203 IIIF 展示 API 3.0 - 图204
Annotation IIIF 展示 API 3.0 - 图205 IIIF 展示 API 3.0 - 图206 IIIF 展示 API 3.0 - 图207 IIIF 展示 API 3.0 - 图208 IIIF 展示 API 3.0 - 图209 IIIF 展示 API 3.0 - 图210 IIIF 展示 API 3.0 - 图211 IIIF 展示 API 3.0 - 图212
Annotation Page IIIF 展示 API 3.0 - 图213 IIIF 展示 API 3.0 - 图214 IIIF 展示 API 3.0 - 图215 IIIF 展示 API 3.0 - 图216 IIIF 展示 API 3.0 - 图217 IIIF 展示 API 3.0 - 图218 IIIF 展示 API 3.0 - 图219 IIIF 展示 API 3.0 - 图220
Range IIIF 展示 API 3.0 - 图221 IIIF 展示 API 3.0 - 图222 IIIF 展示 API 3.0 - 图223 IIIF 展示 API 3.0 - 图224 IIIF 展示 API 3.0 - 图225 IIIF 展示 API 3.0 - 图226 IIIF 展示 API 3.0 - 图227 IIIF 展示 API 3.0 - 图228
Annotation Collection IIIF 展示 API 3.0 - 图229 IIIF 展示 API 3.0 - 图230 IIIF 展示 API 3.0 - 图231 IIIF 展示 API 3.0 - 图232 IIIF 展示 API 3.0 - 图233 IIIF 展示 API 3.0 - 图234 IIIF 展示 API 3.0 - 图235 IIIF 展示 API 3.0 - 图236
Content Resources IIIF 展示 API 3.0 - 图237 IIIF 展示 API 3.0 - 图238 IIIF 展示 API 3.0 - 图239 IIIF 展示 API 3.0 - 图240 IIIF 展示 API 3.0 - 图241 IIIF 展示 API 3.0 - 图242 IIIF 展示 API 3.0 - 图243 IIIF 展示 API 3.0 - 图244

结构属性

items structures annotations
Collection IIIF 展示 API 3.0 - 图245 IIIF 展示 API 3.0 - 图246 IIIF 展示 API 3.0 - 图247
Manifest IIIF 展示 API 3.0 - 图248 IIIF 展示 API 3.0 - 图249 IIIF 展示 API 3.0 - 图250
Canvas IIIF 展示 API 3.0 - 图251 IIIF 展示 API 3.0 - 图252 IIIF 展示 API 3.0 - 图253
Annotation IIIF 展示 API 3.0 - 图254 IIIF 展示 API 3.0 - 图255 IIIF 展示 API 3.0 - 图256
Annotation Page IIIF 展示 API 3.0 - 图257 IIIF 展示 API 3.0 - 图258 IIIF 展示 API 3.0 - 图259
Range IIIF 展示 API 3.0 - 图260 IIIF 展示 API 3.0 - 图261 IIIF 展示 API 3.0 - 图262
Annotation Collection IIIF 展示 API 3.0 - 图263 IIIF 展示 API 3.0 - 图264 IIIF 展示 API 3.0 - 图265
Content Resources IIIF 展示 API 3.0 - 图266 IIIF 展示 API 3.0 - 图267 IIIF 展示 API 3.0 - 图268

行为值

Collection Manifest Canvas Range
auto-advance IIIF 展示 API 3.0 - 图269 IIIF 展示 API 3.0 - 图270 IIIF 展示 API 3.0 - 图271 IIIF 展示 API 3.0 - 图272
continuous IIIF 展示 API 3.0 - 图273 IIIF 展示 API 3.0 - 图274 IIIF 展示 API 3.0 - 图275 IIIF 展示 API 3.0 - 图276
facing-pages IIIF 展示 API 3.0 - 图277 IIIF 展示 API 3.0 - 图278 IIIF 展示 API 3.0 - 图279 IIIF 展示 API 3.0 - 图280
individuals IIIF 展示 API 3.0 - 图281 IIIF 展示 API 3.0 - 图282 IIIF 展示 API 3.0 - 图283 IIIF 展示 API 3.0 - 图284
multi-part IIIF 展示 API 3.0 - 图285 IIIF 展示 API 3.0 - 图286 IIIF 展示 API 3.0 - 图287 IIIF 展示 API 3.0 - 图288
no-auto-advance IIIF 展示 API 3.0 - 图289 IIIF 展示 API 3.0 - 图290 IIIF 展示 API 3.0 - 图291 IIIF 展示 API 3.0 - 图292
no-nav IIIF 展示 API 3.0 - 图293 IIIF 展示 API 3.0 - 图294 IIIF 展示 API 3.0 - 图295 IIIF 展示 API 3.0 - 图296
no-repeat IIIF 展示 API 3.0 - 图297 IIIF 展示 API 3.0 - 图298 IIIF 展示 API 3.0 - 图299 IIIF 展示 API 3.0 - 图300
non-paged IIIF 展示 API 3.0 - 图301 IIIF 展示 API 3.0 - 图302 IIIF 展示 API 3.0 - 图303 IIIF 展示 API 3.0 - 图304
hidden * IIIF 展示 API 3.0 - 图305 IIIF 展示 API 3.0 - 图306 IIIF 展示 API 3.0 - 图307 IIIF 展示 API 3.0 - 图308
paged IIIF 展示 API 3.0 - 图309 IIIF 展示 API 3.0 - 图310 IIIF 展示 API 3.0 - 图311 IIIF 展示 API 3.0 - 图312
repeat IIIF 展示 API 3.0 - 图313 IIIF 展示 API 3.0 - 图314 IIIF 展示 API 3.0 - 图315 IIIF 展示 API 3.0 - 图316
sequence IIIF 展示 API 3.0 - 图317 IIIF 展示 API 3.0 - 图318 IIIF 展示 API 3.0 - 图319 IIIF 展示 API 3.0 - 图320
thumbnail-nav IIIF 展示 API 3.0 - 图321 IIIF 展示 API 3.0 - 图322 IIIF 展示 API 3.0 - 图323 IIIF 展示 API 3.0 - 图324
together IIIF 展示 API 3.0 - 图325 IIIF 展示 API 3.0 - 图326 IIIF 展示 API 3.0 - 图327 IIIF 展示 API 3.0 - 图328
unordered IIIF 展示 API 3.0 - 图329 IIIF 展示 API 3.0 - 图330 IIIF 展示 API 3.0 - 图331 IIIF 展示 API 3.0 - 图332
  • hidden 允许在 Annotation Collection,Annotation Page,Annotation,Specific Resource 和 Choice 上使用,因为这些是将内容呈现给用户的类。

    B. Manifest 响应示例

    1. {
    2. "@context": "http://iiif.io/api/presentation/3/context.json",
    3. "id": "https://example.org/iiif/book1/manifest",
    4. "type": "Manifest",
    5. "label": { "en": [ "Book 1" ] },
    6. "metadata": [
    7. {
    8. "label": { "en": [ "Author" ] },
    9. "value": { "none": [ "Anne Author" ] }
    10. },
    11. {
    12. "label": { "en": [ "Published" ] },
    13. "value": {
    14. "en": [ "Paris, circa 1400" ],
    15. "fr": [ "Paris, environ 1400" ]
    16. }
    17. },
    18. {
    19. "label": { "en": [ "Notes" ] },
    20. "value": {
    21. "en": [
    22. "Text of note 1",
    23. "Text of note 2"
    24. ]
    25. }
    26. },
    27. {
    28. "label": { "en": [ "Source" ] },
    29. "value": { "none": [ "<span>From: <a href=\"https://example.org/db/1.html\">Some Collection</a></span>" ] }
    30. }
    31. ],
    32. "summary": { "en": [ "Book 1, written be Anne Author, published in Paris around 1400." ] },
    33. "thumbnail": [
    34. {
    35. "id": "https://example.org/iiif/book1/page1/full/80,100/0/default.jpg",
    36. "type": "Image",
    37. "format": "image/jpeg",
    38. "service": [
    39. {
    40. "id": "https://example.org/iiif/book1/page1",
    41. "type": "ImageService3",
    42. "profile": "level1"
    43. }
    44. ]
    45. }
    46. ],
    47. "viewingDirection": "right-to-left",
    48. "behavior": [ "paged" ],
    49. "navDate": "1856-01-01T00:00:00Z",
    50. "rights": "https://creativecommons.org/licenses/by/4.0/",
    51. "requiredStatement": {
    52. "label": { "en": [ "Attribution" ] },
    53. "value": { "en": [ "Provided by Example Organization" ] }
    54. },
    55. "provider": [
    56. {
    57. "id": "https://example.org/about",
    58. "type": "Agent",
    59. "label": { "en": [ "Example Organization" ] },
    60. "homepage": [
    61. {
    62. "id": "https://example.org/",
    63. "type": "Text",
    64. "label": { "en": [ "Example Organization Homepage" ] },
    65. "format": "text/html"
    66. }
    67. ],
    68. "logo": [
    69. {
    70. "id": "https://example.org/service/inst1/full/max/0/default.png",
    71. "type": "Image",
    72. "format": "image/png",
    73. "service": [
    74. {
    75. "id": "https://example.org/service/inst1",
    76. "type": "ImageService3",
    77. "profile": "level2"
    78. }
    79. ]
    80. }
    81. ],
    82. "seeAlso": [
    83. {
    84. "id": "https://data.example.org/about/us.jsonld",
    85. "type": "Dataset",
    86. "format": "application/ld+json",
    87. "profile": "https://schema.org/"
    88. }
    89. ]
    90. }
    91. ],
    92. "homepage": [
    93. {
    94. "id": "https://example.org/info/book1/",
    95. "type": "Text",
    96. "label": { "en": [ "Home page for Book 1" ] },
    97. "format": "text/html"
    98. }
    99. ],
    100. "service": [
    101. {
    102. "id": "https://example.org/service/example",
    103. "type": "ExampleExtensionService",
    104. "profile": "https://example.org/docs/example-service.html"
    105. }
    106. ],
    107. "seeAlso": [
    108. {
    109. "id": "https://example.org/library/catalog/book1.xml",
    110. "type": "Dataset",
    111. "format": "text/xml",
    112. "profile": "https://example.org/profiles/bibliographic"
    113. }
    114. ],
    115. "rendering": [
    116. {
    117. "id": "https://example.org/iiif/book1.pdf",
    118. "type": "Text",
    119. "label": { "en": [ "Download as PDF" ] },
    120. "format": "application/pdf"
    121. }
    122. ],
    123. "partOf": [
    124. {
    125. "id": "https://example.org/collections/books/",
    126. "type": "Collection"
    127. }
    128. ],
    129. "start": {
    130. "id": "https://example.org/iiif/book1/canvas/p2",
    131. "type": "Canvas"
    132. },
    133. "services": [
    134. {
    135. "@id": "https://example.org/iiif/auth/login",
    136. "@type": "AuthCookieService1",
    137. "profile": "http://iiif.io/api/auth/1/login",
    138. "label": "Login to Example Institution",
    139. "service": [
    140. {
    141. "@id": "https://example.org/iiif/auth/token",
    142. "@type": "AuthTokenService1",
    143. "profile": "http://iiif.io/api/auth/1/token"
    144. }
    145. ]
    146. }
    147. ],
    148. "items": [
    149. {
    150. "id": "https://example.org/iiif/book1/canvas/p1",
    151. "type": "Canvas",
    152. "label": { "none": [ "p. 1" ] },
    153. "height": 1000,
    154. "width": 750,
    155. "items": [
    156. {
    157. "id": "https://example.org/iiif/book1/page/p1/1",
    158. "type": "AnnotationPage",
    159. "items": [
    160. {
    161. "id": "https://example.org/iiif/book1/annotation/p0001-image",
    162. "type": "Annotation",
    163. "motivation": "painting",
    164. "body": {
    165. "id": "https://example.org/iiif/book1/page1/full/max/0/default.jpg",
    166. "type": "Image",
    167. "format": "image/jpeg",
    168. "service": [
    169. {
    170. "id": "https://example.org/iiif/book1/page1",
    171. "type": "ImageService3",
    172. "profile": "level2",
    173. "service": [
    174. {
    175. "@id": "https://example.org/iiif/auth/login",
    176. "@type": "AuthCookieService1"
    177. }
    178. ]
    179. }
    180. ],
    181. "height": 2000,
    182. "width": 1500
    183. },
    184. "target": "https://example.org/iiif/book1/canvas/p1"
    185. }
    186. ]
    187. }
    188. ],
    189. "annotations": [
    190. {
    191. "id": "https://example.org/iiif/book1/comments/p1/1",
    192. "type": "AnnotationPage"
    193. }
    194. ]
    195. },
    196. {
    197. "id": "https://example.org/iiif/book1/canvas/p2",
    198. "type": "Canvas",
    199. "label": { "none": [ "p. 2" ] },
    200. "height": 1000,
    201. "width": 750,
    202. "items": [
    203. {
    204. "id": "https://example.org/iiif/book1/page/p2/1",
    205. "type": "AnnotationPage",
    206. "items": [
    207. {
    208. "id": "https://example.org/iiif/book1/annotation/p0002-image",
    209. "type": "Annotation",
    210. "motivation": "painting",
    211. "body": {
    212. "id": "https://example.org/iiif/book1/page2/full/max/0/default.jpg",
    213. "type": "Image",
    214. "format": "image/jpeg",
    215. "service": [
    216. {
    217. "id": "https://example.org/iiif/book1/page2",
    218. "type": "ImageService3",
    219. "profile": "level2"
    220. }
    221. ],
    222. "height": 2000,
    223. "width": 1500
    224. },
    225. "target": "https://example.org/iiif/book1/canvas/p2"
    226. }
    227. ]
    228. }
    229. ]
    230. }
    231. ],
    232. "structures": [
    233. {
    234. "id": "https://example.org/iiif/book1/range/r0",
    235. "type": "Range",
    236. "label": { "en": [ "Table of Contents" ] },
    237. "items": [
    238. {
    239. "id": "https://example.org/iiif/book1/range/r1",
    240. "type": "Range",
    241. "label": { "en": [ "Introduction" ] },
    242. "supplementary": {
    243. "id": "https://example.org/iiif/book1/annocoll/introTexts",
    244. "type": "AnnotationCollection"
    245. },
    246. "items": [
    247. {
    248. "id": "https://example.org/iiif/book1/canvas/p1",
    249. "type": "Canvas"
    250. },
    251. {
    252. "type": "SpecificResource",
    253. "source": "https://example.org/iiif/book1/canvas/p2",
    254. "selector": {
    255. "type": "FragmentSelector",
    256. "value": "xywh=0,0,750,300"
    257. }
    258. }
    259. ]
    260. }
    261. ]
    262. }
    263. ],
    264. "annotations": [
    265. {
    266. "id": "https://example.org/iiif/book1/page/manifest/1",
    267. "type": "AnnotationPage",
    268. "items": [
    269. {
    270. "id": "https://example.org/iiif/book1/page/manifest/a1",
    271. "type": "Annotation",
    272. "motivation": "commenting",
    273. "body": {
    274. "type": "TextualBody",
    275. "language": "en",
    276. "value": "I love this manifest!"
    277. },
    278. "target": "https://example.org/iiif/book1/manifest"
    279. }
    280. ]
    281. }
    282. ]
    283. }

    C. 版本管理

    从2.0版开始,本规范遵循语义版本管理。有关如何实现的详细信息,请参阅 API 版本管理说明。

    D. 致谢

    非常感谢 IIIF 社区成员的持续参与、创新想法和反馈。
    此版本中的许多更改都归功于IIIF AV 技术规范小组的工作,该小组由 Jason Ronallo(北卡罗莱纳州立大学)、Jon Dunn(印第安纳大学)和 Tom Crane(Digirati)担任主席。IIIF 社区感谢他们的领导,以及小组成员不知疲倦的工作。

    E. 更改日志

    | 日期 | 描述 | | —- | —- | | 2020-06-03 | Version 3.0 (Surfing Raven) 查看更改日志 | | 2017-06-09 | Version 2.1.1 查看更改日志 | | 2016-05-12 | Version 2.1 (Hinty McHintface) 查看更改日志 | | 2014-09-11 | Version 2.0 (Triumphant Giraffe) 查看更改日志 | | 2013-08-26 | Version 1.0 (未命名) | | 2013-06-14 | Version 0.9 (未命名) |