出版物清单

W3C 推荐标准

此版本:
https://www.w3.org/TR/2020/REC-pub-manifest-20201110/
最新发布版本:
https://www.w3.org/TR/pub-manifest/
最新编辑草案:
https://w3c.github.io/pub-manifest/
实现报告:
https://www.w3.org/publishing/groups/publ-wg/implementation/results.html
先前版本:
https://www.w3.org/TR/2020/PR-pub-manifest-20201001/
编辑:
Matt Garrish (DAISY 联盟)
Ivan Herman (W3C)
参与:
GitHub w3c/pub-manifest
提交错误报告
提交历史
拉取请求

请查看勘误,了解 发布以来报告的任何错误或问题。

另请参阅 翻译

本文档还提供以下非规范性格式:EPUB


摘要

本规范定义了一种通用清单格式,用于表达数字 出版物的信息。它使用 [schema.org] 元数据,并对其进行扩充以包括关于出版物的各种结构 属性,以 [json-ld11] 序列化,从而在适应需要 表达的信息差异的同时,实现出版格式之间的互操作性。

本文档状态

本节描述本文档在发布时的状态。其他文档 可能会取代本文档。当前 W3C 出版物列表以及本技术报告的最新修订版可在 W3C 技术 报告索引 https://www.w3.org/TR/ 中找到。

本文档由出版 工作组作为推荐标准发布。

关于本规范的讨论,首选使用 GitHub Issues。 或者,您也可以向我们的邮件列表发送评论。请发送至 public-publ-wg@w3.org归档)。

W3C 推荐标准是一种规范,它在经过 广泛的共识构建后,获得了 W3C 及其成员的认可。W3C 建议将本规范作为 Web 标准广泛部署。对此推荐标准的未来更新可能会合并新特性

本文档由一个依据 2017年8月1日 W3C 专利政策运作的小组制作。W3C 维护一份与该小组交付物相关的任何专利披露的公开列表; 该页面还包含披露专利的说明。实际知晓某项专利并认为该专利包含必要 权利要求的个人,必须根据 W3C 专利政策第 6 节披露相关信息。

本文档受 2020年9月15日 W3C 流程文档管辖。

1. 引言

1.1 范围

本规范定义了一种通用清单格式,用于描述出版物。它设计为可 适应特定出版领域的需求,例如有声书制作,方式是通过指定 一种用于创建专门化的模块化方法。

本规范还旨在便于不同的用户代理架构。虽然 预期传统 Web 用户代理(浏览器)能够使用出版物清单, 但这不应限制任何其他可能类型的用户代理的能力(例如应用程序, 无论是独立运行还是在用户代理中运行,甚至包括包含自身用户 界面的出版物)。

本规范未定义用户代理应如何呈现使用该 清单格式的出版物。

1.2 清单格式

本节为非规范性内容。

数字出版物由其清单描述,该清单提供一组使用 特定形状的 JSON-LD [json-ld11](一种用于链接数据的 JSON [ecma-404] 变体)表达的属性。

清单使用户代理能够理解数字 出版物边界以及其资源之间的连接。它包括描述 数字出版物的元数据,因为出版物具有超出其组成 资源之外的身份和性质。清单还提供属于 数字出版物的资源列表默认阅读顺序, 这是它将资源连接成一个连续作品的方式。

清单的属性描述用户代理处理和 呈现出版物所需的基本信息。为便于理解,这些属性分类如下:

描述性属性

描述性属性描述数字出版物的各个方面,例如其标题创建者语言

资源分类属性

资源分类属性描述或标识常见的资源集合,例如 资源列表默认 阅读顺序。这些属性引用一个或多个资源,例如 HTML 文档、图像、脚本和元数据记录。

清单还使用链接关系标识数字出版物的关键资源。这些 关系定义在rel 属性中,该属性属于 LinkedResource 对象(即 表示默认阅读顺序、资源列表和链接 各节中每个资源的 JSON 对象)。

这些关系标识的资源类型分类如下:

信息性资源

信息性资源是包含关于出版物的附加信息的资源, 例如其隐私政策无障碍报告预览

结构性资源

结构性资源是出版物的关键元结构,例如封面图像目录页列表

1.3 JSON-LD 创作和 处理

本规范将出版物清单定义为 [json-ld11] 的特定“形状”。 这意味着清单 SHOULD 仅使用本规范中定义的语法 构造来表达,而不是使用 JSON-LD 语法所提供的所有可能性。

此形状也通过 JSON schema [json-schema] 以非正式方式定义, 该 schema 表达了本规范中定义的约束。此 schema 维护在 https://www.w3.org/ns/pub-schema/manifest/

出版物清单还具有若干创作灵活性和紧凑的创作表达形式。 例如,并不总是要求显式创作对象类型,因为当其缺失时, 这些类型会在处理期间自动生成(更多信息见 § 4.2.4 显式对象和隐含对象)。清单数据的内部表示 单独定义;更多详情见 § A. 内部表示数据模型

因此,用户代理不必是完整的 JSON-LD 处理器。用户代理只需要 能够读取清单的特定形状并将数据内部化。

1.4 与 Schema.org 的关系

本节为非规范性内容。

清单属性,特别是分类为描述性 属性的那些,主要来自 Schema.org 及其托管扩展 [schema.org]。 因此,这些属性继承其来自 Schema.org 的语法和语义,从而使清单 创作与 Schema.org 创作兼容。

当清单项对应于 Schema.org 属性时,其属性 定义会标识其映射,并在括号中包含定义类型(例如 CreativeWorkBook)。

Schema.org 还包括许多属性,这些属性虽然与出版相关,但 未在本规范中提及。由于本文档只定义最小的清单项集合 (见 § 4.7.3.2 附加清单属性),因此这些属性可用于清单。

使用附加 Schema.org 属性时,请确保它们对清单中指定的出版物类型有效。由于该词汇表使用的 继承模型,属性通常可用于许多 Schema.org 类型,但并非所有属性都适用于所有类型。 有关哪些类型接受哪些属性的更详细信息,请参阅 [schema.org]。

关于使用附加 Schema.org 属性的更多信息,也可见 § 4.5 出版物 类型§ 4.7.3.2 附加清单属性

2. 术语

本规范依赖于 Infra Standard [infra]。

边界

数字出版物由表示其内容的有限资源集合 组成。此范围称为其边界,并在其清单中定义,如 § 5. 出版物资源所述。

数字出版物

数字出版物是以使用清单配置文件的格式创作的任何出版物。

内部表示

清单的内部表示是用户代理在处理清单并移除所有可能的歧义 以及合并可从其他来源推断出的任何缺失值时创建的数据结构。

如果不存在歧义或缺失信息,则清单中表达的信息可能等同于 用户代理创建的内部表示。

清单

清单表示关于出版物的结构化信息,例如信息性元数据、 资源列表默认 阅读顺序

配置文件

配置文件是使用本规范中定义的清单格式 来描述其边界和内容的出版格式(例如有声书)。这些格式可以 使用配置文件特定术语和/或新要求来扩展本规范中的核心定义。

尽管配置文件在其结构和内容要求上可能有所不同,但此类差异会 受到限制,以在不同格式之间保持高度可预测性。(见 § 8. 模块化 扩展。)

3. 一致性

除标记为非规范性的章节外,本规范中的所有创作指南、图表、示例和注释 均为非规范性内容。本规范中的其他所有内容均为规范性内容。

本文档中的关键词 MAYMUSTMUST NOTOPTIONALRECOMMENDEDREQUIREDSHOULDSHOULD NOT 应按 BCP 14 [RFC2119] [RFC8174] 中所述进行解释,且 仅当它们以此处所示的全大写形式出现时才如此。

所有算法说明均为信息性内容。

4. 出版物清单

4.1 要求

清单中 MUST 设置以下属性:

以下属性为 RECOMMENDED

所有其他属性资源关系的优先级为 OPTIONAL,但 MAY 由清单格式的实现修改。

某些属性是隐式必需的,因为当未显式创作时,它们会从其他 信息编译而来。更多信息见 § A. 内部表示数据模型

4.2 值类别

本节描述可用于出版物 清单属性的值类别。

4.2.1 字面量

清单属性期望以字面文本字符串——即 不依赖语言的值,例如代码值或日期——作为其值时,该值 MUST 表达为 [json] 字符串

字面量值在清单处理期间不会被更改, 不同于其他可能会例如被转换为对象的值。

4.2.2 数字

清单属性期望以数字作为其值时,该 值 MUST 表达为 [json] 数字

4.2.3 布尔值

清单属性期望以布尔值作为其值时,该 值 MUST 表达为 [ecmascript布尔值truefalse)。

4.2.4 显式对象和隐含 对象

