From f1d023a668e0aaf75bb0c8f2e68604ea52af4a27 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Thu, 25 Aug 2022 11:07:34 +0200 Subject: [PATCH 01/19] First draft for an updated Divina level 0 --- modules/presentation.md | 122 +----------------- profiles/divina.md | 25 ++-- profiles/epub.md | 27 ++++ schema/extensions/divina/metadata.schema.json | 12 ++ schema/extensions/epub/properties.schema.json | 9 ++ .../presentation/metadata.schema.json | 24 ---- .../presentation/properties.schema.json | 19 --- schema/metadata.schema.json | 11 +- 8 files changed, 66 insertions(+), 183 deletions(-) create mode 100644 schema/extensions/divina/metadata.schema.json diff --git a/modules/presentation.md b/modules/presentation.md index 40122d6..0b7dfd7 100644 --- a/modules/presentation.md +++ b/modules/presentation.md @@ -1,4 +1,4 @@ -# Presentation Hints +# Divina Presentation Hints The Presentation Hints extension defines a number of hints for User Agents about the way content should be presented to the user. @@ -13,11 +13,8 @@ In order to provide publication-wide Presentation Hints, this extension introduc The following elements may be included in `presentation`: - [`clipped`](#clipped) -- [`continuous`](#continuous) - [`fit`](#fit) - [`orientation`](#orientation) -- [`overflow`](#overflow) -- [`spread`](#spread) ## 2. Presentation Hints as Link Properties @@ -29,7 +26,6 @@ The following elements may be included in `properti - [`fit`](#fit) - [`orientation`](#orientation) - [`page`](#page) -- [`spread`](#spread) ## 3. Properties @@ -70,22 +66,6 @@ The `clipped` property is meant to adapt visual resources to any given viewport ] ``` -### continuous - -| Key | Semantics | Type | Values | Default | -| ----- | --------- | -------- | --------- | ------- | -| `continuous` | Indicates if consecutive linked resources from the `readingOrder` should be handled in a continuous or discontinuous way. | Boolean | `true` or `false` | `true` | - -*In this example, the user will not experience discontinuities between the different resources* - -```json -"metadata": { - "presentation": { - "continuous": true - } -} -``` - ### fit | Key | Semantics | Type | Values | Default | @@ -156,106 +136,6 @@ The `orientation` property is mostly relevant for resources with fixed dimension ] ``` -### overflow - -| Key | Semantics | Type | Values | Default | -| ----- | --------- | -------- | --------- | ------- | -| `overflow` | Indicates if the overflow of linked resources from the `readingOrder` or `resources` should be handled using dynamic pagination or scrolling. | String | `paginated`, `scrolled` or `auto` | `auto` | - - -| Value | Definition | -| ------- | ---------- | -| `paginated` | Content overflow should be handled using dynamic pagination. | -| `scrolled` | Content overflow should be handled using scrolling. | -| `auto` | The User Agent can decide how overflow should be handled. | - -*Here is an example of a paginated mode requested by the author* - -```json -"metadata": { - "readingProgression": "ltr", - "presentation": { - "continuous": true, - "overflow": "paginated" - } -} -``` - -### page - -The `page` property is meant to provide a hint to Use Agents that rely on synthetic spreads to display more than a single resource at once. - -| Key | Semantics | Type | Values | Default | -| ----- | --------- | -------- | --------- | ------- | -| `page` | Indicates how the linked resource should be displayed in a reading environment that displays synthetic spreads. | String | `left`, `right` or `center` | None | - -*In this example, the first page should be displayed of the left of a synthetic spread, the second page on the right.* - -```json -"readingOrder": [ - { - "href": "page1.jpg", - "type": "image/jpeg", - "properties": { - "page": "left" - } - }, - { - "href": "page2.jpg", - "type": "image/jpeg", - "properties": { - "page": "right" - } - } -] -``` - -### spread - -| Key | Semantics | Type | Values | Default | -| ----- | --------- | -------- | --------- | ------- | -| `spread` | Indicates the condition to be met for the linked resource to be rendered within a synthetic spread. | String | `landscape`, `both`, `none` or `auto` | `auto` | - -| Value | Definition | -| ------- | ---------- | -| `landscape` | The resource should be displayed in a spread only if the device is in landscape mode. | -| `both` | The resource should be displayed in a spread whatever the device orientation is. | -| `none` | The resource should never be displayed in a spread. | -| `auto` | The resource is left to the User Agent. | - -*In this example, content should be displayed in a spread only if the device is in landscape mode.* - -```json -"metadata": { - "presentation": { - "spread": "landscape", - "fit": "contain" - } -} -``` -*In this example, content of these two pages should be displayed in a spread, one on the left, the other on the right, whatever the device orientation is.* - -```json -"readingOrder": [ - { - "href": "page1.jpg", - "type": "image/jpeg", - "properties": { - "spread": "both", - "page": "left" - } - }, - { - "href": "page2.jpg", - "type": "image/jpeg", - "properties": { - "spread": "both", - "page": "right" - } - } -] -``` - ## Appendix A - JSON Schema The following JSON Schemas for this module are available under version control: diff --git a/profiles/divina.md b/profiles/divina.md index 8547859..5a255fc 100644 --- a/profiles/divina.md +++ b/profiles/divina.md @@ -180,7 +180,15 @@ This current draft does not cover guided navigation over alternate versions of e ] ``` -## 5. Packaging +## 5. Forced scrolling + +In order to support Divina publications where continuous scrolling is the only way to display the publication properly, this profile introduces a new publication-level metadata: + +| Key | Semantics | Type | Default | +| ----- | --------- | -------- | ------- | +| `forceScroll` | Suggested orientation for the device when displaying the linked resource. | Boolean | `false` | + +## 6. Packaging A Divina publication may be distributed unpackaged on the Web, but it may also be packaged for easy distribution as a single file. To achieve this goal, this specification defines the [Readium Packaging Format (RPF)](./packaging.md). @@ -197,12 +205,12 @@ As an alternative, the manifest may also be included into an EPUB 3 publication, ### Level 0 * Support for the [Readium Web Publication Manifest](https://readium.org/webpub-manifest) with bitmap images in `readingOrder` -* Support for [presentation hints](../modules/presentation.md) * Support for [alternate resources](#3-alternate-resources) ### Level 1 +* Support for [Divina presentation hints](../modules/presentation.md) * Support for [guided navigation](#4-guided-navigation) * Support for [transitions](../modules/transitions.md) @@ -221,11 +229,7 @@ As an alternative, the manifest may also be included into an EPUB 3 publication, "title": "Manga", "identifier": "https://example.com/manga", "conformsTo": "https://readium.org/webpub-manifest/profiles/divina", - "readingProgression": "rtl", - "presentation": { - "fit": "contain", - "spread": "landscape" - } + "readingProgression": "rtl" }, "readingOrder": [ { @@ -257,12 +261,7 @@ As an alternative, the manifest may also be included into an EPUB 3 publication, "title": "Webtoon", "identifier": "https://example.com/webtoon", "conformsTo": "https://readium.org/webpub-manifest/profiles/divina", - "readingProgression": "ttb", - "presentation": { - "overflow": "scrolled", - "fit": "width", - "continuous": true - } + "forceScroll": true }, "readingOrder": [ { diff --git a/profiles/epub.md b/profiles/epub.md index 2cbf6a6..1b4f662 100644 --- a/profiles/epub.md +++ b/profiles/epub.md @@ -53,6 +53,7 @@ This profile defines additional Link properties: | ----- | --------- | -------- | --------- | | [contains](#contains) | Identifies content contained in the linked resource, that cannot be strictly identified using a media type. | Array | `mathml`, `onix`, `remote-resources`, `js`, `svg` or `xmp` | | [layout](#layout) | Hint about the nature of the layout for the linked resources. | String | `fixed` or `reflowable` | +| [page](#page) | Indicates how the linked resource should be displayed in a reading environment that displays synthetic spreads. | String | `right`, `left` or `center` | ### contains @@ -94,4 +95,30 @@ Using `fixed` it can also indicate that an HTML document has a viewport with a f "layout": "fixed" } } +``` + +### page + +The `page` property is meant to provide a hint to Use Agents that rely on synthetic spreads to display more than a single resource at once. + + +*In this example, the first page should be displayed of the left of a synthetic spread, the second page on the right.* + +```json +"readingOrder": [ + { + "href": "page1.jpg", + "type": "image/jpeg", + "properties": { + "page": "left" + } + }, + { + "href": "page2.jpg", + "type": "image/jpeg", + "properties": { + "page": "right" + } + } +] ``` \ No newline at end of file diff --git a/schema/extensions/divina/metadata.schema.json b/schema/extensions/divina/metadata.schema.json new file mode 100644 index 0000000..c1551be --- /dev/null +++ b/schema/extensions/divina/metadata.schema.json @@ -0,0 +1,12 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://readium.org/webpub-manifest/schema/extensions/divina/metadata.schema.json", + "title": "Divina - Metadata", + "type": "object", + "properties": { + "forceScroll": { + "type": "boolean", + "default": false + } + } +} diff --git a/schema/extensions/epub/properties.schema.json b/schema/extensions/epub/properties.schema.json index a0bdfa5..d16fa21 100644 --- a/schema/extensions/epub/properties.schema.json +++ b/schema/extensions/epub/properties.schema.json @@ -59,6 +59,15 @@ "required": [ "algorithm" ] + }, + "page": { + "description": "Indicates how the linked resource should be displayed in a reading environment that displays synthetic spreads.", + "type": "string", + "enum": [ + "left", + "right", + "center" + ] } } } diff --git a/schema/extensions/presentation/metadata.schema.json b/schema/extensions/presentation/metadata.schema.json index 233c98b..cf87a09 100644 --- a/schema/extensions/presentation/metadata.schema.json +++ b/schema/extensions/presentation/metadata.schema.json @@ -11,10 +11,6 @@ "description": "Specifies whether or not the parts of a linked resource that flow out of the viewport are clipped.", "type": "boolean" }, - "continuous": { - "description": "Indicates if consecutive linked resources from the `reading order` should be handled in a continuous or discontinuous way.", - "type": "boolean" - }, "fit": { "description": "Specifies constraints for the presentation of a linked resource within the viewport.", "type": "string", @@ -33,26 +29,6 @@ "landscape", "portrait" ] - }, - "overflow": { - "description": "Indicates if the overflow of linked resources from the `readingOrder` or `resources` should be handled using dynamic pagination or scrolling.", - "type": "string", - "enum": [ - "auto", - "paginated", - "scrolled", - "scrolled-continuous" - ] - }, - "spread": { - "description": "Indicates the condition to be met for the linked resource to be rendered within a synthetic spread.", - "type": "string", - "enum": [ - "auto", - "both", - "none", - "landscape" - ] } } } diff --git a/schema/extensions/presentation/properties.schema.json b/schema/extensions/presentation/properties.schema.json index 9e0d681..5fe1a7e 100644 --- a/schema/extensions/presentation/properties.schema.json +++ b/schema/extensions/presentation/properties.schema.json @@ -26,25 +26,6 @@ "landscape", "portrait" ] - }, - "page": { - "description": "Indicates how the linked resource should be displayed in a reading environment that displays synthetic spreads.", - "type": "string", - "enum": [ - "left", - "right", - "center" - ] - }, - "spread": { - "description": "Indicates the condition to be met for the linked resource to be rendered within a synthetic spread.", - "type": "string", - "enum": [ - "auto", - "both", - "none", - "landscape" - ] } } } diff --git a/schema/metadata.schema.json b/schema/metadata.schema.json index c74b065..08831c3 100644 --- a/schema/metadata.schema.json +++ b/schema/metadata.schema.json @@ -105,12 +105,8 @@ "type": "string", "enum": [ "rtl", - "ltr", - "ttb", - "btt", - "auto" - ], - "default": "auto" + "ltr" + ] }, "description": { "type": "string" @@ -142,6 +138,9 @@ { "$ref": "extensions/epub/metadata.schema.json" }, + { + "$ref": "extensions/divina/metadata.schema.json" + }, { "$ref": "extensions/presentation/metadata.schema.json" } From 819167ae0bb5a6fd30682624a5668ef48aceea60 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Thu, 25 Aug 2022 11:10:12 +0200 Subject: [PATCH 02/19] Updated the default context to reflect changes to readingProgression --- contexts/default/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contexts/default/README.md b/contexts/default/README.md index 9eadc84..5355dd7 100644 --- a/contexts/default/README.md +++ b/contexts/default/README.md @@ -290,9 +290,8 @@ To properly browse through a publication, a User Agent needs to know its progres A manifest may express this information using `readingProgression`. -It allows the following values: `ltr` (left to right), `rtl` (right to left), `ttb` (top to bottom), `btt` (bottom to top) and `auto`. +It allows the following values: `ltr` (left to right) and `rtl` (right to left) -It defaults to `auto` when no value is set. ## Duration and Number of Pages From d1519eebe3f372fac01a124ada5e007998e40a24 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Fri, 26 Aug 2022 17:30:10 +0200 Subject: [PATCH 03/19] Moved page to core link properties --- profiles/epub.md | 26 ------------ properties.md | 41 +++++++++++++++++-- schema/extensions/epub/properties.schema.json | 9 ---- schema/link.schema.json | 12 ++++++ 4 files changed, 49 insertions(+), 39 deletions(-) diff --git a/profiles/epub.md b/profiles/epub.md index 1b4f662..dcc2625 100644 --- a/profiles/epub.md +++ b/profiles/epub.md @@ -95,30 +95,4 @@ Using `fixed` it can also indicate that an HTML document has a viewport with a f "layout": "fixed" } } -``` - -### page - -The `page` property is meant to provide a hint to Use Agents that rely on synthetic spreads to display more than a single resource at once. - - -*In this example, the first page should be displayed of the left of a synthetic spread, the second page on the right.* - -```json -"readingOrder": [ - { - "href": "page1.jpg", - "type": "image/jpeg", - "properties": { - "page": "left" - } - }, - { - "href": "page2.jpg", - "type": "image/jpeg", - "properties": { - "page": "right" - } - } -] ``` \ No newline at end of file diff --git a/properties.md b/properties.md index 4e136d3..d507a78 100644 --- a/properties.md +++ b/properties.md @@ -4,16 +4,49 @@ Each Link Object may contain a Properties Object, containing a number of relevan This document is meant to provide an exhaustive list of properties that can be associated to a Link Object, along with their semantics and usage. + +## Core properties + +| Key | Semantics | Type | Values | +| ----- | --------- | -------- | --------- | +| [`page`](#page) | Indicates how the linked resource should be displayed in a reading environment that displays synthetic spreads. | String | `left`, `right` or `center` | + +### page + +The `page` property is meant to provide a hint to Use Agents that rely on synthetic spreads to display more than a single resource at once. + + +*In this example, the first page should be displayed of the left of a synthetic spread, the second page on the right.* + +```json +"readingOrder": [ + { + "href": "page1.jpg", + "type": "image/jpeg", + "properties": { + "page": "left" + } + }, + { + "href": "page2.jpg", + "type": "image/jpeg", + "properties": { + "page": "right" + } + } +] +``` + + ## Extensions | Key | Semantics | Type | Values | Reference | | ----- | --------- | -------- | --------- | --------- | -| [`contains`](/profiles/epub.md#contains) | Indentifies content contained in the linked resource, that cannot be strictly identified using a media type. | Array | `mathml`, `onix`, `remote-resources`, `js`, `svg` or `xmp` | [EPUB Profile](/profiles/epub.md#properties) | +| [`clipped`](/modules/presentation.md#clipped) | Specifies whether or not the parts of a linked resource that flow out of the viewport are clipped. | Boolean | `true` or `false` | [Presentation Hints](/modules/presentation.md) | +| [`contains`](/profiles/epub.md#contains) | Indentifies content contained in the linked resource, that cannot be strictly identified using a media type. | Array | `mathml`, `onix`, `remote-resources`, `js`, `svg` or `xmp` | [EPUB Profile](/profiles/epub.md#properties) | +| [`fit`](/modules/presentation.md#fit) | Specifies constraints for the presentation of a linked resource within the viewport. | String | `contain`, `cover`, `width` or `height` | [Presentation Hints](/modules/presentation.md) | | [`layout`](/profiles/epub.md#layout) | Hint about the nature of the layout for the linked resources. | String | `fixed` or `reflowable` | [EPUB Profile](/profiles/epub.md#properties) | | [`orientation`](/modules/presentation.md#orientation) | Suggested orientation for the device when displaying the linked resource. | String | `auto`, `landscape` or `portrait` | [Presentation Hints](/modules/presentation.md) | -| [`overflow`](/modules/presentation.md#overflow) | Suggested method for handling overflow while displaying the linked resource. | String | `auto`, `clipped`, `paginated` or `scrolled` | [Presentation Hints](/modules/presentation.md) | -| [`page`](/modules/presentation.md#page) | Indicates how the linked resource should be displayed in a reading environment that displays synthetic spreads. | String | `left`, `right` or `center` | [Presentation Hints](/modules/presentation.md) | -| [`spread`](/modules/presentation.md#spread) | Indicates the condition to be met for the linked resource to be rendered within a synthetic spread. | String | `auto`, `both`, `none` or `landscape` | [Presentation Hints](/modules/epub.md#properties) | | [`encrypted`](/modules/encryption.md) | Indicates how a given resource has been encrypted or obfuscated. | [Encryption Object](/modules/encryption.md#encryption-object) | See the definition of the Encryption Object | [Encryption Module](/modules/encryption.md) | ## OPDS 2.0 diff --git a/schema/extensions/epub/properties.schema.json b/schema/extensions/epub/properties.schema.json index d16fa21..a0bdfa5 100644 --- a/schema/extensions/epub/properties.schema.json +++ b/schema/extensions/epub/properties.schema.json @@ -59,15 +59,6 @@ "required": [ "algorithm" ] - }, - "page": { - "description": "Indicates how the linked resource should be displayed in a reading environment that displays synthetic spreads.", - "type": "string", - "enum": [ - "left", - "right", - "center" - ] } } } diff --git a/schema/link.schema.json b/schema/link.schema.json index a862b6f..dfca6ee 100644 --- a/schema/link.schema.json +++ b/schema/link.schema.json @@ -32,6 +32,18 @@ }, "properties": { "description": "Properties associated to the linked resource", + "type": "object", + "properties": { + "page": { + "description": "Indicates how the linked resource should be displayed in a reading environment that displays synthetic spreads.", + "type": "string", + "enum": [ + "left", + "right", + "center" + ] + } + }, "allOf": [ { "$ref": "https://drafts.opds.io/schema/properties.schema.json" }, { "$ref": "extensions/epub/properties.schema.json" }, From 6a6178ce7d9468888e5b5bf0692cd6854b75c141 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Fri, 26 Aug 2022 17:31:04 +0200 Subject: [PATCH 04/19] Removed reference to page property in EPUB profile --- profiles/epub.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/profiles/epub.md b/profiles/epub.md index dcc2625..9bbc15a 100644 --- a/profiles/epub.md +++ b/profiles/epub.md @@ -52,8 +52,7 @@ This profile defines additional Link properties: | Key | Semantics | Type | Values | | ----- | --------- | -------- | --------- | | [contains](#contains) | Identifies content contained in the linked resource, that cannot be strictly identified using a media type. | Array | `mathml`, `onix`, `remote-resources`, `js`, `svg` or `xmp` | -| [layout](#layout) | Hint about the nature of the layout for the linked resources. | String | `fixed` or `reflowable` | -| [page](#page) | Indicates how the linked resource should be displayed in a reading environment that displays synthetic spreads. | String | `right`, `left` or `center` | +| [layout](#layout) | Hint about the nature of the layout for the linked resources. | String | `fixed` or `reflowable` | ### contains From 4cc0acaf1c7865c3bea49adbd19125dfe984a50f Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Wed, 21 Jun 2023 16:39:17 +0200 Subject: [PATCH 05/19] Simplified Divina profile --- profiles/divina.md | 34 ++++++---------------------------- 1 file changed, 6 insertions(+), 28 deletions(-) diff --git a/profiles/divina.md b/profiles/divina.md index 5a255fc..abcb022 100644 --- a/profiles/divina.md +++ b/profiles/divina.md @@ -64,12 +64,6 @@ The goal of this specification is to provide a profile dedicated to visual narratives for the [Readium Web Publication Manifest](https://readium.org/webpub-manifest). -This profile relies on: - -* the use of [presentation hints](../modules/presentation.md) for specifying display constraints, -* the definition of a new collection type for implementing [guided navigation](#4-guided-navigation), -* the [transitions module](../modules/transitions.md) to manage transitions between resources of the reading order. - While the Digital Visual Narrative Manifest is technically a profile of the Readium Web Publication Manifest, it has its own media type in order to maximize compatibilty with dedicated apps: `application/divina+json`. @@ -146,6 +140,8 @@ All Link Objects present in the `alternate` array: ## 4. Guided Navigation +> Note: With on-going work on guided navigation for all Readium Web Publications, this section will most likely be replaced in the near future with an updated syntax in a separate document. + In addition to having [a table of contents](https://readium.org/webpub-manifest/#6-table-of-contents), a visual narrative may also provide guided navigation where each reference is either: - pointing directly to a resource (`image1.jpg`) @@ -197,30 +193,12 @@ To maximize compatibility with dedicated apps, such a package has its own file e - its file extension must be `.divina` - its media type must be `application/divina+zip` -As an alternative, the manifest may also be included into an EPUB 3 publication, an hybrid solution also specified in the [Readium Packaging Format (RPF)](./packaging.md) specification. This approach allows a publisher to create EPUB 3 fixed layout comics which are enriched by transitions, guided navigation, sounds etc. accessible via Divina compliant applications. - - -## Appendix A. Compliance Levels - -### Level 0 - -* Support for the [Readium Web Publication Manifest](https://readium.org/webpub-manifest) with bitmap images in `readingOrder` -* Support for [alternate resources](#3-alternate-resources) - - -### Level 1 - -* Support for [Divina presentation hints](../modules/presentation.md) -* Support for [guided navigation](#4-guided-navigation) -* Support for [transitions](../modules/transitions.md) - -### Level 2 +As an alternative, the manifest may also be included into an EPUB 3 publication, an hybrid solution also specified in the [Readium Packaging Format (RPF)](./packaging.md) specification. This approach allows a publisher to create EPUB 3 fixed layout comics which are enriched by Divina features. -* TBD -## Appendix B. Examples +## Appendix A. Examples -*Example 5: A manga is a DiViNa where images are presented sequentially from right-to-left with a discontinuity between images that are not in the same spread* +*Example 5: A manga is a Divina where images are presented sequentially from right-to-left with a discontinuity between images that are not in the same spread* ```json @@ -252,7 +230,7 @@ As an alternative, the manifest may also be included into an EPUB 3 publication, } ``` -*Example 6: A webtoon is a DiViNa where images are scrolled in a single continuous strip of content* +*Example 6: A webtoon is a Divina where images are scrolled in a single continuous strip of content* ```json From aade6b40aae696ecd1afcc912b814e104d3bd5c5 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Wed, 19 Jun 2024 17:42:29 +0200 Subject: [PATCH 06/19] First review to prepare for alignment with EPUB proposal --- contexts/default/README.md | 3 +- modules/presentation.md | 6 +- profiles/divina.md | 81 +++++-------------- schema/extensions/divina/metadata.schema.json | 12 --- schema/extensions/epub/metadata.schema.json | 5 +- schema/extensions/epub/properties.schema.json | 2 +- schema/metadata.schema.json | 3 - 7 files changed, 30 insertions(+), 82 deletions(-) delete mode 100644 schema/extensions/divina/metadata.schema.json diff --git a/contexts/default/README.md b/contexts/default/README.md index 5355dd7..9eadc84 100644 --- a/contexts/default/README.md +++ b/contexts/default/README.md @@ -290,8 +290,9 @@ To properly browse through a publication, a User Agent needs to know its progres A manifest may express this information using `readingProgression`. -It allows the following values: `ltr` (left to right) and `rtl` (right to left) +It allows the following values: `ltr` (left to right), `rtl` (right to left), `ttb` (top to bottom), `btt` (bottom to top) and `auto`. +It defaults to `auto` when no value is set. ## Duration and Number of Pages diff --git a/modules/presentation.md b/modules/presentation.md index 0b7dfd7..99e703b 100644 --- a/modules/presentation.md +++ b/modules/presentation.md @@ -1,4 +1,4 @@ -# Divina Presentation Hints +# Advanced Divina Presentation Hints The Presentation Hints extension defines a number of hints for User Agents about the way content should be presented to the user. @@ -43,10 +43,8 @@ The `clipped` property is meant to adapt visual resources to any given viewport "metadata": { "readingProgression": "ttb", "presentation": { - "continuous": false, "fit": "height", "clipped": true - } } ``` @@ -85,7 +83,7 @@ The `clipped` property is meant to adapt visual resources to any given viewport "metadata": { "readingProgression": "ttb", "presentation": { - "continuous": true, + "layout": "scrolled", "overflow": "scrolled", "fit": "width" } diff --git a/profiles/divina.md b/profiles/divina.md index abcb022..00d1fb8 100644 --- a/profiles/divina.md +++ b/profiles/divina.md @@ -2,7 +2,7 @@ **Editors:** -* Hadrien Gardeur ([De Marque](http://www.demarque.com)) +* Hadrien Gardeur * Laurent Le Meur ([EDRLab](https://www.edrlab.org)) **Participate:** @@ -36,7 +36,11 @@ }, "links": [ - {"rel": "self", "href": "http://example.org/manifest.json", "type": "application/divina+json"} + { + "rel": "self", + "href": "http://example.org/manifest.json", + "type": "application/divina+json" + } ], "readingOrder": [ @@ -62,9 +66,9 @@ ## Introduction -The goal of this specification is to provide a profile dedicated to visual narratives for the [Readium Web Publication Manifest](https://readium.org/webpub-manifest). +The goal of this specification is to provide a profile dedicated to digital visual narratives (Divina) for the [Readium Web Publication Manifest](https://readium.org/webpub-manifest). -While the Digital Visual Narrative Manifest is technically a profile of the Readium Web Publication Manifest, it has its own media type in order to maximize compatibilty with dedicated apps: `application/divina+json`. +While the Divina Manifest is technically a profile of the Readium Web Publication Manifest, it has its own media type in order to maximize compatibilty with dedicated apps: `application/divina+json`. ## 2. Listing Resources @@ -87,7 +91,7 @@ All Link Objects present in the `alternate` array: - should indicate their dimensions using `height` and `width` - may target a different language using `language` -*Example 1: A resource available in JPEG and WebP* +*Example 1: A resource available in JPEG and AVIF* ```json { @@ -95,8 +99,8 @@ All Link Objects present in the `alternate` array: "type": "image/jpeg", "alternate": [ { - "href": "http://example.org/page1.webp", - "type": "image/webp" + "href": "http://example.org/page1.avif", + "type": "image/avif" } ] } @@ -138,67 +142,24 @@ All Link Objects present in the `alternate` array: } ``` -## 4. Guided Navigation - -> Note: With on-going work on guided navigation for all Readium Web Publications, this section will most likely be replaced in the near future with an updated syntax in a separate document. - -In addition to having [a table of contents](https://readium.org/webpub-manifest/#6-table-of-contents), a visual narrative may also provide guided navigation where each reference is either: - -- pointing directly to a resource (`image1.jpg`) -- or to a fragment of a resource using [Media Fragments](https://www.w3.org/TR/media-frags) (`image1.jpg#xywh=160,120,320,240`) - -This document introduces a new collection role to fulfill that goal: +## 4. Packaging -| Role | Definition | Compact Collection? | Required? | -| ----- | ---------- | ------------------- | --------- | -| `guided` | Identifies a collection containing guided navigation into a publication. | Yes | No | - -To avoid duplicating content between `readingOrder` and `guided`, Link Objects referenced in `guided` must only contain `href` and `title`. - -This current draft does not cover guided navigation over alternate versions of each image resource. - -*Example 4: Guided navigation with full page displayed before panels* - -```json -"guided": [ - { - "href": "http://example.org/page1.jpeg", - "title": "Page 1" - }, - { - "href": "http://example.org/page1.jpeg#xywh=0,0,300,200", - "title": "Panel 1" - }, - { - "href": "http://example.org/page1.jpeg#xywh=300,200,310,200", - "title": "Panel 2" - } -] -``` - -## 5. Forced scrolling - -In order to support Divina publications where continuous scrolling is the only way to display the publication properly, this profile introduces a new publication-level metadata: - -| Key | Semantics | Type | Default | -| ----- | --------- | -------- | ------- | -| `forceScroll` | Suggested orientation for the device when displaying the linked resource. | Boolean | `false` | - -## 6. Packaging - -A Divina publication may be distributed unpackaged on the Web, but it may also be packaged for easy distribution as a single file. To achieve this goal, this specification defines the [Readium Packaging Format (RPF)](./packaging.md). +A Divina publication may be distributed unpackaged on the Web, but it may also be packaged for easy distribution as a single file. To achieve this goal, this specification relies on the [Readium Packaging Format](./packaging.md). To maximize compatibility with dedicated apps, such a package has its own file extension and media-type: - its file extension must be `.divina` - its media type must be `application/divina+zip` -As an alternative, the manifest may also be included into an EPUB 3 publication, an hybrid solution also specified in the [Readium Packaging Format (RPF)](./packaging.md) specification. This approach allows a publisher to create EPUB 3 fixed layout comics which are enriched by Divina features. +As an alternative, the manifest may also be included in: + +- an EPUB 3 publication, as specified in the [Readium Packaging Format](./packaging.md#6-hybrid-epub-3--rpf-packages) specification +- or dedicated formats for comics such as CBZ/CBR ## Appendix A. Examples -*Example 5: A manga is a Divina where images are presented sequentially from right-to-left with a discontinuity between images that are not in the same spread* +*Example 5: A manga is a Divina where images are presented sequentially from right-to-left* ```json @@ -230,7 +191,7 @@ As an alternative, the manifest may also be included into an EPUB 3 publication, } ``` -*Example 6: A webtoon is a Divina where images are scrolled in a single continuous strip of content* +*Example 6: A continuously scrolled publication is a Divina where images are displayed in a single continuous strip of content* ```json @@ -239,7 +200,9 @@ As an alternative, the manifest may also be included into an EPUB 3 publication, "title": "Webtoon", "identifier": "https://example.com/webtoon", "conformsTo": "https://readium.org/webpub-manifest/profiles/divina", - "forceScroll": true + "presentation": { + "layout": "scrolled" + } }, "readingOrder": [ { diff --git a/schema/extensions/divina/metadata.schema.json b/schema/extensions/divina/metadata.schema.json deleted file mode 100644 index c1551be..0000000 --- a/schema/extensions/divina/metadata.schema.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://readium.org/webpub-manifest/schema/extensions/divina/metadata.schema.json", - "title": "Divina - Metadata", - "type": "object", - "properties": { - "forceScroll": { - "type": "boolean", - "default": false - } - } -} diff --git a/schema/extensions/epub/metadata.schema.json b/schema/extensions/epub/metadata.schema.json index 318a559..66c3381 100644 --- a/schema/extensions/epub/metadata.schema.json +++ b/schema/extensions/epub/metadata.schema.json @@ -8,11 +8,12 @@ "type": "object", "properties": { "layout": { - "description": "Hints how the layout of the resource should be presented", + "description": "Hints how the layout of the publication should be presented", "type": "string", "enum": [ "fixed", - "reflowable" + "reflowable", + "scrolled" ] } } diff --git a/schema/extensions/epub/properties.schema.json b/schema/extensions/epub/properties.schema.json index a0bdfa5..2e4c621 100644 --- a/schema/extensions/epub/properties.schema.json +++ b/schema/extensions/epub/properties.schema.json @@ -21,7 +21,7 @@ "uniqueItems": true }, "layout": { - "description": "Hints how the layout of the resource should be presented", + "description": "Hints how the layout of a specific resource should be presented", "type": "string", "enum": [ "fixed", diff --git a/schema/metadata.schema.json b/schema/metadata.schema.json index 08831c3..12b92e7 100644 --- a/schema/metadata.schema.json +++ b/schema/metadata.schema.json @@ -138,9 +138,6 @@ { "$ref": "extensions/epub/metadata.schema.json" }, - { - "$ref": "extensions/divina/metadata.schema.json" - }, { "$ref": "extensions/presentation/metadata.schema.json" } From 4075546bc89fa2e8951b767de3a2a9509567836c Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Wed, 19 Jun 2024 18:12:36 +0200 Subject: [PATCH 07/19] New section for Divina profile Slight rework on the JSON Schema as well --- profiles/divina.md | 12 ++++-- profiles/epub.md | 2 +- .../encryption/properties.schema.json | 40 +++++++++++++++++++ schema/extensions/epub/properties.schema.json | 32 --------------- schema/link.schema.json | 5 ++- schema/metadata.schema.json | 8 +++- 6 files changed, 59 insertions(+), 40 deletions(-) create mode 100644 schema/extensions/encryption/properties.schema.json diff --git a/profiles/divina.md b/profiles/divina.md index 00d1fb8..dd0ba49 100644 --- a/profiles/divina.md +++ b/profiles/divina.md @@ -68,8 +68,14 @@ The goal of this specification is to provide a profile dedicated to digital visual narratives (Divina) for the [Readium Web Publication Manifest](https://readium.org/webpub-manifest). -While the Divina Manifest is technically a profile of the Readium Web Publication Manifest, it has its own media type in order to maximize compatibilty with dedicated apps: `application/divina+json`. +## 1. Declaring conformance with the Divina profile +In order to declare that it conforms to the Divina Profile, a Readium Web Publication Manifest must: + +- include a `conformsTo` property in its `metadata` section, with `https://readium.org/webpub-manifest/profiles/divina` as one of its values +- use `application/divina+json` as its media type + +While the Divina Manifest is technically a profile of the Readium Web Publication Manifest, the use of its dedicated media type is recommended to maximize compatibility with applications that may target comics/manga specifically. ## 2. Listing Resources @@ -79,7 +85,7 @@ In addition to the normal requirements of a `readingOrder`, all Link Objects hav - they must point strictly to bitmap images -In addition, all Link Objects should include `width` and `height` to indicate the dimensions of each resource. +In addition, all Link Objects should also include `width` and `height` to indicate the dimensions of each resource. ## 3. Alternate Resources @@ -191,7 +197,7 @@ As an alternative, the manifest may also be included in: } ``` -*Example 6: A continuously scrolled publication is a Divina where images are displayed in a single continuous strip of content* +*Example 6: A continuously scrolled publication (a "webtoon") is a Divina where images are displayed in a single continuous strip of content* ```json diff --git a/profiles/epub.md b/profiles/epub.md index 9bbc15a..2cbf6a6 100644 --- a/profiles/epub.md +++ b/profiles/epub.md @@ -52,7 +52,7 @@ This profile defines additional Link properties: | Key | Semantics | Type | Values | | ----- | --------- | -------- | --------- | | [contains](#contains) | Identifies content contained in the linked resource, that cannot be strictly identified using a media type. | Array | `mathml`, `onix`, `remote-resources`, `js`, `svg` or `xmp` | -| [layout](#layout) | Hint about the nature of the layout for the linked resources. | String | `fixed` or `reflowable` | +| [layout](#layout) | Hint about the nature of the layout for the linked resources. | String | `fixed` or `reflowable` | ### contains diff --git a/schema/extensions/encryption/properties.schema.json b/schema/extensions/encryption/properties.schema.json new file mode 100644 index 0000000..5a9c821 --- /dev/null +++ b/schema/extensions/encryption/properties.schema.json @@ -0,0 +1,40 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://readium.org/webpub-manifest/schema/extensions/encryption/properties.schema.json", + "title": "Encryption Extension - Link Properties", + "type": "object", + "properties": { + "encrypted": { + "description": "Indicates that a resource is encrypted/obfuscated and provides relevant information for decryption", + "type": "object", + "properties": { + "algorithm": { + "description": "Identifies the algorithm used to encrypt the resource", + "type": "string", + "format": "uri" + }, + "compression": { + "description": "Compression method used on the resource", + "type": "string" + }, + "originalLength": { + "description": "Original length of the resource in bytes before compression and/or encryption", + "type": "integer" + }, + "profile": { + "description": "Identifies the encryption profile used to encrypt the resource", + "type": "string", + "format": "uri" + }, + "scheme": { + "description": "Identifies the encryption scheme used to encrypt the resource", + "type": "string", + "format": "uri" + } + }, + "required": [ + "algorithm" + ] + } + } +} diff --git a/schema/extensions/epub/properties.schema.json b/schema/extensions/epub/properties.schema.json index 2e4c621..cdc3e24 100644 --- a/schema/extensions/epub/properties.schema.json +++ b/schema/extensions/epub/properties.schema.json @@ -27,38 +27,6 @@ "fixed", "reflowable" ] - }, - "encrypted": { - "description": "Indicates that a resource is encrypted/obfuscated and provides relevant information for decryption", - "type": "object", - "properties": { - "algorithm": { - "description": "Identifies the algorithm used to encrypt the resource", - "type": "string", - "format": "uri" - }, - "compression": { - "description": "Compression method used on the resource", - "type": "string" - }, - "originalLength": { - "description": "Original length of the resource in bytes before compression and/or encryption", - "type": "integer" - }, - "profile": { - "description": "Identifies the encryption profile used to encrypt the resource", - "type": "string", - "format": "uri" - }, - "scheme": { - "description": "Identifies the encryption scheme used to encrypt the resource", - "type": "string", - "format": "uri" - } - }, - "required": [ - "algorithm" - ] } } } diff --git a/schema/link.schema.json b/schema/link.schema.json index dfca6ee..a012185 100644 --- a/schema/link.schema.json +++ b/schema/link.schema.json @@ -45,9 +45,10 @@ } }, "allOf": [ - { "$ref": "https://drafts.opds.io/schema/properties.schema.json" }, { "$ref": "extensions/epub/properties.schema.json" }, - { "$ref": "extensions/presentation/properties.schema.json" } + { "$ref": "extensions/encryption/properties.schema.json" }, + { "$ref": "extensions/presentation/properties.schema.json" }, + { "$ref": "https://drafts.opds.io/schema/properties.schema.json" } ] }, "height": { diff --git a/schema/metadata.schema.json b/schema/metadata.schema.json index 12b92e7..c74b065 100644 --- a/schema/metadata.schema.json +++ b/schema/metadata.schema.json @@ -105,8 +105,12 @@ "type": "string", "enum": [ "rtl", - "ltr" - ] + "ltr", + "ttb", + "btt", + "auto" + ], + "default": "auto" }, "description": { "type": "string" From 6d5039831539b77ae256dc43fc49951c71aff1c8 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Wed, 19 Jun 2024 18:41:49 +0200 Subject: [PATCH 08/19] Relabeled presentation hints in registry and dropped guided from roles --- README.md | 8 ++++---- modules/README.md | 2 +- roles.md | 1 - 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index aa4038d..18e957e 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ W3C has recently provided a definition for a [Web Publication](https://w3c.githu > A **Web Publication (WP)** is a collection of one or more constituent resources, organized together in a uniquely identifiable grouping, and presented using standard Open Web Platform technologies. It also provides a definition for a manifest in the context of a Web Publication: -> [...] **manifest** refers to an abstract means to contain information necessary to the proper management, rendering, and so on, of a publication. This is opposed to metadata that contains information on the content of the publication like author, publication date, and so on. The precise format of how such a manifest is stored is not considered in this document. +> [...] **manifest** refers to an abstract means to contain information necessary to the proper management, rendering, and so on, of a publication. The Readium Web Publication Manifest is an attempt to standardize a JSON based manifest format that follows both definitions. @@ -319,7 +319,7 @@ Link Objects in `readingOrder`, `resources` or `links` can be identified as such All Link Objects containing the `cover` link relation must reference an image directly. They should include a `height` and `width` to facilitate how they are processed by User Agents. -This specification recommends using one of the following media types: `image/jpeg`, `image/png`, `image/gif`, `image/webp` or `image/svg+xml`. +This specification recommends using one of the following media types: `image/jpeg`, `image/png`, `image/gif`, `image/avif` or `image/svg+xml`. *Example 8: Reference to a cover* @@ -348,10 +348,10 @@ The initial registry, contains the following profiles: | Name | Description | | ----- | ------------ | -| [EPUB Profile](profiles/epub.md) | A profile for EPUB content transformed to Web Publications. | | [Audiobook Profile](profiles/audiobook.md) | A profile for Audiobooks. | | [Divina Profile](profiles/divina.md) | A profile for Digital Visual Narrative publications (comics, manga and bandes dessinées). | -| [PDF Profile](profiles/pdf.md) | A profile for PDF documents integrated into Web Publications. | +| [EPUB Profile](profiles/epub.md) | A profile for EPUB publications served as Web Publications. | +| [PDF Profile](profiles/pdf.md) | A profile for PDF documents served as Web Publications. | ## 9. Packaging diff --git a/modules/README.md b/modules/README.md index c96687e..8a911cc 100644 --- a/modules/README.md +++ b/modules/README.md @@ -3,7 +3,7 @@ | Name | Description | | ----- | ------------ | | [Encryption](encryption.md) | Property which conveys to User Agents how a given resource has been encrypted. | -| [Presentation Hints](presentation.md) | Metadata and properties which convey to User Agents how a given publication should be presented. | +| [Advanced Divina Presentation Hints](presentation.md) | Metadata and properties which convey to User Agents how a given publication should be presented. | ## Registering a module diff --git a/roles.md b/roles.md index 00a1aca..f24706e 100644 --- a/roles.md +++ b/roles.md @@ -14,7 +14,6 @@ The Readium Web Publication Manifest specification defines the following roles f | Role | Definition | Compact Collection? | Required? | Reference | | ----- | ---------- | ------------------- | --------- | --------- | -| `guided` | Identifies a collection containing guided navigation into a publication. | Yes | No | [Visual Narrative Profile](profiles/visual-narrative.md#4-guided-navigation) | | `landmarks` | Identifies the collection that contains a list of points of interest. | Yes | No | [EPUB Profile](profiles/epub.md#collection-roles) | | `loa` | Identifies the collection that contains a list of audio resources. | Yes | No | [EPUB Profile](profiles/epub.md#collection-roles) | | `loi` | Identifies the collection that contains a list of illustrations. | Yes | No | [EPUB Profile](profiles/epub.md#collection-roles) | From 4cf874ff7dcd37cc6dcc6f05078588492ec45ef9 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Thu, 20 Jun 2024 10:26:31 +0200 Subject: [PATCH 09/19] Updated examples and dropped page from presentation hints --- modules/presentation.md | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/modules/presentation.md b/modules/presentation.md index 99e703b..dd1e38c 100644 --- a/modules/presentation.md +++ b/modules/presentation.md @@ -25,7 +25,6 @@ The following elements may be included in `properti - [`clipped`](#clipped) - [`fit`](#fit) - [`orientation`](#orientation) -- [`page`](#page) ## 3. Properties @@ -37,7 +36,7 @@ The `clipped` property is meant to adapt visual resources to any given viewport | ----- | --------- | -------- | --------- | ------- | | `clipped` | Specifies whether or not the parts of a linked resource that flow out of the viewport are clipped. | Boolean | `true` or `false` | `false` | -*In this example, resources are handled in a discontinuous way and each resource is scaled to fit the viewport height and clipped to fit different viewport widths. It behaves like turbomedia.* +*In this example, all resources are scaled to fit the viewport height and clipped to fit different viewport widths. It behaves like turbomedia.* ```json "metadata": { @@ -54,8 +53,8 @@ The `clipped` property is meant to adapt visual resources to any given viewport ```json "readingOrder": [ { - "href": "image1.webp", - "type": "image/webp", + "href": "image1.avif", + "type": "image/avif", "properties": { "fit": "width", "clipped": true @@ -77,25 +76,13 @@ The `clipped` property is meant to adapt visual resources to any given viewport | `width` | The content is centered and scaled to fit the viewport width. | | `height` | The content is centered and scaled to fit the viewport height. | -*In this example, resources are handled in a continuous way, the content is scrollable on the vertical axis and each resource fits the viewport width. It behaves like a webtoon.* - -```json -"metadata": { - "readingProgression": "ttb", - "presentation": { - "layout": "scrolled", - "overflow": "scrolled", - "fit": "width" - } -} -``` *In this example, a specific resource is scaled to fit the viewport.* ```json "readingOrder": [ { - "href": "image1.webp", - "type": "image/webp", + "href": "image1.avif", + "type": "image/avif", "properties": { "fit": "contain" } @@ -111,7 +98,7 @@ The `clipped` property is meant to adapt visual resources to any given viewport The `orientation` property is mostly relevant for resources with fixed dimensions (images, videos), where the orientation has an actual impact on how the resource is displayed. -*In this example, each resource should be displayed in portrait mode.* +*In this example, all resources should be displayed in portrait mode.* ```json "metadata": { From 423d0e9dea8c861e73b2ee19fb35a00289fe3627 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Thu, 20 Jun 2024 13:49:44 +0200 Subject: [PATCH 10/19] Re-labeling presentation hints and transitions as experimental --- {modules => experimental}/presentation.md | 8 ++++---- {modules => experimental}/transitions.md | 0 modules/README.md | 1 - .../presentation/metadata.schema.json | 2 +- .../presentation/properties.schema.json | 2 +- schema/link.schema.json | 2 +- schema/metadata.schema.json | 2 +- 7 files changed, 8 insertions(+), 9 deletions(-) rename {modules => experimental}/presentation.md (93%) rename {modules => experimental}/transitions.md (100%) rename schema/{extensions => experimental}/presentation/metadata.schema.json (90%) rename schema/{extensions => experimental}/presentation/properties.schema.json (88%) diff --git a/modules/presentation.md b/experimental/presentation.md similarity index 93% rename from modules/presentation.md rename to experimental/presentation.md index dd1e38c..ab30cf1 100644 --- a/modules/presentation.md +++ b/experimental/presentation.md @@ -125,10 +125,10 @@ The `orientation` property is mostly relevant for resources with fixed dimension The following JSON Schemas for this module are available under version control: -- Metadata: -- Link Properties: +- Metadata: +- Link Properties: For the purpose of validating a Readium Web Publication Manifest, use the following JSON Schema resources: -- -- \ No newline at end of file +- +- \ No newline at end of file diff --git a/modules/transitions.md b/experimental/transitions.md similarity index 100% rename from modules/transitions.md rename to experimental/transitions.md diff --git a/modules/README.md b/modules/README.md index 8a911cc..4da6ca1 100644 --- a/modules/README.md +++ b/modules/README.md @@ -3,7 +3,6 @@ | Name | Description | | ----- | ------------ | | [Encryption](encryption.md) | Property which conveys to User Agents how a given resource has been encrypted. | -| [Advanced Divina Presentation Hints](presentation.md) | Metadata and properties which convey to User Agents how a given publication should be presented. | ## Registering a module diff --git a/schema/extensions/presentation/metadata.schema.json b/schema/experimental/presentation/metadata.schema.json similarity index 90% rename from schema/extensions/presentation/metadata.schema.json rename to schema/experimental/presentation/metadata.schema.json index cf87a09..c248a81 100644 --- a/schema/extensions/presentation/metadata.schema.json +++ b/schema/experimental/presentation/metadata.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://readium.org/webpub-manifest/schema/extensions/presentation/metadata.schema.json", + "$id": "https://readium.org/webpub-manifest/schema/experimental/presentation/metadata.schema.json", "title": "Presentation Hints - Metadata", "type": "object", "properties": { diff --git a/schema/extensions/presentation/properties.schema.json b/schema/experimental/presentation/properties.schema.json similarity index 88% rename from schema/extensions/presentation/properties.schema.json rename to schema/experimental/presentation/properties.schema.json index 5fe1a7e..5741fdf 100644 --- a/schema/extensions/presentation/properties.schema.json +++ b/schema/experimental/presentation/properties.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://readium.org/webpub-manifest/schema/extensions/presentation/properties.schema.json", + "$id": "https://readium.org/webpub-manifest/schema/experimental/presentation/properties.schema.json", "title": "Presentation Hints - Link Properties", "type": "object", "properties": { diff --git a/schema/link.schema.json b/schema/link.schema.json index a012185..fbf55d7 100644 --- a/schema/link.schema.json +++ b/schema/link.schema.json @@ -47,7 +47,7 @@ "allOf": [ { "$ref": "extensions/epub/properties.schema.json" }, { "$ref": "extensions/encryption/properties.schema.json" }, - { "$ref": "extensions/presentation/properties.schema.json" }, + { "$ref": "experimental/presentation/properties.schema.json" }, { "$ref": "https://drafts.opds.io/schema/properties.schema.json" } ] }, diff --git a/schema/metadata.schema.json b/schema/metadata.schema.json index f09110c..6523217 100644 --- a/schema/metadata.schema.json +++ b/schema/metadata.schema.json @@ -146,7 +146,7 @@ "$ref": "extensions/epub/metadata.schema.json" }, { - "$ref": "extensions/presentation/metadata.schema.json" + "$ref": "experimental/presentation/metadata.schema.json" } ] } \ No newline at end of file From 2f01ad05fa915e711c048b9524ed6bd27fff7966 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Thu, 20 Jun 2024 14:36:08 +0200 Subject: [PATCH 11/19] Moved guidelines to experimental as well --- {guidelines => experimental}/divina-guidelines.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename {guidelines => experimental}/divina-guidelines.md (98%) diff --git a/guidelines/divina-guidelines.md b/experimental/divina-guidelines.md similarity index 98% rename from guidelines/divina-guidelines.md rename to experimental/divina-guidelines.md index 6978745..5ba6c4a 100644 --- a/guidelines/divina-guidelines.md +++ b/experimental/divina-guidelines.md @@ -1,4 +1,4 @@ -# DiViNa guidelines +# Advanced Divina guidelines ## Guidelines relative to presentation hints From 5ac1a3f02dd91eed0808bc72d90b46b30de39372 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Fri, 21 Jun 2024 15:58:27 +0200 Subject: [PATCH 12/19] Moved layout to the default context --- context.jsonld | 1 + contexts/default/README.md | 33 ++++++++++++++------- profiles/divina.md | 10 ++----- schema/extensions/epub/metadata.schema.json | 14 --------- schema/metadata.schema.json | 16 ++++++---- 5 files changed, 37 insertions(+), 37 deletions(-) diff --git a/context.jsonld b/context.jsonld index a00cc04..89c9350 100644 --- a/context.jsonld +++ b/context.jsonld @@ -14,6 +14,7 @@ "@container": "@language" }, "sortAs": "http://schema.org/alternateName", + "layout": "http://www.idpf.org/2013/rendition#layout", "accessibility": "@nest", "summary": "http://schema.org/accessibilitySummary", "accessMode": "http://schema.org/accessMode", diff --git a/contexts/default/README.md b/contexts/default/README.md index 84628b6..640f49a 100644 --- a/contexts/default/README.md +++ b/contexts/default/README.md @@ -55,6 +55,29 @@ A Web Publication Manifest should contain an identifier "identifier": "http://example.com/publication" ``` +## Layout and reading progression + +Publications come in all shapes and forms but when it comes to publications that are primarily made of text and visuals, we can organize them in three main categories: + +- Reflowable publications, where users are free to change the text and layout however they prefer. +- Fixed layout publications, where each resource is a "page" and may be presented side by side with another resource in a "spread". +- Scrolled publications, where displaying the publication in a continuous scroll is meaningful and resources are usually fit to the width of the viewport + +In order to convey this information, a Web Publication Manifest may include a `layout` property with one of the following values: + +| Value | Description | Formats | +| ----- | ----------- | ------- | +| `reflowable` | Reading systems are free to adapt text and layout entirely based on user preferences. | EPUB | +| `fixed` | Each resource is a "page" where both dimensions are usually contained in the device's viewport. Based on user preferences, the reading system may also display two resources side by side in a spread. | Divina, Fixed Layout EPUB or PDF +| `scrolled` | Resources are displayed in a continuous scroll by filling the width of the viewport, without any visible gap between between spine items. | Scrolled Divina | + +To provide a number of affordances (taps, gestures, keyboard events), reading systems also need to know the reading progression. + +For scrolled publication, the reading progression is always from top to bottom. + +For reflowable and fixed layout publications, a manifest may express this information using `readingProgression`. + +It allows the following values: `ltr` (left to right, default value) and `rtl` (right to left). ## Contributors @@ -291,16 +314,6 @@ A position can be either an integer or a float where the value is greater than z } ``` -## Reading progression direction - -To properly browse through a publication, a User Agent needs to know its progression direction. - -A manifest may express this information using `readingProgression`. - -It allows the following values: `ltr` (left to right), `rtl` (right to left), `ttb` (top to bottom), `btt` (bottom to top) and `auto`. - -It defaults to `auto` when no value is set. - ## Duration and number of pages To indicate the length of a publication, a Web Publication Manifest may include the `duration` and `numberOfPages` terms. diff --git a/profiles/divina.md b/profiles/divina.md index dd0ba49..0949d8c 100644 --- a/profiles/divina.md +++ b/profiles/divina.md @@ -15,7 +15,6 @@ ```json { "@context": "http://readium.org/webpub-manifest/context.jsonld", - "metadata": { "title": "Objectif Lune", "identifier": "urn:isbn:9782203001152", @@ -26,7 +25,6 @@ "published": "1953-12-30", "modified": "2018-12-10T18:21:18Z", "numberOfPages": 62, - "readingProgression": "ltr", "belongsTo": { "series": { "name": "Les Aventures de Tintin", @@ -34,7 +32,6 @@ } } }, - "links": [ { "rel": "self", @@ -42,7 +39,6 @@ "type": "application/divina+json" } ], - "readingOrder": [ { "rel": "cover", @@ -68,7 +64,7 @@ The goal of this specification is to provide a profile dedicated to digital visual narratives (Divina) for the [Readium Web Publication Manifest](https://readium.org/webpub-manifest). -## 1. Declaring conformance with the Divina profile +## 1. Declaring conformance to the Divina profile In order to declare that it conforms to the Divina Profile, a Readium Web Publication Manifest must: @@ -206,9 +202,7 @@ As an alternative, the manifest may also be included in: "title": "Webtoon", "identifier": "https://example.com/webtoon", "conformsTo": "https://readium.org/webpub-manifest/profiles/divina", - "presentation": { - "layout": "scrolled" - } + "layout": "scrolled" }, "readingOrder": [ { diff --git a/schema/extensions/epub/metadata.schema.json b/schema/extensions/epub/metadata.schema.json index 29c1df8..0a65606 100644 --- a/schema/extensions/epub/metadata.schema.json +++ b/schema/extensions/epub/metadata.schema.json @@ -16,20 +16,6 @@ "type": "string" } } - }, - "presentation": { - "type": "object", - "properties": { - "layout": { - "description": "Hints how the layout of the publication should be presented", - "type": "string", - "enum": [ - "fixed", - "reflowable", - "scrolled" - ] - } - } } } } diff --git a/schema/metadata.schema.json b/schema/metadata.schema.json index 6523217..53f7aaf 100644 --- a/schema/metadata.schema.json +++ b/schema/metadata.schema.json @@ -104,16 +104,22 @@ "subject": { "$ref": "subject.schema.json" }, + "layout": { + "description": "Hints how the layout of the publication should be presented", + "type": "string", + "enum": [ + "fixed", + "reflowable", + "scrolled" + ] + }, "readingProgression": { "type": "string", "enum": [ "rtl", - "ltr", - "ttb", - "btt", - "auto" + "ltr" ], - "default": "auto" + "default": "ltr" }, "description": { "type": "string" From cbd9d13a9b16b0d31d4ff3bf66ae29267ac61d16 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Fri, 21 Jun 2024 16:37:03 +0200 Subject: [PATCH 13/19] Added section and JSON Schema for layout in Divina profile --- contexts/default/README.md | 38 ++++----- profiles/divina.md | 82 ++++++++++++++++++- properties.md | 2 +- .../extensions/divina/properties.schema.json | 13 +++ .../encryption/properties.schema.json | 2 +- schema/extensions/epub/metadata.schema.json | 2 +- schema/extensions/epub/properties.schema.json | 2 +- schema/link.schema.json | 1 + 8 files changed, 117 insertions(+), 25 deletions(-) create mode 100644 schema/extensions/divina/properties.schema.json diff --git a/contexts/default/README.md b/contexts/default/README.md index 640f49a..d80c822 100644 --- a/contexts/default/README.md +++ b/contexts/default/README.md @@ -15,7 +15,7 @@ Default Context | [https://readium.org/webpub-manifest/context.jsonld](https://r ## Title -A Web Publication Manifest must contain a single title using the `title` element: +A Web Publication Manifest must contain a single title using the `title` element: ```json "title": "Moby-Dick" @@ -33,14 +33,14 @@ To provide these alternate representations, an object may be used instead of a s } ``` -In addition to the `title` element, the manifest may also contain an optional `subtitle` element with exactly the same syntax. +In addition to the `title` element, the manifest may also contain an optional `subtitle` element with exactly the same syntax. ```json "title": "Flatland" "subtitle": "A Romance of Many Dimensions" ``` -The manifest may also contain a `sortAs` element to provide a single sortable string, used by a client to organize a collection of publications: +The manifest may also contain a `sortAs` element to provide a single sortable string, used by a client to organize a collection of publications: ```json "title": "A Tale of Two Cities" @@ -49,7 +49,7 @@ The manifest may also contain a `sortAs` element to pro ## Identifier -A Web Publication Manifest should contain an identifier. The identifier must be a valid URI: +A Web Publication Manifest should contain an identifier. The identifier must be a valid URI: ```json "identifier": "http://example.com/publication" @@ -63,7 +63,7 @@ Publications come in all shapes and forms but when it comes to publications that - Fixed layout publications, where each resource is a "page" and may be presented side by side with another resource in a "spread". - Scrolled publications, where displaying the publication in a continuous scroll is meaningful and resources are usually fit to the width of the viewport -In order to convey this information, a Web Publication Manifest may include a `layout` property with one of the following values: +In order to convey this information, a Web Publication Manifest may include a `layout` property with one of the following values: | Value | Description | Formats | | ----- | ----------- | ------- | @@ -75,7 +75,7 @@ To provide a number of affordances (taps, gestures, keyboard events), reading sy For scrolled publication, the reading progression is always from top to bottom. -For reflowable and fixed layout publications, a manifest may express this information using `readingProgression`. +For reflowable and fixed layout publications, a manifest may express this information using `readingProgression`. It allows the following values: `ltr` (left to right, default value) and `rtl` (right to left). @@ -85,7 +85,7 @@ The default context for the Web Publication Manifest provides a number of elemen In addition to these elements, it also provides a generic term for contributors: `contributor`. -A Web Publication Manifest should contain one or more contributors. +A Web Publication Manifest should contain one or more contributors. The most straightforward expression of a contributor is through a simple string: @@ -136,7 +136,7 @@ ISNI (http://isni.org) is the preferred authority, but other sources may also be } ``` -If none of the elements available are specific enough, a `contributor` element may be used instead. +If none of the elements available are specific enough, a `contributor` element may be used instead. The `contributor` element should be used with an object that contains a `role`. All values for the `role` element should be based on [MARC relator codes](https://www.loc.gov/marc/relators/relaterm.html): @@ -150,13 +150,13 @@ All values for the `role` element should be based on [MARC relator codes](https: ## Language -In order to indicate its primary language, a Web Publication Manifest should use a `language` element. Its value must be a valid [BCP 47](https://tools.ietf.org/html/bcp47) language tag. +In order to indicate its primary language, a Web Publication Manifest should use a `language` element. Its value must be a valid [BCP 47](https://tools.ietf.org/html/bcp47) language tag. ```json "language": "en" ``` -If a publication has more than one primary language (a bilingual edition for example), the `language` element may contain an array of values: +If a publication has more than one primary language (a bilingual edition for example), the `language` element may contain an array of values: ```json "language": ["en", "fr", "ja"] @@ -164,7 +164,7 @@ If a publication has more than one primary language (a bilingual edition for exa ## Description -A Web Publication Manifest may contain a description of the publication in plain text using the `description` element: +A Web Publication Manifest may contain a description of the publication in plain text using the `description` element: ```json "description": "The story of two gnomes, discussing the meaning of life in a Scandivanian garden." @@ -172,7 +172,7 @@ A Web Publication Manifest may contain a description of ## Publisher -A Web Publication Manifest may list one or more publishers using the `publisher` element. +A Web Publication Manifest may list one or more publishers using the `publisher` element. To provide even more details, it's also possible to use the `imprint` element that behaves exactly like `publisher` but provides a complementary information. @@ -198,7 +198,7 @@ Multiple publishers can be listed in this element using the string or object rep ## Publication date -A Web Publication Manifest may contain a publication date using the `published` element. The publication date must be a valid ISO 8601 date. +A Web Publication Manifest may contain a publication date using the `published` element. The publication date must be a valid ISO 8601 date. ```json "published": "2016-09-02" @@ -206,7 +206,7 @@ A Web Publication Manifest may contain a publication da ## Modification date -Publications can be updated and to identify each specific version, the manifest should also contain a `modified` element containing the timestamp when the publication was last modified expressed as an ISO 8601 time and date: +Publications can be updated and to identify each specific version, the manifest should also contain a `modified` element containing the timestamp when the publication was last modified expressed as an ISO 8601 time and date: ```json "modified": "2016-02-22T11:31:38Z" @@ -214,7 +214,7 @@ Publications can be updated and to identify each specific version, the manifest ## Subjects -A Web Publication Manifest may also provide one or more subjects using the `subject` element: +A Web Publication Manifest may also provide one or more subjects using the `subject` element: ```json "subject": "Historical Fiction" @@ -262,7 +262,7 @@ This document identifies the following subject schemes along with a recommended ## Collections & series -A Web Publication Manifest may indicate that it belongs to one or multiple collections/series. +A Web Publication Manifest may indicate that it belongs to one or multiple collections/series. `collection` and `series` behave the same way, the most straightforward way to indicate that a publication belongs to a collection/series is through a simple string: @@ -316,7 +316,7 @@ A position can be either an integer or a float where the value is greater than z ## Duration and number of pages -To indicate the length of a publication, a Web Publication Manifest may include the `duration` and `numberOfPages` terms. +To indicate the length of a publication, a Web Publication Manifest may include the `duration` and `numberOfPages` terms. `duration` is expressed in seconds using a float (number in JSON), while `numberOfPages` is an integer. @@ -333,9 +333,9 @@ In addition to these two properties, `abridged` is used to indicate an abridged ## Accessibility metadata -In order to document its accessibility metadata, a Web Publication Manifest should include an `accessibility` object. +In order to document its accessibility metadata, a Web Publication Manifest should include an `accessibility` object. -This `accessibility` object may contain the following properties: `conformsTo`, `certification`, `accessMode`, `accessModeSufficient`, `feature`, `hazard` and `summary`. +This `accessibility` object may contain the following properties: `conformsTo`, `certification`, `accessMode`, `accessModeSufficient`, `feature`, `hazard` and `summary`. ### Conformance diff --git a/profiles/divina.md b/profiles/divina.md index 0949d8c..b09bf7c 100644 --- a/profiles/divina.md +++ b/profiles/divina.md @@ -144,7 +144,75 @@ All Link Objects present in the `alternate` array: } ``` -## 4. Packaging +## 4. Layout + +### 4.1. Fixed layout + +By default, each publication that conforms to the Divina profile is handled like a fixed layout publications, which means that: + +- the publication is paginated by default, where each page is an image from the `readingOrder` +- images are usually displayed with both dimensions fully contained in the viewport by default +- reading systems can decide to display two images side by side in a spread, using the [`page`](../properties.md#page) property as a hint + +Reading systems are strongly encouraged to let the user decide if they prefer reading the publication: + +- paginated or scrolled +- with or without spreads (for example, with spreads in landscape mode but without spreads in portrait mode) + +### 4.2. Scrolled publications + +For publications where a single continuous scroll is required to properly display the publication (such as webtoons for example), content creators should use the [`layout`](../contexts/default/README.md#layout-and-reading-progression) property with the `scrolled` value. + +In order to override the default behaviour of displaying all images from the `readingOrger` in a single continuous scroll, this profile also introduces a new property for Link Objects: + +
+
break-scroll-before
+
Specifies that an item in the reading order should break the current continuous scroll and start a new one.
+
+ +*Example 4: A scrolled publication with a break in its continuous scroll* + +```json +{ + "metadata": { + "title": "The Cat Collector", + "identifier": "https://example.com/cat-collector", + "conformsTo": "https://readium.org/webpub-manifest/profiles/divina", + "layout": "scrolled" + }, + "readingOrder": [ + { + "href": "episode1-image1.jpg", + "type": "image/jpeg" + }, + { + "href": "episode1-image2.jpg", + "type": "image/jpeg" + }, + { + "href": "episode1-image3.jpg", + "type": "image/jpeg" + }, + { + "href": "episode2-image1.jpg", + "type": "image/jpeg", + "properties": { + "break-scroll-before": true + } + }, + { + "href": "episode2-image2.jpg", + "type": "image/jpeg" + }, + { + "href": "episode2-image3.jpg", + "type": "image/jpeg" + } + ] +} +``` + +## 5. Packaging A Divina publication may be distributed unpackaged on the Web, but it may also be packaged for easy distribution as a single file. To achieve this goal, this specification relies on the [Readium Packaging Format](./packaging.md). @@ -161,7 +229,7 @@ As an alternative, the manifest may also be included in: ## Appendix A. Examples -*Example 5: A manga is a Divina where images are presented sequentially from right-to-left* +*Example 5: A manga is a Divina where the reading progression is right-to-left* ```json @@ -220,3 +288,13 @@ As an alternative, the manifest may also be included in: ] } ``` + +## Appendix B. JSON Schema + +The following JSON Schemas for this profile is available under version control: + +- Link Properties: + +For the purpose of validating a Readium Web Publication Manifest, use the following JSON Schema resource: + +- \ No newline at end of file diff --git a/properties.md b/properties.md index d507a78..3d65865 100644 --- a/properties.md +++ b/properties.md @@ -13,7 +13,7 @@ This document is meant to provide an exhaustive list of properties that can be a ### page -The `page` property is meant to provide a hint to Use Agents that rely on synthetic spreads to display more than a single resource at once. +The `page` property is meant to provide a hint to reading systems that rely on synthetic spreads to display more than a single resource at once. *In this example, the first page should be displayed of the left of a synthetic spread, the second page on the right.* diff --git a/schema/extensions/divina/properties.schema.json b/schema/extensions/divina/properties.schema.json new file mode 100644 index 0000000..da4c9c9 --- /dev/null +++ b/schema/extensions/divina/properties.schema.json @@ -0,0 +1,13 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://readium.org/webpub-manifest/schema/extensions/divina/properties.schema.json", + "title": "Divina Profile - Link Properties", + "type": "object", + "properties": { + "break-scroll-before": { + "description": "Specifies that an item in the reading order should break the current continuous scroll and start a new one.", + "type": "boolean", + "default": false + } + } +} diff --git a/schema/extensions/encryption/properties.schema.json b/schema/extensions/encryption/properties.schema.json index 5a9c821..cb5f55a 100644 --- a/schema/extensions/encryption/properties.schema.json +++ b/schema/extensions/encryption/properties.schema.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://readium.org/webpub-manifest/schema/extensions/encryption/properties.schema.json", - "title": "Encryption Extension - Link Properties", + "title": "Encryption Module - Link Properties", "type": "object", "properties": { "encrypted": { diff --git a/schema/extensions/epub/metadata.schema.json b/schema/extensions/epub/metadata.schema.json index 0a65606..cb49e57 100644 --- a/schema/extensions/epub/metadata.schema.json +++ b/schema/extensions/epub/metadata.schema.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://readium.org/webpub-manifest/schema/extensions/epub/metadata.schema.json", - "title": "EPUB Extension - Metadata", + "title": "EPUB Profile - Metadata", "type": "object", "properties": { "mediaOverlay": { diff --git a/schema/extensions/epub/properties.schema.json b/schema/extensions/epub/properties.schema.json index cdc3e24..4d23ac2 100644 --- a/schema/extensions/epub/properties.schema.json +++ b/schema/extensions/epub/properties.schema.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://readium.org/webpub-manifest/schema/extensions/epub/properties.schema.json", - "title": "EPUB Extension - Link Properties", + "title": "EPUB Profile - Link Properties", "type": "object", "properties": { "contains": { diff --git a/schema/link.schema.json b/schema/link.schema.json index fbf55d7..9804539 100644 --- a/schema/link.schema.json +++ b/schema/link.schema.json @@ -47,6 +47,7 @@ "allOf": [ { "$ref": "extensions/epub/properties.schema.json" }, { "$ref": "extensions/encryption/properties.schema.json" }, + { "$ref": "extensions/divina/properties.schema.json" }, { "$ref": "experimental/presentation/properties.schema.json" }, { "$ref": "https://drafts.opds.io/schema/properties.schema.json" } ] From 317aafc288b563702b329633c1bac9cf7e7ab7ac Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Tue, 25 Jun 2024 16:54:17 +0200 Subject: [PATCH 14/19] Added JSON Schema and deprecation appendix for EPUB Profile --- profiles/epub.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/profiles/epub.md b/profiles/epub.md index e99ebe1..6c18d5c 100644 --- a/profiles/epub.md +++ b/profiles/epub.md @@ -118,4 +118,73 @@ Using `fixed` it can also indicate that an HTML document has a viewport with a f "layout": "fixed" } } -``` \ No newline at end of file +``` + +## Appendix A - JSON Schema + +The following JSON Schema resources for this profile are available under version control: + +- Metadata: +- Collection roles: +- Link properties: + + +For the purpose of validating a Readium Web Publication Manifest, use the following JSON Schema resources: + +- +- +- + +## Appendix B - Deprecated properties + +### `layout` in a `presentation` object + +This specification was initially responsible for documenting the layout of an entire publication using either: `reflowable` or `fixed`. + +This was handled using a `layout` property in a `presentation` object. + +```json +"metadata": { + "title": "Bella the dragon", + "presentation": { + "layout": "fixed + } +} +``` + +This is no longer supported by this profile because `layout` became a first-class metadata defined in the default context. + +```json +"metadata": { + "title": "Bella the dragon", + "layout": "fixed +} +``` + +### Orientation + +The EPUB specification allow content creators to specify the intended orientation of: + +- [an entire publication](https://www.w3.org/TR/epub-33/#orientation) +- [or a specific resource](https://www.w3.org/TR/epub-33/#orientation-overrides) + +This was originally supported in this EPUB profile through: + +- an `orientation` property for the `presentation` object in `metadata` (for the entire publication) +- and an `orientation` property in the `properties` of a Link Object (for a specific resource) + +This is no longer supported in Readium because forcing an orientation goes against the principles that we're trying to follow, where the user is always free to decide what feels best for them. + +### Spreads + +The EPUB specification allow content creators to specify when synthetic spreads should be presented to the user for a fixed layout document either for: + +- [an entire publication](https://www.w3.org/TR/epub-33/#spread) +- [or a specific resource](https://www.w3.org/TR/epub-33/#spread-overrides) + +This was originally supported in this EPUB profile through: + +- a `spread` property for the `presentation` object in `metadata` (for the entire publication) +- and a `spread` property in the `properties` of a Link Object (for a specific resource) + +This is no longer supported in Readium because forcing spreads goes against the principles that we're trying to follow, where the user is always free to decide what feels best for them. \ No newline at end of file From 8facb0cec1392864846070c11d39d11939abad77 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Tue, 25 Jun 2024 17:14:57 +0200 Subject: [PATCH 15/19] Added a layout section to EPUB profile related to #86 --- profiles/epub.md | 23 ++++++++++++----------- properties.md | 3 --- roles.md | 12 ++++++------ 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/profiles/epub.md b/profiles/epub.md index 6c18d5c..916a64e 100644 --- a/profiles/epub.md +++ b/profiles/epub.md @@ -15,12 +15,6 @@ While EPUB publications can mostly be converted directly to the Readium Web Publ This profile is meant to facilitate backward compatibility with EPUB and ensure that these specialized elements are not lost when converting to the Readium Web Publication Manifest. -This profile relies on: - -* a declaration of [conformance](#1-declaring-conformance-with-the-epub-profile), -* some [restrictions on the resources of the readingOrder](#2-restrictions-on-the-resources-of-the readingorder), -* the definition of additional [collection roles](#3-collection-roles), [metadata elements](#4-metadata) and [link properties](#5-link-properties), -* the use of the [encryption module](../modules/encryption.md). ## 1. Declaring conformance with the EPUB Profile @@ -32,7 +26,15 @@ A Readium Web Publication Manifest that conforms to the EPUB Profile Date: Tue, 25 Jun 2024 17:19:40 +0200 Subject: [PATCH 16/19] Fixed syntax for layout examples --- profiles/epub.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/profiles/epub.md b/profiles/epub.md index 916a64e..570910b 100644 --- a/profiles/epub.md +++ b/profiles/epub.md @@ -148,7 +148,7 @@ This was handled using a `layout` property in a `presentation` object. "metadata": { "title": "Bella the dragon", "presentation": { - "layout": "fixed + "layout": "fixed" } } ``` @@ -158,7 +158,7 @@ This is no longer supported by this profile because `layout` became a first-clas ```json "metadata": { "title": "Bella the dragon", - "layout": "fixed + "layout": "fixed" } ``` From cecd882d14c932628240685917988d850728711a Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Tue, 25 Jun 2024 17:26:38 +0200 Subject: [PATCH 17/19] Type for readingOrder Co-authored-by: qnga <32197639+qnga@users.noreply.github.com> --- profiles/divina.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/profiles/divina.md b/profiles/divina.md index b09bf7c..a633913 100644 --- a/profiles/divina.md +++ b/profiles/divina.md @@ -163,7 +163,7 @@ Reading systems are strongly encouraged to let the user decide if they prefer re For publications where a single continuous scroll is required to properly display the publication (such as webtoons for example), content creators should use the [`layout`](../contexts/default/README.md#layout-and-reading-progression) property with the `scrolled` value. -In order to override the default behaviour of displaying all images from the `readingOrger` in a single continuous scroll, this profile also introduces a new property for Link Objects: +In order to override the default behaviour of displaying all images from the `readingOrder` in a single continuous scroll, this profile also introduces a new property for Link Objects:
break-scroll-before
From df8960912f84a0d33ce32379c0d5e00df4f5e116 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Tue, 25 Jun 2024 17:31:17 +0200 Subject: [PATCH 18/19] Minor tweaks for the definition of the scrolled layout value --- contexts/default/README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/contexts/default/README.md b/contexts/default/README.md index d80c822..e6a6032 100644 --- a/contexts/default/README.md +++ b/contexts/default/README.md @@ -69,12 +69,10 @@ In order to convey this information, a Web Publication Manifest may express this information using `readingProgression`. It allows the following values: `ltr` (left to right, default value) and `rtl` (right to left). From 3e91f5fc2bb8af385c68a4e7da525e5f88fb9b85 Mon Sep 17 00:00:00 2001 From: Hadrien Gardeur Date: Wed, 26 Jun 2024 10:17:38 +0200 Subject: [PATCH 19/19] Fixes an example for advanced Divina presentation hints --- experimental/presentation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experimental/presentation.md b/experimental/presentation.md index ab30cf1..995999f 100644 --- a/experimental/presentation.md +++ b/experimental/presentation.md @@ -40,7 +40,7 @@ The `clipped` property is meant to adapt visual resources to any given viewport ```json "metadata": { - "readingProgression": "ttb", + "layout": "scrolled", "presentation": { "fit": "height", "clipped": true