【注意】 このドキュメントは、W3CのPublication Manifest W3C Recommendation 10 November 2020の和訳です。
このドキュメントの正式版はW3Cのサイト上にある英語版であり、このドキュメントには翻訳に起因する誤りがありえます。誤訳、誤植などのご指摘は、訳者までお願い致します。
First Update: 2021年1月14日
公開以後に報告されたエラーや問題がないか正誤表を確認してください。
翻訳版も参照してください。
このドキュメントは、規範以外の形式でも入手できます: EPUB
Copyright © 2020 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
この仕様は、デジタル出版物に関する情報を表すための一般的なマニフェスト形式を定義しています。これにより、[json-ld11]でシリアル化し、出版物に関する様々な構造プロパティーを含むように拡張した[schema.org]のメタデータを用いて、表す必要のある情報の多様性に対応しつつ、出版形式間の相互運用性が可能になります。
この項は、このドキュメントの公開時のステータスについて記述しています。他のドキュメントがこのドキュメントに取って代わることがありえます。現行のW3Cの刊行物およびこの技術報告の最新の改訂版のリストは、https://www.w3.org/TR/のW3C技術報告インデックスにあります。
このドキュメントは、Publishingワーキンググループによって勧告として公開されました。
この仕様の議論にはGitHub Issuesをお勧めします。または、メーリング・リストにコメントを送信することもできます。コメントはpublic-publ-wg@w3.org(アーカイブ)に送信してください。
W3C勧告は、広範な合意形成の後、W3Cとそのメンバーの協賛を得た仕様です。W3Cは、この仕様をWebの標準として広く展開することを推奨します。この勧告の将来の更新には、新しい機能が組み込まれる可能性があります。
このドキュメントは、2017年8月1日のW3C特許方針の下で活動しているグループによって作成されました。W3Cは、このグループの成果物に関連するあらゆる特許の開示の公開リストを維持し、このページには特許の開示に関する指示も含まれています。不可欠な請求権(Essential Claim(s))を含んでいると思われる特許に関して実際に知っている人は、W3C特許方針の6項に従って情報を開示しなければなりません。
このドキュメントは、2020年9月15日のW3Cプロセス・ドキュメントによって管理されています。
この仕様は、出版物を記述するための一般的なマニフェスト形式を定義しています。特殊な出版物を作成するためにモジュール化のアプローチを規定することにより、オーディオブックの制作など、特定の出版分野のニーズに適応できるように設計されています。
この仕様は、様々なユーザ・エージェントのアーキテクチャを容易にすることも目的としています。従来のウェブ・ユーザ・エージェント(ブラウザ)は出版マニフェストを利用できると思われますが、これによって、(アプリケーション(スタンドアロンでも、ユーザ・エージェント内で実行されるものでも)、または独自のユーザ・インターフェイスを含んでいる出版物ですら)他の種類の可能なユーザ・エージェントの機能が制限されるべきではありません。
この仕様では、マニフェスト形式を採用した出版物をユーザ・エージェントが表示する方法については定義していません。
この項は非規範的です。
デジタル出版物は、マニフェストで記述され、それは特定の形のJSON-LD[json-ld11](リンクト・データ用のJSON[ecma-404]の一種)を用いて表したプロパティーの集合を提供します。
マニフェストは、ユーザ・エージェントがデジタル出版物の境界とその資源間の結びつきを理解できるようにするものです。出版物はその構成資源を超えるアイデンティティと性質を持っているため、マニフェストにはデジタル出版物について記述したメタデータが含まれています。マニフェストは、デジタル出版物に属する資源のリストとデフォルトの読み上げ順序も提供し、そのようにして、複数の資源を結び付けて1つの連続する作品にします。
マニフェストのプロパティーには、ユーザ・エージェントが出版物を処理、表示するために必要な基本情報を記述します。理解しやすいように、このプロパティーを次のように分類します。
資源分類プロパティーは、資源リストやデフォルトの読み上げ順序などの資源の一般的な集合を記述または識別します。このプロパティーは、HTMLドキュメント、画像、スクリプト、メタデータ・レコードなどの1つ以上の資源を参照します。
マニフェストは、リンク関係を用いてデジタル出版物の主要な資源の識別も行います。この関係は、
オブジェクト(つまり、デフォルトの読み上げ順序、資源リスト、リンクの項において各資源を表すJSONオブジェクト)のLinkedResource
rel
プロパティーで定義します。
これらの関係が識別する資源の型を次のように分類します。
この仕様では、出版マニフェストを特定の「形」の[json-ld11]と定義しています。これは、JSON-LD構文が提供するすべての可能性とは対照的に、この仕様で定義している構文構造のみを用いてマニフェストを表すべきである(SHOULD)ということを意味します。
この形は、非公式に、この仕様で定義している制約を表すJSONスキーマ[json-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]に依存しています。
デジタル出版物は、そのコンテンツを表す有限の資源の集合で構成されます。この範囲はその境界として知られており、§ 5. 出版物資源で説明しているとおり、マニフェスト内で定義します。
マニフェストの内部表現は、マニフェストを処理して考えられるすべての曖昧さを取り除き、別の情報源から推測可能な欠落している値を組み込む際にユーザ・エージェントが作成するデータ構造です。
マニフェストで表される情報は、曖昧さや欠落した情報がなければ、ユーザ・エージェントが作成した内部表現と同等である可能性があります。
マニフェストは、参考情報のメタデータ、資源のリスト、デフォルトの読み上げ順序など、出版物に関する構造化された情報を表します。
プロファイルの仕様で定義しているマニフェスト形式を用いて境界とコンテンツを記述した(オーディオブックなどの)出版物の形式です。この形式により、プロファイル固有の用語や新しい要件を用いて、この仕様のコア定義を拡張できます。
プロファイルの構造の要件とコンテンツの要件が一致しない可能性がありますが、そのような違いは、形式間の高度な予測可能性を維持するために制限されています。(§ 8. モジュラー拡張を参照。)
非規範的と記している項と同じく、この仕様のすべての作成ガイドライン、図、例、注は、非規範的です。この仕様のその他の部分はすべて規範的です。
このドキュメントの「することができる/してもよい(MAY)」、「しなければならない(MUST)」、「してはならない(MUST NOT)」、「選択できる/任意である(OPTIONAL)」、「推奨される(RECOMMENDED)」、「必須である/要求される(REQUIRED)」、「すべきである/する必要がある(SHOULD)」、「すべきでない/する必要がない(SHOULD NOT)」というキーワードは、ここで示しているように、すべて大文字で表示されている場合にのみ、BCP 14[RFC2119] [RFC8174]で記述されているように解釈されるべきです。
すべてのアルゴリズムの説明は参考情報です。
マニフェストには、次のプロパティーを設定しなければなりません(MUST)。
次のプロパティーを推奨します(RECOMMENDED)。
その他のすべてのプロパティーと資源関係の優先順位は任意(OPTIONAL)ですが、マニフェスト形式の実装によって変更できます(MAY)。
一部のプロパティーは、明示的に作成されていなければ代替情報から編集されるため、暗黙的に必須です。詳細については、§ A. 内部表現データ・モデルを参照してください。
この項では、出版マニフェストのプロパティーで使用できる値のカテゴリについて説明します。
マニフェストのプロパティーが、その値としてリテラルのテキスト文字列(コード値や日付などの言語に依存しないもの)を想定している場合、値は[json]文字列で表さなければなりません(MUST)。
例えば、オブジェクトに変換される可能性のある他の値とは異なり、リテラル値はマニフェストの処理中に変更されません。
マニフェストのプロパティーが、その値として数値を想定している場合、値は[json]数値で表さなければなりません(MUST)。
マニフェストのプロパティーが、その値としてブール値を想定している場合、値は[ecmascript]ブール値(true
かfalse
)で表さなければなりません(MUST)。
様々なマニフェストのプロパティーは、[json]オブジェクトで表されると想定されます。通常は、明示的なオブジェクトを用いることをお勧めしますが、次の項では、文字列の値の使用も許容されるケースを示します。その文字列は、ユーザ・エージェントによるマニフェストの処理中に自動的にオブジェクトに変換されます(テキスト値からオブジェクトへの正確なマッピングは、個々の定義で記載しています)。
マニフェストのプロパティーが、その値としてローカライズ可能なテキスト文字列を想定している場合、値は次のいずれかで表さなければなりません(MUST)。
LocalizableString
。1つの文字列の値は、value
プロパティーが文字列のテキストであり、言語と基本書字方向がマニフェスト内のその他の情報から決定される暗黙的なオブジェクトを表します。
ローカライズ可能な文字列は、値の複数言語表現の促進を目的としているため、ローカライズ可能な文字列を受け入れるプロパティーは、常にこれらの値の配列を受け入れます。そのため、作成する文字列やオブジェクトは1つだけでなければなりませんが、処理の整合性を保つために、そのような値は配列に変換されます。
LocalizableString
は、次のプロパティーからなる[json]オブジェクトです。
用語 | 説明 | 必須の値 | 値のカテゴリ | [schema.org]マッピング |
---|---|---|---|---|
value |
ローカライズ可能な文字列の値。必須(REQUIRED)。 | テキスト。 | リテラル | (なし) |
language |
値の言語。オプション(OPTIONAL)。 | 整形式の言語タグ[bcp47]。 | リテラル | (なし) |
direction |
値の基本書字方向。オプション(OPTIONAL)。 | ltr かrtl |
リテラル | (なし) |
基本書字方向の値の意味は次のとおりです。
ltr
: テキスト値の方向性が、明示的に左から右のテキストに設定されていることを示します。rtl
: テキスト値の方向性が、明示的に右から左のテキストに設定されていることを示します。基本書字方向の値の欠落は、テキストの値の方向性が、Unicode双方向アルゴリズム[bidi]の規則に従い、強い方向性を持つ最初の文字の方向に明示的に設定されていることを意味します。
直前の例で基本書字方向の値が設定されていなければ、Unicode双方向アルゴリズム[bidi]に従い、かつ、文字列の先頭にラテン文字があるため、テキストは次のように表示されます。
HTML היא שפת סימון.
しかし、これは正しくありません。表示を制御して次の値を生成するためには、direction
の値を追加する必要があります。
HTML היא שפת סימון.
この例のvalueフィールドは、メモリに格納されているテキストを表しているため、ここで示している2つの表示との間に相違があることに注意してください。テキスト・エディタが、JSON値を(Unicode双方向アルゴリズムのみを用いるなどの)異なる方法で表示する場合もあります。
詳細な説明と例については、[string-meta]ドキュメントも参照してください。
マニフェストのプロパティーがエンティティー(つまり、作成の様々な側面に責任を有する個人や組織)を想定している場合、その値は次のいずれかで表さなければなりません(MUST)。
1つの文字列の値は、name
プロパティーが文字列のテキストであり、type
がPerson(人)[schema.org]であると想定されるEntity
オブジェクトのインスタンスを表します。
エンティティーは、次の最小限のプロパティーの集合を持つ[schema.org]のPerson
(人)かOrganization
(組織)の型のインスタンスとして定義されています。
用語 | 説明 | 必須の値 | 値のカテゴリ | [schema.org]マッピング |
---|---|---|---|---|
type |
エンティティーの型。オプション(OPTIONAL)。 | 1つ以上のテキスト。シーケンスには「Person 」か「Organization 」が含まれていなければなりません(MUST)。 |
リテラルの配列 | (なし) |
name |
エンティティーの名前。必須(REQUIRED)。 | 1つ以上のテキスト。 | ローカライズ可能な文字列の配列 | name |
id |
エンティティーに関連付けられている正規の識別子。オプション(OPTIONAL)。 | URLレコード[url]。 | 識別子 | (なし) |
url |
エンティティーに関連付けられているアドレス。オプション(OPTIONAL)。 | 有効なURL文字列[url]。 | URL | url |
identifier |
(ORCIDなどの)エンティティーに関連付けられている識別子。オプション(OPTIONAL)。 | 1つ以上のテキスト。 | リテラルの配列 | identifier |
この最小限のプロパティーの集合に限定されません。著者は、必要に応じて、[schema.org]のPerson
やOrganization
の型用に定義されている追加のプロパティーを含めることができます。ユーザ・エージェントも同様に、前述のプロパティーのみを解釈することに限定されません。
マニフェストのプロパティーは、1つ以上の資源にリンクする場合、次のいずれかで表さなければなりません(MUST)。
LinkedResource
のインスタンス。文字列の値は、url
プロパティーを文字列の値に設定した暗黙のLinkedResource
オブジェクトを表します。
LinkedResource
オブジェクトは次のように定義されています。
用語 | 説明 | 必須の値 | 値のカテゴリ | [schema.org]マッピング |
---|---|---|---|---|
type |
資源の型。オプション(OPTIONAL)。 | 1つ以上のテキスト。シーケンスには「LinkedResource 」が含まれていなければなりません(MUST)。 |
リテラルの配列 | (なし) |
url |
資源の位置。必須(REQUIRED)。 | 有効なURL文字列[url]。追加の制限については、この型を受け入れるプロパティー定義を参照してください。 | URL | url |
encodingFormat |
(text/html など)資源のメディア・タイプ。オプション(OPTIONAL)。 |
MIMEメディア・タイプ[rfc2046]。 | リテラル | encodingFormat |
name |
アイテムの名前。オプション(OPTIONAL)。 | 1つ以上のテキスト。 | ローカライズ可能な文字列の配列 | name |
description |
アイテムの内容記述。オプション(OPTIONAL)。 | 1つ以上のテキスト。 | ローカライズ可能な文字列の配列 | description |
rel |
資源と出版物の関係。オプション(OPTIONAL)。 |
1つ以上の関係。 キーワードはASCIIの大文字と小文字を区別しない[infra]であり、そのように比較しなければなりません(MUST)。 |
リテラルの配列 | (なし) |
integrity |
資源の整合性を検証可能にする資源の暗号ハッシュ。オプション(OPTIONAL)。 |
1つ以上の空白区切りの整合性メタデータの集合[sri]。値はメタデータ定義[sri]に準拠しなくてはなりません(MUST)。 ユーザ・エージェントがサポートすることが期待される暗号ハッシュ関数のリストについては、[sri]を参照してください。 |
リテラル | (なし) |
duration |
時間ベースのメディア資源の全体的な時間長。オプション(OPTIONAL)。 | [iso8601-1]で定義されている時間長の値。 | リテラル | duration (プロパティー) |
alternate |
代替形式の資源の1つ以上の変形への参照で、 |
次の1つ以上。
文字列の値は、 |
リンクされた資源の配列 | (なし) |
integrity
プロパティーに対するユーザ・エージェントのサポートはオプションですが(OPTIONAL)、このプロパティーを用いて暗号ハッシュ比較をサポートするユーザ・エージェントは、[sri]に従ってそれを行わなければなりません(MUST)。
この仕様では、代替形式からの選択用に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"
}
],
…
}
マニフェストのプロパティーが、この項やプロファイルで定義していない種類のオブジェクトを想定している場合、それは[json]オブジェクトで表さなければなりません(MUST)(つまり、プロパティーの値を処理してオブジェクトが作成されることはありません)。
URLは、デジタル出版物に関連付けられる資源を識別するために用います。プロパティーがURLの値を想定している場合、それは有効なURL文字列[url]でなければなりません(MUST)。
相対URL文字列の場合、基底URL[url]を用いて絶対URL文字列に対して解決します。
相対URL文字列に対する基底URLは次のように決まります。
結果として、組み込まれたマニフェストの相対URL文字列は、ドキュメントで基底URL(つまり、ヘッダーの<base>
要素で)が宣言されていなければ、マニフェストを参照しているドキュメントのURLに対して解決されます。
識別子は、デジタル出版物とその作成に責任のあるエンティティーを永続的かつ明確な方法で参照するために用います。URL、URN、DOI、ISBN、PURLはすべて、出版でよく用いられる永続的識別子の例です。
マニフェストのプロパティーで、(リテラル、オブジェクト、URLなど)それぞれの型の1つ以上の値が許されている場合、これらの値は[json]の配列として表されます。しかし、プロパティーの値が1つの要素であれば、配列構文は省略できます(MAY)。
マニフェストには、次の2つの要素を持つJSON-LDコンテキスト[json-ld11]を、指定されている順序で設定しなければなりません(MUST)。
https://schema.org
https://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で定義されているプロパティーに、(作成者プロパティーが順序を保持するための要件などの)機能を追加します。
この仕様のプロファイルでは、コンテキストのURLを追加する必要がありえますが(MAY)、そのURLの順序は、これら2つの要素より後でなければなりません(MUST)。
出版物のコンテキストの後のオブジェクトに、グローバルな言語と方向の宣言などの追加のパラメーターを含めることで、コンテキストを拡張できます。
{
"@context" : [
"https://schema.org",
"https://www.w3.org/ns/pub-context",
{
"language" : "es"
}
],
…
}
(タイトル、作成者など)マニフェストの個々の自然言語のプロパティーの値には、デフォルトの自然言語があり、これは、(英語、フランス語、中国語などの)それが表される言語です。また、それが書かれる自然な基本書字方向(左から右または右から左の表示方向)もあります。
デジタル出版物のマニフェストは、これらの両方の概念をグローバルに設定する機能と個々のアイテムに設定する機能を提供し、ユーザ・エージェントによるメタデータの解釈と表示を支援します。
基本書字方向を設定する機能は、JSON-LD 1.1[json-ld11]の機能です。言い換えると、出版マニフェストは、(以前のバージョン1.0[json-ld10]ではなく)バージョン1.1のJSON-LD仕様に依存しています。
自然言語のマニフェスト・プロパティーに対するグローバルな言語と基本書字方向の宣言は、それぞれlanguage
とdirection
のキーワード[json-ld11]を用いてコンテキストで設定します。これらの値は、マニフェストの処理中にシンプルな文字列の値をローカライズ可能な文字列へと展開するため、また、それを省略したローカライズ可能な文字列に言語と基本書字方向を提供するために用います。
language
の値は、整形式の言語タグ[bcp47]でなければなりません(MUST)。
direction
の値には次のいずれかの値がなければなりません(MUST)。
"ltr"
: テキスト値の方向性が、明示的に左から右のテキストに設定されていることを示します。"rtl"
: テキスト値の方向性が、明示的に右から左のテキストに設定されていることを示します。グローバルな言語と基本書字方向の宣言が存在する場合は、出版物のコンテキストに従わなければなりません(MUST)。
グローバルな言語や基本書字方向のデフォルト値は規定していません。
localizable string
を用いて、マニフェスト内の任意の自然言語の値に言語や基本書字方向をローカルに設定できます。
language
とdirection
のキーワード[json-ld11]となりうる値は、グローバルな宣言の場合と同じです。さらに、どちらの値もnull
という(JSONの)値にすることができ、これは、明示的な言語または方向が設定されていないことを示します。
(「Google」など)関連する言語なしに(組織名などの)値が一般的に用いられている場合に、language
の値をnull
に設定すると便利です。
言語や基本書字方向のローカルな宣言は、グローバルな宣言よりも優先されます。
デジタル出版物のマニフェストは、type
キーワード[json-ld11]を用いてその出版物の型を定義します。型は任意の[schema.org]の型にマッピングできますが(MAY)、型が指定されていない場合はCreativeWork
がデフォルトとして想定されます。
{
"@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
"type" : "CreativeWork",
…
}
Article
、Book
、TechArticle
、Course
などのCreativeWork
のより具体的なサブタイプを、CreativeWork
の代わりに、またはCreativeWork
に加えて使用できます。
{
"@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
"type" : "Book",
…
}
個々のSchema.orgの型は、Schema.orgで有効に使用できるプロパティーの集合を定義しています。マニフェストをSchema.orgに対応したプロセッサで確実に検証し処理できるようにするためには、選択した型に関連付けられているプロパティーのみをマニフェストに含めるべきです(SHOULD)。
複数の型のプロパティーが必要な場合、マニフェストに複数の型の宣言を含めることができます(MAY)。
{
"@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
"type" : ["Book", "VisualArtwork"],
…
}
ユーザ・エージェントは、宣言されたSchema.orgの型に有効でないマニフェストの処理に失敗すべきではありません(SHOULD NOT)。
完全なCreativeWork
のサブタイプのリストについては、Schema.orgのサイトを参照してください。
デジタル出版物は、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 |
人が情報を処理したり認識したりできる、人間の感覚知覚システムまたは認知能力。 | 1つ以上のテキスト。 | リテラルの配列 | accessMode (CreativeWork) |
accessModeSufficient |
資源のすべての知的コンテンツを理解するのに十分な1つまたは組み合わせによるアクセス・モードのリスト。 | 1つ以上のItemList。 | オブジェクトの配列 | accessModeSufficient (CreativeWork) |
accessibilityFeature |
アクセシブルなメディア、代替手段、アクセシビリティのためにサポートされている拡張機能などの、資源のコンテンツ機能。 | 1つ以上のテキスト。 | リテラルの配列 | accessibilityFeature (CreativeWork) |
accessibilityHazard |
一部のユーザにとって生理的に危険な、記述資源の特性。 | 1つ以上のテキスト。 | リテラルの配列 | accessibilityHazard (CreativeWork) |
accessibilitySummary |
他のアクセシビリティのメタデータと整合性がある、特定のアクセシビリティの機能や不備に関する人間が読める要約。 | テキスト。 | ローカライズ可能な文字列の配列 | 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)。
正規の識別子の仕様は、identifier
プロパティー[schema.org]やそのサブタイプを用いて追加の識別子の型を含めることによって補完できます(MAY)。
{
…
"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 |
鉛筆画やデジタル線画以外の媒体による、出版物の主なアーティスト。 | 1つ以上のPerson 。 |
エンティティーの配列 | artist (VisualArtwork) |
author |
出版物の著者。 | 1つ以上のPerson および/またはOrganization 。 |
エンティティーの配列 | author (CreativeWork) |
colorist |
インク画に色を加える個人。 | 1つ以上のPerson 。 |
エンティティーの配列 | colorist (VisualArtwork) |
contributor |
役割がこの表の他の役割のいずれにも適合しない貢献者。 | 1つ以上のPerson および/またはOrganization 。 |
エンティティーの配列 | contributor (CreativeWork) |
creator |
出版物の作成者。 このプロパティーを用いると、ユーザ・エージェントで矛盾した結果が生じる可能性があります。[schema.org]では著者の同義語と記されていますが、どちらを優先するか、またはどのようにそれらを組み合わせるかに関する指針はありません。より具体的な著者プロパティーを優先しつつ、どちらか一方のみを用いることをお勧めします。 |
1つ以上のPerson および/またはOrganization 。 |
エンティティーの配列 | creator (CreativeWork) |
editor |
出版物の編集者。 | 1つ以上のPerson 。 |
エンティティーの配列 | editor (CreativeWork) |
illustrator |
出版物のイラストレーター。 | 1つ以上のPerson 。 |
エンティティーの配列 | illustrator (Book) |
inker |
鉛筆画をインクでトレースする個人。 | 1つ以上のPerson 。 |
エンティティーの配列 | inker (VisualArtwork) |
letterer |
アートワークに吹き出しや効果音などのレタリングを加える個人。 | 1つ以上のPerson 。 |
エンティティーの配列 | letterer (VisualArtwork) |
penciler |
主に物語性のあるアートワークを描く個人。 | 1つ以上のPerson 。 |
エンティティーの配列 | penciler (VisualArtwork) |
publisher |
出版物の発行者。 | 1つ以上のPerson および/またはOrganization 。 |
エンティティーの配列 | publisher (CreativeWork) |
readBy |
出版物(オーディオブック用)を読む(実行する)人。 | 1つ以上のPerson 。 |
エンティティーの配列 | readBy (Audiobook) |
translator |
出版物の翻訳者。 | 1つ以上のPerson および/またはOrganization 。 |
エンティティーの配列 | translator (CreativeWork) |
作成者は、次のいずれかで表さなければなりません(MUST)。
Person
[schema.org]の名前をエンコードした[json]文字列。または、Person
またはOrganization
[schema.org]のインスタンス。1つの文字列の値は、name
プロパティーをその文字列の値に設定した[schema.org]のPerson
の省略形です。(§ 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",
…
}
関連するウィキペディアのページで、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",
…
}
デジタル出版物には、(英語、フランス語、中国語などの)コンテンツが表現されている言語である自然言語が少なくとも1つあります。マニフェストには、この概念を設定するために次のプロパティーが含まれており、これは、例えば、(あらかじめ辞書やテキスト読み上げエンジンを読み込むなどの)ユーザ・エージェントの動作に影響を与える可能性があります。
用語 | 説明 | 必須の値 | 値のカテゴリ | [schema.org]マッピング |
---|---|---|---|---|
inLanguage |
出版物のデフォルト言語。 | 1つ以上の整形式の言語タグ[bcp47]。 | リテラルの配列 | inLanguage (Property) |
自然言語は整形式の言語タグ[bcp47]でなければなりません(MUST)。
ユーザ・エージェントが出版言語を要求する場合で、マニフェストではそれを得られない、または得られた値が整形式[bcp47]でない場合、ユーザ・エージェントは、内部表現の生成時に出版言語を決定することができます(MAY)。この仕様では、そのような言語タグの作成方法を義務付けていません。ユーザ・エージェントは次のような方法を使用できます。
ユーザ・エージェントが出版物の主要言語を要求する場合で、複数の言語が指定されていれば、inLanguage
配列内の最初のエントリーを主要言語として認識しなければなりません(MUST)。
出版物の言語を、それを構成する個々の資源の言語と区別することが重要です。例えば、そのような資源がHTMLであれば、その資源にも言語を設定する必要があります。出版物の言語は継承されません。
読み上げの進行方向は、デジタル出版物内のある資源から次の資源への読み上げ方向を確立します。これは、メニューの位置、タッチ・ジェスチャー、方向の切り替え、前後ページ用のタップ・ゾーンなどの出版物レベルの相互作用に適応するために用います。読み上げの進行方法は、readingDirection
プロパティーを用いて表します。
用語 | 説明 | 必須の値 | 値のカテゴリ | [schema.org]マッピング |
---|---|---|---|---|
readingProgression |
ある資源から別の資源への読み上げの進行方向。 | ltr かrtl のいずれか。 |
リテラル | (なし) |
このプロパティーの値は、次のいずれかでなければなりません(MUST)。
ltr
: 左から右。または、rtl
: 右から左。デフォルト値はltr
です。readingProgression
が設定されていなければ、ユーザ・エージェントは内部表現の生成時にこのデフォルト値を用いなければなりません(MUST)。
このプロパティーは、個々の主要な資源の表示には影響を与えず、ある資源から別の資源への進行方向にのみ関係します。
{
…
"readingProgression" : "ltr",
…
}
タイトルは、デジタル出版物の人間が読める名前を提供します。これはname
プロパティーを用いて表します。
用語 | 説明 | 必須の値 | 値のカテゴリ | [schema.org]マッピング |
---|---|---|---|---|
name |
出版物の人間が読めるタイトル。 | 1つ以上のテキスト。 | ローカライズ可能な文字列の配列 | name (Thing) |
タイトルがマニフェストに含まれていなければ、ユーザ・エージェントはタイトルを作成しなければなりません(MUST)。タイトルを取得するプロセスは、§ 7.4.3 デフォルト値の追加で定義しています。
{
…
"name" : "Heart of Darkness",
…
}
出版物資源は、この項で定義しているように、デフォルトの読み上げ順序、資源リスト、およびリンクによって指定します。このリストには、プライバシー方針などの参考情報の資源と、目次などの構造資源への参照が含まれます。
このリストのいずれにもマニフェストへの参照を含める必要はありません。
デフォルトの読み上げ順序は、一連のデジタル出版物資源を通じた特定の進行方法です。ユーザはコンテンツを介して別の経路をたどる可能性がありますが、そのような相互作用がなければ、デフォルトの読み上げ順序により、ある資源から次の資源への予想される進行方法が定まります。
デフォルトの読み上げ順序は、readingOrder
プロパティーを用いて表します。
用語 | 説明 | 必須の値 | 値のカテゴリ | [schema.org]マッピング |
---|---|---|---|---|
readingOrder |
デジタル出版物の資源を通じた進行の順序。 |
1つ以上の |
リンクされた資源の配列 | (なし) |
readingOrder
プロパティーの各要素は、次のいずれかで表さなければなりません(MUST)。
LinkedResource
オブジェクトのインスタンス。1つの文字列の値は、url
プロパティーが文字列のテキストであるLinkedResource
オブジェクトのインスタンスを表します。
アイテムの順序は重要です。
読み上げ順序で表すURLにはフラグメント識別子を含むことができますが(MAY)、この仕様のプロファイルでは、その使用と、サポートされるスキームおよび機能の両方を制限できます(MAY)。(ユーザの移動先である開始位置や、読み上げ順序で次のアイテムに移動する前に表示するコンテンツの範囲などの)フラグメント識別子は、それぞれの仕様によって定義されているものとして解釈されます。
読み上げ順序に資源を複数掲載すべきではありません(SHOULD NOT)。これは、(資源へのリンクが読み上げ順序の正しいインスタンスに対して解決されないなど)ユーザ・エージェントに予測しない結果をもたらす可能性があるためです。
デジタル出版物がマニフェストにリンクされている資源のみで構成されている場合は、デフォルトの読み上げ順序を省略できます(MAY)。ユーザ・エージェントは、デフォルトの読み上げ順序がなければ、内部表現の編集時にリンク資源のエントリーを含めなければなりません(MUST)。詳細については、§ 7.4.3 デフォルト値の追加を参照してください。
デフォルトの読み上げ順序には、マニフェストの処理後に少なくとも1つの資源が含まれていなければなりません(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 |
出版物の処理や表示で用いる追加の出版物資源リスト。 |
1つ以上の |
リンクされた資源の配列 | (なし) |
resources
プロパティーの各要素は、次のいずれかで表さなければなりません(MUST)。
LinkedResource
オブジェクトのインスタンス。1つの文字列の値は、url
プロパティーが文字列のテキストであるLinkedResource
オブジェクトのインスタンスを表します。
アイテムの順序は重要ではありません。
資源に関する情報の競合を避けるために、特定の資源の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 |
出版物に関連付けられているけれども、その処理や表示には必要のない資源のリスト。 |
1つ以上の |
リンクされた資源の配列 | (なし) |
links
プロパティーの各要素は、次のいずれかで表さなければなりません(MUST)
LinkedResource
オブジェクトのインスタンス。1つの文字列の値は、url
プロパティーが文字列のテキストであるLinkedResource
オブジェクトのインスタンスを表します。
アイテムの順序は重要ではありません。
LinkedResource
オブジェクトにrel
値を設定して用いることをお勧めします(RECOMMENDED)。
リンクされた資源は通常、次のような処理や表示の増強・強化を行うために、ユーザ・エージェントに提供されます。
リンクは、出版物のオンライン表示で用いる資源の識別にも使用できますが、(サイズを最小化するためなどで)出版物をオフラインにしたりパッケージ化したりする場合には含める必要はありません。これには次のものが含まれます。
links
リストには、(スクリプト、画像、スタイルシートなどの)リンクされた資源を表示するために必要な資源を含めるべきです(SHOULD)。
links
リストに掲載されている資源をデフォルトの読み上げ順序や資源リストに掲載してはなりません(MUST NOT)。
ユーザ・エージェントはリンクされた資源を無視することができ(MAY)、出版物でそれをオフラインにする必要はありません。この資源は、出版物をパッケージ化する場合には含めるべきではありません(SHOULD NOT)。
マニフェストは、デジタル出版物を表示・提示する際にユーザ・エージェントが用いる基本的なプロパティーの集合を提供するように設計されていますが、次の方法で拡張できます(MAY)。
この仕様は、マニフェストの内部表現でユーザ・エージェントがこのような追加のプロパティーを編集、保存し、公開する方法を定義していません。ユーザ・エージェントは、拡張プロパティーの一部またはすべてを無視できます(MAY)。
マニフェストは、
オブジェクトを用いて、ONIX[onix]やBibTeX[bibtex]などのメタデータ・レコードへのリンクによって拡張できます(MAY)。その場合、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に登録されておらず、例示のみを目的として例に含んでいます。
追加のプロパティーは、[schema.org]や[dcterms]などの公的なスキームを用いてマニフェストに直接含めることができます(MAY)。独自の用語を用いることもできますが(MAY)、そのような用語は、接頭辞をコンテキストの一部として定義した短縮IRI[json-ld11]を用いて含めることをお勧めします(RECOMMENDED)。
完全なJSON-LDプロセッサでマニフェストを用いるためには、接頭辞と短縮IRIを適切に用いる必要がありますが、それは、この仕様で定義している処理アルゴリズムの要件ではありません。完全な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]は、ダブリン・コアの用語(dcterms
)[dcterms]や要素セット(dc
)[dc11]、FOAF語彙(foaf
)[foaf]、書誌オントロジー(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]に従うことを強くお勧めします。この情報を組み込めない画像形式の場合は、
のLinkedResource
name
とdescription
のプロパティーを用いて、それぞれ代替テキストと拡張記述を提供できます。その場合は、name
プロパティーを常に設定すべきです(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)。この仕様では、そのような代替テキストの作成方法を義務付けていません。1つの方法は、画像が表紙であることを識別する文字列で代替テキストを構築し、その後に出版物のタイトルを続けることです。
表紙として識別できる(MAY)資源は1つだけですが、(代替の大きさや解像度を提供するなどのために)alternate
プロパティーを用いて追加の表紙を指定することができます(MAY)。
{
…
"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)のは1つのみです。複数のインスタンスが指定されていれば、ユーザ・エージェントは、読み上げ順序を優先して最初に検出されたインスタンスを用いなければなりません(MUST)。
ページ・リストへのリンクをリンク・リストで指定してはなりません(MUST NOT)。
{
…
"resources" : [
{
"type" : "LinkedResource",
"url" : "toc_file.html",
"rel" : "pagelist"
},
…
],
…
}
目次は、デジタル出版物の主要な構造部分へのリンクを提供するナビゲーション支援です。
目次が含まれている資源はcontents
というリンク関係[iana-link-relations]で識別されます。適切な目次は、§ C.2 HTML構造で定義しているように、role
の値であるdoc-toc
を持つその資源内の最初の要素です。
目次が含まれている資源として識別できる(MAY)のは1つだけです。複数のインスタンスが指定されていれば、ユーザ・エージェントは、読み上げ順序内の資源を優先して最初に検出されたインスタンスを用いなければなりません(MUST)。
この仕様のプロファイルでは、contents
関係で資源が識別できない場合に、目次が含まれている資源を指定する方法を定義することができます(MAY)。
リンク・リストで目次へのリンクを指定してはなりません(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
に掲載されている資源と、alternate
資源が含まれているresources
との和集合から得られます。このリストを作成するための正確な手順は、マニフェストの処理アルゴリズムで記述されます。
(links
の項に掲載されている資源や、ウェブ上の外部資源へのコンテンツ内のハイパーリンクなど)その他のすべての資源は、デジタル出版物の境界の外です。
この仕様では、出版物の資源に制限を設けませんが、この仕様のプロファイルは、コンテンツの型と資源の位置の両方を制限できます(MAY)。
ユーザ・エージェントは、資源がデジタル出版物の境界内にあるかどうかに応じて、(出版物のオフライン版やパッケージ版から外部資源を除外するなど)資源を異なる方法で処理して表示することを選択できます(MAY)。
マニフェストへのリンクは、次のいずれかまたは両方の形式を取らなければなりません(MUST)。
rel
パラメーターを「publication
」という値に設定したHTTP Link
ヘッダー・フィールド[rfc5988]。
Link: <https://example.com/pub/manifest>; rel=publication
rel
属性を「publication
」という値に設定したlink
要素[html]。
<link href="https://example.com/pub/manifest" rel="publication"/>
マニフェストがHTMLドキュメント内に組み込まれている場合、リンクには、マニフェストが含まれているscript
要素を参照するフラグメント識別子が含まれていなければなりません(MUST)(§ 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>
マニフェストにリンクされている資源は、デフォルトの読み上げ順序か資源リストのいずれかに含まれていなければなりません(MUST)。
デジタル出版物の形式でマニフェストをHTMLドキュメントに組み込むことが許されている場合、マニフェストは、type
属性をapplication/ld+json
に設定した[json-ld11]script
要素[html]に含まれていなければなりません(MUST)。
<script type="application/ld+json">
{
"@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
…
}
</script>
デジタル出版物の形式は、(制限された名前や位置を用いてマニフェストを発見できるなど)マニフェストに対するリンクやマニフェストの組み込みを伴わないマニフェストを発見する代替方法を定義できます(MAY)。この仕様では、そのような方法に制限を加えません。
この項は、インフラ標準[infra]に依存しています。
この項は非規範的です。
デジタル出版物のマニフェストは[json-ld11]として作成されますが、この項で記述しているマニフェストの処理ステップでは、ユーザ・エージェントがマニフェストをデータの内部表現に変換する方法について詳細に説明します。アルゴリズムは、[infra]で定義されている用語とデータ型を用いてプロセスを記述し、成功した場合は、返されるデータの[infra]のマップになります。
用いられる言語に関わらず、このアルゴリズムの実際の実装では、対応する構成とデータ型を用います。
処理アルゴリズムでは、次のエラー・タイプを用います。
ユーザ・エージェントは検証エラーと致命的なエラーの両方を公開すべきですが(SHOULD)、この仕様ではそれを行う方法を規定していません。
検証エラーの場合、ユーザ・エージェントはエラーの重大性(つまり、必須事項に違反しているのか、推奨事項に違反しているのか)を区別すべきです(SHOULD)。
処理アルゴリズムのステップの一部は、(url
は、出版物マニフェストの直接的なプロパティーの場合にのみURLの配列を想定するなど)用語の想定される値のカテゴリに依存するため、用語を用いるコンテキストが処理に影響を与える可能性があります。これらの使用を区別するために、特定の関数の呼び出しにコンテキストを提供します。このコンテキストは、処理の呼び出しを開始するオブジェクトの型に対して設定します。
認識されている型のデフォルトのリストには、Person
、Organization
、およびLinkedResource
が含まれます。プロファイルでこのリストを拡張し、追加のオブジェクトの型を含めることができます(MAY)。
関数にコンテキストが提供されていない場合は、処理されている用語はグローバルなコンテキストの一部と見なされます(つまり、マニフェストの直接の子です)。
認識されている型のリストを拡張する際には、すべてのオブジェクトに型が確実に指定されるように、(文字列の値が自動的にオブジェクトに展開されるなどの場合は)データの正規化の関数も拡張する必要がありえます。
このアルゴリズムは次の引数を取ります。
このアルゴリズムでは、マニフェストを検出し取得する方法は記述していません。そのためのステップは、それぞれのデジタル出版の形式によって定義されます。
内部表現を生成するためには、次のステップを実行します。
manifestを、textを条件としてJSONをInfraの値へと解析した結果とします。manifestがマップでなければ、致命的なエラーとなり、失敗を返します。
(§ 4.3 マニフェストのコンテキスト)manifest["@context"]がリストに設定されていない場合や、manifest["@context"]の最初と2番目のアイテムが「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に設定します。
出版物が準拠しているプロファイルによって、処理中に実行しなければならない追加の拡張ステップが決まります。このステップは、それぞれの仕様で定義されています。
conformsToはプロファイル識別子に限定されないため、profileという新しい用語が作成されました(つまり、この新しい用語は、内部表現内のプロファイルの永続的な識別子を提供します)。
(§ 4.4.1 グローバルな宣言)langをグローバルな言語とし、dirをこのステップで取得するグローバルな方向とします。それぞれを最初に空の文字列に設定します。
manifest["@context"]のcontextごとに、contextがマップであれば、最後のアイテムから最初のアイテムへと移動しながら、
langが空の文字列でも整形式の[bcp47]言語タグでもなければ、検証エラーとなり、langを空の文字列に設定します。
dirが空の文字列でも、「ltr
」か「rtl
」のいずれの値でもなければ、検証エラーとなり、dirを空の文字列に設定します。
ここで取得したグローバルな言語と方向の宣言は、宣言のないローカライズ可能な文字列にそれぞれ言語と基本書字方向を設定するために用います。
最後の言語と方向の宣言が以前の宣言を上書きするため、イテレータは@contextを逆方向に移動します。
(§ 4.3 マニフェストのコンテキスト)プロファイルでマニフェストのコンテキストの追加検証が必要であれば、そのステップはここで実行します。
term → manifestのtermごとに、成功した場合は、processed[term]を、term、value、lang、dir、baseを条件としてデータの正規化を呼び出した結果に設定します。失敗が返された場合は、processedにtermを追加しません。
データの正規化ステップでは、入力するマニフェストのデータを標準化して、オブジェクトや配列が想定される場所で文字列を用いる機能など、オーサリングの便利な機能を排除します。その結果として処理されたデータは、processedという変数に追加され、後続のステップに影響を及します。
processedを、processedを条件としてデータ検証を実行した結果に設定します。
データの検証チェックにより、入力するデータは、想定される値のカテゴリと確実に一致するようになります。このステップでは、想定される値に対する制限も適用され、最終的な表現から無効なデータが削除されます。
プロファイルで、実行する必要のある追加の処理機能が指定されていれば、そのステップはこの時点で実行します。
成功した場合は、processedを、指定されている場合はprocessedとdocumentを条件としてデフォルト値の追加を実行した結果に設定します。そうでない場合は、処理を終了し、失敗を返します。
このステップでは、マニフェストで欠落している情報を、ドキュメントにリンクされているHTMLドキュメントやその他の情報源から取得できるかどうかをチェックします。
processedを返します。
結果の構造の視覚化については、§ A.内部表現データ・モデルを参照してください。
グローバルな言語であるlang、グローバルな方向であるdir、基底URLであるdir、およびオプションのコンテキストであるcontextを用いて、termというプロパティーのvalueのデータを正規化するためには、次のステップを実行します。
normalizedをvalueの値とします。
データの正規化ステップは、このステップで定義しているnormalized変数に保持されている入力値のコピーに対して実行します。この変数は、正規化プロセスが正常に終了したときに返されます。
(§ 4.3 マニフェストのコンテキスト)termが@contextであれば、失敗を返します。
@contextは、マニフェストの初期処理のために情報を提供しますが、内部データ表現には保持されません。用語を削除するために失敗の通知を返します。
(§ 4.2.7 配列)contextに応じて、termが配列を想定していて、valueがリストではなければ、normalizedをリスト、つまり、≪ value ≫に設定します。
(§ 4.2.4.2 エンティティー)contextに応じて、termがエンティティーの配列を想定していれば、normalizedのentityごとに、
entityが文字列であれば、entityをマップに設定します。
≪[
"type" → ≪ "Person" ≫,
"name" → entity
]≫
そうでない場合は、entity["type"]が設定されていなければ、それをリスト、つまり、≪ "Person" ≫
に設定します。entity["type"]が設定されているけれども、Person
やOrganization
という値が含まれていなければ、Person
という値をリストに追加します。
(著者、編集者などの)作成者は、オブジェクトとして明示的に定義されることが期待されますが、便宜上、マニフェストで指定しなければならないのは、その名前のみです。例えば、
{
…
"author": "Ralph Ellison",
…
}
この規則は、このような文字列の値をPerson
というデフォルトの型を持つマップに変換し、それにより、前の例は次のようになります。
≪[
…
"author" → ≪
≪[
"type" → ≪ "Person" ≫
"name" → "Ralph Ellison"
]≫
≫,
…
]≫
シンプルにするために、nameのローカライズ可能な文字列への変換については、後のステップで説明します。
(§ 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 Comedie humaine"],
…
}
これによって次が生成されます。
≪[
"name" → ≪
≪[
"value" → "La Comedie humaine"
]≫
≫,
…
]≫
しかし、マニフェストで明示的な言語が指定されていれば、その言語はローカライズ可能な文字列オブジェクトに追加されます。例えば、
{
"@context" : [
"https://schema.org",
"https://www.w3.org/ns/pub-context",
{"language": "fr"}
],
"name" : ["La Comedie humaine"],
…
}
によって次が生成されます。
{
"name" → ≪
≪[
"value" → "La Comedie humaine"
"language" → "fr"
]≫
≫,
…
}
ローカルな設定やローカルなnull
値は、グローバルな値が有効になることを防止します。
{
"@context" : [
"https://schema.org",
"https://www.w3.org/ns/pub-context",
{"language":"fr"}
],
…
"name" : [{
"value" : "La Comedie humaine"
}],
"publisher" : [{
"type":["Organization"],
"name":[{
"value": "Hachette",
"language": null
}]
}],
…
}
これによって次が生成されます。
{
"name" → ≪
≪[
"value" → "La Comedie humaine"
"language" → "fr"
]≫
≫,
"publisher" → ≪
≪[
"type" → ≪ "Organization" ≫,
"name" → ≪
≪[
"value" → "Hachette",
]≫
]≫
≫,
…
}
(§ 4.2.4.3 リンクされた資源)contextに応じて、termがLinkedResourcesの配列を想定していれば、normalizedのresourceごとに、
resourceが文字列であれば、resourceをマップに変換します。
≪[
"type" → ≪ "LinkedResource" ≫,
"url" → resource
]≫
そうでない場合は、resourceがマップでなければ、検証エラーとなり、normalizedからresourceを削除します。
そうでない場合は、resource["type"]が設定されていなければ、それをリスト、つまり、≪ "LinkedResource" ≫
に設定します。resource["type"]が設定されているけれども、LinkedResource
という値が含まれていなければ、その値をリストに追加します。
資源のリンクは、LinkedResource
型のオブジェクトとして明示的に設計されていることが期待されますが、便宜上、マニフェストで指定しなければならないのは、その絶対URLか相対URLのみです。例えば、
{
…
"resources" : [
"css/book.css",
…
],
…
}
このステップでは、文字列の値をオブジェクトに変換し、それにより、前の例は次のようになります。
≪[
…
"resources" → ≪
≪[
"type" → ≪ "LinkedResource" ≫,
"url" → "css/book.css"
]≫,
…
≫,
…
]≫
シンプルにするために、相対パスから絶対パスへの変換については、後のステップで説明します。
(§ 4.2.5 URL)contextに応じて、termがURLかURLの配列を想定している場合、
normalizedが文字列であれば、成功した場合は、normalizedを、normalizedを条件として絶対URLへの変換を実行した結果に設定します。失敗が返された場合は、失敗を返します。
そうでない場合は、normalizedがリストであれば、normalizedのitemごとに、成功した場合は、itemを、normalizedを条件として絶対URLへの変換を実行した結果に設定ます。失敗が返された場合は、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であるbaseを用いて絶対URLであるurlに変換するためには、次のステップを実行します。
urlまたはbaseが文字列ではない場合や、空の文字列である場合は、検証エラーとなり、失敗を返します。
このステップでは、urlとbaseの両方が空でない文字列であることをチェックした後で、それらを用います。
成功した場合は、urlを、urlを入力としてbaseを基底URLとして用いてURLパーサー[url]を実行した結果に設定します。失敗が返された場合は、検証エラーとなり、失敗を返します。
このステップでは、処理するURLに対してURLパーサー関数を呼び出します。URLが絶対URLでなければ、パーサーは基底URLを用いてそれを変換します。
解析で失敗が返された場合は、URLを削除するように指示するために、呼び出し元に失敗が返されます。
urlを返します。
マップのdataでデータ検証を実行するためには、次のステップを実行します。
term → dataのvalueごとに、成功した場合は、termを、termとvalueを条件としてグローバルなデータ・チェックを実行した結果に設定します。失敗が返された場合は、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
」に設定します。そうでない場合は、それが必須の方向の値の1つでなければ、検証エラーとなり、「ltr
」に設定します。
(§ 5. 出版物資源)次のように、出版の境界内の一意のURLを取得して検証します。
readingOrderが設定されていれば、readingOrderURLsを、readingOrderを条件として一意のURLの取得を実行した結果とします。そうでない場合は、readingOrderURLsを空の順序付き集合にします。
resourcesが設定されていれば、resourcesURLsを、resourcesを条件として一意のURLの取得を実行した結果とします。そうでない場合は、resourcesURLsを空の順序付き集合にします。
data['uniqueResources']をreadingOrderURLsとresourceURLsの和集合に設定します。
このステップでは、読み上げ順序と資源リスト内の一意のURLのリストを取得します。次に、data['uniqueResources']をこれら2つの集合の和集合に設定します。これは、出版物の境界内の一意の資源の完全なリストを表します。
このステップでは、readingOrderかresourcesのいずれかに重複する資源の宣言が含まれている場合にも警告を出します。検証エラーは、各リストから一意のURLを取得する際に出されます。
(§ 4.7.2.3 リンク)data["links"]が設定されていれば、data["links"]内のlinkごとに、
urlを、exclude fragment flagを設定してlink["url"]でURLシリアライザ[url]を実行した結果とします。
data["uniqueResources"]にurlが含まれていれば、検証エラーとなり、data["links"]からlinkを削除し、その後に続行します。
link["rel"]に大文字と小文字を区別しない値である「contents
」、「pagelist
」、「cover
」のいずれかが含まれていれば、検証エラーとなり、data["links"]からlinkを削除します。
前のステップで一意の出版物資源のリストを取得した後で、リンク・プロパティーをチェックして、リンクされた資源が出版物資源としても掲載されていないことを確認します。
リンクでrel
という値が指定されていなければ、警告が出されます。構造資源は出版物の境界内になければならないため、そのrel
プロパティーで構造資源が指定されていれば、リンクは削除されます。
(§ 4.8.1 構造資源)次のように構造関係の使用について検証します。
定義されている場合は、resourcesをdata["readingOrder"]の値に設定し、そうでない場合は、空のリストに設定します。定義されている場合は、data["resources"]でresourcesを拡張します。
resources内の複数のアイテムに、大文字と小文字を区別しない値である「contents
」が含まれているrelエントリーがあれば、検証エラーとなります。
resources内の複数のアイテムに、大文字と小文字を区別しない値である「pagelist
」が含まれているrelエントリーがあれば、検証エラーとなります。
resources内の複数のアイテムに、大文字と小文字を区別しない値である「cover
」が含まれているrelエントリーがあれば、検証エラーとなります。
表紙に画像のメディア・タイプ(image/*
)を指定しているencodingFormatエントリーがあり、nameエントリーがなければ、検証エラーとなります。
これは、読み上げ順序と資源リストで指定されている資源をチェックし、目次、ページ・リスト、表紙のインスタンスが1つだけ指定されていることをチェックします。
表紙に関しては、アクセシビリティを目的として、画像ベースの形式に名前が設定されていることもチェックします。
term → dataの値ごとに、termとvalueの変数を条件として空の配列の削除を実行すると失敗を返す場合は、data["term"]を削除します。
マニフェストの処理には様々な段階で無効な値の削除が伴うため、最終的なデータ構造は、値がまったく含まれなくなったリストになる可能性があります。このステップでは、データを繰り返し処理し、そのような空のリストをすべて削除します。
dataを返します。
オプションのコンテキストであるcontextを用いてtermというプロパティーのvalueのグローバルなデータ・チェックを処理するためには、次のステップを実行します。
(§ 4.2 値のカテゴリ)termに既知の値のカテゴリがあれば、成功した場合は、valueを、term、value、contextという変数を条件として値のカテゴリの検証を呼び出した結果に設定します。失敗が返された場合は、失敗を返します。
そうでない場合は、valueを返します。
このステップでは、用語の値がその用語に必要な想定されるカテゴリと一致することを検証します。例えば、要約された用語にはブール値が必要であるため、この用語にその他の値を用いると失敗に終わります。
関数の呼び出しで失敗が発生すれば、このステップでも失敗が返されるため、プロパティーは最終的なデータセットから削除されます。
既知の値のカテゴリがない用語は処理されないため、入力値が返されます。
最初にサブプロパティーをチェックするために、次のように再帰的にvalueへと降下します。
valueがマップであれば、
value["type"]に認識されている型が含まれていれば、key → valueのkeyValueごとに、成功した場合は、value[key]を、key、keyValueを条件として、value["type"]をコンテキストとして用いてグローバルなデータ・チェックを実行した結果に設定します。失敗が返された場合は、value[key]を削除します。
そうでない場合は、何もしません。
そうでない場合は、valueがリストであれば、valueのitemごとに、itemがマップであれば、
item["type"]に認識されている型が含まれていれば、key → itemのkeyValue ごとに、成功した場合は、item[key]を、key、keyValueを条件として、item["type"]をコンテキストとして用いてグローバルなデータ・チェックを実行した結果に設定します。失敗が返された場合は、item[key]を削除します。
そうでない場合は、何もしません。
そうでない場合は、何もしません。
マニフェスト内のすべてのプロパティーが確実に処理されるようにするために、このステップでは、処理する追加のマップのエントリーに関して各エントリーを再帰的にチェックします。値がリストであれば、各アイテムを検査し、処理可能なマップであるかどうかを判断します。
これを置くことで、すべてのサブプロパティーが最初に確実にチェックされるため、無効な値が削除された後で、ステップの後半のより高レベルなチェックを行えます。
(§ 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
の用語に次の2つのチェックを実行します。
LinkedResource
を削除します。valueを返します。
コンテキストであるcontextでtermというプロパティーのvalueの値のカテゴリの検証を行うためには、次のステップを実行します。
contextに応じて、termが配列を想定していれば、
そうでない場合は、contextに応じて、termがマップを想定していれば、
そうでない場合は、contextに応じて、valueがtermの想定している値のカテゴリと一致しなければ、検証エラーとなり、失敗を返します。
valueを返します。
この関数は、処理中の用語の値がその想定している値のカテゴリと一致することをチェックします。値がリストやマップであれば、関数は再帰的に呼び出され、マニフェスト内のすべてのプロパティーが確実にチェックされます。
resourcesから一意のURLを取得するためには、次のステップを実行します。
uniqueURLsを空の順序付き集合とします。
resourcesのresourceごとに、
uniqueURLsを返します。
この関数は、(読み上げ順序か資源リストのいずれかから)
オブジェクトのリストを取得し、一意のURLの集合を返します。重複が検出されれば、警告が出されます。LinkedResource
termというプロパティーのvalueから空の配列を削除するためには、次のステップを実行します。
valueが空のリストであれば、失敗を返します。
そうでない場合は、valueがマップであれば、key → valueのkeyValueごとに、keyとkeyValueを条件として空の配列の削除を実行すると失敗を返す場合は、value[key]を削除します。
この関数は、処理中の用語の値が空のリストではないことをチェックします。当初リストを持っていた用語は、処理されると(つまり、リストのアイテムが無効な場合)エントリーを失う可能性があります。
オプションのHTMLドキュメント(DOM)ノード[html]documentを用いて、マップのdata内の欠落しているプロパティーにデフォルト値の追加を行うためには、次のステップを実行します。
(§ 4.7.1.11 タイトル)data["name"]が設定されていなければ、
titleを空のマップとします。その値を次のように設定します。
documentが設定されていれば、documentのtitle
要素[html]が設定されていて空でなければ、title["value"]をtitle
要素のテキストのコンテンツに設定します。
利用可能な場合はtitle["language"]を言語[html]に設定し、その値が利用可能でその値が「ltr
」か「rtl
」のいずれかであれば、title["direction"]を基本書字方向[html]に設定します。
そうでない場合は、検証エラーとなり、title["value"]に対して値を生成します(詳細については別の注記を参照)。生成されたタイトルに応じて、title["language"]とtitle["direction"]を設定します。
≪ title ≫
に設定します。このステップでは、マニフェストで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"]に追加します。
デジタル出版物が参照ドキュメントのみで構成されていれば、デフォルトの読み上げ順序を省略でき、自動的に、その1つの資源で構成されます。
ユーザ・エージェントが生成しなければならないデフォルト値がプロファイルで指定されていれば、そのステップはこの時点で実行します。
(§ 6.1 リンク)document.URLが設定されていて、data["uniqueResources"]にdocument.URLが含まれていなければ、検証エラーです。
マニフェストにリンクされているページが、コアと拡張のデフォルト値の規則を処理した後に、出版物の一意の資源として掲載されていなければ、それは出版物資源でなければならないため、エラーが発生します。
dataを返します。
この仕様で定義しているマニフェスト形式は、(オーディオブックや学術出版物などの)新しいプロファイルを作成する際に、出版コミュニティが実装して拡張するように設計されています。マニフェスト形式が提供する柔軟性により、各コミュニティの特定のニーズに合わせて調整できると同時に、プロファイルを処理する必要のあるユーザ・エージェントに共通の基盤を提供します(つまり、各プロファイル間の差異を最小限に抑え、相互運用性をシンプルにします)。
プロファイルがこの仕様と互換性を持つためには、次の条件を満たさなければなりません(MUST)。
conformsTo
プロパティーにこのURLを含めることを必須としなければなりません(MUST)。利用できる場合には、オーディオブックのプロファイルなどによって追加された用語の例を追加すると良いでしょう。
マニフェストは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]に依存しています。
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
要素)内でタグ付けすることにより、ユーザ・エージェントは、必要な情報と、追加された周辺コンテンツ(aside)やスタイル・タグとを容易に区別できます。目次は、(href
属性を用いた)アクティブなリンクと(href
属性を除いた)アクティブでないリンクの両方で構成でき、(特定の見出しへのリンクを省略したり、プレビュー内の特定のコンテンツのみにリンクしたりなどの)目次の構成方法にさらなる柔軟性を提供します。
しかし、ユーザ・エージェントは、目次の表示に関する状況を保持する必要がない(つまり、ユーザ・エージェントは通常、すべての出版物に共通する方法で情報を表示するために情報を抽出する)ことに注意してください。例えば、ユーザ・エージェントは、リンク要素のテキストのコンテンツのみを保持することが期待されているため、テキストのスタイル、インライン画像、その他のテキストではないコンテンツは失われる可能性があります。同様に、リストのスタイル設定や、表示するリンクの深さのレベルさえも、ユーザ・エージェントの裁量に委ねられています。そのため、ユーザが機械処理されたものに限定されてしまわないように、表示用の目次にリンクすることをお勧めします。
目次は、[html]要素(通常はnav
要素)で表されます。この要素は、role
属性[html]の値である「doc-toc
」[dpub-aria-1.0]で識別されなければならず(MUST)、そのrole
値を持つドキュメント・ツリーの順序[dom]においてドキュメントの最初の要素でなければなりません(MUST)。この要素はユーザに非表示にすることができます(MAY)。
マニフェストは、目次が含まれている資源を識別すべきです(SHOULD)。
nav
要素のコンテンツ・モデルには制限はありませんが、ユーザ・エージェントは、次のマークアップのガイドラインに従っている場合にのみ、利用可能な目次を抽出できます。
目次のタイトルはオプションですが、必要なときにユーザ・エージェントがプレースホルダーのタイトルを生成しないように、追加することをお勧めします。タイトルは、[html]のh1
からh6
の要素のいずれかを用いて指定します。この要素の最初のもののみがタイトルとして認識されることに注意してください。リンクのリストの前に見出し要素がなければ、ユーザ・エージェントはそれが指定されていないと見なします。
nav
要素内で最初に検出される[html]のol
またはul
のlist要素には、コンテンツへのリンクを定義しているリストが含まれていると見なされます。このリストは、例えば、アルゴリズムによってその処理に関係のない要素が無視されるため、div
要素内で入れ子になっている場合でも見つかります。しかし、スキップする要素の内部にリストを含めることは、その内部のコンテンツが評価されないため、できません。
nav
要素にこれらの要素の1つが含まれていなければ、ユーザ・エージェントは、デジタル出版物を、(機械表示のオプションは利用できないなど)利用可能な目次が含まれているものとして登録しません。
目次がリンクのツリーと見なされる場合、リンクのリスト内の個々のリスト・アイテム(li
要素)は1つのブランチを表します。これらの各ブランチには、ユーザに表示するために名前と、オプションの行き先がなければならず、この情報は、入れ子になっている場所に関係なく、リスト・アイテム内で最初に見つかったa
要素から得られます(ここでも、スキップする要素内のa
要素を除く)。
ブランチのリンク先は、指定されていれば、a
要素のhref
属性から得られます。(プレビューなどで)リンクを利用できない場合や、(ヘッダーのグループ化などの)関連性がない場合には、この属性は省略できます。コンテンツへのリンクを提供する場合、(rel
属性で)リンクされたドキュメントの関係性と、(type
属性で)リンクされた資源のメディア・タイプを指定することもできます。
ブランチをラベル付けするa
要素を見つけた後、ユーザ・エージェントは、別のリスト要素(つまり、サブブランチ)のマークアップを引き続き検査します。リストが見つかれば、処理する入れ子のブランチがなくなるまで、リンクを抽出するなどの同様の処理を継続します。
誤った解釈を避けるために、目次の解析時に小さな要素は無視します。それは、[html]のセクショニング・コンテンツ要素とセクショニング・ルート要素です。これらを無視する理由は、これらが独自のアウトラインを定義できる(つまり、自己完結型であり、必ずしもコンテンツ・リンクの構造に関連のない組み込みコンテンツを表すことができる)ためです。
非表示の要素はユーザが直接アクセスすることを目的としていないため、hidden
属性が設定されている要素もスキップします。
これらの要素はnav
要素に含めることができますが、(コンテンツへのすべてのリンクを含んでいるリスト・アイテムの周りにsection
要素をラップしないなど)重要なコンテンツをそれらの要素に組み込まないように注意しなければなりません。
目次の抽出に関係がなく、スキップされない要素はすべて無視します。スキップする要素とは異なり、無視するということは、ユーザ・エージェントが要素内で関連コンテンツを検索し続けることを意味するため、利用可能なタグ付けの柔軟性が高まります。
この項は非規範的です。
この項は、インフラ標準[infra]に依存しています。
この項では、nav
要素から目次を抽出するためのアルゴリズムを定義します。これは、DOMツリーのノード上をツリー順[dom]にウォークするという観点で定義しており、各ノードは、ウォーク中の入るときと出るときに訪問されます。ノードを訪問するたびに、入るイベントか出るイベントが生じると考えることができます。一部のステップでは、ユーザ・エージェントは、コンテンツ処理方法の選択肢を提供して、様々な表示モデルに柔軟性を提供します。
DOMから必要な情報を得るためにすべての子孫ノードを検査する必要があるとは限らないため、このアルゴリズムは純粋にイベント駆動型の用語では定義されていません。場合によっては、要素とそのすべての子要素は、入る時に処理された直後にスキップされます。イベントのアプローチを適用することもできますが、スキップしたノードを処理/無視するようにアルゴリズムを変更する必要があります。
ユーザ・エージェントは、データの最終形式を表すことができる任意の言語を用いて、結果の構造を処理して取り込むことができます。
このアルゴリズムの目的上、list要素は[html]のol
かul
の要素として定義します。
次のアルゴリズムは、要素が非表示と宣言[html]されているか、表示されないようにCSSでスタイル設定されているかに関係なく、role
属性の値であるdoc-toc
を持つ、ドキュメント順序で最初の要素をルートとするDOMサブツリーのウォークに適用しなければなりません(MUST)。
目次要素が含まれている資源を見つけるための規則は、§ 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がnullでなければ、
そうでない場合は、branchesが空であれば、
リスト要素を出るときは、
このステップにより、すべての子のブランチを処理した後で、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のプロパティーの値を取得します。
現在のブランチの名前が定義済みであれば、この要素の処理は終了します(つまり、1つのブランチに対する複数のリンク処理を回避する)。
ユーザ・エージェントがエントリーのnameをa
要素の子孫コンテンツに設定するのか、(画像、MathML、rubyなどの容易にテキストに変換できないコンテンツを保持するなどのために)それからテキスト文字列を生成するのかは、子孫タグを表示で再利用するかどうかによって異なります。
href
属性の指定に加えて、この仕様の要件を満たすためには、デジタル出版物に属する資源に対して解決する必要があります。そうしない場合は、ブランチは保持されますが、エントリーはリンク可能になりません。
リンクのターゲットに関する追加情報(資源の型とその関係)も保持されます。
≪[
"name" → "In the Beginning",
"url" → "http://example.com/page1.svg",
"type" → "image/svg",
"rel" → null,
"entries" → ≪ ≫
]≫
セクショニング・コンテンツ要素、セクショニング・ルート要素、または非表示属性を持つ要素に入るときは、
それ以降の要素の処理をスキップして、次へ進みます。
セクショニング要素とセクショニング・ルート要素は独自のアウトラインを定義できるため、それらにまで降下すると目次の生成に問題が発生します(つまり、直接関連しないコンテンツが含まれる可能性があります)。その結果、これらは、子のコンテンツが処理されることを防ぐために、検出されたときにスキップされます。
そうでない場合は、何もしません。
その他のすべての要素で、このステップにより、それらの子孫要素の処理をを継続できます。
DOMウォークの完了後、toc["entries"]に空でないリストが含まれていれば、tocを返します。そうでない場合は、null
を返します。
(nav
要素にリストが見つからなかったか、適合するリスト・アイテムがリストに含まれていなかったため)ルートのtocオブジェクト内のentries
の配列にブランチが含まれていなければ、アルゴリズムは使用可能な目次を生成しません。
最初の公開草案以後の本質的な変更
対応済みの課題の完全なリストについては、GitHub trackerを参照してください。
この項は非規範的です。
この項は非規範的です。
下記は、本のプロファイルの例のための基本的なメタデータの集合が含まれているマニフェストです。
このマニフェストの内部表現の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 プレビュー |
この項は非規範的です。
編集者は、この仕様に貢献してくださったPublishingワーキンググループのメンバーに感謝します。
ワーキンググループはまた、この仕様への道を開いてくれたすべての努力に関し、Digital Publishingインタレスト・グループのメンバーに感謝申し上げます。