各种清单属性预期表达为 [json对象。虽然通常建议使用显式 对象,但以下各节 标识了也可以使用字符串值的情况。这些字符串会在 用户代理处理清单期间自动 转换为对象(文本值到对象的确切映射包含在每个定义中)。

4.2.4.1 可本地化字符串

清单属性期望以可本地化文本字符串 作为其值时,该值 MUST 表达为以下之一:

单个字符串值表示一个隐含对象,其 value 属性是 该字符串的文本,其语言和基本方向由清单中的其他信息确定。

由于可本地化字符串旨在便于一个 值的多语言表示,因此接受可本地化字符串的属性始终接受这些值的数组。 因此,虽然只需创作单个字符串或对象,但为了处理的一致性,此类值会 转换为数组

LocalizableString 是一个 [json对象,由 以下属性组成:

术语 描述 必需值 值类别 [schema.org] 映射
value 可本地化字符串的值。REQUIRED 文本。 字面量 (无)
language 值的语言。OPTIONAL 一个格式良好的语言 标签 [bcp47]。 字面量 (无)
direction 值的基本方向。OPTIONAL ltrrtl 字面量 (无)

基本方向值的含义为:

  • ltr:表示文本值被显式定向设置为 从左到右文本。
  • rtl:表示文本值被显式定向设置为 从右到左文本。

缺失基本方向值意味着文本值会被显式定向 设置为第一个具有强方向性的字符的方向,遵循 Unicode 双向算法 [bidi] 的规则。

如果在最后一个示例中未设置基本方向值,则由于 字符串开头存在拉丁字符,文本将按照 Unicode 双向算法 [bidi] 显示为:

HTML היא שפת סימון.

但是,这将是不正确的。额外的 direction 值 对于控制显示以产生以下结果是必需的:

HTML היא שפת סימון.

请注意,示例中的 value 字段表示文本在 内存中的存储方式,因此它与此处描绘的两种渲染之间存在差异。 文本编辑器也可能以不同方式显示 JSON 值(例如,仅使用 Unicode 双向算法)。

另请参阅 [string-meta] 文档以获取进一步说明和示例。

4.2.4.2 实体

清单属性期望以实体(即 负责创作各个方面的个人或组织)作为其值时,该值 MUST 表达为以下之一:

单个字符串值表示 Entity 对象的一个实例,其 name 属性是该字符串的文本,其 type 被假定 为 Person [schema.org]。

Entity 被定义为 [schema.org] PersonOrganization 类型的一个实例,具有以下 最小属性集:

术语 描述 必需值 值类别 [schema.org] 映射
type 实体的类型。OPTIONAL 一个或多个 Text。序列 MUST 包含 "Person" 或 "Organization"。 数组,由字面量组成 (无)
name 实体名称。REQUIRED 一个或多个 Text。 数组,由可本地化 字符串组成 name
id 与实体关联的规范标识符。OPTIONAL URL 记录 [url]。 标识符 (无)
url 与实体关联的地址。OPTIONAL 有效的 URL 字符串 [url]。 URL url
identifier 与实体关联的标识符(例如 ORCID)。OPTIONAL 一个或多个 Text。 数组,由字面量组成 identifier

此最小属性集不是限制性的。作者可以根据需要包含为 [schema.org] PersonOrganization 类型定义的任何 附加属性。用户代理同样不限于仅解释前述 属性。

4.2.4.3 链接资源

当清单属性链接到一个或多个资源时,它 MUST 表达为以下之一:

  1. 一个 [json] 字符串,编码资源的 URL; 或
  2. 一个 LinkedResource 的实例。

字符串值表示一个隐含的 LinkedResource 对象,其 url 属性设置为该字符串值。

LinkedResource 对象定义如下:

术语 描述 必需值 值类别 [schema.org] 映射
type 资源的类型。OPTIONAL 一个或多个 Text。序列 MUST 包含 "LinkedResource"。 数组,由字面量组成 (无)
url 资源的位置。REQUIRED 有效的 URL 字符串 [url]。请参阅 接受此类型的属性定义,以了解附加限制。 URL url
encodingFormat 资源的媒体类型(例如 text/html)。OPTIONAL MIME 媒体类型 [rfc2046]。 字面量 encodingFormat
name 项目名称。OPTIONAL 一个或多个 Text。 数组,由可本地化 字符串组成 name
description 项目描述。OPTIONAL 一个或多个 Text。 数组,由可本地化 字符串组成 description
rel 资源与出版物之间的关系。OPTIONAL

一个或多个关系

关键词是 ASCII 大小写不敏感的 [infra],并且 MUST 按 此方式比较。

数组,由字面量组成 (无)
integrity 资源的密码学哈希,可用于验证其完整性。 OPTIONAL

一个或多个以空白分隔的完整性 元数据集合 [sri]。该 值 MUST 符合元数据 定义 [sri]。

请参阅 [sri],了解用户代理预期 支持的密码学哈希函数列表

字面量 (无)
duration 基于时间的媒体资源的总时长。OPTIONAL 由 [iso8601-1] 定义的时长值。 字面量 durationProperty
alternate

对资源在替代格式中的一个或多个重述的引用,其中 encodingFormat 指定该重述的格式。 OPTIONAL

以下一项或多项:

  • 一个字符串,表示替代格式中资源重述的 URL;或
  • 一个 LinkedResource 对象的实例

字符串值表示一个隐含的 LinkedResource 对象,其 url 属性设置为该字符串值。

数组,由链接 资源组成 (无)

虽然用户代理对 integrity 属性的支持为 OPTIONAL,但支持使用此 属性进行密码学哈希比较的用户代理 MUST 按照 [sri] 执行。

本规范仅定义用于从替代格式中选择的 alternate 属性 (即基于 encodingFormat 或通过检查 URL)。配置文件 MAY 扩展此行为,以允许基于其他 标准进行选择。选择替代资源的过程见 § B. 选择替代资源

定义 LinkedResource 对象时,建议始终 使用 encodingFormat 属性指定资源的媒体类型。 这样做可使用户代理更容易确定资源的可用性。

示例 4 :带有其内容 SHA-256 哈希的资源。
{
    "type"           : "LinkedResource",
    "url"            : "chapter1.html",
    "encodingFormat" : "text/html",
    "name"           : "Chapter 1 - Loomings",
    "integrity"      : "sha256-13AE04E21177BABEDFDE721577615A638341F963731EA936BBB8C3862F57CDFC"
}
示例 5 :带有其替代格式的资源。
{
    "type"           : "LinkedResource",
    "url"            : "chapter1.mp3",
    "encodingFormat" : "audio/mpeg",
    "name"           : "Chapter 1 - Loomings",
    "alternate"      : [
        "chapter1.html",
        {
            "type": "LinkedResource",
            "url": "chapter1.json",
            "encodingFormat": "application/vnd.syncnarr+json",
            "duration": "PT1669S"
        }
    ]
}
4.2.4.4 对象

当清单属性期望某种对象类型,而该对象类型未在本节中定义,也未由配置文件定义时,它 MUST 表达 为 [json] 对象(即,该属性的值 不会被处理以创建对象)。

4.2.5 URL

URL 用于标识 与数字出版物关联的资源。当属性期望 URL 值时,它 MUST 是一个有效的 URL 字符串 [url]。

对于相对 URL 字符串,它们会使用基 URL [url] 解析为绝对 URL 字符串

用于相对 URL 字符串的 基 URL 按如下方式确定:

因此,嵌入式清单中的相对 URL 字符串会根据引用该清单的 文档的 URL 解析,除非该文档声明了基 URL(即在其头部中使用 <base> 元素)。

4.2.6 标识符

标识符用于以持久且无歧义的方式指代数字出版物以及 负责其创作的实体URLURNDOIISBNPURL 都是出版中经常使用的持久 标识符示例。

标识符 MUST 表达为URL 记录 [url]

4.2.7 数组

清单属性允许一个或多个相应类型的值 (例如字面量对象URL)时,这些值会 表达为 [json] 数组。不过,当 属性值为单个元素时,数组语法 MAY 被 省略。

4.3 清单上下文

清单 MUST 使用以下两个组成部分按指定顺序设置其 JSON-LD 上下文 [json-ld11]:

  1. [schema.org] 上下文:https://schema.org
  2. 出版物上下文https://www.w3.org/ns/pub-context

虽然 Schema.org 通常使用 http URI 方案引用,但该词汇表正在迁移为默认使用安全的 https 方案。因此,在出版物清单上下文中只识别 https 方案。

示例 8 :设置上下文声明。
{
    "@context" : [
        "https://schema.org",
        "https://www.w3.org/ns/pub-context"
    ],
    …
}

出版物上下文文档会向 Schema.org 中定义的属性添加特性(例如, 要求 creator 属性保持顺序)。

本规范的配置文件 MAY 要求额外的上下文 URL,但这些 URL MUST 排在这两个组成部分之后。

可通过在出版物上下文之后的对象中包含额外参数来扩展上下文, 例如全局语言和方向声明

{
    "@context" : [
        "https://schema.org",
        "https://www.w3.org/ns/pub-context",
        {
            "language" : "es"
        }
    ],
    …
}

4.4 清单语言和 方向

清单中的每个自然语言属性值(例如 titlecreators)都有默认的自然语言,即它所使用的语言(例如英语、 法语、中文)。它还具有书写时使用的自然基本方向—— 即显示方向,从左到右或从右到左。

数字出版物清单提供了将这两个概念全局设置以及在单个项目上设置的能力,以帮助用户代理解释和 呈现元数据。

设置基本方向的能力是 JSON-LD 1.1 [json-ld11] 的特性。换句话说,Publication Manifest 依赖于 JSON-LD 规范的该版本(而不是更早的 1.0 [json-ld10] 版本)。

4.4.1 全局声明

自然语言清单属性的全局语言和基本方向声明会在上下文中使用 languagedirection 关键词 [json-ld11] 分别设置。这些 值用于在清单处理期间将简单字符串值扩展为可本地化 字符串,也用于为省略语言或基本方向的可本地化 字符串提供语言和基本方向。

language 的值 MUST 是一个格式良好的语言 标签 [bcp47]。

direction 的值 MUST 是以下值之一:

  • "ltr":表示文本值被显式定向设置为 从左到右文本。
  • "rtl":表示文本值被显式定向设置为 从右到左文本。

全局语言和基本方向声明在存在时 MUST 跟随出版物上下文

未为全局语言或基本方向指定默认值。

4.4.2 特定项目 声明

可以使用可本地化字符串,为清单中的任何自然语言值 局部设置语言或基本方向:

languagedirection 关键词 [json-ld11] 的可能值与全局声明相同。此外,这两个值也可以是 null 的(JSON)值,表示分别没有设置显式语言或 方向。

如果某个值(例如组织名称)通常在没有任何关联语言的情况下使用 (例如“Google”),则将 language 的值设置为 null 会很有用。

语言或基本方向的局部声明优先于全局声明

4.5 出版物类型

数字出版物的 清单使用 type 关键词 [json-ld11] 定义其出版物 类型。该类型 MAY 映射到 任何 [schema.org] 类型,但如果未指定类型,则CreativeWork 会被假定为默认值

示例 14 :将出版物的类型设置为 CreativeWork。
{
    "@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
    "type"     : "CreativeWork",
    …
}

可使用 CreativeWork 的更具体子类型,例如 ArticleBookTechArticleCourse,来代替 CreativeWork,或与其同时使用。

示例 15 :将出版物的类型设置为 Book。
{
    "@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
    "type"     : "Book",
    …
}

每个 Schema.org 类型都会定义一组可与其一起使用的有效属性。为确保 清单可由感知 Schema.org 的处理器验证和处理,清单 SHOULD 只包含与所选类型关联的属性。

如果需要来自多个类型的属性,清单 MAY 包含 多个类型声明。

示例 16 :为结合了 Book 和 VisualArtwork 属性的出版物设置 type 属性。
{
    "@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
    "type"     : ["Book", "VisualArtwork"],
    …
}

用户代理 SHOULD NOT 因清单对其声明的 Schema.org 类型无效而处理失败。

请参阅 Schema.org 网站,获取 CreativeWork 子类型的完整列表

4.6 配置文件一致性

数字出版物使用 conformsTo 属性指明其清单和内容所符合的配置文件

术语 描述 必需值 值类别 [dcterms] 映射
conformsTo 配置文件的 URL。 一个带片段的绝对 URL 字符串 [url]。 数组,由字面量组成 conformsTo

用于配置文件的 URL 在其各自的规范中定义。

conformsTo 属性也可用于指示符合其他 规范和标准(例如 [wcag21])。

示例 17 :标识数字出版物符合 W3C 有声书 规范。
{
    …
    "conformsTo" : "https://www.w3.org/TR/audiobooks/",
    …
}

4.7 属性

4.7.1 描述性属性

4.7.1.1 删节版

abridged 属性提供关于数字出版物是否已从 其原始形式缩短的信息。

术语 描述 必需值 值类别 [schema.org] 映射
abridged 指示该图书是否为删节版。 truefalse 布尔值 abridgedBook
示例 18 :设置出版物为删节版。
{
    …
    "abridged" : true,
    …
}
4.7.1.2 无障碍

无障碍属性提供关于数字出版物是否适合具有不同首选阅读方式的用户 使用的信息。这些属性通常补充 针对既定无障碍标准的评估,例如 [wcag21] 中提供的标准。

以下属性归类为无障碍属性:

术语 描述 必需值 值类别 [schema.org] 映射
accessMode 人可以通过其处理或感知信息的人类感觉感知系统 或认知能力。 一个或多个 Text。 数组,由字面量组成 accessModeCreativeWork
accessModeSufficient 足以理解资源全部智力内容的单一或组合访问模式列表。 一个或多个 ItemList 数组,由对象组成 accessModeSufficientCreativeWork
accessibilityFeature 资源的内容特性,例如无障碍媒体、替代内容以及 支持无障碍的增强功能。 一个或多个 Text。 数组,由字面量组成 accessibilityFeatureCreativeWork
accessibilityHazard 所描述资源中对某些用户在生理上有危险的特征。 一个或多个 Text。 数组,由字面量组成 accessibilityHazardCreativeWork
accessibilitySummary 特定无障碍特性或缺陷的人类可读摘要, 与其他无障碍元数据保持一致。 Text。 数组,由可本地化 字符串组成 accessibilitySummaryCreativeWork

这些属性的详细描述,包括与其一起使用的预期值, 可在 [webschemas-a11y] 中获得。

如果需要的信息多于这些属性所能表达的内容,也可以提供对详细无障碍 报告的引用。

示例 19 :为出版物设置无障碍元数据,该出版物 为每个图像提供适当的替代文本和长描述,使其能够 以纯文本形式阅读。
{
    …
    "accessMode"              : ["textual", "visual"],
    "accessibilityFeature"    : ["alternativeText", "longDescription"]
    "accessModeSufficient"    : [
        {
            "type"            : "ItemList",
            "itemListElement" : ["textual", "visual"]
        },
        {
            "type"            : "ItemList",
            "itemListElement" : ["textual"]
        }
    ],
    …
}
4.7.1.3 地址

地址是一个URL,用于标识数字出版物的源位置。 它使用 url 属性表达。

术语 描述 必需值 值类别 [schema.org] 映射
url 出版物的 URL。 有效的 URL 字符串 [url]。 数组,由URL组成 urlThing

数字出版物 MAY 具有多个地址,但所有 地址 MUST 解析为同一文档。

出版物的地址也可以用作 identifier 链接 关系 [link-relation] 的值。
示例 20 :设置出版物的地址。
{
    …
    "url" : "https://publisher.example.org/frankenstein",
    …
}
4.7.1.4 规范标识符

数字出版物的 规范标识符属性为数字出版物提供唯一 标识符。 它使用 id 属性表达。

术语 描述 必需值 值类别 [schema.org] 映射
id 出版物的首选版本。 URL 记录 [url]。 标识符 (无)

确保规范标识符唯一性不在本 规范范围内。实际可达到的唯一性取决于诸如所用标识符方案的约定 以及对标识符分配的控制程度等因素。

如果清单中未提供规范标识符,或者该值是无效 URL, 则数字出版物没有规范标识符。用户代理 MUST NOT 尝试从清单中提供的任何其他 标识符构造规范标识符。

规范标识符的指定 MAY 通过 使用 identifier 属性 [schema.org] 和/或其子类型包含其他类型的标识符来补充。

示例 21 :将规范标识符和地址设置为 URL。
{
    …
    "id"  : "http://www.w3.org/TR/tabular-data-model/",
    "url" : "http://www.w3.org/TR/2015/REC-tabular-data-model-20151217/",
    …
}
示例 22 :使用 URN 作为规范标识符。
{
    …
    "id"  : "urn:isbn:9780123456789",
    "url" : "https://publisher.example.org/wuthering-heights",
    …
}
4.7.1.5 创建者

创建者是负责 创作数字出版物的个人或组织。

以下属性归类为创建者:

术语 描述 必需值 值类别 [schema.org] 映射
artist 出版物的主要艺术家,媒介不是铅笔或 数字线稿。 一个或多个 Person 数组,由实体组成 artistVisualArtwork
author 出版物的作者。 一个或多个 Person 和/或 Organization 数组,由实体组成 authorCreativeWork
colorist 为已描墨图画上色的个人。 一个或多个 Person 数组,由实体组成 coloristVisualArtwork
contributor 其角色不适合本表其他角色之一的贡献者。 一个或多个 Person 和/或 Organization 数组,由实体组成 contributorCreativeWork
creator

出版物的创建者。

使用此属性可能导致用户代理中的结果不一致。它在 [schema.org] 中被标记为 author 的同义词,但没有关于 哪一个优先或如何组合它们的指导。建议只使用 其中之一,并优先使用更具体的 author 属性。

一个或多个 Person 和/或 Organization 数组,由实体组成 creatorCreativeWork
editor 出版物的编辑。 一个或多个 Person 数组,由实体组成 editorCreativeWork
illustrator 出版物的插画师。 一个或多个 Person 数组,由实体组成 illustratorBook
inker 用墨水描摹铅笔画的个人。 一个或多个 Person 数组,由实体组成 inkerVisualArtwork
letterer 向美术作品添加文字,包括对话气泡和音效的个人。 一个或多个 Person 数组,由实体组成 lettererVisualArtwork
penciler 绘制主要叙事美术作品的个人。 一个或多个 Person 数组,由实体组成 pencilerVisualArtwork
publisher 出版物的出版者。 一个或多个 Person 和/或 Organization 数组,由实体组成 publisherCreativeWork
readBy 朗读(表演)出版物的人(用于有声书)。 一个或多个 Person 数组,由实体组成 readByAudiobook
translator 出版物的译者。 一个或多个 Person 和/或 Organization 数组,由实体组成 translatorCreativeWork

创建者 MUST 表示为以下之一:

  1. 一个 [json] 字符串,编码某个 Person [schema.org] 的名称;或
  2. PersonOrganization [schema.org] 的实例。

单个字符串值是 [schema.org] Person 的简写,其 name 属性设置为该字符串值。(另见 § 4.2.4.2 实体。)

清单 MAY 包含每种类型的多个创建者。

示例 23 :设置图书的作者。
{
    …
    "url"      : "https://publisher.example.org/alice-in-wonderland",
    "author"   : {
        "type"  : "Person",
        "name"  : "Lewis Carroll"
    }
}
示例 24 :分离编辑、作者和出版者。部分人员 以简单字符串而不是对象表达。
{
    …
    "author"     : [
        "Jeni Tennison",
        {
            "type"       : "Person",
            "name"       : "Gregg Kellogg",
        },
        {
            "type"       : "Person",
            "name"       : "Ivan Herman",
            "id"         : "https://www.w3.org/People/Ivan/"
            "identifier" : "0000-0003-0782-2704",
        }
    ],
    "editor"    : [
        "Jeni Tennison",
        {
            "type" : "Person",
            "name" : "Gregg Kellogg",
        }
    ],
    "publisher" : {
        "type" : "Organization",
        "name" : "World Wide Web Consortium",
        "id"   : "https://www.w3.org/"
    }
    …
}
4.7.1.6 时长

全局时长表示 基于时间的 数字出版物的总长度(例如有声书,或 由一系列视频剪辑组成的图书)。它使用 duration 属性表达。

术语 描述 必需值 值类别 [schema.org] 映射
duration 基于时间的出版物的总时长。 由 [iso8601-1] 定义的时长值。 字面量 durationProperty
示例 25 :以秒为单位设置全局时长。
{
    …
    "type"     : "Audiobook",
    "id"       : "https://example.org/flatland-a-romance-of-many-dimensions/",
    "url"      : "https://w3c.github.io/pub-manifest/experiments/audiobook/",
    "name"     : "Flatland: A Romance of Many Dimensions",
    …
    "duration" : "PT15153S",
    …
}

相关 Wikipedia 页面对 ISO 时长语法给出了简要描述。

4.7.1.7 最后修改 日期

最后修改日期数字出版物最后更新的日期(即 最近一次对出版物的任何资源做出更改的时间,包括清单)。它使用 dateModified 属性表达。

术语 描述 必需值 值类别 [schema.org] 映射
dateModified 出版物的最后修改日期。 DateDateTime 值 [schema.org],二者分别 以 ISO 8601 日期或日期时间格式表达 [iso8601-1]。 字面量 dateModifiedCreativeWork

最后修改日期不一定反映出版物的所有更改(例如, 如果某种数字出版物格式允许引用第三方内容)。用户代理 SHOULD 检查各个资源的最后修改日期,以 确定它们是否已更改并需要更新。

示例 26 :设置出版物的最后修改日期。
{
    …
    "dateModified" : "2015-12-17",
    …
}
4.7.1.8 发布日期

发布日期数字出版物最初 发布的日期。它表示出版物生命周期中的一个静态事件,并允许 后续修订被识别和比较。它使用 datePublished 属性表达。

术语 描述 必需值 值类别 [schema.org] 映射
datePublished 出版物的创建日期。 DateDateTime,二者分别表达 为 ISO 8601 日期或日期时间格式 [iso8601-1]。 字面量 datePublishedCreativeWork

确切的发布时间有意留待解释:它可以是 出版物首次可用的时间,也可以是发布前的某个时间点, 即出版物被认为已定稿的时间。

示例 27 :设置出版物的创建日期和修改日期。
{
    …
    "datePublished" : "2015-12-17",
    "dateModified"  : "2016-01-30",
    …
}
4.7.1.9 出版物语言

数字出版物至少有一种 自然语言,即内容所表达使用的语言(例如英语、 法语、中文)。清单包含以下属性来设置此概念,该概念 可影响例如用户代理的行为(例如预加载词典或 文本转语音引擎)。

术语 描述 必需值 值类别 [schema.org] 映射
inLanguage 出版物的默认语言 一个或多个格式良好的 语言标签 [bcp47]。 数组,由字面量组成 inLanguageProperty

自然语言 MUST 是一个格式良好的语言标签  [bcp47]。

如果用户代理需要出版物语言,而清单中没有该语言,或者 获得的值不是格式良好的 [bcp47],则用户代理 MAY生成其内部表示时尝试确定出版物语言。本 规范不强制规定如何创建此类语言标签。用户代理可以:

如果用户代理需要出版物的主要语言,并且指定了多种语言, 则 inLanguage 数组中的第一个条目 MUST 被 识别为主要语言。

区分出版物的语言与构成它的各个资源的 语言很重要。例如,如果这些资源是 HTML,则也需要在这些资源中设置语言。 出版物的语言不会被继承。

4.7.1.10 阅读 推进方向

阅读推进方向建立在数字 出版物内从一个资源到下一个资源的 阅读方向。它用于适配出版物级别交互,例如 菜单位置、触摸手势、交换方向以及下一页和上一页的点击区域。 阅读推进使用 readingDirection 属性表达。

术语 描述 必需值 值类别 [schema.org] 映射
readingProgression 从一个资源到另一个资源的阅读推进方向。 以下之一:ltrrtl 字面量 (无)

此属性的值 MUST 是以下之一:

  • ltr:从左到右;或
  • rtl:从右到左。

默认值为 ltr。如果未设置 readingProgression, 用户代理在生成其内部表示MUST 使用默认值。

此属性对单个主要资源的渲染没有影响;它 只与从一个资源到另一个资源的推进方向相关。

示例 28 :将阅读推进显式设置为 ltr (从左到右)。
{
    …
    "readingProgression" : "ltr",
    …
}
4.7.1.11 标题

标题提供数字 出版物的人类可读名称。它使用 name 属性表达。

术语 描述 必需值 值类别 [schema.org] 映射
name 出版物的人类可读标题。 一个或多个 Text。 数组,由可本地化 字符串组成 nameThing

如果清单中未包含标题,用户代理 MUST 创建一个。获取标题的过程定义于 § 7.4.3 添加 默认值

当未指定标题时,不期望用户代理为 出版物生成有意义的标题 [wcag21]。

示例 29 :显式设置图书的标题。
{
    …
    "name" : "Heart of Darkness",
    …
}

4.7.2 资源 分类属性

出版物资源通过默认 阅读顺序资源列表链接指定,如 本节所定义。这些列表包含对信息性 资源的引用,例如隐私政策,以及结构性资源,例如目录

无需在这些列表中的任何一个中包含对清单的引用。

4.7.2.1 默认阅读顺序

默认阅读顺序是穿过一组数字出版物 资源的特定推进路径。用户可能沿替代路径浏览内容,但在没有 此类交互的情况下,默认阅读顺序定义从一个 资源到下一个资源的预期推进。

默认阅读顺序使用 readingOrder 属性表达。

术语 描述 必需值 值类别 [schema.org] 映射
readingOrder 穿过数字出版物资源的推进顺序。

一个或多个 LinkedResource

数组,由链接 资源组成 (无)

readingOrder 属性的每个元素 MUST 表达为:

单个字符串值表示 LinkedResource 对象的一个实例,其 url 属性是该字符串的文本。

项目的顺序具有意义

阅读顺序中表达的 URL MAY 包含片段标识符,尽管本规范的配置文件 MAY 限制其使用,以及支持哪些 方案和特性。片段标识符应按其各自规范的定义解释(例如,要将用户移动到的起始位置, 或在移动到阅读顺序中的下一个项目之前要渲染的内容范围)。

资源 SHOULD NOT 在阅读顺序中列出多次, 因为这可能导致用户代理中出现意外结果(例如,指向该资源的链接可能无法 解析为阅读顺序中的正确实例)。

数字出版物仅由链接到清单的资源组成时, 默认阅读顺序 MAY 被省略。当默认阅读 顺序不存在时,用户代理在编译内部 表示MUST 包含链接资源的条目。更多信息见 § 7.4.3 添加默认值

默认阅读顺序在清单处理之后 MUST 至少包含一个资源。

示例 30 :将阅读顺序表达为简单的 URL 列表。
{
    …
    "readingOrder" : [
        "html/title.html",
        "html/copyright.html",
        "html/introduction.html",
        "html/epigraph.html",
        "html/c001.html",
        …
    ],
    …
}
示例 31 :将阅读顺序表达为 LinkedResource 对象,以 提供更多信息。
{
    …
    "readingOrder" : [
        {
            "type"           : "LinkedResource",
            "url"            : "html/title.html",
            "encodingFormat" : "text/html",
            "name"           : "Title page"
        },
        {
            "type"           : "LinkedResource",
            "url"            : "html/copyright.html",
            "encodingFormat" : "text/html",
            "name"           : "Copyright page"
        },
        …
    ],
    …
}
4.7.2.2 资源列表

资源列表枚举在数字出版物的 处理或渲染中使用、但尚未列在默认阅读顺序中的任何附加资源。 它使用 resources 属性表达。

术语 描述 必需值 值类别 [schema.org] 映射
resources 出版物处理或渲染中使用的附加出版物资源列表。

一个或多个 LinkedResource

数组,由链接 资源组成 (无)

resources 属性的每个元素 MUST 表达为以下之一:

单个字符串值表示 LinkedResource 对象的一个实例,其 url 属性是该字符串的文本。

项目的顺序不具有意义

为避免有关资源的信息发生冲突,特定资源的 URL SHOULD NOT 在资源列表中重复。

资源列表中表达的 URL SHOULD NOT 包含片段标识符。

资源列表的完整性可能影响数字出版物在某些阅读场景中的可用性 (例如离线阅读能力)。因此,强烈建议提供出版物所有组成 资源的完整列表,超出默认阅读顺序中列出的那些资源。

在某些情况下,可能不容易获得这些资源的完整列表(例如, 从其源代码深处引用资源的第三方脚本),但即使其中一些 资源未被标识为属于出版物,用户代理 SHOULD 仍然能够渲染出版物 (例如,如果它在没有这些资源的情况下被离线使用)。

示例 32 :通过简单 URL 字符串和 LinkedResource 对象的组合 表达资源列表。
{
    …
    "resources"  : [
        "datatypes.html",
        "datatypes.svg",
        "datatypes.png",
        "diff.html",
        {
            "type"           : "LinkedResource",
            "url"            : "test-utf8.csv",
            "encodingFormat" : "text/csv"
        },
        {
            "type"           : "LinkedResource",
            "url"            : "test-utf8-bom.csv",
            "encodingFormat" : "text/csv"
        },
        …
    ],
    …
}

4.7.3 可扩展性

清单旨在为用户代理在呈现和渲染数字出版物时使用 提供一组基本属性,但 MAY 通过以下方式扩展:

  1. 通过提供链接元数据记录; 或
  2. 通过在清单中包含附加属性

本规范未定义此类附加属性如何由用户代理编译、存储或公开 在其清单的内部表示中。 用户代理 MAY 忽略部分或全部扩展 属性。

4.7.3.1 链接记录

清单 MAY 通过指向元数据记录的链接进行扩展,例如 ONIX [onix] 或 BibTeX [bibtex],使用 LinkedResource 对象, 其中:

  • LinkedResourcerel 属性 包含相关标识符(例如,如果链接记录 包含描述性元数据,则可使用 describedby 标识符 [iana-link-relations]);
  • encodingFormat 的值标识为该特定记录类型定义的 MIME 媒体 类型 [rfc2046], 如适用。

当链接记录属于出版物的一部分时(即,它们不仅仅用于清单可扩展性), 会包含在资源列表中。 否则,它们会包含在链接列表中。

示例 33 :链接到外部 ONIX for Books 元数据 记录。
{
    …
    "links"  : [
        {
            "type"            : "LinkedResource",
            "url"             : "https://www.publisher.example.org/time-machine/onix.xml",
            "encodingFormat"  : "application/onix+xml",
            "rel"             : "describedby"
        },
        …
    ],
    …
}
编辑者注

application/onix+xml MIME 类型在撰写本文档时 尚未由 IANA 注册,示例中包含它仅用于 说明目的。

4.7.3.2 附加 清单属性

附加属性 MAY 直接包含在清单中,使用 [schema.org] 或 [dcterms] 等公共方案。专有术语 MAY 使用,但 RECOMMENDED 使用紧凑 IRI [json-ld11] 包含此类术语,并将前缀定义为上下文的一部分。

正确使用前缀和紧凑 IRI 是使用完整 JSON-LD 处理器处理清单所必需的, 但不是本规范定义的处理算法的要求。 如果预期进行完整 JSON-LD 处理,则必须单独执行 前缀术语的验证。

示例 34 :使用词汇表前缀声明扩展基本数据集。
{
    "@context" : [
        "https://schema.org",
        "https://www.w3.org/ns/pub-context",
        {
            "language" : "en",
            "ex"       : "https://example.org/vocab"
        }
    ],
    …
    "ex:region" : "North America",
    …
}

Schema.org 上下文文件 [schema.org] 为常用 词汇表定义了多个前缀,例如 Dublin Core Terms(dcterms)[dcterms] 和 Element Set(dc) [dc11]、FOAF 词汇表(foaf)[foaf],以及 Bibliographic Ontology(bibo)[bibo]。 来自这些 词汇表的属性可以使用,而无需声明其前缀。

示例 35 :使用 Schema.org 的 “copyrightYear”和“copyrightHolder”术语扩展基本数据。
{
    …
    "copyrightYear"   : "2015",
    "copyrightHolder" : "World Wide Web Consortium",
    …
}
示例 36 :使用 Dublin Core “subject”术语和 2012 ACM Classification 术语扩展基本数据集。
{
    …
    "dcterms:subject" : ["Web data description languages","Data integration","Data Exchange"],
    …
}

4.8 资源关系

4.8.1 结构性资源

4.8.1.1 封面

封面是用户代理可用于呈现数字出版物的资源(例如,在图书馆或 书架中,或在最初加载出版物时)。

封面由 cover 链接关系标识。

指向封面的链接 MUST NOT链接列表中指定。

编辑者注

cover 术语目前尚未在 IANA 链接 关系中注册,但工作组预计会添加它。

示例 37 :标识 HTML 封面页。
{
    …
    "resources" : [
        {
            "type"           : "LinkedResource",
            "url"            : "cover.html",
            "encodingFormat" : "text/html",
            "rel"            : "cover"
        },
        …
    ],
    …
}

如果封面是图像(无论是否嵌入在 HTML 资源中),强烈 建议遵循 成功准则 1.1.1 [wcag21], 提供替代文本和扩展描述。对于无法 嵌入此信息的图像格式,可使用namedescription 属性(属于 LinkedResource)分别 提供替代 文本和扩展描述。在这些情况下,name 属性 SHOULD 始终设置——对于 装饰性图像,该属性可以留空。

示例 38 :标识封面图像。替代文本和 描述分别在 name 和 description 属性中提供。
{
    …
    "resources" : [
        {
            "type"           : "LinkedResource",
            "url"            : "whale-image.jpg",
            "encodingFormat" : "image/jpeg",
            "rel"            : "cover",
            "name"           : "Moby Dick attacking hunters",
            "description"    : "A white whale is seen surfacing from the water to attack a small whaling boat"
        },
        …
    ],
    …
}
示例 39 :装饰性封面。name 属性留空。
{
    …
    "resources" : [
        {
            "type"           : "LinkedResource",
            "url"            : "cover.jpg",
            "encodingFormat" : "image/jpeg",
            "rel"            : "cover",
            "name"           : "",
        },
        …
    ],
    …
}

如果用户代理需要封面图像的替代文本以使界面无障碍, 而 name 属性未指定,则它 MAY 尝试 从出版物元数据构造替代文本。本规范不强制规定 如何创建此类替代文本。一种方法是将替代 文本构造为一个字符串,标识该图像为封面,后跟出版物标题

只有一个资源 MAY 被标识为封面,但附加 封面 MAY 使用alternate 属性指定(例如,用于提供 替代尺寸或 分辨率)。

示例 40 :以 JPEG 和 SVG 格式提供封面图像。
{
    …
    "resources" : [
        {
            "type"           : "LinkedResource",
            "url"            : "lilliput.jpg",
            "encodingFormat" : "image/jpeg",
            "rel"            : "cover"
            "alternate"      : [
                 {
                     "type"           : "LinkedResource",
                     "url"            : "lilliput.svg",
                     "encodingFormat" : "image/svg+xml",
                     "rel"            : "cover"
                 }
            ]
        },
        …
    ],
    …
}
4.8.1.2 页列表

页列表是一种导航辅助工具,包含数字出版物内 静态页面分界点的列表。

页列表由 pagelist 链接关系标识。

编辑者注

pagelist 术语目前尚未在 IANA 链接 关系中注册,但工作组预计会添加它。

只有一个资源 MAY 被标识为包含页列表。如果 指定了多个实例,用户代理 MUST 使用遇到的第一个 实例,并优先考虑阅读 顺序中的实例。

指向页列表的链接 MUST NOT链接列表中指定。

示例 41 :标识包含页 列表的资源。
{
    …
    "resources" : [
        {
            "type" : "LinkedResource",
            "url"  : "toc_file.html",
            "rel"  : "pagelist"
        },
        …
    ],
    …
}
4.8.1.3 目录

目录是一种导航辅助工具,提供指向数字出版物主要结构 章节的链接。

包含目录的资源 由 contents 链接关系标识 [iana-link-relations]。目录本身 是该资源中第一个 role 值为 doc-toc 的元素,如 § C.2 HTML 结构中所定义。

只有一个资源 MAY 被标识为包含目录。 如果指定了多个实例,用户代理 MUST 使用 遇到的第一个实例,并优先考虑阅读顺序中的资源。

本规范的配置文件 MAY 定义当没有资源由 contents 关系标识时,如何定位包含目录的 资源。

指向目录的链接 MUST NOT链接列表中指定。

目录的 RECOMMENDED 结构和处理模型定义于 § C. 机器可处理的目录

示例 42 :标识包含 目录的资源。
{
    …
    "resources" : [
        {
            "type" : "LinkedResource",
            "url"  : "toc_file.html",
            "rel"  : "contents"
        },
        …
    ],
    …
}

4.8.2 信息性资源

4.8.2.1 无障碍报告

无障碍报告提供关于数字出版物是否适合具有不同首选阅读方式的用户 使用的信息。这些报告通常标识 针对既定无障碍标准的评估结果,例如 [wcag21] 中提供的标准,并且是 确定出版物可用性的重要信息来源。

无障碍报告使用 accessibility-report 链接 关系标识。

编辑者注

accessibility-report 术语目前尚未在 IANA 链接关系中注册,但工作组预计会添加它。

将报告作为出版物的资源包含会很有帮助,这样它就可用, 例如,在离线阅读出版物时。

以人类可读格式(例如 HTML [html])提供无障碍报告,有助于确保它可被用户访问和 理解。使用机器可处理的元数据(例如 Schema.org [schema.org] 中提供的元数据) 扩充报告,还将有助于机器处理。

4.8.2.2 预览

并非所有数字出版物都会向 所有用户开放(例如,它们可能仅限于网站的注册用户)。在这种情况下, 出版者可能希望提供内容预览,以吸引用户访问完整 版本。

预览使用 preview 链接关系标识 [iana-link-relations]。

预览 MAY 位于外部,也可以作为 数字出版物的资源包含。

示例 44 :将预览标识为数字 出版物的音频资源。
{
    …
    "links" : [
        {
            "type"           : "LinkedResource",
            "url"            : "preview.mp3",
            "encodingFormat" : "audio/mpeg",
            "rel"            : "preview"
        },
        …
    ],
    …
}
4.8.2.3 隐私政策

用户通常有法定权利知道并控制收集了哪些关于 他们的信息、这些信息如何存储以及存储多久、它是否可用于个人 识别,以及如何将其删除。因此,包含一份处理此类隐私 关切的声明,是发布数字 出版物的重要组成部分。即使没有收集任何信息,此类声明 也会提高用户对内容的信任。

可以为此目的在清单中包含指向隐私政策的链接。将 隐私政策作为出版物的资源包含会很有帮助,这样它就可用, 例如,在离线阅读出版物时。

隐私政策 使用 privacy-policy 链接关系标识 [iana-link-relations]。

4.8.3 扩展

如果需要表达本规范定义之外的其他关系,rel 属性可以通过以下 方式之一扩展:

5. 出版物资源

属于数字出版物的唯一资源列表——其边界—— 从列在readingOrderresources 中的资源并集中获得, 包括任何alternate资源。创建此列表的确切 过程在清单处理算法中描述。

所有其他资源都在数字出版物的边界之外(例如,列在links节中的资源,以及内容中指向 Web 上外部 资源的超链接)。

本规范不对出版物资源施加任何限制,但本规范的配置文件 MAY 限制资源的内容类型和位置。

用户代理 MAY 根据资源是否在数字出版物的边界内, 选择以不同方式处理和渲染资源(例如,从出版物的 离线或打包版本中排除外部资源)。

6. 清单发现

6.2 嵌入

数字出版物格式允许清单 嵌入在 HTML 文档中时,清单 MUST 包含在一个script 元素 [html]中,其type 属性设置为 application/ld+json [json-ld11]。

示例 50 :嵌入在 HTML 文档中的出版物清单的 script 标签。
<script type="application/ld+json">
    {
        "@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
        …
    }
</script>

6.3 其他发现方法

数字出版物格式 MAY 定义用于发现清单的替代方法,这些方法不涉及 链接到或 嵌入清单(例如,可使用受限名称和/或 位置来发现该清单)。本规范不对这些方法添加任何限制。

7. 处理清单

本节依赖于 Infra 标准 [infra]。

7.1 引言

本节为非规范性内容。

虽然数字出版物的清单以 [json-ld11] 创作,但本节描述的清单处理步骤详细说明了 用户代理如何将清单转换为其数据的内部 表示。该算法使用 [infra] 中定义的术语和 数据类型描述该过程,并且如果成功,会返回一个 [infra] 映射形式的数据。

此算法的实际实现会使用所用语言中相应的构造和 数据类型。

7.2 错误处理

处理算法中使用以下错误类型:

用户代理 SHOULD 暴露验证错误和致命错误,但本 规范不规定这样做的方式。

对于验证错误,用户代理 SHOULD 区分 错误的严重程度(即,违反的是必需实践还是推荐实践)。

7.3 处理上下文

处理算法中的某些步骤取决于术语的预期值 类别,因此术语使用的上下文可能会影响处理(例如,只有当 url 是出版物清单的直接属性时,它才期望为 数组形式的 URL)。为区分这些用法,会向某些 函数调用提供一个上下文。该上下文设置为发起处理调用的对象类型。

识别 类型的默认列表包括 PersonOrganizationLinkedResource配置文件 MAY 扩展此列表,以包含额外的对象类型。

如果没有向函数提供上下文,则正在处理的术语被认为属于全局 上下文(即,它是清单的直接子项)。

扩展识别类型列表时,可能还需要扩展规范化 数据函数,以确保所有对象都指定了其类型 (例如,当字符串值自动扩展为对象时)。

7.4 生成内部 表示

此算法接受以下参数:

此算法不描述如何发现和获取清单。执行这些操作的步骤 由每种数字出版物 格式定义。

生成内部表示,运行以下 步骤:

  1. processed 为一个空映射, 它将包含清单的内部表示

  2. manifest 为给定 text 后解析JSON 为 Infra 值的结果。如果 manifest 不是映射,则为致命 错误,返回失败。

    说明

    出版物清单必须表达为 JSON 对象,而不是数组。将 清单转换为 [infra] 类型之后,还会额外检查 所得结构是否为映射

  3. § 4.3 清单 上下文)如果 manifest["@context"] 未设置为列表,或者 manifest["@context"] 中的第一个和第二个项目不是字符串值 “https://schema.org”和“https://www.w3.org/ns/pub-context”, 且按此顺序排列,则为致命错误,返回失败。

    说明

    如果上下文 URL 未按预期设置, 则 JSON 数据不表示出版物清单。

  4. § 4.6 配置文件 一致性)令 processed["profile"] 为清单所符合的配置文件。 按如下方式设置 processed["profile"]

    1. 如果 manifest["conformsTo"] 未设置,或未包含用户代理 识别为能够处理和/或渲染的配置文件,则用户代理 SHOULD 检查阅读顺序中资源的媒体类型, 以确定该出版物是否匹配其能够处理或渲染的配置文件。如果匹配,则为验证错误, 将 processed["profile"] 设置为匹配的配置文件。否则,为致命错误,返回失败。

    2. 否则,将 processed["profile"] 设置为 manifest["conformsTo"] 中用户代理能够处理和/或 渲染的第一个 URL。

    在处理过程的此步骤中,manifest["conformsTo"] 的值可能是字符串,也可能是列表

    说明

    出版物所符合的配置文件决定在处理期间必须执行的任何附加 扩展步骤。这些步骤由其各自的规范定义。

    创建新术语 profile 是因为 conformsTo 不 限于配置文件标识符(即,新术语在内部表示中提供配置文件的持久 标识符)。

  5. § 4.4.1 全局声明)令 lang 为全局语言, dir 为从此步骤获得的全局方向。最初将每个都设置为 空字符串

    对于 manifest["@context"] 中的每个 context,从最后一个项目移动到第一个项目,如果 context映射

    1. 如果 lang 是空字符串context["language"] 已定义,则将 lang 设置为 context["language"]
    2. 如果 dir 是空字符串context["direction"] 已定义,则将 dir 设置为 context["direction"]
    3. 如果 langdir 都不是空字符串,则中断

    如果 lang 既不是空字符串 也不是格式良好的 [bcp47] 语言标签,则为验证错误,将 lang 设置为空 字符串。

    如果 dir 既不是空字符串 也不是“ltr”或“rtl”中的一个值,则为验证 错误,将 dir 设置为空 字符串。

    说明

    此处获得的全局语言和方向声明分别用于为没有声明的可本地化字符串设置语言 和基本方向。

    迭代器会反向遍历 @context,因为最后的语言和 方向声明会覆盖任何较早的声明。

  6. § 4.3 清单 上下文)如果配置文件要求对清单 上下文进行附加验证,则这些步骤在此处执行。

    说明

    此扩展步骤允许验证配置文件要求存在于清单上下文中的任何信息 (例如,附加上下文 URL 或参数)。这些步骤必须 在此时执行,因为 @context 术语会在下一步的数据规范化中被移除。用于处理配置文件数据的更通用 步骤在后续 步骤中提供。

  7. 对于 manifest 中的每个 termvalue,当调用规范化数据并给定 termvaluelangdirbase 成功时,将 processed[term] 设置为其结果。 如果返回失败,则不要将 term 添加到 processed

    说明

    数据规范化步骤会标准化传入的清单数据,以移除任何 创作便利写法,例如在预期对象或数组时使用字符串的能力。 所得的已处理数据会添加到 processed 变量中, 并在后续步骤中对其进行操作。

  8. processed 设置为在给定 processed 时运行数据 验证的结果。

    说明

    数据验证检查会确保传入数据匹配其预期值 类别。对预期值的任何限制也会在此步骤强制执行,并且 任何无效数据都会从最终表示中移除。

  9. 如果配置文件指定了需要运行的附加处理函数, 则这些步骤在此时执行。

  10. 在给定 processed 以及指定时的 document 后,当运行添加 默认值成功时,将 processed 设置为其结果。 否则,终止处理,返回失败。

    说明

    此步骤检查清单中缺失的任何信息是否可以从链接到该文档的 HTML 文档或其他来源获得。

  11. 返回 processed

