请查看勘误,了解 发布以来报告的任何错误或问题。
另请参阅 翻译。
本文档还提供以下非规范性格式:EPUB
Copyright © 2020 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
本规范定义了一种通用清单格式,用于表达数字 出版物的信息。它使用 [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 流程文档管辖。
本规范定义了一种通用清单格式,用于描述出版物。它设计为可 适应特定出版领域的需求,例如有声书制作,方式是通过指定 一种用于创建专门化的模块化方法。
本规范还旨在便于不同的用户代理架构。虽然 预期传统 Web 用户代理(浏览器)能够使用出版物清单, 但这不应限制任何其他可能类型的用户代理的能力(例如应用程序, 无论是独立运行还是在用户代理中运行,甚至包括包含自身用户 界面的出版物)。
本规范未定义用户代理应如何呈现使用该 清单格式的出版物。
本节为非规范性内容。
数字出版物由其清单描述,该清单提供一组使用 特定形状的 JSON-LD [json-ld11](一种用于链接数据的 JSON [ecma-404] 变体)表达的属性。
清单使用户代理能够理解数字 出版物的边界以及其资源之间的连接。它包括描述 数字出版物的元数据,因为出版物具有超出其组成 资源之外的身份和性质。清单还提供属于 数字出版物的资源列表和默认阅读顺序, 这是它将资源连接成一个连续作品的方式。
清单的属性描述用户代理处理和 呈现出版物所需的基本信息。为便于理解,这些属性分类如下:
清单还使用链接关系标识数字出版物的关键资源。这些
关系定义在rel 属性中,该属性属于 对象(即
表示默认阅读顺序、资源列表和链接
各节中每个资源的 JSON 对象)。LinkedResource
这些关系标识的资源类型分类如下:
本规范将出版物清单定义为 [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 处理器。用户代理只需要 能够读取清单的特定形状并将数据内部化。
本节为非规范性内容。
清单属性,特别是分类为描述性 属性的那些,主要来自 Schema.org 及其托管扩展 [schema.org]。 因此,这些属性继承其来自 Schema.org 的语法和语义,从而使清单 创作与 Schema.org 创作兼容。
当清单项对应于 Schema.org 属性时,其属性 定义会标识其映射,并在括号中包含定义类型(例如 CreativeWork 或 Book)。
Schema.org 还包括许多属性,这些属性虽然与出版相关,但 未在本规范中提及。由于本文档只定义最小的清单项集合 (见 § 4.7.3.2 附加清单属性),因此这些属性可用于清单。
使用附加 Schema.org 属性时,请确保它们对清单中指定的出版物类型有效。由于该词汇表使用的 继承模型,属性通常可用于许多 Schema.org 类型,但并非所有属性都适用于所有类型。 有关哪些类型接受哪些属性的更详细信息,请参阅 [schema.org]。
关于使用附加 Schema.org 属性的更多信息,也可见 § 4.5 出版物 类型和 § 4.7.3.2 附加清单属性。
本规范依赖于 Infra Standard [infra]。
数字出版物由表示其内容的有限资源集合 组成。此范围称为其边界,并在其清单中定义,如 § 5. 出版物资源所述。
清单的内部表示是用户代理在处理清单并移除所有可能的歧义 以及合并可从其他来源推断出的任何缺失值时创建的数据结构。
如果不存在歧义或缺失信息,则清单中表达的信息可能等同于 用户代理创建的内部表示。
配置文件是使用本规范中定义的清单格式 来描述其边界和内容的出版格式(例如有声书)。这些格式可以 使用配置文件特定术语和/或新要求来扩展本规范中的核心定义。
尽管配置文件在其结构和内容要求上可能有所不同,但此类差异会 受到限制,以在不同格式之间保持高度可预测性。(见 § 8. 模块化 扩展。)
除标记为非规范性的章节外,本规范中的所有创作指南、图表、示例和注释 均为非规范性内容。本规范中的其他所有内容均为规范性内容。
本文档中的关键词 MAY、MUST、MUST NOT、OPTIONAL、RECOMMENDED、REQUIRED、SHOULD 和 SHOULD NOT 应按 BCP 14 [RFC2119] [RFC8174] 中所述进行解释,且 仅当它们以此处所示的全大写形式出现时才如此。
所有算法说明均为信息性内容。
清单中 MUST 设置以下属性:
以下属性为 RECOMMENDED:
所有其他属性和资源关系的优先级为 OPTIONAL,但 MAY 由清单格式的实现修改。
某些属性是隐式必需的,因为当未显式创作时,它们会从其他 信息编译而来。更多信息见 § A. 内部表示数据模型。
本节描述可用于出版物 清单属性的值类别。
当清单属性期望以字面文本字符串——即 不依赖语言的值,例如代码值或日期——作为其值时,该值 MUST 表达为 [json] 字符串。
当清单属性期望以布尔值作为其值时,该
值 MUST 表达为 [ecmascript] 布尔值
(true 或 false)。
各种清单属性预期表达为 [json] 对象。虽然通常建议使用显式 对象,但以下各节 标识了也可以使用字符串值的情况。这些字符串会在 用户代理处理清单期间自动 转换为对象(文本值到对象的确切映射包含在每个定义中)。
当清单属性期望以可本地化文本字符串 作为其值时,该值 MUST 表达为以下之一:
LocalizableString。
单个字符串值表示一个隐含对象,其 value 属性是
该字符串的文本,其语言和基本方向由清单中的其他信息确定。
由于可本地化字符串旨在便于一个 值的多语言表示,因此接受可本地化字符串的属性始终接受这些值的数组。 因此,虽然只需创作单个字符串或对象,但为了处理的一致性,此类值会 转换为数组。
LocalizableString 是一个 [json] 对象,由
以下属性组成:
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
value
|
可本地化字符串的值。REQUIRED。 | 文本。 | 字面量 | (无) |
language
|
值的语言。OPTIONAL。 | 一个格式良好的语言 标签 [bcp47]。 | 字面量 | (无) |
direction
|
值的基本方向。OPTIONAL。 | ltr 或 rtl |
字面量 | (无) |
基本方向值的含义为:
ltr:表示文本值被显式定向设置为
从左到右文本。rtl:表示文本值被显式定向设置为
从右到左文本。缺失基本方向值意味着文本值会被显式定向 设置为第一个具有强方向性的字符的方向,遵循 Unicode 双向算法 [bidi] 的规则。
如果在最后一个示例中未设置基本方向值,则由于 字符串开头存在拉丁字符,文本将按照 Unicode 双向算法 [bidi] 显示为:
HTML היא שפת סימון.
但是,这将是不正确的。额外的 direction 值
对于控制显示以产生以下结果是必需的:
HTML היא שפת סימון.
请注意,示例中的 value 字段表示文本在 内存中的存储方式,因此它与此处描绘的两种渲染之间存在差异。 文本编辑器也可能以不同方式显示 JSON 值(例如,仅使用 Unicode 双向算法)。
另请参阅 [string-meta] 文档以获取进一步说明和示例。
当清单属性期望以实体(即 负责创作各个方面的个人或组织)作为其值时,该值 MUST 表达为以下之一:
单个字符串值表示 Entity 对象的一个实例,其
name 属性是该字符串的文本,其 type 被假定
为 Person [schema.org]。
Entity 被定义为
[schema.org] Person 或 Organization 类型的一个实例,具有以下
最小属性集:
| 术语 | 描述 | 必需值 | 值类别 | [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] Person 或 Organization 类型定义的任何
附加属性。用户代理同样不限于仅解释前述
属性。
当清单属性链接到一个或多个资源时,它 MUST 表达为以下之一:
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。 | 字面量 | (无) | |
duration
|
基于时间的媒体资源的总时长。OPTIONAL | 由 [iso8601-1] 定义的时长值。 | 字面量 |
duration(Property)
|
alternate
|
对资源在替代格式中的一个或多个重述的引用,其中
|
以下一项或多项:
字符串值表示一个隐含的 |
数组,由链接 资源组成 | (无) |
虽然用户代理对 integrity 属性的支持为 OPTIONAL,但支持使用此
属性进行密码学哈希比较的用户代理 MUST 按照 [sri]
执行。
本规范仅定义用于从替代格式中选择的 alternate 属性
(即基于 encodingFormat 或通过检查 URL)。配置文件
MAY 扩展此行为,以允许基于其他
标准进行选择。选择替代资源的过程见 § B.
选择替代资源。
定义 LinkedResource 对象时,建议始终
使用 encodingFormat 属性指定资源的媒体类型。
这样做可使用户代理更容易确定资源的可用性。
{
"type" : "LinkedResource",
"url" : "chapter1.html",
"encodingFormat" : "text/html",
"name" : "Chapter 1 - Loomings",
"integrity" : "sha256-13AE04E21177BABEDFDE721577615A638341F963731EA936BBB8C3862F57CDFC"
}
{
"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"
}
]
}
{
…
"resources" : [
"datatypes.svg",
{
"type" : "LinkedResource",
"url" : "test-utf8.csv",
"encodingFormat" : "text/csv",
"name" : "Test Results",
"description" : "CSV file containing the full data set used."
},
{
"type" : "LinkedResource",
"url" : "terminology.html",
"encodingFormat" : "text/html",
"rel" : "glossary"
}
],
…
}
当清单属性期望某种对象类型,而该对象类型未在本节中定义,也未由配置文件定义时,它 MUST 表达 为 [json] 对象(即,该属性的值 不会被处理以创建对象)。
URL 用于标识 与数字出版物关联的资源。当属性期望 URL 值时,它 MUST 是一个有效的 URL 字符串 [url]。
对于相对 URL 字符串,它们会使用基 URL [url] 解析为绝对 URL 字符串。
用于相对 URL 字符串的 基 URL 按如下方式确定:
因此,嵌入式清单中的相对 URL 字符串会根据引用该清单的
文档的 URL 解析,除非该文档声明了基 URL(即在其头部中使用
<base>
元素)。
标识符用于以持久且无歧义的方式指代数字出版物以及 负责其创作的实体。URL、URN、DOI、ISBN 和 PURL 都是出版中经常使用的持久 标识符示例。
当清单属性允许一个或多个相应类型的值 (例如字面量、对象或 URL)时,这些值会 表达为 [json] 数组。不过,当 属性值为单个元素时,数组语法 MAY 被 省略。
清单 MUST 使用以下两个组成部分按指定顺序设置其 JSON-LD 上下文 [json-ld11]:
https://schema.orghttps://www.w3.org/ns/pub-context
虽然 Schema.org 通常使用 http URI 方案引用,但该词汇表正在迁移为默认使用安全的
https 方案。因此,在出版物清单上下文中只识别 https 方案。
{
"@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"
}
],
…
}
清单中的每个自然语言属性值(例如 title、creators)都有默认的自然语言,即它所使用的语言(例如英语、 法语、中文)。它还具有书写时使用的自然基本方向—— 即显示方向,从左到右或从右到左。
数字出版物清单提供了将这两个概念全局设置以及在单个项目上设置的能力,以帮助用户代理解释和 呈现元数据。
设置基本方向的能力是 JSON-LD 1.1 [json-ld11] 的特性。换句话说,Publication Manifest 依赖于 JSON-LD 规范的该版本(而不是更早的 1.0 [json-ld10] 版本)。
自然语言清单属性的全局语言和基本方向声明会在上下文中使用
language
和 direction
关键词 [json-ld11] 分别设置。这些
值用于在清单处理期间将简单字符串值扩展为可本地化
字符串,也用于为省略语言或基本方向的可本地化
字符串提供语言和基本方向。
language 的值
MUST 是一个格式良好的语言
标签 [bcp47]。
direction 的值
MUST 是以下值之一:
"ltr":表示文本值被显式定向设置为
从左到右文本。"rtl":表示文本值被显式定向设置为
从右到左文本。全局语言和基本方向声明在存在时 MUST 跟随出版物上下文。
未为全局语言或基本方向指定默认值。
可以使用可本地化字符串,为清单中的任何自然语言值
局部设置语言或基本方向:
language 和
direction
关键词 [json-ld11] 的可能值与全局声明相同。此外,这两个值也可以是
null 的(JSON)值,表示分别没有设置显式语言或
方向。
如果某个值(例如组织名称)通常在没有任何关联语言的情况下使用
(例如“Google”),则将 language 的值设置为 null 会很有用。
语言或基本方向的局部声明优先于全局声明。
数字出版物的
清单使用
type 关键词 [json-ld11] 定义其出版物
类型。该类型 MAY 映射到
任何 [schema.org] 类型,但如果未指定类型,则CreativeWork 会被假定为默认值。
{
"@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
"type" : "CreativeWork",
…
}
可使用 CreativeWork 的更具体子类型,例如 Article、Book、TechArticle 和 Course,来代替
CreativeWork,或与其同时使用。
{
"@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
"type" : "Book",
…
}
每个 Schema.org 类型都会定义一组可与其一起使用的有效属性。为确保 清单可由感知 Schema.org 的处理器验证和处理,清单 SHOULD 只包含与所选类型关联的属性。
如果需要来自多个类型的属性,清单 MAY 包含 多个类型声明。
{
"@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
"type" : ["Book", "VisualArtwork"],
…
}
用户代理 SHOULD NOT 因清单对其声明的 Schema.org 类型无效而处理失败。
请参阅 Schema.org 网站,获取 CreativeWork
子类型的完整列表。
数字出版物使用
conformsTo 属性指明其清单和内容所符合的配置文件。
| 术语 | 描述 | 必需值 | 值类别 | [dcterms] 映射 |
|---|---|---|---|---|
conformsTo
|
配置文件的 URL。 | 一个带片段的绝对 URL 字符串 [url]。 | 数组,由字面量组成 | conformsTo |
用于配置文件的 URL 在其各自的规范中定义。
conformsTo 属性也可用于指示符合其他
规范和标准(例如 [wcag21])。
{
…
"conformsTo" : "https://www.w3.org/TR/audiobooks/",
…
}
abridged 属性提供关于数字出版物是否已从
其原始形式缩短的信息。
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
abridged
|
指示该图书是否为删节版。 | true 或 false。 |
布尔值 |
abridged(Book)
|
{
…
"abridged" : true,
…
}
无障碍属性提供关于数字出版物是否适合具有不同首选阅读方式的用户 使用的信息。这些属性通常补充 针对既定无障碍标准的评估,例如 [wcag21] 中提供的标准。
以下属性归类为无障碍属性:
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
accessMode
|
人可以通过其处理或感知信息的人类感觉感知系统 或认知能力。 | 一个或多个 Text。 | 数组,由字面量组成 |
accessMode(CreativeWork)
|
accessModeSufficient
|
足以理解资源全部智力内容的单一或组合访问模式列表。 | 一个或多个 ItemList。 | 数组,由对象组成 |
accessModeSufficient
(CreativeWork)
|
accessibilityFeature
|
资源的内容特性,例如无障碍媒体、替代内容以及 支持无障碍的增强功能。 | 一个或多个 Text。 | 数组,由字面量组成 |
accessibilityFeature
(CreativeWork)
|
accessibilityHazard
|
所描述资源中对某些用户在生理上有危险的特征。 | 一个或多个 Text。 | 数组,由字面量组成 |
accessibilityHazard
(CreativeWork)
|
accessibilitySummary
|
特定无障碍特性或缺陷的人类可读摘要, 与其他无障碍元数据保持一致。 | Text。 | 数组,由可本地化 字符串组成 |
accessibilitySummary
(CreativeWork)
|
这些属性的详细描述,包括与其一起使用的预期值, 可在 [webschemas-a11y] 中获得。
如果需要的信息多于这些属性所能表达的内容,也可以提供对详细无障碍 报告的引用。
{
…
"accessMode" : ["textual", "visual"],
"accessibilityFeature" : ["alternativeText", "longDescription"]
"accessModeSufficient" : [
{
"type" : "ItemList",
"itemListElement" : ["textual", "visual"]
},
{
"type" : "ItemList",
"itemListElement" : ["textual"]
}
],
…
}
地址是一个URL,用于标识数字出版物的源位置。
它使用 url 属性表达。
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
url
|
出版物的 URL。 | 有效的 URL 字符串 [url]。 | 数组,由URL组成 |
url(Thing)
|
数字出版物 MAY 具有多个地址,但所有 地址 MUST 解析为同一文档。
{
…
"url" : "https://publisher.example.org/frankenstein",
…
}
数字出版物的
规范标识符属性为数字出版物提供唯一
标识符。
它使用 id 属性表达。
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
id
|
出版物的首选版本。 | URL 记录 [url]。 | 标识符 | (无) |
确保规范标识符唯一性不在本 规范范围内。实际可达到的唯一性取决于诸如所用标识符方案的约定 以及对标识符分配的控制程度等因素。
如果清单中未提供规范标识符,或者该值是无效 URL, 则数字出版物没有规范标识符。用户代理 MUST NOT 尝试从清单中提供的任何其他 标识符构造规范标识符。
规范标识符的指定 MAY 通过
使用 identifier 属性 [schema.org] 和/或其子类型包含其他类型的标识符来补充。
{
…
"id" : "http://www.w3.org/TR/tabular-data-model/",
"url" : "http://www.w3.org/TR/2015/REC-tabular-data-model-20151217/",
…
}
{
…
"id" : "urn:isbn:9780123456789",
"url" : "https://publisher.example.org/wuthering-heights",
…
}
创建者是负责 创作数字出版物的个人或组织。
以下属性归类为创建者:
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
artist
|
出版物的主要艺术家,媒介不是铅笔或 数字线稿。 | 一个或多个 Person。 |
数组,由实体组成 |
artist(VisualArtwork)
|
author
|
出版物的作者。 | 一个或多个 Person 和/或
Organization。
|
数组,由实体组成 |
author(CreativeWork)
|
colorist
|
为已描墨图画上色的个人。 | 一个或多个 Person。 |
数组,由实体组成 |
colorist(VisualArtwork)
|
contributor
|
其角色不适合本表其他角色之一的贡献者。 | 一个或多个 Person 和/或
Organization。
|
数组,由实体组成 |
contributor(CreativeWork)
|
creator
|
出版物的创建者。 使用此属性可能导致用户代理中的结果不一致。它在 [schema.org] 中被标记为 author 的同义词,但没有关于 哪一个优先或如何组合它们的指导。建议只使用 其中之一,并优先使用更具体的 author 属性。 |
一个或多个 Person 和/或
Organization。
|
数组,由实体组成 |
creator(CreativeWork)
|
editor
|
出版物的编辑。 | 一个或多个 Person。 |
数组,由实体组成 |
editor(CreativeWork)
|
illustrator
|
出版物的插画师。 | 一个或多个 Person。 |
数组,由实体组成 |
illustrator(Book)
|
inker
|
用墨水描摹铅笔画的个人。 | 一个或多个 Person。 |
数组,由实体组成 |
inker(VisualArtwork)
|
letterer
|
向美术作品添加文字,包括对话气泡和音效的个人。 | 一个或多个 Person。 |
数组,由实体组成 |
letterer(VisualArtwork)
|
penciler
|
绘制主要叙事美术作品的个人。 | 一个或多个 Person。 |
数组,由实体组成 |
penciler(VisualArtwork)
|
publisher
|
出版物的出版者。 | 一个或多个 Person 和/或
Organization。
|
数组,由实体组成 |
publisher(CreativeWork)
|
readBy
|
朗读(表演)出版物的人(用于有声书)。 | 一个或多个 Person。 |
数组,由实体组成 |
readBy(Audiobook)
|
translator
|
出版物的译者。 | 一个或多个 Person 和/或
Organization。
|
数组,由实体组成 |
translator(CreativeWork)
|
创建者 MUST 表示为以下之一:
Person [schema.org] 的名称;或
Person 或 Organization [schema.org] 的实例。单个字符串值是 [schema.org] Person
的简写,其 name 属性设置为该字符串值。(另见 § 4.2.4.2
实体。)
清单 MAY 包含每种类型的多个创建者。
{
…
"url" : "https://publisher.example.org/alice-in-wonderland",
"author" : {
"type" : "Person",
"name" : "Lewis Carroll"
}
}
{
…
"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/"
}
…
}
全局时长表示
基于时间的
数字出版物的总长度(例如有声书,或
由一系列视频剪辑组成的图书)。它使用
duration 属性表达。
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
duration
|
基于时间的出版物的总时长。 | 由 [iso8601-1] 定义的时长值。 | 字面量 |
duration(Property)
|
{
…
"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 时长语法给出了简要描述。
最后修改日期是数字出版物最后更新的日期(即
最近一次对出版物的任何资源做出更改的时间,包括清单)。它使用
dateModified 属性表达。
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
dateModified
|
出版物的最后修改日期。 | Date 或 DateTime
值 [schema.org],二者分别
以 ISO 8601 日期或日期时间格式表达 [iso8601-1]。
|
字面量 |
dateModified(CreativeWork)
|
最后修改日期不一定反映出版物的所有更改(例如, 如果某种数字出版物格式允许引用第三方内容)。用户代理 SHOULD 检查各个资源的最后修改日期,以 确定它们是否已更改并需要更新。
{
…
"dateModified" : "2015-12-17",
…
}
发布日期是数字出版物最初
发布的日期。它表示出版物生命周期中的一个静态事件,并允许
后续修订被识别和比较。它使用
datePublished 属性表达。
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
datePublished
|
出版物的创建日期。 | Date 或 DateTime,二者分别表达
为 ISO 8601 日期或日期时间格式 [iso8601-1]。
|
字面量 |
datePublished(CreativeWork)
|
确切的发布时间有意留待解释:它可以是 出版物首次可用的时间,也可以是发布前的某个时间点, 即出版物被认为已定稿的时间。
{
…
"datePublished" : "2015-12-17",
"dateModified" : "2016-01-30",
…
}
数字出版物至少有一种 自然语言,即内容所表达使用的语言(例如英语、 法语、中文)。清单包含以下属性来设置此概念,该概念 可影响例如用户代理的行为(例如预加载词典或 文本转语音引擎)。
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
inLanguage
|
出版物的默认语言。 | 一个或多个格式良好的 语言标签 [bcp47]。 | 数组,由字面量组成 |
inLanguage(Property)
|
自然语言 MUST 是一个格式良好的语言标签 [bcp47]。
如果用户代理需要出版物语言,而清单中没有该语言,或者 获得的值不是格式良好的 [bcp47],则用户代理 MAY 在生成其内部表示时尝试确定出版物语言。本 规范不强制规定如何创建此类语言标签。用户代理可以:
如果用户代理需要出版物的主要语言,并且指定了多种语言,
则 inLanguage 数组中的第一个条目 MUST 被
识别为主要语言。
区分出版物的语言与构成它的各个资源的 语言很重要。例如,如果这些资源是 HTML,则也需要在这些资源中设置语言。 出版物的语言不会被继承。
阅读推进方向建立在数字
出版物内从一个资源到下一个资源的
阅读方向。它用于适配出版物级别交互,例如
菜单位置、触摸手势、交换方向以及下一页和上一页的点击区域。
阅读推进使用 readingDirection 属性表达。
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
readingProgression
|
从一个资源到另一个资源的阅读推进方向。 | 以下之一:ltr 或 rtl。 |
字面量 | (无) |
此属性的值 MUST 是以下之一:
ltr:从左到右;或rtl:从右到左。默认值为 ltr。如果未设置 readingProgression,
用户代理在生成其内部表示时 MUST 使用默认值。
此属性对单个主要资源的渲染没有影响;它 只与从一个资源到另一个资源的推进方向相关。
{
…
"readingProgression" : "ltr",
…
}
标题提供数字
出版物的人类可读名称。它使用 name 属性表达。
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
name
|
出版物的人类可读标题。 | 一个或多个 Text。 | 数组,由可本地化 字符串组成 |
name(Thing)
|
如果清单中未包含标题,用户代理 MUST 创建一个。获取标题的过程定义于 § 7.4.3 添加 默认值。
{
…
"name" : "Heart of Darkness",
…
}
出版物资源通过默认 阅读顺序、资源列表和链接指定,如 本节所定义。这些列表包含对信息性 资源的引用,例如隐私政策,以及结构性资源,例如目录。
无需在这些列表中的任何一个中包含对清单的引用。
默认阅读顺序是穿过一组数字出版物 资源的特定推进路径。用户可能沿替代路径浏览内容,但在没有 此类交互的情况下,默认阅读顺序定义从一个 资源到下一个资源的预期推进。
默认阅读顺序使用 readingOrder 属性表达。
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
readingOrder
|
穿过数字出版物资源的推进顺序。 |
一个或多个 |
数组,由链接 资源组成 | (无) |
readingOrder 属性的每个元素 MUST 表达为:
LinkedResource
对象的实例。单个字符串值表示 LinkedResource 对象的一个实例,其
url 属性是该字符串的文本。
项目的顺序具有意义。
阅读顺序中表达的 URL MAY 包含片段标识符,尽管本规范的配置文件 MAY 限制其使用,以及支持哪些 方案和特性。片段标识符应按其各自规范的定义解释(例如,要将用户移动到的起始位置, 或在移动到阅读顺序中的下一个项目之前要渲染的内容范围)。
资源 SHOULD NOT 在阅读顺序中列出多次, 因为这可能导致用户代理中出现意外结果(例如,指向该资源的链接可能无法 解析为阅读顺序中的正确实例)。
当数字出版物仅由链接到清单的资源组成时, 默认阅读顺序 MAY 被省略。当默认阅读 顺序不存在时,用户代理在编译内部 表示时 MUST 包含链接资源的条目。更多信息见 § 7.4.3 添加默认值。
默认阅读顺序在清单处理之后 MUST 至少包含一个资源。
{
…
"readingOrder" : [
"html/title.html",
"html/copyright.html",
"html/introduction.html",
"html/epigraph.html",
"html/c001.html",
…
],
…
}
{
…
"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"
},
…
],
…
}
资源列表枚举在数字出版物的
处理或渲染中使用、但尚未列在默认阅读顺序中的任何附加资源。
它使用 resources 属性表达。
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
resources
|
出版物处理或渲染中使用的附加出版物资源列表。 |
一个或多个 |
数组,由链接 资源组成 | (无) |
resources 属性的每个元素 MUST
表达为以下之一:
LinkedResource
对象的实例。单个字符串值表示 LinkedResource 对象的一个实例,其
url 属性是该字符串的文本。
项目的顺序不具有意义。
为避免有关资源的信息发生冲突,特定资源的 URL SHOULD NOT 在资源列表中重复。
资源列表中表达的 URL SHOULD NOT 包含片段标识符。
资源列表的完整性可能影响数字出版物在某些阅读场景中的可用性 (例如离线阅读能力)。因此,强烈建议提供出版物所有组成 资源的完整列表,超出默认阅读顺序中列出的那些资源。
在某些情况下,可能不容易获得这些资源的完整列表(例如, 从其源代码深处引用资源的第三方脚本),但即使其中一些 资源未被标识为属于出版物,用户代理 SHOULD 仍然能够渲染出版物 (例如,如果它在没有这些资源的情况下被离线使用)。
{
…
"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"
},
…
],
…
}
链接列表用于提供
对数字
出版物的处理和渲染不需要的资源列表(即,即使这些资源不可用,
出版物的内容也不受影响)。链接使用 links 属性
表达。
| 术语 | 描述 | 必需值 | 值类别 | [schema.org] 映射 |
|---|---|---|---|---|
links
|
与出版物关联但其处理或渲染不需要的资源列表。 |
一个或多个 |
数组,由链接 资源组成 | (无) |
links 属性的每个元素 MUST 表达
为以下之一:
LinkedResource
对象的实例。单个字符串值表示 LinkedResource 对象的一个实例,其
url 属性是该字符串的文本。
项目的顺序不具有意义。
RECOMMENDED 使用设置了
rel 值的 LinkedResource 对象。
链接资源通常提供给用户代理,用于增强或改进 处理或渲染,例如:
链接也可用于标识在线渲染出版物时使用的资源, 但当出版物被离线或打包时,这些资源不是必须包含的 (例如,为了最小化大小)。这些包括:
links 列表 SHOULD 包含渲染链接资源所需的资源
(例如脚本、图像、样式表)。
links 列表中列出的资源 MUST NOT 列在
默认阅读顺序或资源列表中。
用户代理 MAY 忽略链接资源,并且不要求将它们 与出版物一起离线。这些资源 SHOULD NOT 在打包出版物时 包含。
清单旨在为用户代理在呈现和渲染数字出版物时使用 提供一组基本属性,但 MAY 通过以下方式扩展:
本规范未定义此类附加属性如何由用户代理编译、存储或公开 在其清单的内部表示中。 用户代理 MAY 忽略部分或全部扩展 属性。
清单 MAY 通过指向元数据记录的链接进行扩展,例如
ONIX [onix] 或 BibTeX [bibtex],使用 对象,
其中:LinkedResource
LinkedResource 的 rel 属性
包含相关标识符(例如,如果链接记录
包含描述性元数据,则可使用 describedby 标识符 [iana-link-relations]);
encodingFormat 的值标识为该特定记录类型定义的 MIME 媒体
类型 [rfc2046],
如适用。当链接记录属于出版物的一部分时(即,它们不仅仅用于清单可扩展性), 会包含在资源列表中。 否则,它们会包含在链接列表中。
{
…
"links" : [
{
"type" : "LinkedResource",
"url" : "https://www.publisher.example.org/time-machine/onix.xml",
"encodingFormat" : "application/onix+xml",
"rel" : "describedby"
},
…
],
…
}
application/onix+xml MIME 类型在撰写本文档时
尚未由 IANA 注册,示例中包含它仅用于
说明目的。
附加属性 MAY 直接包含在清单中,使用 [schema.org] 或 [dcterms] 等公共方案。专有术语 MAY 使用,但 RECOMMENDED 使用紧凑 IRI [json-ld11] 包含此类术语,并将前缀定义为上下文的一部分。
正确使用前缀和紧凑 IRI 是使用完整 JSON-LD 处理器处理清单所必需的, 但不是本规范定义的处理算法的要求。 如果预期进行完整 JSON-LD 处理,则必须单独执行 前缀术语的验证。
{
"@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]。
来自这些
词汇表的属性可以使用,而无需声明其前缀。
{
…
"copyrightYear" : "2015",
"copyrightHolder" : "World Wide Web Consortium",
…
}
{
…
"dcterms:subject" : ["Web data description languages","Data integration","Data Exchange"],
…
}
封面是用户代理可用于呈现数字出版物的资源(例如,在图书馆或 书架中,或在最初加载出版物时)。
封面由 cover 链接关系标识。
指向封面的链接 MUST NOT 在链接列表中指定。
cover 术语目前尚未在 IANA 链接
关系中注册,但工作组预计会添加它。
{
…
"resources" : [
{
"type" : "LinkedResource",
"url" : "cover.html",
"encodingFormat" : "text/html",
"rel" : "cover"
},
…
],
…
}
如果封面是图像(无论是否嵌入在 HTML 资源中),强烈
建议遵循 成功准则
1.1.1 [wcag21],
提供替代文本和扩展描述。对于无法
嵌入此信息的图像格式,可使用name 和 description 属性(属于 )分别
提供替代
文本和扩展描述。在这些情况下,LinkedResourcename 属性
SHOULD 始终设置——对于
装饰性图像,该属性可以留空。
{
…
"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"
},
…
],
…
}
{
…
"resources" : [
{
"type" : "LinkedResource",
"url" : "cover.jpg",
"encodingFormat" : "image/jpeg",
"rel" : "cover",
"name" : "",
},
…
],
…
}
如果用户代理需要封面图像的替代文本以使界面无障碍,
而 name 属性未指定,则它 MAY 尝试
从出版物元数据构造替代文本。本规范不强制规定
如何创建此类替代文本。一种方法是将替代
文本构造为一个字符串,标识该图像为封面,后跟出版物标题。
只有一个资源 MAY 被标识为封面,但附加
封面 MAY 使用alternate
属性指定(例如,用于提供
替代尺寸或
分辨率)。
{
…
"resources" : [
{
"type" : "LinkedResource",
"url" : "lilliput.jpg",
"encodingFormat" : "image/jpeg",
"rel" : "cover"
"alternate" : [
{
"type" : "LinkedResource",
"url" : "lilliput.svg",
"encodingFormat" : "image/svg+xml",
"rel" : "cover"
}
]
},
…
],
…
}
页列表是一种导航辅助工具,包含数字出版物内 静态页面分界点的列表。
页列表由 pagelist 链接关系标识。
pagelist 术语目前尚未在 IANA 链接
关系中注册,但工作组预计会添加它。
只有一个资源 MAY 被标识为包含页列表。如果 指定了多个实例,用户代理 MUST 使用遇到的第一个 实例,并优先考虑阅读 顺序中的实例。
指向页列表的链接 MUST NOT 在链接列表中指定。
{
…
"resources" : [
{
"type" : "LinkedResource",
"url" : "toc_file.html",
"rel" : "pagelist"
},
…
],
…
}
目录是一种导航辅助工具,提供指向数字出版物主要结构 章节的链接。
包含目录的资源
由 contents 链接关系标识 [iana-link-relations]。目录本身
是该资源中第一个 role 值为
doc-toc 的元素,如 § C.2
HTML 结构中所定义。
只有一个资源 MAY 被标识为包含目录。 如果指定了多个实例,用户代理 MUST 使用 遇到的第一个实例,并优先考虑阅读顺序中的资源。
本规范的配置文件 MAY
定义当没有资源由
contents 关系标识时,如何定位包含目录的
资源。
指向目录的链接 MUST NOT 在链接列表中指定。
目录的 RECOMMENDED 结构和处理模型定义于 § C. 机器可处理的目录。
{
…
"resources" : [
{
"type" : "LinkedResource",
"url" : "toc_file.html",
"rel" : "contents"
},
…
],
…
}
无障碍报告提供关于数字出版物是否适合具有不同首选阅读方式的用户 使用的信息。这些报告通常标识 针对既定无障碍标准的评估结果,例如 [wcag21] 中提供的标准,并且是 确定出版物可用性的重要信息来源。
无障碍报告使用 accessibility-report 链接
关系标识。
accessibility-report 术语目前尚未在
IANA 链接关系中注册,但工作组预计会添加它。
将报告作为出版物的资源包含会很有帮助,这样它就可用, 例如,在离线阅读出版物时。
以人类可读格式(例如 HTML [html])提供无障碍报告,有助于确保它可被用户访问和 理解。使用机器可处理的元数据(例如 Schema.org [schema.org] 中提供的元数据) 扩充报告,还将有助于机器处理。
{
…
"resources" : [
…
{
"type" : "LinkedResource",
"url" : "https://www.publisher.example.org/sherlock-holmes-accessibility.html",
"rel" : "accessibility-report"
},
…
],
…
}
并非所有数字出版物都会向 所有用户开放(例如,它们可能仅限于网站的注册用户)。在这种情况下, 出版者可能希望提供内容预览,以吸引用户访问完整 版本。
预览使用
preview 链接关系标识 [iana-link-relations]。
预览 MAY 位于外部,也可以作为 数字出版物的资源包含。
{
…
"links" : [
{
"type" : "LinkedResource",
"url" : "preview.mp3",
"encodingFormat" : "audio/mpeg",
"rel" : "preview"
},
…
],
…
}
{
…
"links" : [
{
"type" : "LinkedResource",
"url" : "https://publisher.example.org/jekyll-hyde-preview.html",
"encodingFormat" : "text/html",
"rel" : "preview"
},
…
],
…
}
用户通常有法定权利知道并控制收集了哪些关于 他们的信息、这些信息如何存储以及存储多久、它是否可用于个人 识别,以及如何将其删除。因此,包含一份处理此类隐私 关切的声明,是发布数字 出版物的重要组成部分。即使没有收集任何信息,此类声明 也会提高用户对内容的信任。
可以为此目的在清单中包含指向隐私政策的链接。将 隐私政策作为出版物的资源包含会很有帮助,这样它就可用, 例如,在离线阅读出版物时。
隐私政策
使用 privacy-policy 链接关系标识 [iana-link-relations]。
{
…
"resources" : [
…
{
"type" : "LinkedResource",
"url" : "https://www.w3.org/Consortium/Legal/privacy-statement-20140324",
"encodingFormat" : "text/html",
"rel" : "privacy-policy"
},
…
],
…
}
如果需要表达本规范定义之外的其他关系,rel 属性可以通过以下
方式之一扩展:
属于数字出版物的唯一资源列表——其边界——
从列在readingOrder 和 resources 中的资源并集中获得,
包括任何alternate资源。创建此列表的确切
过程在清单处理算法中描述。
所有其他资源都在数字出版物的边界之外(例如,列在links节中的资源,以及内容中指向 Web 上外部
资源的超链接)。
本规范不对出版物资源施加任何限制,但本规范的配置文件 MAY 限制资源的内容类型和位置。
用户代理 MAY 根据资源是否在数字出版物的边界内, 选择以不同方式处理和渲染资源(例如,从出版物的 离线或打包版本中排除外部资源)。
指向清单的链接 MUST 采用以下一种或两种形式:
一个 HTTP Link 头字段 [rfc5988],其
rel 参数设置为值“publication”。
Link: <https://example.com/pub/manifest>; rel=publication
一个 link 元素 [html],其 rel
属性设置为值“publication”。
<link href="https://example.com/pub/manifest" rel="publication"/>
当清单嵌入在 HTML 文档中时,链接 MUST 包含一个片段标识符,该标识符引用包含清单的
script
元素(见 § 6.2 嵌入)。
<link href="#example_manifest" rel="publication">
…
<script id="example_manifest" type="application/ld+json">
{
"@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
…
}
</script>
当数字出版物格式允许清单
嵌入在 HTML 文档中时,清单 MUST 包含在一个script
元素 [html]中,其type
属性设置为 application/ld+json [json-ld11]。
<script type="application/ld+json">
{
"@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
…
}
</script>
数字出版物格式 MAY 定义用于发现清单的替代方法,这些方法不涉及 链接到或 嵌入清单(例如,可使用受限名称和/或 位置来发现该清单)。本规范不对这些方法添加任何限制。
本节依赖于 Infra 标准 [infra]。
本节为非规范性内容。
虽然数字出版物的清单以 [json-ld11] 创作,但本节描述的清单处理步骤详细说明了 用户代理如何将清单转换为其数据的内部 表示。该算法使用 [infra] 中定义的术语和 数据类型描述该过程,并且如果成功,会返回一个 [infra] 映射形式的数据。
此算法的实际实现会使用所用语言中相应的构造和 数据类型。
处理算法中使用以下错误类型:
用户代理 SHOULD 暴露验证错误和致命错误,但本 规范不规定这样做的方式。
对于验证错误,用户代理 SHOULD 区分 错误的严重程度(即,违反的是必需实践还是推荐实践)。
处理算法中的某些步骤取决于术语的预期值
类别,因此术语使用的上下文可能会影响处理(例如,只有当 url 是出版物清单的直接属性时,它才期望为
数组形式的 URL)。为区分这些用法,会向某些
函数调用提供一个上下文。该上下文设置为发起处理调用的对象类型。
识别
类型的默认列表包括 Person、Organization 和
LinkedResource。配置文件
MAY 扩展此列表,以包含额外的对象类型。
如果没有向函数提供上下文,则正在处理的术语被认为属于全局 上下文(即,它是清单的直接子项)。
扩展识别类型列表时,可能还需要扩展规范化 数据函数,以确保所有对象都指定了其类型 (例如,当字符串值自动扩展为对象时)。
此算法接受以下参数:
此算法不描述如何发现和获取清单。执行这些操作的步骤 由每种数字出版物 格式定义。
要生成内部表示,运行以下 步骤:
令 manifest 为给定 text 后解析JSON 为 Infra 值的结果。如果 manifest 不是映射,则为致命 错误,返回失败。
(§ 4.3 清单
上下文)如果 manifest["@context"] 未设置为列表,或者
manifest["@context"] 中的第一个和第二个项目不是字符串值
“https://schema.org”和“https://www.w3.org/ns/pub-context”,
且按此顺序排列,则为致命错误,返回失败。
如果上下文 URL 未按预期设置, 则 JSON 数据不表示出版物清单。
(§ 4.6 配置文件 一致性)令 processed["profile"] 为清单所符合的配置文件。 按如下方式设置 processed["profile"]:
如果 manifest["conformsTo"] 未设置,或未包含用户代理 识别为能够处理和/或渲染的配置文件,则用户代理 SHOULD 检查阅读顺序中资源的媒体类型, 以确定该出版物是否匹配其能够处理或渲染的配置文件。如果匹配,则为验证错误, 将 processed["profile"] 设置为匹配的配置文件。否则,为致命错误,返回失败。
否则,将 processed["profile"] 设置为 manifest["conformsTo"] 中用户代理能够处理和/或 渲染的第一个 URL。
出版物所符合的配置文件决定在处理期间必须执行的任何附加 扩展步骤。这些步骤由其各自的规范定义。
创建新术语 profile 是因为 conformsTo 不 限于配置文件标识符(即,新术语在内部表示中提供配置文件的持久 标识符)。
(§ 4.4.1 全局声明)令 lang 为全局语言, dir 为从此步骤获得的全局方向。最初将每个都设置为 空字符串。
对于 manifest["@context"] 中的每个 context,从最后一个项目移动到第一个项目,如果 context 是映射:
如果 lang 既不是空字符串 也不是格式良好的 [bcp47] 语言标签,则为验证错误,将 lang 设置为空 字符串。
如果 dir 既不是空字符串
也不是“ltr”或“rtl”中的一个值,则为验证
错误,将 dir 设置为空
字符串。
此处获得的全局语言和方向声明分别用于为没有声明的可本地化字符串设置语言 和基本方向。
迭代器会反向遍历 @context,因为最后的语言和 方向声明会覆盖任何较早的声明。
(§ 4.3 清单 上下文)如果配置文件要求对清单 上下文进行附加验证,则这些步骤在此处执行。
对于 manifest 中的每个 term → value,当调用规范化数据并给定 term、value、lang、dir 和 base 成功时,将 processed[term] 设置为其结果。 如果返回失败,则不要将 term 添加到 processed。
数据规范化步骤会标准化传入的清单数据,以移除任何 创作便利写法,例如在预期对象或数组时使用字符串的能力。 所得的已处理数据会添加到 processed 变量中, 并在后续步骤中对其进行操作。
将 processed 设置为在给定 processed 时运行数据 验证的结果。
数据验证检查会确保传入数据匹配其预期值 类别。对预期值的任何限制也会在此步骤强制执行,并且 任何无效数据都会从最终表示中移除。
如果配置文件指定了需要运行的附加处理函数, 则这些步骤在此时执行。
在给定 processed 以及指定时的 document 后,当运行添加 默认值成功时,将 processed 设置为其结果。 否则,终止处理,返回失败。
此步骤检查清单中缺失的任何信息是否可以从链接到该文档的 HTML 文档或其他来源获得。
返回 processed。
有关所得结构的可视化,请参阅 § A. 内部表示数据模型。
要为属性 term 的 value规范化数据,并带有全局语言 lang、全局方向 dir、基 URL base,以及可选上下文 context,运行以下步骤:
令 normalized 为 value 的值。
数据规范化步骤在此步骤定义的 normalized 变量中保存的 传入值副本上执行。此变量会在成功规范化过程结束时返回。
(§ 4.3 清单 上下文)如果 term 是 @context,则返回失败。
@context 为清单的初始处理提供信息, 但不会保留在内部数据表示中。返回失败表示 移除该术语。
(§ 4.2.7 数组) 如果根据 context,term 预期为数组,且 value 不是列表,则将 normalized 设置为 列表: « value »。
(§ 4.2.4.2 实体)如果根据 context,term 预期为 数组形式的实体,则对于 normalized 中的每个 entity:
(§ 4.2.4.1 可本地化字符串)如果根据 context,term 预期为数组形式的可本地化字符串,则对于 normalized 中的每个 item:
«[
"value" → item,
"language" → lang,
"direction" → dir
]»
如果 lang 或 dir 未设置,或为空字符串,则分别移除 item["language"] 或 item["direction"]。
否则,按如下方式处理 item 中的映射:
自然语言文本值预期显式定义为可本地化 字符串对象,但为了方便,在清单中可以是简单字符串。例如,如果没有 通过全局语言声明提供语言信息,则:
{
"@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",
]»
]»
»,
…
}
(§ 4.2.4.3 链接资源)如果根据 context,term 预期为数组形式的LinkedResources,则对于 normalized 中的每个 resource:
(§ 4.2.5 URL)如果根据 context,term 预期为 URL 或 数组形式的 URL:
如果 normalized 是字符串,则在给定 normalized 后,当运行转换为绝对 URL成功时,将 normalized 设置为其结果。如果返回失败,则返回 失败。
否则,如果 normalized 是列表,则对于 normalized 中的每个 item,在给定 normalized 后, 当运行转换为 绝对 URL成功时,将 item 设置为其结果。如果返回失败, 则从 normalized 中移除 item。
否则,为验证 错误,返回失败。
清单中的相对 URL 会 根据基值解析,以获得绝对 URL。例如:
"url": "chapter01.html"
对于托管在
https://example.org/publications/wuthering-heights 的出版物,将得到:
"url" → "https://example.org/publications/wuthering-heights/chater01.html"
(§ 8. 模块化 扩展,扩展点)如果配置文件为配置文件特定术语定义了处理 步骤,则这些步骤在此时执行。
按如下方式递归检查 normalized,以确保所有属性都得到 规范化:
否则,如果 normalized 是映射:
否则,不执行任何操作。
为了确保清单中的所有属性都得到处理,此步骤 递归检查 normalized,查找需要处理的附加映射条目。如果 normalized 是列表,则检查每个项目以确定它是否为 可处理的映射。
如果返回失败,则从映射中移除该项目。
返回 normalized。
要将 url转换为绝对 URL, 并带有基 URL base,运行以下步骤:
要对映射 data 执行数据验证,运行以下步骤:
对于 data 中的每个 term → value,在给定 term 和 value 时,当运行全局数据检查 成功时,将 term 设置为其结果。如果返回失败, 则移除 data[term]。
此步骤将每个条目传递给一组需要在值上运行的全局验证检查, 并递归地在值内的任何属性上运行这些检查。
如果属性无效且必须移除,则返回失败。
如果配置文件指定了数据验证检查,则这些 步骤在此时执行。
配置文件验证步骤优先于默认步骤,因此如果配置文件 例如有不同的默认值要应用,这些值会被应用。
(§ 4.5
出版物类型)如果 data["type"] 未设置或是空列表,则为验证错误,设置为
« "CreativeWork" »。
(§ 4.7.1.2
无障碍)如果 data["accessModeSufficient"] 已设置,则对于
data["accessModeSufficient"] 中的每个 item,如果 item["type"]
未设置或不包含
“ItemList”,则从 data["accessModeSufficient"] 中移除
item。
(§ 4.7.1.4 规范标识符)如果 data["id"] 未设置或是空 字符串,则为验证错误。
(§ 4.7.1.6 时长)如果 data["duration"] 已设置且不是有效的时长 值,按 [iso8601-1], 则为验证错误,移除 data["duration"]。
(§ 4.7.1.7 最后修改日期)如果 data["dateModified"] 已设置且 按 [iso8601-1] 不是有效的日期或日期时间,则为验证错误,移除 data["dateModified"]。
(§ 4.7.1.8 发布日期)如果 data["datePublished"] 已设置且 按 [iso8601-1] 不是有效的日期或日期时间,则为验证错误,移除 data["datePublished"]。
(§ 4.7.1.9 出版物语言)如果 data["inLanguage"] 已设置,则对于 data["inLanguage"] 中的每个 item,如果 item 不是格式良好的 [bcp47],则为验证错误,从 data["inLanguage"] 中移除 item。
(§ 4.7.1.10
阅读推进方向)如果
data["readingProgression"] 未设置,则设置为“ltr”。
否则,如果它不是必需的
方向值之一,则为验证错误,设置
为“ltr”。
(§ 5. 出版物资源)按如下方式获取并验证出版物边界内的唯一 URL:
如果 readingOrder 已设置,则令 readingOrderURLs 为 在给定 readingOrder 后运行获取唯一 URL的结果。否则,令 readingOrderURLs 为 空有序集。
如果 resources 已设置,则令 resourcesURLs 为 在给定 resources 后运行获取唯一 URL的结果。否则,令 resourcesURLs 为空有序集。
将 data['uniqueResources'] 设置为 readingOrderURLs 和 resourceURLs 的并集。
此步骤获取阅读顺序和资源列表中的唯一 URL 列表。然后它将 data['uniqueResources'] 设置为这两个集合的并集, 表示出版物边界内唯一资源的完整 列表。
如果 readingOrder 或 resources 包含重复资源声明,此步骤也会发出警告。验证错误会作为从 每个列表中获取唯一 URL 的一部分发出。
(§ 4.7.2.3 链接)如果 data["links"] 已设置,则对于 data["links"] 中的每个 link:
令 url 为在 link["url"] 上运行URL 序列化器 [url],并设置 exclude fragment flag 后所得的结果。
如果 data["uniqueResources"] 包含 url,则为验证 错误,从 data["links"] 中移除 link,然后继续。
如果 link["rel"]
包含以下任一
ASCII 大小写不敏感值:“contents”、“pagelist”或
“cover”,则为验证
错误,从 data["links"] 中移除
link。
在前一步获得唯一出版物资源列表之后,会检查 links 属性,以确保任何链接资源不会也被列为 出版物资源。
如果链接未指定 rel 值,则发出警告。如果其
rel 属性指定结构性资源,则移除该链接,
因为结构性资源必须位于出版物边界内。
(§ 4.8.1 结构性资源)按如下方式验证结构性关系的使用:
将 resources 设置为 data["readingOrder"] 的值(如果已 定义),否则设置为空列表。当 data["resources"] 已定义时,使用其扩展 resources。
如果 resources 中有多个项目的
rel
条目包含
ASCII 大小写不敏感值“contents”,则为验证错误。
如果 resources 中有多个项目的
rel
条目包含
ASCII 大小写不敏感值“pagelist”,则为验证错误。
如果 resources 中有多个项目的
rel
条目包含
ASCII 大小写不敏感值“cover”,则为验证错误。
如果封面具有指定图像媒体类型(image/*)的 encodingFormat
条目,
且没有 name
条目,则为验证错误。
此步骤检查阅读顺序和资源列表中指定的资源,以验证 仅指定了一个目录、页列表和封面实例。
对于封面,它还会检查基于图像的格式是否已设置名称,以满足 无障碍目的。
对于 data 中的每个 term → value,如果在给定变量 term 和 value 后运行移除空数组返回失败,则移除 data["term"]。
由于清单处理会在各个阶段移除无效值, 最终数据结构可能会出现一些不再包含任何 值的列表。此步骤会重新遍历数据并移除任何此类空列表。
返回 data。
要对属性 term 的 value 处理全局数据检查, 并带有可选上下文 context,运行以下步骤:
(§ 4.2 值类别)如果 term 具有已知值类别,则在给定变量 term、 value 和 context 后,当调用验证值 类别成功时,将 value 设置为其结果。如果返回失败,则返回 失败。
否则,返回 value。
此步骤验证术语的值是否匹配该术语所需的预期类别。 例如,abridged 术语要求布尔值, 因此与该术语一起使用的任何其他值都会导致失败。
如果调用该函数时发生失败,此步骤也会返回失败, 以便从最终数据集中移除该属性。
没有已知值类别的术语不会被处理,因此会返回传入值。
按如下方式递归下降到 value 中,以先检查任何子属性:
如果 value 是映射:
否则,不执行任何操作。
为了确保清单中的所有属性都得到处理,此步骤 递归检查每个条目,查找需要处理的附加映射条目。如果 值是列表,则检查每个项目以确定它是否为可 处理的映射。
其位置还确保所有子属性首先被检查,因此 步骤后面的较高级别检查会在任何无效值被 移除后进行测试。
(§ 4.4.1
全局声明和 § 4.4.2 特定项目
声明)如果 term 预期为数组
形式的,
则对于
value 中的每个 item:
LocalizableStrings
如果 item["value"] 未设置,则从 value 中移除 item。
如果 item["language"] 已设置且其值不是格式良好的 [bcp47],则为验证错误,移除 item["language"]。
如果 item["direction"] 已设置且其值不是
“ltr”或“rtl”之一,则为验证错误,移除
item["direction"]。
此步骤检查可本地化字符串是否具有值、其语言 声明是否格式良好,以及其方向声明是否具有 “ltr”或“rtl”的值。
(§ 4.2.4.2 实体)如果 term 预期为数组 形式的实体,则对于 value 中的每个 item,检查 item["name"] 是否 已设置:
此步骤确保所有实体都有名称。没有名称的实体会被 移除。
(§ 4.2.4.3
链接资源)如果 term 预期为数组形式的LinkedResources,则对于
value 中的每个 resource:
如果 resource["url"] 未设置,或其值为空字符串,则为验证错误,从 value 中移除 resource,然后继续。
否则,如果 resource["url"] 不是有效 URL [url],则为验证错误,从 value 中移除 resource,然后继续。
如果resource["duration"] 已设置且不是有效的时长值,按 [iso8601-1], 则为验证错误,移除 resource["duration"]。
此步骤对 LinkedResource 的术语执行以下两项检查:
LinkedResource。返回 value。
要为属性 term 的 value验证值类别, 并带有上下文 context,运行以下步骤:
如果根据 context,term 预期为数组:
否则,如果根据 context,term 预期为映射:
否则,如果根据 context,value 不匹配 term 的预期值类别,则为验证错误,返回失败。
返回 value。
此函数检查正在处理的术语的值是否匹配其预期 值类别。当值是列表或映射时,会递归调用该函数, 以确保清单中的所有属性都得到检查。
要从 resources 中获取唯一 URL,运行以下 步骤:
令 uniqueURLs 为空有序集。
对于 resources 中的每个 resource:
返回 uniqueURLs。
此函数接受 对象列表
——来自阅读顺序或资源列表——并返回唯一 URL 集合。如果遇到重复项,
则发出警告。LinkedResource
要从属性 term 的 value 中移除空数组, 运行以下步骤:
如果 value 是空列表, 返回失败。
否则,如果 value 是映射,则对于 value 中的每个 key → keyValue,如果在给定 key 和 keyValue 后运行移除空数组返回失败,则移除 value[key]。
此函数检查正在处理的术语的值不是空列表。 最初具有列表的术语可能会随着处理而丢失条目(即,当 列表项目无效时)。
要为映射 data 中缺失的属性添加默认值,并带有可选HTML Document (DOM) Node [html] document,运行以下步骤:
(§ 4.7.1.11 标题) 如果 data["name"] 未设置:
当清单中未指定 name 属性时,此步骤添加
document 的 title 元素内容。例如:
<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"
]»
»,
…
]»
(§ 4.7.2.1 默认阅读顺序和 § 6.1 链接)如果 data["readingOrder"] 未设置:
如果 document 或document.URL 未设置,则为致命错误,返回失败。
将 data["readingOrder"] 设置为空列表,并追加映射
«[ "url" → document.URL ]»。
将 document.URL 追加 到 data["uniqueResources"]。
如果数字出版物仅由引用文档组成,则默认 阅读顺序可以省略;它会自动由该单个 资源组成。
如果配置文件指定了用户代理必须 生成的默认值,则这些步骤在此时执行。
(§ 6.1 链接)如果document.URL 已 设置,且 data["uniqueResources"] 不包含 document.URL,则为验证错误。
如果链接到清单的页面在处理核心和扩展默认值规则后 未列为出版物的唯一资源,则会引发错误,因为它必须是 出版物资源。
返回 data。
本规范中定义的清单格式设计为由出版社区在生产新的配置文件(例如有声书和学术 出版物)时实现和扩展。清单格式提供的灵活性允许它针对每个社区的 特定需求进行定制,同时也为需要处理这些配置文件的用户代理提供共同基础 (即,最小化各配置文件之间的差异并简化互操作性)。
要使配置文件与本规范兼容,以下条件 MUST 得到满足:
conformsTo
属性中包含此 URL。在可用时,添加一个由例如有声书配置文件添加的术语示例会是个好主意。
由于清单使用 JSON-LD 表达,因此该规范中详述的 隐私和安全 考虑事项 [json-ld11] 适用于清单的所有 配置文件。
配置文件的一些附加通用考虑事项包括:
更具体的安全和隐私考虑事项留给每个配置文件详述,因为这些事项会根据 数字出版物格式的性质而有所不同。
本节为非规范性内容。
清单包括若干创作便利功能,例如默认值、在通常需要对象的位置使用字符串的能力, 以及从其他来源自动编译信息(例如用于标题和阅读 顺序)。清单的处理会规范化这些 便利功能,并为用户代理产生一致的数据集(内部表示),但该集合并不容易 从处理算法中可视化。
本附录使用 [WebIDL] 提供一个信息性的抽象数据模型, 描述所得数据结构。此定义表达了处理后清单每个成员的 预期名称、数据类型和可能的限制。
选择 WebIDL 仅用于说明目的。本规范不定义 用于暴露清单数据的 API。
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"
};
LinkedResource 字典
dictionary LinkedResource {
required DOMString url;
DOMString encodingFormat;
sequence<LocalizableString> name;
sequence<LocalizableString> description;
sequence<DOMString> rel;
DOMString integrity;
DOMString duration;
sequence<LinkedResource> alternate;
};
Entity
字典dictionary Entity {
sequence<DOMString> type;
required sequence<LocalizableString> name;
DOMString id;
DOMString url;
sequence<DOMString> identifier;
};
LocalizableString 字典
dictionary LocalizableString {
required DOMString value;
DOMString language;
TextDirection direction;
};
本附录依赖于 Infra Standard [infra]。
要为
resource选择替代资源,运行以下步骤。
LinkedResource
如果成功,此算法返回一个替代资源。否则,它返回失败。
令 possibleAlternates 为空列表。
如果 resource["alternate"] 未设置,则返回失败。
对于 resource["alternate"] 中的每个 alternate:
如果 possibleAlternates 是空列表, 则返回失败。
否则,如果 possibleAlternates 的大小为 1, 则返回 possibleAlternates 中的资源。
否则,返回由用户代理确定的 possibleAlternates 中的一个资源。
此函数迭代资源的替代格式并编译可能性列表。 如果找到多个可能性,则由用户代理确定如何优先排序并选择 最佳替代。
如果替代资源未指定显式媒体类型,则不要求用户代理 将其添加到可能性列表。
本节为非规范性内容。
为了促进页面内和站点间的导航,HTML 使用nav
元素 [html] 表达链接列表。虽然默认情况下性质上是通用的,
但 nav 元素的用途可以通过使用
role
属性 [html] 更具体地标识。特别是,
[dpub-aria-1.0] 词汇表中的
doc-toc 角色将 nav 元素标识为数字
出版物的目录。
包含可识别的目录是生成任何数字出版物的一种无障碍方式,但由于 HTML 标记的灵活性,它也会给试图提取有意义链接层级的用户代理带来挑战 (例如,提供可从任意页面访问的自定义视图)。为避免为不同用途重复 目录,本节定义了一种既对人友好且常用、又仍然为用户代理提取提供足够 结构的语法。
作者可以选择列表(有序或无序)来构造其目录。通过
在这些列表中使用锚标记(a
元素)标记每个链接,用户代理可以轻松区分它们
需要的信息与也已添加的任何外围内容(旁注)或样式性标记。目录
可以同时包含活动链接(带有 href 属性)和非活动
链接(不包含 href 属性),从而为目录的构造方式提供额外灵活性
(例如,在预览中省略指向某些标题的链接,或仅链接到某些内容)。
不过,请注意,不要求用户代理保留目录的呈现 方面(即,用户代理通常是在提取信息,以便以 所有出版物通用的方式呈现它)。例如,只期望用户代理 保留链接元素的文本内容,因此文本样式、内联图像和其他 非文本内容可能会丢失。同样,列表样式甚至显示多少层级的链接 也由用户代理自行决定。因此,建议链接到呈现性 目录,以免用户只能使用机器处理的目录。
目录通过 [html] 元素表达(通常是nav
元素)。此元素 MUST 由 role
属性 [html] 值“doc-toc” [dpub-aria-1.0] 标识,并且 MUST 是文档中按文档树顺序 [dom]
第一个具有该 role 值的元素。该元素 MAY 对
用户隐藏。
清单 SHOULD 标识包含目录的资源。
虽然 nav 元素的内容模型不受限制,但只有在遵循以下
标记指南时,用户代理才能提取可用的目录:
虽然目录标题是可选的,但为了避免在需要标题时由用户代理生成
占位标题,建议添加一个标题。标题使用 [html] h1
到 h6 元素中的任意元素指定。请注意,仅第一个此类
元素会被识别为标题。如果在链接列表之前未找到标题元素,用户代理将假定未
指定标题。
在 nav 元素中遇到的第一个 [html] ol
或 ul
列表元素被假定为包含定义指向内容链接的列表。即使该列表嵌套在
例如 div
元素中,也会找到它,因为算法会忽略
与其处理无关的元素。但是,该列表不能出现在任何跳过的
元素中,因为不会评估这些元素的内部内容。
如果 nav 元素不包含这些元素之一,则用户代理不会
将该数字出版物登记为包含可用目录(例如,机器渲染的选项
将不可用)。
如果将目录视为链接树,则li
元素中位于链接
列表内的每个列表项表示一个分支。为了呈现给用户,这些分支
都必须有名称和可选目的地,而这些信息从列表项中找到的第一个
a
元素获得,无论其嵌套在何处
(同样,排除任何位于跳过的
元素中的 a 元素。)
分支的链接目的地在指定时从 a 元素的
href 属性获得。如果链接不可用(例如在预览中)或不相关
(例如分组标题),可以省略此属性。在提供指向内容的链接时,还可以
指定被链接文档的关系(在 rel 属性中)以及被链接资源的媒体类型
(在 type 属性中)。
找到为分支标注标签的 a 元素之后,用户代理将继续
检查标记中是否存在另一个列表元素(即子分支)。如果找到列表,
则同样处理该列表以提取其链接,如此继续,直到没有更多嵌套分支
需要处理。
解析目录时会忽略一小组元素,以避免 误解。这些是 [html] 分节 内容元素和分节 根元素。它们被忽略的原因是它们可以定义自己的 大纲(即,它们可以表示自包含且不一定与内容链接结构相关的嵌入内容)。
任何设置了hidden
属性的元素也会被跳过,因为隐藏元素
并不旨在由用户直接访问。
虽然这些元素可以包含在 nav 元素中,但必须小心
不要将重要内容嵌入其中(例如,不要用 section 元素
包裹包含所有指向内容链接的列表项)。
所有与提取目录无关且未被跳过的元素都会被忽略。与跳过元素不同,忽略 意味着用户代理将继续在它们内部搜索相关内容,从而允许 在可使用的标记方面具有更大的灵活性。
本节为非规范性内容。
本节依赖于 Infra Standard [infra]。
本节定义了从 nav 元素提取目录的算法。
它以按树顺序 [dom]
遍历 DOM 树节点的方式定义,每个节点在遍历期间被进入和退出时
都会被访问。每次访问节点时,都可以视为触发了进入或退出
事件。在某些步骤中,用户代理可选择如何处理内容,以便为不同呈现模型提供
灵活性。
此算法不是以纯事件驱动术语定义的,因为并非总是需要检查所有后代 节点才能从 DOM 中获得所需信息。在某些情况下,某个元素及其所有后代 会在进入时处理后立即被跳过。可以应用事件方法, 但这将需要修改算法以处理/忽略被跳过的节点。
用户代理可以使用任何能够表示最终数据形式的语言来处理 并内部化所得结构。
就此算法而言,列表元素定义为
[html] ol
或 ul
元素。
以下算法 MUST 应用于以文档顺序中第一个
role 属性值为 doc-toc 的元素为根的 DOM 子树遍历,
无论该元素是否已被声明式
隐藏 [html],或通过 CSS 样式设置为不可见:
定位包含目录元素的资源的规则定义于 § 4.8.1.3 目录。
如果未找到目录元素,则该出版物没有可用于机器渲染目的的目录。
令 toc 为表示目录的映射
«[ "name" → "", "entries" → « » ]»。
此步骤初始化将存储目录标题和分支的映射。 在此映射中:
初始化栈 branches,以在创建目录分支时保存这些分支。
该栈用于保存尚未完成的分支。当遇到新的子分支时, 父分支会被压入栈中,以便稍后取回。
令 current_toc_node 为设置为null的变量。
current_toc_node 用于保存表示当前正在处理的 目录分支的映射。
从正在构建目录的元素开始,按树 顺序 [dom]遍历 DOM,并在遍历进入和退出每个元素时, 触发下面第一个相关步骤。
进入标题 内容元素时:
运行以下步骤:
如果 branches 为空,且 toc["name"] 是空字符串,则将 toc["name"] 设置为以下之一:
如果 toc["name"] 的结果值为空字符串(例如,在 移除任何呈现性元素并裁剪所有前导和尾随 空白之后),则将 toc["name"] 设置为占位值或 null。
此步骤标识目录的标题。只有当 toc["name"] 的值为空字符串 (即尚未遇到任何标题)时,才处理标题。
用户代理将 name 设置为标题元素的后代内容, 还是从中生成文本字符串,取决于它是否会在呈现中重用任何后代标记 (例如,保留图像、MathML、ruby 以及其他不容易转换为文本的内容)。
«[
"name" → "Contents",
"entries" → « »
]»
如果 name 不是空字符串,或为 null,则说明
先前已经遇到标题,或已遇到表明 nav 元素没有标题的内容
(例如,已处理列表,因为标题不应跟在链接列表之后)。
«[
"name" → null,
"entries" → « »
]»
如果未指定标题,用户代理可以为后续使用提供自己的标题。
进入列表 元素时:
运行以下步骤:
退出列表 元素时:
此步骤在所有子分支处理完毕后,将 current_toc_node 重置回父对象。
如果栈中没有分支,且 toc.entries 不包含任何项目, 则将其设置为 null(以避免在根级别处理任何进一步列表)。
进入列表 项元素时,将 current_toc_node 设置为以下映射:
«[
"name" → null,
"url" → null,
"type" → null,
"rel" → null,
"entries" → « »
]»
每个列表项表示目录中可能的新分支,因此 每当遇到一个列表项时,都会在 current_toc_node 中创建一个新的空对象。
随着遇到后代 a 元素和列表,此对象会被填充信息。
退出列表 项元素时:
运行以下步骤:
如果 current_toc_node["name"] 是null或空 字符串:
如果 branches 非空,则将 current_toc_node追加 到 branches 顶部映射的 entries 属性。 否则,将 current_toc_node追加 到 toc["entries"]。
将 current_toc_node 设置为null。
退出列表项表示当前分支的处理已完成。 在将此分支添加到其父级的 entries 数组之前,需要 测试该分支是否具有名称和/或任何子分支。如果它 没有名称但有子分支,则保留该分支。用户代理可以 提供自己创建的占位值,或将该值设置为 null。 如果它既没有名称也没有任何分支,则它无效并被丢弃。
为确定将分支合并到何处,会检查栈。如果栈中没有 项目,则将其添加到根 toc 对象的 entries 属性中 (即,它是顶级分支)。否则,它会被 添加到栈中紧邻其前的对象的 entries 属性中。
作为最后一步,current_toc_node 会重置回
null。
进入锚点 元素且 current_toc_node 不是null时:
运行以下步骤:
如果 current_toc_node["name"] 不是null,则不执行任何操作。
否则:
将 current_toc_node["name"] 设置为以下之一:
href 属性,且该属性中的 URL
解析为 uniqueResources 中的资源,则将
current_toc_node["url"] 设置为该
值。
type 属性,并且该
属性值在裁剪前导和尾随空白后不是空字符串,则将
current_toc_node["type"] 设置为裁剪后的
值。
rel 属性,并且该属性值
在裁剪前导和尾随空白后不是空字符串,则按空白拆分裁剪后的值,并将
current_toc_node["rel"] 设置为所得的列表标记。
跳过该元素的进一步处理并继续到下一个。
此步骤处理锚点标签,以获得分支的 name 和 url 属性值。
如果当前分支的名称已经定义,则终止对此元素的处理 (即,为避免为单个分支处理多个链接)。
用户代理将条目的 name 设置为 a 元素的后代
内容,还是从中生成文本字符串,取决于它是否会在呈现中重用任何后代标记
(例如,保留图像、MathML、ruby 以及其他不容易转换为文本的内容)。
除了指定 href 属性外,还需要它解析为属于
数字出版物的资源,以满足本规范的要求。如果不是,
该分支会被保留,但该条目将不可链接。
关于链接目标的附加信息——资源类型及其关系——也会被保留。
«[
"name" → "In the Beginning",
"url" → "http://example.com/page1.svg",
"type" → "image/svg",
"rel" → null,
"entries" → « »
]»
进入分节 内容元素、分节 根元素,或带有hidden 属性的元素时:
跳过该元素的进一步处理并继续到下一个。
由于分节和分节根元素可以定义自己的大纲, 进入其中会给生成目录造成问题(即, 它们可能包含不直接相关的内容)。因此,遇到它们时会跳过, 以防止处理其子内容。
否则:不执行任何操作。
对于所有其他元素,此步骤允许继续处理其后代元素。
完成 DOM 遍历后,如果 toc["entries"] 包含非空列表,则返回 toc。否则,
返回 null。
如果根 toc 对象中的 entries 数组不包含任何
分支(可能是因为 nav 元素中未找到列表,或该列表
不包含任何符合要求的列表项),则该算法未产生可用的
目录。
自第一份公开 工作草案以来的实质性变更:
有关已解决议题的完整列表,请参阅 GitHub 跟踪器。
本节为非规范性内容。
本节为非规范性内容。
以下是一个包含示例图书配置文件基本元数据集的清单。
此清单的内部表示的 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"
}
]
}
以下是示例文章配置文件的清单。该文章仅由嵌入清单的文档 组成。标题和阅读顺序从清单中省略,因为这些 属性会在处理期间分别从包含文档的 标题和 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>
以下示例显示了一个符合有声书配置文件 [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"
}
]
}
本节为非规范性内容。
下表标识清单属性在何处定义和扩展。
| 名称 | 出版物清单 |
|---|---|
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 地址 |
本节为非规范性内容。
下表标识资源关系的使用在何处定义。
| 名称 | 出版物清单 |
|---|---|
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 预览 |
本节为非规范性内容。
编辑者感谢出版工作组成员对 本规范所作的贡献:
工作组还要感谢 数字 出版兴趣小组成员为本 规范铺路所做的所有辛勤工作。