Guided navigation offers an alternative reading experience through a sequence of media fragments. In some cases, multiple media fragments are meant to be presented in parallel.
This document defines a syntax for Guided Navigation Documents, serialized in JSON and meant to be referenced in a Readium Web Publication Manifest.
Editors:
Participate:
Guided Navigation Documents must be identified using the following media type: application/guided-navigation+json
.
Name | Description | Format | Required? |
---|---|---|---|
links |
References to other resources that are related to the current Guided Navigation Document. | An array of Link Objects | No |
guided |
A sequence of resources and/or media fragments into these resources, meant to be presented sequentially to the user. | An array of Guided Navigation Objects | Yes |
Example 1: A link to a subsequent Guided Navigation Document
{
"links": [
{
"rel": "next",
"href": "guided-chapter2.json"
}
],
"guided": [
{
"textref": "chapter1.html",
"role": ["chapter"]
}
]
}
Each Guided Navigation Object must either contain:
children
object containg at least one Guided Navigation Objectaudioref
, imgref
or textref
Guided Navigations Objects should include one or more values for role
.
Name | Description | Format |
---|---|---|
audioref |
References an audio resource or a fragment of it. | URI |
children |
Items that are children of the containing Guided Navigation Object. | Guided Navigation Objects |
imgref |
References an image or a fragment of it. | URI |
role |
Convey the structural semantics of a publication | Array of roles |
text |
Textual equivalent of the resources or fragment of the resources referenced by the current Guided Navigation Object. | String |
textref |
References a textual resource or a fragment of it. | URI |
Guided Navigation Documents are primarily designed to be referenced from a Readium Web Publication Manifest, in order to enable use cases that such manifests cannot handle on their own.
For example, a publication using the EPUB profile could handle Media Overlays by parsing SMIL files contained in the EPUB package and exposing them as Guided Navigation Documents.
If a publication references any Guided Navigation Document using audioref
:
duration
with the total duration for all audio resources referencednarrator
Publications that conform to the EPUB profile and map SMIL to Guided Navigations Documents, may also include a mediaOverlay
property.
Users must be free to move in and out of a Guided Navigation experience at will.
To do so, publications should provide references to Guided Navigation Documents both at a publication-level and as an alternate to resources referenced in the readingOrder
.
All valid Readium Web Publication Manifests must contain a links
property with at least one reference to its canonical location.
In order to indicate the presence of a Guided Navigation Document, links
may also include an additional Link Object where:
type
uses the dedicated value for Guided Navigation Documents: application/guided-navigation+json
rel
value simply indicates that the Guided Navigation Document is related
to the publicationSubsequent Guided Navigation Documents can be linked from this initial resource using the links
property, in order to navigate throughout the publication.
Example 2: A publication links to a Guided Navigation Document
"links": [
{
"rel": "self",
"href": "https://example.com/manifest.json",
"type": "application/guided-navigation+json"
}
{
"rel": "related",
"href": "https://example.com/guided.json",
"type": "application/guided-navigation+json"
}
]
In addition to a publication-level link, all resources in the readingOrder
should also point to the Guided Navigation Document that references them using the alternate
property.
If this Guided Navigation Document contains any audioref
element, then the Link Object should also indicate the total duration for all audioref
properties using duration
.
Example 3: An image in a Divina that links to a Guided Navigation Document as an alternative
"readingOrder": [
{
"href": "page1.jpg",
"type": "image/jpeg",
"alternate": [
{
"href": "guided.json",
"type": "application/guided-navigation+json"
}
]
}
]
The following media fragments have been identified as potential candidates for fragments in
audioref
,imgref
andtextref
:Audio: https://www.w3.org/TR/media-frags/#naming-time
Images:
- Rectangular regions: https://www.w3.org/TR/media-frags/#naming-space
- Polygonal regions: https://idpf.org/epub/renditions/region-nav/#sec-3.5.1
Text:
- Fragment ID:
#identifier
- Text fragments: https://wicg.github.io/scroll-to-text-fragment/
There are a number of open issues that relate to media fragments:
- Support for non-rectangular regions: https://github.com/readium/guided-navigation/discussions/5
- Support for CSS selectors and positions in
textref
: https://github.com/readium/guided-navigation/discussions/6
There are a number of open issues that relate to roles:
- Cherrypicking roles from EPUB 3 Structural Semantics Vocabulary 1.1: https://github.com/readium/guided-navigation/discussions/2
- Identifying skippable and escapable roles: https://github.com/readium/guided-navigation/discussions/3
- Defining a list of roles for Divina: https://github.com/readium/guided-navigation/discussions/1
Roles are inherited from multiple specifications such as HTML, ARIA, DPUB ARIA and EPUB 3 Semantics Vocabulary, in order to convey the structural semantics of a publication.
The full list of supported roles is available at: https://readium.org/guided-navigation/roles
Roles should be used by reading applications to implement skippability (based on user preferences, some items could be skipped) and escapability (allowing users to escape from the current context, for example escaping from the content of a table to go back to the main text).
The following JSON Schemas are available under version control:
For the purpose of validating a Readium Guided Navigation Document, use the following JSON Schema resource:
A few additional documents are available in order to illustrate how Guided Navigation can be leveraged for:
The following examples are also available to illustrate how other types of publication can be mapped to Guided Navigation:
Example 4: Synchronizing text with pre-recorded audio
{
"guided": [
{
"textref": "chapter1.html#start",
"role": ["chapter"],
"children": [
{
"textref": "chapter1.html#par1",
"audioref": "chapter1.mp3#t=0,20"
},
{
"textref": "chapter1.html#par2",
"audioref": "chapter1.mp3#t=20,28"
}
]
}
]
}
Example 5: Accessible audiobook using text fragments
{
"guided": [
{
"audioref": "chapter1.mp3#t=0,20",
"textref": "chapter1.html#:~:text=It%20is%20a%20truth,want%20of%20a%20wife"
},
{
"audioref": "chapter1.mp3#t=20,48",
"textref": "chapter1.html#:~:text=However%20little%20known,of%20their%20daughters"
}
]
}
Example 6: Accessible audiobook using embedded text
{
"guided": [
{
"audioref": "chapter1.mp3#t=0,7",
"text": "This is the first sentence in this audiobook."
},
{
"audioref": "chapter1.mp3#t=7,16",
"text": "Which is followed by a second, slightly longer sentence."
}
]
}
text
Name | Description | Format |
---|---|---|
language |
Main language for the text, which can be locally overriden in the SSML representation. | BCP-47 language tag |
plain |
Contains a plain text representation of the text. | String |
ssml |
Contains an SSML representation of the text. | SSML |
Example 9: Text representation with both plain text and SSML
{
"imgref": "page10.jpg#xywh=percent:10,10,20,20",
"text": {
"plain": "The SSML standard is defined by the W3C.",
"language": "en",
"ssml": "<speak>The <say-as interpret-as=\"characters\">SSML</say-as>standard <break time=\"1s\"/>is defined by the<sub alias=\"World Wide Web Consortium\">W3C</sub>.</speak>"
}
}
description
Name | Description | Format |
---|---|---|
description |
Text, audio or image description for the current Guided Navigation Object. | Guided Navigation Object without children |
Example 10: Audio and text description for an image
{
"role": ["panel"],
"imgref": "page10.jpg#xywh=percent:10,10,60,40",
"description": {
"text": "A cowboy is looking at the city as the sun sets into the horizon.",
"audioref": "description.mp3t=0,5"
},
"children": [
{
"role": ["speechBubble"],
"imgref": "page10.jpg#xywh=percent:10,10,20,20",
"text": "This is a dialogue in a speech bubble."
}
]
}
multipleImages
This is under discussion at:
- How should we handle references to multiple images? https://github.com/readium/guided-navigation/discussions/9
References:
Name | Description | Format |
---|---|---|
multipleImages |
Two or more references to images or regions of different images. | Array of URI |
Example 11: Two page spread that contains a panel across the entire spread
{
"role": ["spread"],
"multipleImages": [
"page2.jpg",
"page3.jpg"
]
"children": [
{
"role": ["panel"]
"multipleImages": [
"page2.jpg#xywh=percent:0,0,100,20",
"page3.jpg#xywh=percent:0,0,100,20"
]
}
]
}
character
Name | Description | Format |
---|---|---|
character |
Identifies one or more character present in a given Guided Navigation object. | Array of strings |
Example 12: Characters present in the panel of a comicbook
{
"role": ["panel"],
"imgref": "page10.jpg#xywh=percent:10,10,60,40",
"description": "Emily marche seule, elle semble perdue dans ses pensées. Derrière elle, deux policiers la suivent du regard et échangent à son propos.",
"character": ["Emily", "Premier policier", "Deuxième policier"]
}