有关所得结构的可视化,请参阅 § A. 内部表示数据模型

7.4.1 规范化数据

要为属性 termvalue规范化数据,并带有全局语言 lang全局方向 dir基 URL base,以及可选上下文 context,运行以下步骤:

  1. normalizedvalue 的值。

    说明

    数据规范化步骤在此步骤定义的 normalized 变量中保存的 传入值副本上执行。此变量会在成功规范化过程结束时返回。

  2. § 4.3 清单 上下文)如果 term@context,则返回失败。

    说明

    @context 为清单的初始处理提供信息, 但不会保留在内部数据表示中。返回失败表示 移除该术语。

  3. § 4.2.7 数组) 如果根据 contextterm 预期为数组,且 value 不是列表,则将 normalized 设置为 列表: « value »。

    说明

    各种术语要求其值为数组,但为了方便, 作者允许使用单个值而不是单元素数组。例如,

    {
        …
        "name"   : "Et dukkehjem",
        "author" : "Henrik Ibsen",
        …
    }

    得到:

    «[
        …
        "name"   → « "Et dukkehjem" »,
        "author" → « "Henrik Ibsen" »,
        …
    ]»
  4. § 4.2.4.2 实体)如果根据 contextterm 预期为 数组形式的实体,则对于 normalized 中的每个 entity

    1. 如果 entity字符串, 则将 entity 设置为映射

      «[
          "type" → « "Person" »,
          "name" → entity
      ]»
    2. 否则,如果 entity 不是映射,则为验证错误,从 normalized移除 entity

    3. 否则,如果 entity["type"] 未设置,则将其设置为列表« "Person" »。如果 entity["type"] 已设置但 不包含值 PersonOrganization,则将值 Person 追加到该列表

    说明

    创建者(作者、编辑等)预期显式定义为 对象,但为了方便,清单中只需指定其名称。例如:

    {
        …
        "author": "Ralph Ellison",
        …
    }

    此规则会将此类字符串值转换为默认类型为 Person 的映射,对前述示例产生如下结果:

    «[
        …
        "author" → « 
            «[
                "type" → « "Person" »
                "name""Ralph Ellison"
            ]»
        »,
        …
    ]»

    为简单起见,将 name 转换为可本地化字符串的过程 由后续步骤描述。

  5. § 4.2.4.1 可本地化字符串)如果根据 contextterm 预期为数组形式的可本地化字符串,则对于 normalized 中的每个 item

    1. 如果 item字符串, 则将 item 设置为映射

      «[
          "value" → item,
          "language" → lang,
          "direction" → dir
      ]»

      如果 langdir 未设置,或为空字符串,则分别移除 item["language"]item["direction"]

    2. 否则,如果 item 不是映射,则为验证错误,从 normalized 中移除 item

    3. 否则,按如下方式处理 item 中的映射

      1. 如果 item["language"] 未设置,则当 lang 已设置且不是空字符串时,将其设置为 lang 的值。

        否则,如果 item["language"]null,则移除 item["language"]

      2. 如果 item["direction"] 未设置,则当 dir 已设置且不是空字符串时,将其设置为 dir 的值。

        否则,如果 item["direction"]null,则移除 item["direction"]

    说明

    自然语言文本值预期显式定义为可本地化 字符串对象,但为了方便,在清单中可以是简单字符串。例如,如果没有 通过全局语言声明提供语言信息,则:

    {
        "@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
        "name"     : ["La Comédie humaine"],
        …
    }

    得到:

    «[
        "name"     → «
            «[
                "value""La Comédie humaine"
            ]»
        »,
        …
    ]»

    但是,如果清单中提供了显式语言,则该语言会 添加到可本地化字符串对象。例如,

    {
        "@context" : [
            "https://schema.org",
            "https://www.w3.org/ns/pub-context",
            {"language": "fr"}
        ],
        "name"     : ["La Comédie humaine"],
        …
    }

    得到:

    {
        "name"     → «
            «[
                "value""La Comédie humaine"
                "language""fr"
            ]»
        »,
        …
    }

    局部设置或局部 null 值会阻止全局值 生效。

    {
        "@context" : [
            "https://schema.org",
            "https://www.w3.org/ns/pub-context", 
            {"language":"fr"}
        ],
        …
        "name" : [{
            "value" : "La Comédie humaine"
        }],
        "publisher" : [{
            "type":["Organization"],
            "name":[{
                "value": "Hachette",
                "language": null
            }]
        }],
        …
    }

    得到:

    {
        "name"     → «
            «[
                "value""La Comédie humaine"
                "language""fr"
            ]»
        »,
        "publisher"    → «
            «[
                "type" → « "Organization" »,
                "name" → «
                    «[
                        "value""Hachette",
                    ]»
            ]»
        »,
        …
    }
  6. § 4.2.4.3 链接资源)如果根据 contextterm 预期为数组形式的LinkedResources,则对于 normalized 中的每个 resource

    1. 如果 resource 是字符串,则将 resource 转换为映射

      «[
          "type" → « "LinkedResource" »,
          "url" → resource
      ]»
    2. 否则,如果 resource 不是映射,则为验证错误,从 normalized 中移除 resource

    3. 否则,如果 resource["type"] 未设置,则将其设置为列表« "LinkedResource" »。如果 resource["type"] 已设置但不包含值 LinkedResource,则将该值追加列表

    说明

    资源链接预期显式设计为类型为 LinkedResource 的对象,但为了方便,只需在清单中指定其 绝对或相对 URL。例如,

    {
        …
        "resources" : [
            "css/book.css",
            …
        ],
        …
    }

    此步骤会将字符串值转换为对象,对前述示例产生如下结果:

    «[
        …
        "resources" → «
            «[
                "type" → « "LinkedResource" »,
                "url""css/book.css"
            ]»,
            …
        »,
        …
    ]»

    为简单起见,将相对路径转换为绝对路径的过程由后续 步骤描述。

  7. § 4.2.5 URL)如果根据 contextterm 预期为 URL数组形式的 URL

    1. 如果 normalized字符串,则在给定 normalized 后,当运行转换为绝对 URL成功时,将 normalized 设置为其结果。如果返回失败,则返回 失败。

    2. 否则,如果 normalized列表,则对于 normalized 中的每个 item,在给定 normalized 后, 当运行转换为 绝对 URL成功时,将 item 设置为其结果。如果返回失败, 则从 normalized移除 item

    3. 否则,为验证 错误,返回失败。

    说明

    清单中的相对 URL 会 根据基值解析,以获得绝对 URL。例如:

    "url": "chapter01.html"

    对于托管在 https://example.org/publications/wuthering-heights 的出版物,将得到:

    "url""https://example.org/publications/wuthering-heights/chater01.html"
  8. § 8. 模块化 扩展,扩展点)如果配置文件为配置文件特定术语定义了处理 步骤,则这些步骤在此时执行。

  9. 按如下方式递归检查 normalized,以确保所有属性都得到 规范化:

    1. 如果 normalized列表, 则对于 normalized 中每个作为映射item

      1. 如果 item["type"] 已设置并包含识别 类型,则对于 item 中的每个 keykeyValue,在给定 keykeyValuelangdirbase 并使用 item["type"] 作为 上下文时,当运行规范化数据成功时,将 key 设置为其结果。如果返回失败,则从 item移除 key

      2. 否则,不执行任何操作。

    2. 否则,如果 normalized映射

      1. 如果 normalized["type"] 已设置并包含识别 类型,则对于 normalized 中的每个 keykeyValue,在给定 keykeyValuelangdirbase 并使用 normalized["type"] 作为上下文时,当运行规范化数据成功时,将 key 设置为其结果。如果返回失败,则从 normalized移除 key

      2. 否则,不执行任何操作。

    3. 否则,不执行任何操作。

    说明

    为了确保清单中的所有属性都得到处理,此步骤 递归检查 normalized,查找需要处理的附加映射条目。如果 normalized 是列表,则检查每个项目以确定它是否为 可处理的映射。

    如果返回失败,则从映射中移除该项目。

  10. 返回 normalized

7.4.1.1 转换为绝对 URL

要将 url转换为绝对 URL, 并带有基 URL base,运行以下步骤:

  1. 如果 urlbase 不是字符串,或是空字符串, 则为验证错误,返回失败。

    说明

    此步骤检查 urlbase 在尝试使用前 都是非空字符串。

  2. 当以 url 作为输入、base 作为基 URL 运行URL 解析器 [url] 成功时,将 url 设置为其结果。 如果返回失败,则为验证错误,返回失败。

    说明

    此步骤对要处理的 url 调用 URL 解析器函数。如果该 url 不是绝对 URL,解析器会使用基 URL 将其转换为绝对 URL。

    如果解析返回失败,则向调用者返回失败,以指示 移除该 URL。

  3. 返回 url

7.4.2 数据验证

要对映射 data 执行数据验证,运行以下步骤:

  1. 对于 data 中的每个 termvalue,在给定 termvalue 时,当运行全局数据检查 成功时,将 term 设置为其结果。如果返回失败, 则移除 data[term]

    说明

    此步骤将每个条目传递给一组需要在值上运行的全局验证检查, 并递归地在值内的任何属性上运行这些检查。

    如果属性无效且必须移除,则返回失败。

  2. 如果配置文件指定了数据验证检查,则这些 步骤在此时执行。

    说明

    配置文件验证步骤优先于默认步骤,因此如果配置文件 例如有不同的默认值要应用,这些值会被应用。

  3. § 4.5 出版物类型)如果 data["type"] 未设置或是空列表,则为验证错误,设置为 « "CreativeWork" »

  4. § 4.7.1.2 无障碍)如果 data["accessModeSufficient"] 已设置,则对于 data["accessModeSufficient"] 中的每个 item,如果 item["type"] 未设置或不包含ItemList”,则从 data["accessModeSufficient"]移除 item

  5. § 4.7.1.4 规范标识符)如果 data["id"] 未设置或是空 字符串,则为验证错误

  6. § 4.7.1.6 时长)如果 data["duration"] 已设置且不是有效的时长 值,按 [iso8601-1], 则为验证错误移除 data["duration"]

  7. § 4.7.1.7 最后修改日期)如果 data["dateModified"] 已设置且 按 [iso8601-1] 不是有效的日期或日期时间,则为验证错误移除 data["dateModified"]

  8. § 4.7.1.8 发布日期)如果 data["datePublished"] 已设置且 按 [iso8601-1] 不是有效的日期或日期时间,则为验证错误移除 data["datePublished"]

  9. § 4.7.1.9 出版物语言)如果 data["inLanguage"] 已设置,则对于 data["inLanguage"] 中的每个 item,如果 item 不是格式良好的 [bcp47],则为验证错误,从 data["inLanguage"]移除 item

  10. § 4.7.1.10 阅读推进方向)如果 data["readingProgression"] 未设置,则设置为“ltr”。 否则,如果它不是必需的 方向值之一,则为验证错误,设置 为“ltr”。

  11. § 5. 出版物资源)按如下方式获取并验证出版物边界内的唯一 URL

    1. 如果 readingOrder 已设置,则令 readingOrderURLs 为 在给定 readingOrder 后运行获取唯一 URL的结果。否则,令 readingOrderURLs 为 空有序集

    2. 如果 resources 已设置,则令 resourcesURLs 为 在给定 resources 后运行获取唯一 URL的结果。否则,令 resourcesURLs 为空有序集

    3. data['uniqueResources'] 设置为 readingOrderURLsresourceURLs并集

    说明

    此步骤获取阅读顺序和资源列表中的唯一 URL 列表。然后它将 data['uniqueResources'] 设置为这两个集合的并集, 表示出版物边界内唯一资源的完整 列表。

    如果 readingOrderresources 包含重复资源声明,此步骤也会发出警告。验证错误会作为从 每个列表中获取唯一 URL 的一部分发出。

  12. § 4.8.1 结构性资源)按如下方式验证结构性关系的使用:

    1. resources 设置为 data["readingOrder"] 的值(如果已 定义),否则设置为空列表。当 data["resources"] 已定义时,使用其扩展 resources

    2. 如果 resources 中有多个项目rel 条目包含 ASCII 大小写不敏感值“contents”,则为验证错误

    3. 如果 resources 中有多个项目rel 条目包含 ASCII 大小写不敏感值“pagelist”,则为验证错误

    4. 如果 resources 中有多个项目rel 条目包含 ASCII 大小写不敏感值“cover”,则为验证错误

      如果封面具有指定图像媒体类型(image/*)的 encodingFormat 条目, 且没有 name 条目,则为验证错误

    说明

    此步骤检查阅读顺序和资源列表中指定的资源,以验证 仅指定了一个目录、页列表和封面实例。

    对于封面,它还会检查基于图像的格式是否已设置名称,以满足 无障碍目的。

  13. 对于 data 中的每个 termvalue,如果在给定变量 termvalue 后运行移除空数组返回失败,则移除 data["term"]

    说明

    由于清单处理会在各个阶段移除无效值, 最终数据结构可能会出现一些不再包含任何 值的列表。此步骤会重新遍历数据并移除任何此类空列表。

  14. 返回 data

7.4.2.1 全局数据检查

要对属性 termvalue 处理全局数据检查, 并带有可选上下文 context,运行以下步骤:

  1. § 4.2 值类别)如果 term 具有已知值类别,则在给定变量 termvaluecontext 后,当调用验证值 类别成功时,将 value 设置为其结果。如果返回失败,则返回 失败。

    否则,返回 value

    说明

    此步骤验证术语的值是否匹配该术语所需的预期类别。 例如,abridged 术语要求布尔值, 因此与该术语一起使用的任何其他值都会导致失败。

    如果调用该函数时发生失败,此步骤也会返回失败, 以便从最终数据集中移除该属性。

    没有已知值类别的术语不会被处理,因此会返回传入值。

  2. 按如下方式递归下降到 value 中,以先检查任何子属性:

    1. 如果 value映射

      1. 如果 value["type"] 包含识别类型,则对于 value 中的每个 keykeyValue,在给定 keykeyValue 并使用 value["type"] 作为 上下文时,当运行全局 数据检查成功时,将 value[key] 设置为其结果。 如果返回失败,则移除 value[key]

      2. 否则,不执行任何操作。

    2. 否则,如果 value列表,则对于 value 中的每个 item,如果 item映射

      1. 如果 item["type"] 包含识别类型,则对于 item 中的每个 keykeyValue,在给定 keykeyValue 并使用 item["type"] 作为 上下文时,当运行全局 数据检查成功时,将 item[key] 设置为其结果。 如果返回失败,则移除 item[key]

      2. 否则,不执行任何操作。

    3. 否则,不执行任何操作。

    说明

    为了确保清单中的所有属性都得到处理,此步骤 递归检查每个条目,查找需要处理的附加映射条目。如果 值是列表,则检查每个项目以确定它是否为可 处理的映射。

    其位置还确保所有子属性首先被检查,因此 步骤后面的较高级别检查会在任何无效值被 移除后进行测试。

  3. § 4.4.1 全局声明§ 4.4.2 特定项目 声明)如果 term 预期为数组 形式的LocalizableStrings, 则对于 value 中的每个 item

    • 如果 item["value"] 未设置,则从 value移除 item

    • 如果 item["language"] 已设置且其值不是格式良好的 [bcp47],则为验证错误移除 item["language"]

    • 如果 item["direction"] 已设置且其值不是 “ltr”或“rtl”之一,则为验证错误移除 item["direction"]

    说明

    此步骤检查可本地化字符串是否具有值、其语言 声明是否格式良好,以及其方向声明是否具有 “ltr”或“rtl”的值。

  4. § 4.2.4.2 实体)如果 term 预期为数组 形式的实体,则对于 value 中的每个 item,检查 item["name"] 是否 已设置:

    • 如果没有,则为验证 错误,从 value移除 item

    • 如果已设置,则对于 item["name"] 中的每个 name,如果 name["value"] 未设置 或为空字符串,则从 item["name"]移除 name
    说明

    此步骤确保所有实体都有名称。没有名称的实体会被 移除。

  5. § 4.2.4.3 链接资源)如果 term 预期为数组形式的LinkedResources,则对于 value 中的每个 resource

    说明

    此步骤对 LinkedResource 的术语执行以下两项检查:

    1. 如果未指定 URL 或 URL 无效,则移除 LinkedResource
    2. 如果指定了资源的时长,且不是 ISO 8601 时长值,则移除 duration 属性。
  6. 返回 value

7.4.2.2 验证值类别

要为属性 termvalue验证值类别, 并带有上下文 context,运行以下步骤:

  1. 如果根据 contextterm 预期为数组

    1. 如果 value 不是列表,则为验证 错误,返回失败。

    2. 否则,对于 value 中的每个 item

      1. 如果 item 不匹配数组的预期值类别, 则为验证错误,从 value移除 item,然后继续

      2. 如果 item映射,则对于 item 中的每个 keykeyValue,如果 key 具有预期值类别,则在给定 keykeyValue 并使用 item["type"] 作为 上下文时,将 key 设置为运行验证 值类别的结果。如果处理 item 的结果是空映射,则为验证错误,从 value移除 item

      如果处理 value 的结果是空数组,则为验证错误,返回 失败。

  2. 否则,如果根据 contextterm 预期为映射

    1. 如果 value 不是映射,则为验证错误,返回 失败。

    2. 否则,对于 value 中的每个 keykeyValue,如果 key 具有预期值类别,则在给定 keykeyValue 并使用 value["type"] 作为上下文时,将 key 设置为运行 验证 值类别的结果。如果处理 value 的结果是空映射,则为验证错误,返回 失败。

    此步骤目前仅供配置文件使用。本 规范中定义的属性均接受数组形式的对象。

  3. 否则,如果根据 contextvalue 不匹配 term 的预期值类别,则为验证错误,返回失败。

  4. 返回 value

说明

此函数检查正在处理的术语的值是否匹配其预期 值类别。当值是列表或映射时,会递归调用该函数, 以确保清单中的所有属性都得到检查。

7.4.2.3 获取唯一 URL

要从 resources获取唯一 URL,运行以下 步骤:

  1. uniqueURLs 为空有序集

  2. 对于 resources 中的每个 resource

    1. url 为在 resource["url"] 上运行URL 序列化器 [url],并设置 exclude fragment flag 后所得的结果。

    2. 如果 uniqueURLs 包含 url,则为验证 错误。否则,将 url追加uniqueURLs

    3. 如果 resource["alternate"] 已设置,则对于 resource["alternate"] 中的每个 alternate

      1. alt_url 为在 alternate["url"] 上运行URL 序列化器 [url],并设置 exclude fragment flag 后所得的结果。

      2. 如果 uniqueURLs 包含 alt_url,则为验证错误

      3. 否则,将 alt_url追加uniqueURLs

  3. 返回 uniqueURLs

说明

此函数接受LinkedResource 对象列表 ——来自阅读顺序或资源列表——并返回唯一 URL 集合。如果遇到重复项, 则发出警告。

7.4.2.4 移除空数组

要从属性 termvalue移除空数组, 运行以下步骤:

  1. 如果 value 是空列表, 返回失败。

  2. 否则,如果 value映射,则对于 value 中的每个 keykeyValue,如果在给定 keykeyValue 后运行移除空数组返回失败,则移除 value[key]

说明

此函数检查正在处理的术语的值不是空列表。 最初具有列表的术语可能会随着处理而丢失条目(即,当 列表项目无效时)。

7.4.3 添加默认值

要为映射 data 中缺失的属性添加默认值,并带有可选HTML Document (DOM) Node [html] document,运行以下步骤:

  1. § 4.7.1.11 标题) 如果 data["name"] 未设置:

    • title 为空映射。按如下方式设置其值:

      • 如果 document 已设置,且 documenttitle 元素 [html] 已设置且不 为空,则将 title["value"] 设置为 title 元素的文本内容。

        如果可用,则将 title["language"] 设置为语言 [html];如果该值可用且其值为 “ltr”或“rtl”,则将 title["direction"] 设置为基本 方向 [html]。

      • 否则,为验证 错误,为 title["value"] 生成一个值(见单独注释 了解详情)。根据生成的 标题适当地设置 title["language"]title["direction"]

    • data["name"] 设置为列表« title »
    说明

    当清单中未指定 name 属性时,此步骤添加 documenttitle 元素内容。例如:

    <html>
    <head lang="en">
        <title>The Golden Bough</title><script type="application/ld+json">
        {
            "@context" : ["https://schema.org","https://www.w3.org/ns/pub-context"],
            …
        }
        </script>

    得到:

    «[
        …
        "name" → «
            «[
                "value""The Golden Bough",
                "language""en"
            ]»
        »,
        …
    ]»
  2. § 4.7.2.1 默认阅读顺序§ 6.1 链接)如果 data["readingOrder"] 未设置:

    说明

    如果数字出版物仅由引用文档组成,则默认 阅读顺序可以省略;它会自动由该单个 资源组成。

  3. 如果配置文件指定了用户代理必须 生成的默认值,则这些步骤在此时执行。

  4. § 6.1 链接)如果document.URL 已 设置,且 data["uniqueResources"]包含 document.URL,则为验证错误

    说明

    如果链接到清单的页面在处理核心和扩展默认值规则后 未列为出版物的唯一资源,则会引发错误,因为它必须是 出版物资源。

  5. 返回 data

8. 模块化扩展

本规范中定义的清单格式设计为由出版社区在生产新的配置文件(例如有声书和学术 出版物)时实现和扩展。清单格式提供的灵活性允许它针对每个社区的 特定需求进行定制,同时也为需要处理这些配置文件的用户代理提供共同基础 (即,最小化各配置文件之间的差异并简化互操作性)。

要使配置文件与本规范兼容,以下条件 MUST 得到满足:

  1. MUST 遵守 § 4. 出版物 清单中定义的构造清单的要求。
  2. MUST 定义唯一的一致性 URL,并要求符合的 出版物在其conformsTo 属性中包含此 URL。
  3. 发现清单时 MUST 使用一个或两个链接方法
  4. § 7. 处理清单中描述的通用处理步骤 MUST 对扩展后的清单保持有效。为实现这一点,如果 向通用清单添加了新术语,则:
    • 如果适用,该术语 SHOULD 被分类到算法中使用的一个或多个 通用术语类别(例如数组可本地化字符串)。这意味着相关 处理步骤将为这些术语自动执行
    • 如有必要,配置文件 MAY 定义自己的处理步骤, 在处理算法中指定的扩展点执行。 这些额外步骤 MUST NOT 使通常为处理 算法定义的任何步骤的结果无效。
编辑者注

在可用时,添加一个由例如有声书配置文件添加的术语示例会是个好主意。

9. 安全和隐私 考虑事项

由于清单使用 JSON-LD 表达,因此该规范中详述的 隐私安全 考虑事项 [json-ld11] 适用于清单的所有 配置文件

配置文件的一些附加通用考虑事项包括:

更具体的安全和隐私考虑事项留给每个配置文件详述,因为这些事项会根据 数字出版物格式的性质而有所不同。

A. 内部表示数据 模型

本节为非规范性内容。

清单包括若干创作便利功能,例如默认值、在通常需要对象的位置使用字符串的能力, 以及从其他来源自动编译信息(例如用于标题阅读 顺序)。清单的处理会规范化这些 便利功能,并为用户代理产生一致的数据集(内部表示),但该集合并不容易 从处理算法中可视化。

本附录使用 [WebIDL] 提供一个信息性的抽象数据模型, 描述所得数据结构。此定义表达了处理后清单每个成员的 预期名称、数据类型和可能的限制。

选择 WebIDL 仅用于说明目的。本规范不定义 用于暴露清单数据的 API。

A.1 PublicationManifest 字典

dictionary PublicationManifest {
             sequence<DOMString>         type = "CreativeWork";
    required DOMString                   profile;
             sequence<DOMString>         conformsTo;
             DOMString                   id;
             boolean                     abridged;
             sequence<DOMString>         accessMode;
             sequence<DOMString>         accessModeSufficient;
             sequence<DOMString>         accessibilityFeature;
             sequence<DOMString>         accessibilityHazard;
             sequence<LocalizableString> accessibilitySummary;
             sequence<Entity>            artist;
             sequence<Entity>            author;
             sequence<Entity>            colorist;
             sequence<Entity>            contributor;
             sequence<Entity>            creator;
             sequence<Entity>            editor;
             sequence<Entity>            illustrator;
             sequence<Entity>            inker;
             sequence<Entity>            letterer;
             sequence<Entity>            penciler;
             sequence<Entity>            publisher;
             sequence<Entity>            readBy;
             sequence<Entity>            translator;
             sequence<DOMString>         url;
             DOMString                   duration;
             sequence<DOMString>         inLanguage;
             DOMString                   dateModified;
             DOMString                   datePublished;
             TextDirection               readingProgression = "ltr";
    required sequence<LocalizableString> name;
    required sequence<LinkedResource>    readingOrder;
             sequence<LinkedResource>    resources;
             sequence<LinkedResource>    links;
             sequence<DOMString>         uniqueResources;
};

enum TextDirection {
    "ltr",
    "rtl"
};

A.1.1 LinkedResource 字典

dictionary LinkedResource {
    required DOMString                   url;
             DOMString                   encodingFormat;
             sequence<LocalizableString> name;
             sequence<LocalizableString> description;
             sequence<DOMString>         rel;
             DOMString                   integrity;
             DOMString                   duration;
             sequence<LinkedResource>    alternate;
};

A.1.2 Entity 字典

dictionary Entity {
             sequence<DOMString>         type;
    required sequence<LocalizableString> name;
             DOMString                   id;
             DOMString                   url;
             sequence<DOMString>         identifier;
};

A.1.3 LocalizableString 字典

dictionary LocalizableString {
    required DOMString                   value;
             DOMString                   language;
             TextDirection               direction;
};

B. 选择替代资源

本附录依赖于 Infra Standard [infra]。

要为LinkedResource resource选择替代资源,运行以下步骤。

如果成功,此算法返回一个替代资源。否则,它返回失败。

  1. possibleAlternates 为空列表

  2. 如果 resource["alternate"] 未设置,则返回失败。

  3. 对于 resource["alternate"] 中的每个 alternate

    1. 如果 alternate["encodingFormat"] 已设置且用户代理支持指定的 媒体类型,则追加possibleAlternates

    2. 否则,如果配置文件定义了附加选择标准, 则在此扩展步骤中根据这些标准评估 alternate

    3. 否则,可选择检查 alternate["url"] 以获取关于媒体类型的线索。 如果该资源看起来受支持,则将 alternate追加possibleAlternates

  4. 如果 possibleAlternates 是空列表, 则返回失败。

  5. 否则,如果 possibleAlternates大小为 1, 则返回 possibleAlternates 中的资源。

  6. 否则,返回由用户代理确定的 possibleAlternates 中的一个资源。

说明

此函数迭代资源的替代格式并编译可能性列表。 如果找到多个可能性,则由用户代理确定如何优先排序并选择 最佳替代。

如果替代资源未指定显式媒体类型,则不要求用户代理 将其添加到可能性列表。

C. 机器可处理的目录

C.1 引言

本节为非规范性内容。

为了促进页面内和站点间的导航,HTML 使用nav 元素 [html] 表达链接列表。虽然默认情况下性质上是通用的, 但 nav 元素的用途可以通过使用 role 属性 [html] 更具体地标识。特别是, [dpub-aria-1.0] 词汇表中的 doc-toc 角色将 nav 元素标识为数字 出版物的目录。

包含可识别的目录是生成任何数字出版物的一种无障碍方式,但由于 HTML 标记的灵活性,它也会给试图提取有意义链接层级的用户代理带来挑战 (例如,提供可从任意页面访问的自定义视图)。为避免为不同用途重复 目录,本节定义了一种既对人友好且常用、又仍然为用户代理提取提供足够 结构的语法。

作者可以选择列表(有序或无序)来构造其目录。通过 在这些列表中使用锚标记(a 元素)标记每个链接,用户代理可以轻松区分它们 需要的信息与也已添加的任何外围内容(旁注)或样式性标记。目录 可以同时包含活动链接(带有 href 属性)和非活动 链接(不包含 href 属性),从而为目录的构造方式提供额外灵活性 (例如,在预览中省略指向某些标题的链接,或仅链接到某些内容)。

不过,请注意,不要求用户代理保留目录的呈现 方面(即,用户代理通常是在提取信息,以便以 所有出版物通用的方式呈现它)。例如,只期望用户代理 保留链接元素的文本内容,因此文本样式、内联图像和其他 非文本内容可能会丢失。同样,列表样式甚至显示多少层级的链接 也由用户代理自行决定。因此,建议链接到呈现性 目录,以免用户只能使用机器处理的目录。

C.2 HTML 结构

目录通过 [html] 元素表达(通常是nav 元素)。此元素 MUSTrole 属性 [html] 值“doc-toc” [dpub-aria-1.0] 标识,并且 MUST 是文档中按文档树顺序 [dom] 第一个具有该 role 值的元素。该元素 MAY 对 用户隐藏。

清单 SHOULD 标识包含目录的资源

虽然 nav 元素的内容模型不受限制,但只有在遵循以下 标记指南时,用户代理才能提取可用的目录:

目录标题

虽然目录标题是可选的,但为了避免在需要标题时由用户代理生成 占位标题,建议添加一个标题。标题使用 [htmlh1h6 元素中的任意元素指定。请注意,仅第一个此类 元素会被识别为标题。如果在链接列表之前未找到标题元素,用户代理将假定未 指定标题。

nav 元素中遇到的第一个 [htmlolul 列表元素被假定为包含定义指向内容链接的列表。即使该列表嵌套在 例如 div 元素中,也会找到它,因为算法会忽略 与其处理无关的元素。但是,该列表不能出现在任何跳过的 元素中,因为不会评估这些元素的内部内容。

如果 nav 元素不包含这些元素之一,则用户代理不会 将该数字出版物登记为包含可用目录(例如,机器渲染的选项 将不可用)。

分支

如果将目录视为链接树,则li 元素中位于链接 列表内的每个列表项表示一个分支。为了呈现给用户,这些分支 都必须有名称和可选目的地,而这些信息从列表项中找到的第一个 a 元素获得,无论其嵌套在何处 (同样,排除任何位于跳过的 元素中的 a 元素。)

分支的链接目的地在指定时从 a 元素的 href 属性获得。如果链接不可用(例如在预览中)或不相关 (例如分组标题),可以省略此属性。在提供指向内容的链接时,还可以 指定被链接文档的关系(在 rel 属性中)以及被链接资源的媒体类型 (在 type 属性中)。

找到为分支标注标签的 a 元素之后,用户代理将继续 检查标记中是否存在另一个列表元素(即子分支)。如果找到列表, 则同样处理该列表以提取其链接,如此继续,直到没有更多嵌套分支 需要处理。

跳过的元素

解析目录时会忽略一小组元素,以避免 误解。这些是 [html分节 内容元素分节 根元素。它们被忽略的原因是它们可以定义自己的 大纲(即,它们可以表示自包含且不一定与内容链接结构相关的嵌入内容)。

任何设置了hidden 属性的元素也会被跳过,因为隐藏元素 并不旨在由用户直接访问。

虽然这些元素可以包含在 nav 元素中,但必须小心 不要将重要内容嵌入其中(例如,不要用 section 元素 包裹包含所有指向内容链接的列表项)。

忽略的元素

所有与提取目录无关且未被跳过的元素都会被忽略。与跳过元素不同,忽略 意味着用户代理将继续在它们内部搜索相关内容,从而允许 在可使用的标记方面具有更大的灵活性。

C.2.1 示例

本节为非规范性内容。

C.3 用户代理处理

本节依赖于 Infra Standard [infra]。

本节定义了从 nav 元素提取目录的算法。 它以按树顺序 [dom] 遍历 DOM 树节点的方式定义,每个节点在遍历期间被进入退出时 都会被访问。每次访问节点时,都可以视为触发了进入退出 事件。在某些步骤中,用户代理可选择如何处理内容,以便为不同呈现模型提供 灵活性。

此算法不是以纯事件驱动术语定义的,因为并非总是需要检查所有后代 节点才能从 DOM 中获得所需信息。在某些情况下,某个元素及其所有后代 会在进入时处理后立即被跳过。可以应用事件方法, 但这将需要修改算法以处理/忽略被跳过的节点。

用户代理可以使用任何能够表示最终数据形式的语言来处理 并内部化所得结构。

就此算法而言,列表元素定义为 [htmlolul 元素。

以下算法 MUST 应用于以文档顺序中第一个 role 属性值为 doc-toc 的元素为根的 DOM 子树遍历, 无论该元素是否已被声明式 隐藏 [html],或通过 CSS 样式设置为不可见:

定位包含目录元素的资源的规则定义于 § 4.8.1.3 目录

如果未找到目录元素,则该出版物没有可用于机器渲染目的的目录。

  1. toc 为表示目录的映射 «[ "name" → "", "entries" → « » ]»

    说明

    此步骤初始化将存储目录标题和分支的映射。 在此映射中:

    1. toc["name"] 表示目录标题。
    2. toc["entries"] 表示目录分支。
  2. 初始化 branches,以在创建目录分支时保存这些分支。

    说明

    该栈用于保存尚未完成的分支。当遇到新的子分支时, 父分支会被压入栈中,以便稍后取回。

  3. current_toc_node 为设置为null的变量。

    说明

    current_toc_node 用于保存表示当前正在处理的 目录分支的映射。

  4. 从正在构建目录的元素开始,按树 顺序 [dom]遍历 DOM,并在遍历进入和退出每个元素时, 触发下面第一个相关步骤。

    1. 进入标题 内容元素时:

      运行以下步骤:

      1. 如果 branches 为空,且 toc["name"] 是空字符串,则将 toc["name"] 设置为以下之一:

        • 该元素的后代内容(以保留任何 HTML 标签);
        • 从后代内容获得的文本字符串(例如,通过计算该元素的无障碍 名称 [accname-1.1])。

        如果 toc["name"] 的结果值为空字符串(例如,在 移除任何呈现性元素并裁剪所有前导和尾随 空白之后),则将 toc["name"] 设置为占位值或 null

      2. 跳过该元素的进一步处理并继续到下一个。
      说明

      此步骤标识目录的标题。只有当 toc["name"] 的值为空字符串 (即尚未遇到任何标题)时,才处理标题。

      用户代理将 name 设置为标题元素的后代内容, 还是从中生成文本字符串,取决于它是否会在呈现中重用任何后代标记 (例如,保留图像、MathML、ruby 以及其他不容易转换为文本的内容)。

      示例 69 :带有标题的 toc 对象可视化。
      «[
          "name""Contents",
          "entries" → « »
      ]»

      如果 name 不是空字符串,或为 null,则说明 先前已经遇到标题,或已遇到表明 nav 元素没有标题的内容 (例如,已处理列表,因为标题不应跟在链接列表之后)。

      示例 70 :没有标题的 toc 对象可视化。
      «[
          "name"null,
          "entries" → « »
      ]»

      如果未指定标题,用户代理可以为后续使用提供自己的标题。

    2. 进入列表 元素时:

      运行以下步骤:

      1. 如果 toc["name"] 是空字符串,则将 toc["name"] 设置为 null

      2. 如果 current_toc_node 不是null

        1. 如果 current_toc_node["entries"]null或非空 列表,则跳过该元素的进一步 处理并继续到下一个。
        2. 否则,将 current_toc_node压入 branches,然后将 current_toc_node 设置为 null
      3. 否则,如果 branches 为空:

        1. 如果 toc["entries"]null或非空 列表,则跳过该元素的进一步 处理并继续到下一个。
        2. 否则,不执行任何操作。
      说明

      此算法不处理单个分支或 nav 元素根部中的多个列表, 因此如果已经遇到列表(entries 属性包含一个或多个分支 或设置为 null),则此列表会被 跳过。

      如果遇到列表,而目录(toc)仍然 没有名称(即尚未遇到标题元素),则假定该目录没有标题 (即目录标题不能出现在第一个条目列表之后)。 name 属性的值会从空字符串更改为 null,因为后续遇到的任何标题也都不适用。

    3. 退出列表 元素时:

      1. 如果 branches 非空,则从 branches弹出顶部映射,并将 current_toc_node 设置为它。

      2. 否则,如果 toc.entries 包含空列表,则将其设置为 null

      说明

      此步骤在所有子分支处理完毕后,将 current_toc_node 重置回父对象。

      如果栈中没有分支,且 toc.entries 不包含任何项目, 则将其设置为 null(以避免在根级别处理任何进一步列表)。

    4. 进入列表 项元素时,将 current_toc_node 设置为以下映射

      «[
          "name"null,
          "url"null,
          "type"null,
          "rel"null,
          "entries" → « »
      ]»
      说明

      每个列表项表示目录中可能的新分支,因此 每当遇到一个列表项时,都会在 current_toc_node 中创建一个新的空对象。

      随着遇到后代 a 元素和列表,此对象会被填充信息。

    5. 退出列表 项元素时:

      运行以下步骤:

      1. 如果 current_toc_node["entries"] 包含空列表,则将其设置为 null

      2. 如果 current_toc_node["name"]null或空 字符串:

        1. 如果 current_toc_node["entries"] 不是null,则将 current_toc_node["name"] 设置为占位值或 null
        2. 否则,将 current_toc_node 设置为null并退出此 处理步骤。
      3. 如果 branches 非空,则将 current_toc_node追加branches 顶部映射entries 属性。 否则,将 current_toc_node追加toc["entries"]

      4. current_toc_node 设置为null

      说明

      退出列表项表示当前分支的处理已完成。 在将此分支添加到其父级的 entries 数组之前,需要 测试该分支是否具有名称和/或任何子分支。如果它 没有名称但有子分支,则保留该分支。用户代理可以 提供自己创建的占位值,或将该值设置为 null。 如果它既没有名称也没有任何分支,则它无效并被丢弃。

      为确定将分支合并到何处,会检查栈。如果栈中没有 项目,则将其添加到根 toc 对象的 entries 属性中 (即,它是顶级分支)。否则,它会被 添加到栈中紧邻其前的对象的 entries 属性中。

      作为最后一步,current_toc_node 会重置回 null

    6. 进入锚点 元素且 current_toc_node 不是null时:

      运行以下步骤:

      1. 如果 current_toc_node["name"] 不是null,则不执行任何操作。

      2. 否则:

        1. current_toc_node["name"] 设置为以下之一:

          • 锚点元素的后代内容(以保留任何 HTML 标签);
          • 从后代内容获得的文本字符串(例如,通过计算该元素的无障碍 名称 [accname-1.1])。
        2. 如果该元素具有 href 属性,且该属性中的 URL 解析为 uniqueResources 中的资源,则将 current_toc_node["url"] 设置为该 值。
        3. 如果该元素具有 type 属性,并且该 属性值在裁剪前导和尾随空白后不是空字符串,则将 current_toc_node["type"] 设置为裁剪后的 值。
        4. 如果该元素具有 rel 属性,并且该属性值 在裁剪前导和尾随空白后不是空字符串,则按空白拆分裁剪后的值,并将 current_toc_node["rel"] 设置为所得的列表标记。

        跳过该元素的进一步处理并继续到下一个。

      说明

      此步骤处理锚点标签,以获得分支的 nameurl 属性值。

      如果当前分支的名称已经定义,则终止对此元素的处理 (即,为避免为单个分支处理多个链接)。

      用户代理将条目的 name 设置为 a 元素的后代 内容,还是从中生成文本字符串,取决于它是否会在呈现中重用任何后代标记 (例如,保留图像、MathML、ruby 以及其他不容易转换为文本的内容)。

      除了指定 href 属性外,还需要它解析为属于 数字出版物的资源,以满足本规范的要求。如果不是, 该分支会被保留,但该条目将不可链接。

      关于链接目标的附加信息——资源类型及其关系——也会被保留。

    7. 进入分节 内容元素、分节 根元素,或带有hidden 属性的元素时:

      跳过该元素的进一步处理并继续到下一个。

      说明

      由于分节和分节根元素可以定义自己的大纲, 进入其中会给生成目录造成问题(即, 它们可能包含不直接相关的内容)。因此,遇到它们时会跳过, 以防止处理其子内容。

    8. 否则:不执行任何操作。

      说明

      对于所有其他元素,此步骤允许继续处理其后代元素。

  5. 完成 DOM 遍历后,如果 toc["entries"] 包含非空列表,则返回 toc。否则, 返回 null

    说明

    如果根 toc 对象中的 entries 数组不包含任何 分支(可能是因为 nav 元素中未找到列表,或该列表 不包含任何符合要求的列表项),则该算法未产生可用的 目录。

D. 变更日志

第一份公开 工作草案以来的实质性变更:

有关已解决议题的完整列表,请参阅 GitHub 跟踪器

E. IANA 考虑事项

本节为非规范性内容。

F. 清单示例

本节为非规范性内容。

F.1 基本清单

以下是一个包含示例图书配置文件基本元数据集的清单。

此清单的内部表示的 JSON 编码也可用。

{
    "@context": [
        "https://schema.org",
        "https://www.w3.org/ns/pub-context",
        {"language" : "en"}
    ],
    "conformsTo": "https://example.com/publication",
    "type": "Book",
    "url": "https://publisher.example.org/mobydick",
    "author": "Herman Melville",
    "dateModified": "2018-02-10T17:00:00Z",

    "readingOrder": [
        "html/title.html",
        "html/copyright.html",
        "html/introduction.html",
        "html/epigraph.html",
        "html/c001.html",
        "html/c002.html",
        "html/c003.html",
        "html/c004.html",
        "html/c005.html",
        "html/c006.html"
    ],

    "resources": [
        "css/mobydick.css",
        {
            "type": "LinkedResource",
            "rel": "cover",
            "url": "images/cover.jpg",
            "encodingFormat": "image/jpeg"
        },{
            "type": "LinkedResource",
            "url": "html/toc.html",
            "rel": "contents"
        },{
            "type": "LinkedResource",
            "url": "fonts/STIXGeneral.otf",
            "encodingFormat": "application/vnd.ms-opentype"
        },{
            "type": "LinkedResource",
            "url": "fonts/STIXGeneralBol.otf",
            "encodingFormat": "application/vnd.ms-opentype"
        },{
            "type": "LinkedResource",
            "url": "fonts/STIXGeneralBolIta.otf",
            "encodingFormat": "application/vnd.ms-opentype"
        },{
            "type": "LinkedResource",
            "url": "fonts/STIXGeneralItalic.otf",
            "encodingFormat": "application/vnd.ms-opentype"
        }
    ]
}

F.2 单文档出版物

以下是示例文章配置文件的清单。该文章仅由嵌入清单的文档 组成。标题和阅读顺序从清单中省略,因为这些 属性会在处理期间分别从包含文档的 标题和 URL 自动生成。

该清单的内部表示的 JSON 编码也可用,同一文档的更 详细版本也可用。

<!DOCTYPE html>
<html lang="en-US">
<head>
    <title>Model for Tabular Data and Metadata on the Web</title>
    <link href="#wpm" rel="publication" />
    ...
    <script id="wpm" type="application/ld+json">
    {
        "@context"        : [
            "https://schema.org",
            "https://www.w3.org/ns/pub-context",
            {"language" : "en-US"}
        ],
        "conformsTo"      : "https://example.com/article",
        "type"            : "TechArticle",
        "id"              : "http://www.w3.org/TR/tabular-data-model/",
        "url"             : "http://www.w3.org/TR/2015/REC-tabular-data-model-20151217/",
        "copyrightYear"   : "2015",
        "copyrightHolder" : "World Wide Web Consortium",    
        "creator"         : ["Jeni Tennison", "Gregg Kellogg", "Ivan Herman"],
        "publisher" : {
            "type" : "Organization",
            "name" : "World Wide Web Consortium",
            "id"   : "https://www.w3.org/"
        },
        "datePublished"         : "2015-12-17",
        "resources"             : [
            "datatypes.html",
            "datatypes.svg",
            "datatypes.png",
            "diff.html",
            {
                "type"           : "LinkedResource",
                "url"            : "test-utf8.csv",
                "encodingFormat" : "text/csv"

            },
            {
                "type"           : "LinkedResource",
                "url"            : "test.xlsx",
                "encodingFormat" : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
            }
        ],
    }
    </script>
</head>
<body>
    ....

    <section id="toc" role="doc-toc">
        <h2 resource="#h-toc" id="h-toc" class="introductory">Table of Contents</h2>
        <ul class="toc">
            <li class="tocline"><a class="tocxref" href="#intro">
                <span class="secno">1. </span>Introduction</a>
            </li>
            ...
        </ul>
    </section>
    ...

</body>
</html>

F.3 有声书

以下示例显示了一个符合有声书配置文件 [audiobooks] 的清单。

此清单的内部表示的 JSON 编码也可用。

{
  "@context": [
      "https://schema.org",
      "https://www.w3.org/ns/pub-context",
      {"language": "en"}
  ],
  "conformsTo": "https://www.w3.org/TR/audiobooks/",
  "type": "Audiobook",
  "id": "https://librivox.org/flatland-a-romance-of-many-dimensions-by-edwin-abbott-abbott/",
  "url": "https://w3c.github.io/pub-manifest/experiments/audiobook/",
  "name": "Flatland: A Romance of Many Dimensions",
  "author": "Edwin Abbott Abbott",
  "readBy": "Ruth Golding",
  "publisher": "Librivox",
  "inLanguage": "en",
  "dateModified": "2019-11-14",
  "datePublished": "2008-10-12",
  "duration": "PT13774S",
  "license": "https://creativecommons.org/publicdomain/zero/1.0/",
  "abridged": false,
  "accessMode": "auditory",
  "accessModeSufficient": [{
      "type": "ItemList",
      "itemListElement": ["auditory"],
      "description": "Audio"
  }],
  "accessibilityFeature": ["readingOrder", "unlocked"],
  "accessibilityHazard": "noSoundHazard",
  "accessibilitySummary": "This is just a test summary",
  "readingProgression": "ltr",
  "resources": [
    {
      "rel": "cover",
      "url": "http://ia800704.us.archive.org/9/items/LibrivoxCdCoverArt12/Flatland_1109.jpg",
      "encodingFormat": "image/jpeg",
      "name": "Cover page with title and author"
    },{
      "rel": "contents",
      "url": "toc.html",
      "encodingFormat": "text/html"
    },{
        "rel": "accessibility-report",
        "url": "a11y.html",
        "encodingFormat": "text/html"
    },{
        "rel": "privacy-policy,",
        "url": "privacy.html",
        "encodingFormat": "text/html"
    }
  ],

  "readingOrder": [
    {
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_1_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1371S",
      "name": "Part 1, Sections 1 - 3"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_2_abbott.mp3",
      "encodingFormat": "audio/mpeg", 
      "duration": "PT1669S",
      "name": "Part 1, Sections 4 - 5"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_3_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1506S",
      "name": "Part 1, Sections 6 - 7"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_4_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1669S",
      "name": "Part 1, Sections 8 - 10"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_5_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1506S",
      "name": "Part 1, Sections 11 - 12"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_6_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1798S",
      "name": "Part 2, Sections 13 - 14"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_7_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1225S",
      "name": "Part 2, Sections 15 - 17"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_8_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1371S",
      "name": "Part 2, Sections 18 - 20"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_9_abbott.mp3", 
      "encodingFormat": "audio/mpeg",
      "duration": "PT1659S",
      "name": "Part 2, Sections 21 - 22"
    }
  ]
}

G. 属性索引

本节为非规范性内容。

下表标识清单属性在何处定义和扩展。

名称 出版物清单
abridged § 4.7.1.1 删节版
accessMode § 4.7.1.2 无障碍
accessModeSufficient § 4.7.1.2 无障碍
accessibilityFeature § 4.7.1.2 无障碍
accessibilityHazard § 4.7.1.2 无障碍
accessibilitySummary § 4.7.1.2 无障碍
artist § 4.7.1.5 创建者
author § 4.7.1.5 创建者
conformsTo § 4.6 配置文件 一致性
@context § 4.3 清单 上下文
contributor § 4.7.1.5 创建者
creator § 4.7.1.5 创建者
dateModified § 4.7.1.7 最后修改日期
datePublished § 4.7.1.8 发布日期
direction § 4.4.1 全局声明
duration § 4.7.1.6 时长
editor § 4.7.1.5 创建者
id § 4.7.1.4 规范标识符
illustrator § 4.7.1.5 创建者
inker § 4.7.1.5 创建者
inLanguage § 4.7.1.9 出版物 语言
language § 4.4.1 全局声明
letterer § 4.7.1.5 创建者
link § 4.7.2.3 链接
name § 4.7.1.11 标题
penciler § 4.7.1.5 创建者
publisher § 4.7.1.5 创建者
readBy § 4.7.1.5 创建者
readingOrder § 4.7.2.1 默认阅读顺序
readingProgression § 4.7.1.10 阅读推进方向
resources § 4.7.2.2 资源 列表
translator § 4.7.1.5 创建者
type § 4.5 出版物 类型
url § 4.7.1.3 地址

H. 资源关系索引

本节为非规范性内容。

下表标识资源关系的使用在何处定义。

名称 出版物清单
accessibility-report § 4.8.2.1 无障碍报告
contents § 4.8.1.3 目录
cover § 4.8.1.1 封面
pagelist § 4.8.1.2 页列表
privacy-policy § 4.8.2.3 隐私 政策
preview § 4.8.2.2 预览

I. 致谢

本节为非规范性内容。

编辑者感谢出版工作组成员对 本规范所作的贡献:

工作组还要感谢 数字 出版兴趣小组成员为本 规范铺路所做的所有辛勤工作。

J. 参考文献

J.1 规范性参考文献

[accname-1.1]
Accessible Name and Description Computation 1.1. Joanmarie Diggs; Bryan Garaventa; Michael Cooper. W3C. 2018 年 12 月 18 日。 W3C 推荐标准。URL:https://www.w3.org/TR/accname-1.1/
[bcp47]
Tags for Identifying Languages. A. Phillips; M. Davis. IETF. 2009 年 9 月。IETF 最佳当前实践。URL:https://tools.ietf.org/html/bcp47
[bibo]
Bibliographic Ontology Specification. Bruce D'Arcus; Frédérick Giasson. Structured Dynamics LLC. 2016 年 5 月 11 日。URL:http://bibliontology.com/specification.html
[bibtex]
BibTeX Format Description. URL:http://www.bibtex.org/Format/
[bidi]
Unicode Bidirectional Algorithm. Mark Davis; Aharon Lanin; Andrew Glass. Unicode Consortium. 2020 年 2 月 12 日。Unicode Standard Annex #9。URL:https://www.unicode.org/reports/tr9/tr9-42.html
[dc11]
Dublin Core Metadata Element Set, Version 1.1. DCMI. 2012 年 6 月 14 日。DCMI 推荐标准。URL:http://dublincore.org/documents/dces/
[dcterms]
DCMI Metadata Terms. DCMI Usage Board. DCMI. 2012 年 6 月 14 日。DCMI 推荐标准。URL:http://dublincore.org/documents/dcmi-terms/
[dom]
DOM Standard. Anne van Kesteren. WHATWG. 现行标准。URL:https://dom.spec.whatwg.org/
[dpub-aria-1.0]
Digital Publishing WAI-ARIA Module 1.0. Matt Garrish; Tzviya Siegman; Markus Gylling; Shane McCarron. W3C. 2017 年 12 月 14 日。 W3C 推荐标准。URL:https://www.w3.org/TR/dpub-aria-1.0/
[ecmascript]
ECMAScript Language Specification. Ecma International. URL:https://tc39.es/ecma262/
[foaf]
FOAF Vocabulary Specification 0.99 (Paddington Edition). Dan Brickley; Libby Miller. FOAF project. 2014 年 1 月 14 日。URL:http://xmlns.com/foaf/spec
[html]
HTML Standard. Anne van Kesteren; Domenic Denicola; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. 现行 标准。URL:https://html.spec.whatwg.org/multipage/
Link Relations. URL:https://www.iana.org/assignments/link-relations/link-relations.xhtml
[infra]
Infra Standard. Anne van Kesteren; Domenic Denicola. WHATWG. 现行标准。URL:https://infra.spec.whatwg.org/
[iso8601-1]
Date and time — Representations for information interchange — Part 1: Basic rules. ISO 8601-1:2019.. International Organization for Standardization (ISO). 2019. ISO 8601-1:2019. URL:https://www.iso.org/standard/70907.html
[json]
The application/json Media Type for JavaScript Object Notation (JSON). D. Crockford. IETF. 2006 年 7 月。 信息性。URL:https://tools.ietf.org/html/rfc4627
[json-ld11]
JSON-LD 1.1. Gregg Kellogg; Pierre-Antoine Champin; Dave Longley. W3C. 2020 年 7 月 16 日。W3C 推荐标准。URL:https://www.w3.org/TR/json-ld11/
[mfrel]
Microformats Wiki: existing rel values. Microformats.. URL:http://microformats.org/wiki/existing-rel-values#HTML5_link_type_extensions
[onix]
ONIX for Books. URL:https://www.editeur.org/83/Overview
[rfc2046]
Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types. N. Freed; N. Borenstein. IETF. 1996 年 11 月。标准草案。 URL:https://tools.ietf.org/html/rfc2046
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. 1997 年 3 月。最佳当前实践。URL: https://tools.ietf.org/html/rfc2119
[rfc5988]
Web Linking. M. Nottingham. IETF. 2010 年 10 月。提议标准。URL:https://tools.ietf.org/html/rfc5988
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. 2017 年 5 月。最佳当前实践。URL:https://tools.ietf.org/html/rfc8174
[rfc8288]
Web Linking. M. Nottingham. IETF. 2017 年 10 月。提议标准。URL:https://httpwg.org/specs/rfc8288.html
[schema.org]
Schema.org. URL:https://schema.org
[sri]
Subresource Integrity. Devdatta Akhawe; Frederik Braun; Francois Marier; Joel Weinberger. W3C. 2016 年 6 月 23 日。W3C 推荐标准。URL:https://www.w3.org/TR/SRI/
[url]
URL Standard. Anne van Kesteren. WHATWG. 现行标准。URL:https://url.spec.whatwg.org/
[wcag21]
Web Content Accessibility Guidelines (WCAG) 2.1. Andrew Kirkpatrick; Joshue O Connor; Alastair Campbell; Michael Cooper. W3C. 2018 年 6 月 5 日。W3C 推荐标准。URL:https://www.w3.org/TR/WCAG21/

J.2 信息性参考文献

[audiobooks]
Audiobooks. Wendy Reid; Matt Garrish. W3C. 2020 年 11 月 10 日。W3C 推荐标准。URL:https://www.w3.org/TR/audiobooks/
[ecma-404]
The JSON Data Interchange Format. Ecma International. 2013 年 10 月 1 日。标准。 URL:https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
[json-ld10]
JSON-LD 1.0. Manu Sporny; Gregg Kellogg; Markus Langhaler. 2014-01-16。W3C 推荐标准。URL:https://www.w3.org/TR/2014/REC-json-ld-20140116/
[json-schema]
JSON Schema: core definitions and terminology. K. Zyp. Internet Engineering Task Force (IETF). 2013 年 1 月 31 日。Internet-Draft。URL:https://tools.ietf.org/html/draft-zyp-json-schema
Identifier: A Link Relation to Convey a Preferred URI for Referencing. H. Van de Sompel; M. Nelson; G. Bilder; J. Kunze; S. Warner. IETF. URL:https://tools.ietf.org/html/draft-vandesompel-identifier-00
[string-meta]
Requirements for Language and Direction Metadata in Data Formats. Addison Phillips; Richard Ishida. 2017-12-01。URL: https://w3c.github.io/string-meta/
[WebIDL]
Web IDL. Boris Zbarsky. W3C. 2016 年 12 月 15 日。W3C 编辑草案。URL:https://heycam.github.io/webidl/
[webschemas-a11y]
WebSchemas Accessibility. URL:https://www.w3.org/wiki/WebSchemas/Accessibility