ONIX Metadata

Other techniques for implementing EPUB accessibility metadata are available: Display Techniques for Displaying Accessibility Metadata

This document provides techniques for meeting the guidelines of the User Experience Guide for Displaying Accessibility Metadata. It provides practical examples for extracting information from the ONIX metadata for showing it to the end users.

ONIX messages describe products for the global book supply chain and will be sent from publisher or creator of the epub or digital books with full audio to those who will make the products available for sale, lending or subscription. These platforms may not yet have the actual files, as they may not yet be ready, or may only choose to list them for sale if they have certain accessibility features. ONIX also only describes a product, it cannot describe the features of the reading systems on which a product may be accessed. It is important to use ONIX metadata as a complement to the accessibility data embedded within the publication itself, if describing accessible books, books with full audio and related products for the global book supply chain. An ONIX file can be used to display accessibility information in advance of publication or when you do not have access to the metadata in the digital file itself. Some accessibility information may only be available when you have access to the file itself. If you are unfamiliar with ONIX, then there is more documentation available from EDItEUR.org.

It is important to note that ONIX 3.0 includes a number of new accessibility metadata codes, some of which may not be expressible in earlier versions of ONIX.

ONIX record examples

ONIX record describing an EPUB

Here is an example of an ONIX record (version 3.0), which will be used as a reference point for the following examples on EPUB accessibility metadata: the results of the XPath shown are based on this example.

ONIX record describing an audiobook

Here is an example of an ONIX record (version 3.0) for describing an audiobook, which will be used as a reference point for the some of the following examples on EPUB accessibility metadata: the results of the XPath shown are based on this example.

Conventions for implementations

The code conventions used in the provided code snippet follow a structure commonly found in programming languages like Python, Java, or C++. Here's an explanation of the conventions:

Conditionals and Control Flow:
IF, ELSE IF, and ELSE (in bold and capital letters) statements are used to define different conditions and the corresponding actions to be taken.
Operators:
Written operators (is present) are used to check if a particular code or codelist is present (or not) in the metadata record.
Logical operators:
Logical operators (AND, OR, NOT, in bold and capital letters) are used to combine conditions.
String Literals:
String literals are used to represent the text that should be displayed when a particular condition is met.
Variable Naming:
The terms like "codelist" and "code" are used in a way that suggests a variable or data structure representing a code or codelist to be accessed directly after the ingestion of the metadata record.
Indentation:
The code uses consistent indentation to define blocks of code within conditional statements. This is crucial for readability and maintaining a clear structure.
Readability:
The code is written in a way that is intended to be easily readable and understandable even by non-coders.

Common Functions

In this section we define the functions common to all techniques, which are called by them during execution.

Pre Processing

Before working directly with the metadata we must read the ONIX record. This is a common starting point for all techniques that allows us to query the record directly.

This algorithm takes the onix_record_as_text argument: a UTF-8 string representing the ONIX record.

To generate the internal representation, run the following steps:

  1. LET record be textual representation of the ONIX record for the publication given onix_record_as_text.
  2. LET onix be the DOM tree that results from parsing record using an XML DOM parser.
  3. Return onix.

Check for Node

Many of the techniques rely on checking for the presence or absence of metadata in the ONIX record.

This algorithm takes:

To check for node, run the following steps:

  1. IF onix contains path: THEN return True.
  2. ELSE return False.

Techniques

Visual adjustments

This technique relates to Visual adjustments key information.

This algorithm takes the onix_record_as_text argument: a UTF-8 string representing the ONIX record.

Understanding the variables

all_textual_content_can_be_modified

If true it indicates that the code 36 of codelist 196 (All textual content can be modified) is present in the ONIX record, otherwise if false it means that the metadata is not present.

All textual content can be modified means that the digital publication does not restrict the ability of users to modify and reflow the display of any textual content to the full extent allowed by the reading system (i.e. to change the text size or typeface, line height and word spacing, colors).

is_fixed_layout

If true it indicates that the code E201 of codelist 175 (Fixed format) is present in the ONIX record, otherwise if false it means that the metadata is not present.

Fixed format means that digital publication is in fixed format (e.g. EPUB Fixed Layout).

Variables setup

  1. LET onix be the result of calling pre processing given onix_record_as_text.
  2. LET all_textual_content_can_be_modified be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "36"].
  3. LET is_fixed_layout be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormDetail[text() = "E201"] AND NOT the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormDetail[text() = "E200"].

Instructions

  1. IF all_textual_content_can_be_modified: THEN display "Appearance can be modified".
  2. ELSE IF is_fixed_layout: THEN display "Appearance cannot be modified".
  3. ELSE display "Appearance modifiability not known".

Supports nonvisual reading

This technique relates to Supports nonvisual reading key information.

This algorithm takes the onix_record_as_text argument: a UTF-8 string representing the ONIX record.

Understanding the variables

all_necessary_content_textual

If true it indicates that the code 52 of codelist 196 (All non-decorative content supports reading without sight) is present in the ONIX record, otherwise if false it means that the metadata is not present.

All non-decorative content supports reading without sight means that all contents of the digital publication necessary to use and understanding, including text, images (via their alternative descriptions), audio and video material (via their transcripts, descriptions, captions or subtitles) are fully accessible via suitable reading devices, for example text-to-speech screen readers or tactile reading devices (‘Braille displays’), and nothing in the digital publication prevents or blocks the use of alternative reading modes. The entire publication can be navigated and ‘read’ using only text rendered via sound or touch, and does not require visual perception.

real_text

If true it indicates that the code 10 of codelist 81 (Text) is present in the ONIX record, otherwise if false it means that the metadata is not present.

Text means that digital publication contains "real" text (user-selectable) as its main content (or as secondary content).

non_textual_content_images

If true it indicates that at least one of the following is present in the ONIX record:

This means that the content contains images of any type.

textual_alternative_images

If true it indicates that at least one of the following is present in the ONIX record:

This means that there are textual alternatives for images.

Variables setup

  1. LET onix be the result of calling pre processing given onix_record_as_text.
  2. LET all_necessary_content_textual be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "52"].
  3. LET real_text be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail[PrimaryContentType = "10" or ProductContentType = "10"].
  4. LET non_textual_content_images be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail[PrimaryContentType = "07" or PrimaryContentType = "18" or PrimaryContentType = "19" or PrimaryContentType = "12" or PrimaryContentType = "49" or PrimaryContentType = "20" or ProductContentType = "07" or ProductContentType = "18" or ProductContentType = "19" or ProductContentType = "12" or ProductContentType = "49" or ProductContentType = "20"].
  5. LET textual_alternative_images be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and (ProductFormFeatureValue = "14" or ProductFormFeatureValue = "15" or ProductFormFeatureValue = "16")].

Instructions

  1. IF all_necessary_content_textual: THEN display "Readable in read aloud and braille".
  2. ELSE IF real_text AND non_textual_content_images AND NOT textual_alternative_images: THEN display "Not fully readable in read aloud and braille".
  3. ELSE display "May not be fully readable in read aloud and braille".

Conformance

This technique relates to Conformance key information.

Understanding the variables

epub_accessibility_1_0

If true it indicates that either the code 02 of codelist 196 (EPUB Accessibility Specification 1.0 A) or the code 03 of codelist 196 (EPUB Accessibility Specification 1.0 AA) are present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the publication conforms with either the requirements of EPUB Accessibility Spec 1.0, at level A or level AA.

epub_accessibility_1_1

If true it indicates that the code 04 of codelist 196 (EPUB Accessibility Specification 1.1) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the publication conforms with the requirements of EPUB Accessibility Spec 1.1.

wcag_2_0

If true it indicates that the code 80 of codelist 196 (WCAG v2.0) or the code 02 of codelist 196 (EPUB Accessibility Specification 1.0 A) or the code 03 of codelist 196 (EPUB Accessibility Specification 1.0 AA) are present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the publication conforms with the requirements of WCAG version 2.0 or with the requirements of EPUB Accessibility Spec 1.0 (at level A or level AA). This is because being compliant with EPUB Accessibility 1.0 specification means at least being compliant with WCAG 2.0 specification.

wcag_2_1

If true it indicates that the code 81 of codelist 196 (WCAG v2.1) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the publication conforms with the requirements of WCAG version 2.1.

wcag_2_2

If true it indicates that the code 82 of codelist 196 (WCAG v2.2) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the publication conforms with the requirements of WCAG version 2.2.

level_a

If true it indicates that the code 84 of codelist 196 (WCAG level A) or the code 02 of codelist 196 (EPUB Accessibility Specification 1.0 A) are present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the publication conforms with the requirements of WCAG level A or with the requirements of EPUB Accessibility Spec 1.0 level A.

level_aa

If true it indicates that the code 85 of codelist 196 (WCAG level AA) or the code 03 of codelist 196 (EPUB Accessibility Specification 1.0 AA) are present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the publication conforms with the requirements of WCAG level AA or with the requirements of EPUB Accessibility Spec 1.0 level AA.

level_aaa

If true it indicates that the code 86 of codelist 196 (WCAG level AAA) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the publication conforms with the requirements of WCAG level AAA.

certifier

Returns the description of code 90 of codelist 196 (Compliance certification by (name)) if present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the name of the organization responsible for compliance testing and certification of the product is present.

certifier_credentials

Returns the description of code 93 of codelist 196 (Compliance certification by (URL)) if present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the the URL of a web page belonging to an organization responsible for compliance testing and certification of the product is present – typically a ‘home page’ or a page describing the certification scheme itself.

certification_date

Returns the description of code 91 of codelist 196 (Latest accessibility assessment date) if present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the date of the latest assessment or re-assessment of the accessibility of the product is present.

certifier_report

Returns the description of code 94 of codelist 196 (Compliance web page for detailed accessibility information) if present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that is present the URL of a compliance web page for detailed accessibility information. The web page should be maintained by an independent compliance scheme or testing organization. Note the web page may include information about specific national requirements or voluntary conformance reports.

Variables setup

  1. LET onix be the result of calling pre processing given onix_record_as_text.
  2. LET epub_accessibility_1_0 be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "02"] OR calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "03"].
  3. LET epub_accessibility_1_1 be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "04"].
  4. LET wcag_2_0 be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "80"] OR calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "02"] OR calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "03"].
  5. LET wcag_2_1 be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "81"].
  6. LET wcag_2_2 be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "82"].
  7. LET level_a be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "84"] OR calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "02"].
  8. LET level_aa be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "85"] OR calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "03"].
  9. LET level_aaa be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "86"].
  10. LET certifier be the value of the node extracted from onix, using the xpath /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "90"]/ProductFormFeatureDescription.
  11. LET certifier_credentials be the value of the node extracted from onix, using the xpath /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "93"]/ProductFormFeatureDescription.
  12. LET certification_date be the value of the node extracted from onix, using the xpath /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "91"]/ProductFormFeatureDescription.
  13. LET certifier_report be the value of the node extracted from onix, using the xpath /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "94"]/ProductFormFeatureDescription.

Instructions

  1. IF level_aaa: THEN display "This publication exceeds accepted accessibility standards".
  2. ELSE IF level_aa: THEN display "This publication meets accepted accessibility standards".
  3. ELSE IF level_a: THEN display "This publication meets minimum accessibility standards".
  4. ELSE: THEN display "The publication does not include a conformance statement".
  5. IF certifier is NOT empty: THEN
    • display "This publication is certified by "
    • display certifier.
  6. IF certifier_credentials is NOT empty: THEN
    • display "The certifier's credential is "
    • display certifier_credentials as link IF certifier_credentials is an URL.
  7. display "Detailed Conformance Information" as heading.
  8. IF epub_accessibility_1_0 OR epub_accessibility_1_1 OR wcag_2_0 OR wcag_2_1 OR wcag_2_2 OR level_aaa OR level_aa OR level_a: THEN display "This publication claims to meet ".
  9. IF epub_accessibility_1_0: THEN display " EPUB Accessibility 1.0 ".
  10. ELSE IF epub_accessibility_1_1: THEN display " EPUB Accessibility 1.1 ".
  11. IF wcag_2_2: THEN display " WCAG 2.2 ".
  12. ELSE IF wcag_2_1: THEN display " WCAG 2.1 ".
  13. ELSE IF wcag_2_0: THEN display " WCAG 2.0 ".
  14. IF level_aaa: THEN display " Level AAA".
  15. ELSE IF level_aa: THEN display " Level AA".
  16. ELSE IF level_a: THEN display " Level A".
  17. IF certification_date OR certifier OR certifier_credentials: THEN display "The publication was certified ".
  18. IF certification_date: THEN
    • display " on "
    • display certification_date.
  19. IF certifier: THEN
    • display " by "
    • display certifier.
  20. IF certifier_credentials: THEN
    • display " with a credential of "
    • display certifier_credentials as link IF certifier_credentials is an URL.
  21. IF certifier_report: THEN
    • display "For more information refer to the certifier's report."
    • with certifier_report as link.

Pre-recorded audio

This technique relates to Pre-recorded audio key information.

This algorithm takes the onix_record_as_text argument: a UTF-8 string representing the ONIX record.

Understanding the variables

audiobook

If true it indicates that the code 01 of codelist 81 (Audiobook) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the primary content is an Audio recording of a reading of a book or other text.

all_content_audio

If true it indicates that the code 39 of codelist 196 (Supplementary material to an audiobook is accessible) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that all supplementary visual or textual material necessary for understanding of an audiobook, is available as pre-recorded audio, or has full alternative text that can be read via text-to- speech. Only for use in ONIX 3.0 or later.

all_content_pre_recorded

If true it indicates that the code 51 of codelist 196 (All non-decorative content supports reading via pre-recorded audio) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that all contents of the digital publication necessary to use and understanding, including any text, images (via alternative descriptions), video (via audio description) is fully accessible via suitable audio reproduction. The entire publication can be navigated and ‘read’ using only pre-recorded sound, and does not require visual or tactile perception.

synchronised_pre_recorded_audio

If true it indicates that one of the following codes is present in the ONIX record:

Otherwise, if false, it means that none of the above metadata is present.

This indicates that text-synchronised pre-recorded audio narration (natural or synthesised voice) is included for substantially all textual matter, including all alternative descriptions, e.g. via a SMIL media overlay.

non_textual_content_audio

If true it indicates that one of the following codes is present in the ONIX record:

Otherwise, if false, it means that none of the above metadata is present.

This indicates that pre-recorded audio content is included as part of the work. It can be Audio recording of a reading, performance or dramatization of part of the work or additional pre-recorded audio of any supplementary material such as full or partial reading, lecture, performance, dramatization, interview, background documentary or other audio content not included in the primary or unenhanced version

non_textual_content_audio_in_video

If true it indicates that one of the following codes is present in the ONIX record:

Otherwise, if false, it means that none of the above metadata is present.

This indicates that pre-recorded video including audio content is included as part of the work. It can be video recording of a reading, performance of part of the work or additional pre-recorded video of any supplementary material such as full or partial reading, lecture, performance, dramatization, interview, background documentary or other video containing audio content.

Variables setup

  1. LET onix be the result of calling pre processing given onix_record_as_text.
  2. LET audiobook be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/DescriptiveDetail[PrimaryContentType = "81" or ContentType = "81"] .
  3. LET all_content_audio be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "39"].
  4. LET all_content_pre_recorded be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "51"].
  5. LET synchronised_pre_recorded_audio be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "20"] AND calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormDetail[text() = "A305"].
  6. LET non_textual_content_audio be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/DescriptiveDetail[ContentType = "21" or ContentType = "22"] .
  7. LET non_textual_content_audio_in_video be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/DescriptiveDetail[ContentType = "06" or ContentType = "25" or ContentType = "26" or ContentType = "27" or ContentType = "28" or ContentType = "29" or ContentType = "30"] .

Instructions

  1. IF all_content_audio AND NOT synchronised_pre_recorded_audio: THEN display "Audio only".
  2. ELSE IF audiobook OR non_textual_content_audio OR non_textual_content_audio_in_video AND NOT all_content_pre_recorded: THEN display "Complementary audio and text".
  3. ELSE IF all_content_pre_recorded AND synchronised_pre_recorded_audio: THEN display "Synchronized audio and text".
  4. ELSE display "No information about pre-recorded audio".

    This key information can be hidden if metadata is missing.

Charts, diagrams, and formulas

This technique relates to Charts, diagrams, and formulas key information.

This algorithm takes the onix_record_as_text argument: a UTF-8 string representing the ONIX record.

Understanding the variables

contains_charts_diagrams

If true it indicates that the code 19 of codelist 81 (Figures, diagrams, charts, graphs) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that there is a positive indication that the product has some information conveyed via some form of illustration, such as a graph, a chart, a diagram, a figure, etc).

charts_diagrams_as_non_graphical_data

If true it indicates that the code 16 of codelist 196 (Visualized data also available as non-graphical datas) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that there is a positive indication that all data presented in a visual format (graph, chart, etc) has an alternative non-graphical presentation of the same data.

charts_diagrams_diagrams_as_long_text

If true it indicates that the code 15 of codelist 196 (Full alternative textual description) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that there is a positive indication that a full alternative textual description has been supplied for all of the graphs, charts, diagrams, or figures necessary to understand the content.

contains_chemical_formula

If true it indicates that the code 47 of codelist 81 (Chemical content) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that there is a positive indication that the publication contains chemical notations, formulae.

chemical_formula_as_chemml

If true it indicates that the code 18 of codelist 196 (Accessible chemistry content as ChemML) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that there is a positive indication that the chemical formulae are presented using ChemML and works with compatible assistive technology.

chemical_formula_as_mathml

If true it indicates that the code 34 of codelist 196 (Accessible chemistry content as MathML) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that there is a positive indication that the chemical formulae are presented using MathML and works with compatible assistive technology.

contains_math_formula

If true it indicates that the code 48 of codelist 81 (Mathematical content) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that there is a positive indication that the publication contains mathematical notation, equations, formulae.

math_formula_as_latex

If true it indicates that the code 35 of codelist 196 (Accessible math content as LaTeX) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that there is a positive indication that the chemical formulae are presented using LaTeX and works with compatible assistive technology.

math_formula_as_mathml

If true it indicates that the code 17 of codelist 196 (Accessible math content as MathML) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that there is a positive indication that all mathematical content is presented using MathML and works with compatible assistive technology.

Variables setup

  1. LET onix be the result of calling pre processing given onix_record_as_text.
  2. LET contains_charts_diagrams be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/DescriptiveDetail[PrimaryContentType = "19" or ContentType = "19"] .
  3. LET charts_diagrams_as_non_graphical_data be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "16"].
  4. LET charts_diagrams_diagrams_as_long_text be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "15"].
  5. LET contains_chemical_formula be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/DescriptiveDetail[PrimaryContentType = "47" or ContentType = "47"] .
  6. LET chemical_formula_as_chemml be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "18"].
  7. LET chemical_formula_as_mathml be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "34"].
  8. LET contains_math_formula be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/DescriptiveDetail[PrimaryContentType = "48" or ContentType = "48"] .
  9. LET math_formula_as_latex be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "35"].
  10. LET math_formula_as_mathml be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "17"].

Instructions

  1. IF contains_charts_diagrams AND charts_diagrams_diagrams_as_long_text: THEN display "Charts and diagrams have extended descriptions".
  2. IF contains_charts_diagrams AND charts_diagrams_as_non_graphical_data: THEN display "Visualized data also available as non-graphical data".
  3. IF chemical_formula_as_chemml OR chemical_formula_as_mathml: THEN display "Accessible chemistry content".
  4. IF math_formula_as_latex OR math_formula_as_mathml: THEN display "Accessible math content".
  5. IF (contains_charts_diagrams OR contains_chemical_formula OR contains_math_formula) AND NOT (charts_diagrams_diagrams_as_long_text OR charts_diagrams_as_non_graphical_data OR chemical_formula_as_chemml OR chemical_formula_as_mathml OR math_formula_as_latex OR math_formula_as_mathml): THEN display "Accessibility of formulas, charts, and diagrams unknown".

Hazards

This technique relates to Hazards key information.

This algorithm takes the onix_record_as_text argument: a UTF-8 string representing the ONIX record.

Understanding the variables

no_hazards_or_warnings_confirmed

If true it indicates that the code 00 of codelist 143 (No known hazards or warnings) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means there is a positive indication in the ONIX record confirming there are no associated hazard warnings with this product.

flashing_hazard

If true it indicates that the code 13 of codelist 143 (WARNING - Flashing hazard) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that there is a positive indication that the product has a flashing hazard which must be displayed.

no_flashing_hazards

If true it indicates that the code 14 of codelist 143 (No flashing hazard warning necessary) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means there is a positive indication in the ONIX record confirming there are no flashing hazards associated with this product.

motion_simulation_hazard

If true it indicates that the code 17 of codelist 143 (WARNING - Motion simulation hazard) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that there is a positive indication that the product has a motion simulation hazard which must be displayed.

no_motion_hazards

If true it indicates that the code 18 of codelist 143 (No motion simulation hazard warning necessary) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means there is a positive indication in the ONIX record confirming there are no motion simulation hazards associated with this product.

sound_hazard

If true it indicates that the code 15 of codelist 143 (WARNING - Sound hazard) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that there is a positive indication that the product has a sound hazard which must be displayed.

no_sound_hazards

If true it indicates that the code 16 of codelist 143 (No sound hazard warning necessary) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means there is a positive indication in the ONIX record confirming there are no sound hazards associated with this product.

unknown_if_contains_hazards

If true it indicates that the code 08 of codelist 196 (Unknown accessibility) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the product has not been assessed for hazards and there is no information about potential hazards.

Variables setup

  1. LET onix be the result of calling pre processing given onix_record_as_text.
  2. LET no_hazards_or_warnings_confirmed be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "12" and ProductFormFeatureValue = "00"].
  3. LET flashing_hazard be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "12" and ProductFormFeatureValue = "13"].
  4. LET no_flashing_hazards be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "12" and ProductFormFeatureValue = "14"].
  5. LET motion_simulation_hazard be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "12" and ProductFormFeatureValue = "17"].
  6. LET no_motion_hazards be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "12" and ProductFormFeatureValue = "18"].
  7. LET sound_hazard be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "12" and ProductFormFeatureValue = "15"].
  8. LET no_sound_hazards be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "12" and ProductFormFeatureValue = "16"].
  9. LET unknown_if_contains_hazards be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "08"].

Instructions

  1. IF no_hazards_or_warnings_confirmed OR (no_flashing_hazards AND no_motion_hazards AND no_sound_hazards): THEN display "No hazards".
  2. ELSE IF flashing_hazard OR motion_simulation_hazard OR sound_hazard: THEN LET hazards be an empty array.
    1. IF flashing_hazard: THEN APPEND "flashing" to hazards.
    2. IF motion_simulation_hazard: THEN APPEND "motion" to hazards.
    3. IF sound_hazard: THEN APPEND "sound" to hazards.
    4. LET hazards_string be the result of:
      • calling join on hazards with the separator ", "
      • making uppercase the first character
      • replacing the last occurence of ", " with " and "
      • concatenating " hazards" to the end of the string IF (length of hazards) > 1 ELSE concatenating " hazard" to the end of the string.
    5. display hazards_string.
  3. ELSE IF unknown_if_contains_hazards: THEN display "The presence of hazards is unknown".
  4. ELSE display "No information about possible hazards".

    This key information can be hidden if metadata is missing.

Accessibility summary

This technique relates to Accessibility summary key information.

This algorithm takes the onix_record_as_text argument: a UTF-8 string representing the ONIX record.

Being human-written, the accessibility summary and addendum will appear in the original language of the publication. Therefore it is necessary of take care of setting up the correct language tag information.

Accessibility summary existed when no system exposed the computed accessibility metadata. With more and more systems displaying this information, most of the accessibility summary may be redundant. It may be advised to display only the accessibility addendum.

Understanding the variables

accessibility_summary

Returns the description of code 00 of codelist 196 (Accessibility summary) if present in the ONIX record, otherwise if false it means that the metadata is not present.

This means there is a human-written text containing a short explanatory summary of the accessibility of the product or the URL of a web page comprising such a summary. Summarizes the already existent information and may add information that the publisher could not express with the other codes.

lang_attribute_accessibility_summary

Returns the lang attribute of the node containing the accessibility_summary, or the lang attribute of the nearest ancestor.

This is the language code in which the text of the Accessibility summary was written.

accessibility_addendum

Returns the description of code 92 of codelist 196 (Accessibility addendum) if present in the ONIX record, otherwise if false it means that the metadata is not present.

This means there is a human-written text containing a short addendum to the accessibility detail of the product. It contains precise information that the publisher could not express with the other's codes.

lang_attribute_accessibility_addendum

Returns the lang attribute of the node containing the accessibility_addendum, or the lang attribute of the nearest ancestor.

This is the language code in which the text of the Accessibility addendum was written.

known_limited_accessibility

Returns the description of code 09 of codelist 196 (Inaccessible, or known limited accessibility) if present in the ONIX record, otherwise if false it means that the metadata is not present.

This means there is a human-written text containing details of and reasons for limitations on accessibility of an ebook.

lang_known_limited_accessibility

Returns the lang attribute of the node containing the known_limited_accessibility, or the lang attribute of the nearest ancestor.

This is the language code in which the text of the Inaccessible, or known limited accessibility was written.

language_of_text

Returns the value of nearest code 01 of codelist 22 (Language of text) if present in the ONIX record, otherwise if false it means that the metadata is not present.

This indicates the main language of the content and therefore the most probable language of accessibility summary and addendum.

Variables setup

  1. LET onix be the result of calling pre processing given onix_record_as_text.
  2. LET accessibility_addendum be the value of the node extracted from onix, using the xpath /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "92"]/ProductFormFeatureDescription.
  3. LET lang_attribute_accessibility_addendum be the value extracted from onix, using the xpath /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "92"]/ProductFormFeatureDescription/(@lang|ancestor::*/@lang)[last()].
  4. LET known_limited_accessibility be the value of the node extracted from onix, using the xpath /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "09"]/ProductFormFeatureDescription.
  5. LET lang_known_limited_accessibility be the value extracted from onix, using the xpath /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "09"]/ProductFormFeatureDescription/(@lang|ancestor::*/@lang)[last()].
  6. LET accessibility_summary be the value of the node extracted from onix, using the xpath /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "00"]/ProductFormFeatureDescription.
  7. LET lang_attribute_accessibility_summary be the value extracted from onix, using the xpath /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "00"]/ProductFormFeatureDescription/(@lang|ancestor::*/@lang)[last()].
  8. LET language_of_text be the value of the node extracted from onix, using the xpath /ONIXMessage/Product/DescriptiveDetail/Language[LanguageRole="01"]/LanguageCode.

Instructions

  1. IF lang_attribute_accessibility_addendum is NOT empty: THEN LET language_accessibility_addendum be the value of lang_attribute_accessibility_addendum.
  2. ELSE LET language_accessibility_addendum be the value of language_of_text.
  3. IF lang_known_limited_accessibility is NOT empty: THEN LET language_known_limited_accessibility be the value of lang_known_limited_accessibility.
  4. ELSE LET language_known_limited_accessibility be the value of language_of_text.
  5. IF lang_attribute_accessibility_summary is NOT empty: THEN LET language_accessibility_summary be the value of lang_attribute_accessibility_summary.
  6. ELSE LET language_accessibility_summary be the value of language_of_text.
  7. IF known_limited_accessibility is NOT empty: THEN display the content of known_limited_accessibility with language_known_limited_accessibility as language.
  8. IF accessibility_addendum is NOT empty: THEN display the content of accessibility_addendum with language_accessibility_addendum as language.
  9. ELSE IF accessibility_summary is NOT empty: THEN display the content of accessibility_summary with language_accessibility_summary as language.
  10. ELSE display "No accessibility summary".

    This key information can be hidden if metadata is missing.

Additional accessibility information

This technique relates to Additional accessibility information key information.

Adaptation

Understanding the variables
dyslexia_readability

If true it indicates that the code 24 of codelist 196 (Dyslexia readability) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the product has been specifically adapted or has features specifically to improve readability for dyslexic readers, for example specialised font, character and/or line spacing, justification and paragraph spacing, coloring and other options provided specifically to improve readability for dyslexic readers.

closed_captions

If true it indicates that the code V210 of codelist 175 (Closed captions) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the audio content of a video can be seen via closed captions that can be turned on or off by the viewer and which will be a separate file from the video itself.

open_captions

If true it indicates that the code V211 of codelist 175 (Open captions) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the audio content of a video can be seen via open captions, which means they cannot be turned off and are always visible when the video plays.

full_transcript

If true it indicates that the code V212 of codelist 175 (Full transcript) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that a full transcript of the audio content of the product is supplied with it.

sign_language

If true it indicates that the code V213 of codelist 175 (Sign language interpretation) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that a full signing of audio content of the product supplied with the video file.

Variables setup
  1. LET onix be the result of calling pre processing given onix_record_as_text.
  2. LET dyslexia_readability be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "24"].
  3. LET closed_captions be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail[ProductFormDetail = "V210"].
  4. LET open_captions be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail[ProductFormDetail = "V211"].
  5. LET full_transcript be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail[ProductFormDetail = "V212"].
  6. LET sign_language be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail[ProductFormDetail = "V213"].
Instructions
  1. LET adaptation be an empty array.
  2. IF dyslexia_readability: THEN APPEND "dyslexia readability" to adaptation.
  3. IF closed_captions: THEN APPEND "closed captions" to adaptation.
  4. IF open_captions: THEN APPEND "open captions" to adaptation.
  5. IF full_transcript: THEN APPEND "full transcript" to adaptation.
  6. IF sign_language: THEN APPEND "sign language" to adaptation.
  7. IF adaptation is NOT empty:
    1. LET adaptation_string be the result of:
      • calling join on adaptation with the separator ", "
      • making uppercase the first character
      • replacing the last occurence of ", " with " and ".
    2. display adaptation_string.

Clarity

Understanding the variables
text_to_speech_hinting

If true it indicates that the code 21 of codelist 196 (Text-to-speech hinting provided) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that text-to-speech has been optimised through provision of PLS lexicons, SSML or CSS Speech synthesis hints or other speech synthesis markup languages or hinting.

color_not_sole_means_of_conveying_information

If true it indicates that the code 25 of codelist 196 (Use of color is not sole means of conveying information) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that for readers with color vision deficiency, use of color (eg in diagrams, graphs and charts, in prompts or on buttons inviting a response) is not the sole means of graphical distinction or of conveying information.

high_contrast_between_text_and_background

If true it indicates that the code 26 of codelist 196 (Use of high contrast between text and background color) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that body text is presented with a contrast ratio of at least 4.5:1 (or 3:1 for large/heading text).

ultra_high_contrast_between_text_and_background

If true it indicates that the code 37 of codelist 196 (Use of ultra-high contrast between text foreground and background) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that body text is presented with a contrast ratio of at least 7:1 (or 4.5:1 for large/heading text).

visible_page_numbering

If true it indicates that the code E205 of codelist 175 (Visible page numbering) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that the e-publication (mostly in the case of a fixed-format) contains visible page numbers.

high_contrast_between_foreground_and_background_audio

If true it indicates that the code 27 of codelist 196 (Use of high contrast between foreground and background audio) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that foreground audio content (eg voice) is presented with no or low background noise (eg ambient sounds, music), at least 20dB below the level of the foreground, or background noise can be switched off (eg via an alternative audio track). Brief and occasional sound effects may be as loud as foreground voice so long as they are isolated from the foreground.

without_background_sounds

If true it indicates that the code A312 of codelist 175 (Without background sounds) is present in the ONIX record, otherwise if false it means that the metadata is not present.

This means that pre-recorded audiobook narration does not contain any background sounds, including music, sound effects, etc, though music and effects may be present if isolated from the speech (ie the sounds do not overlap).

Variables setup
  1. LET onix be the result of calling pre processing given onix_record_as_text.
  2. LET text_to_speech_hinting be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "21"].
  3. LET color_not_sole_means_of_conveying_information be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "25"].
  4. LET high_contrast_between_text_and_background be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "26"].
  5. LET ultra_high_contrast_between_text_and_background be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "37"].
  6. LET visible_page_numbering be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail[ProductFormDetail = "E205"].
  7. LET high_contrast_between_foreground_and_background_audio be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail/ProductFormFeature[ProductFormFeatureType = "09" and ProductFormFeatureValue = "27"].
  8. LET without_background_sounds be the result of calling check for node on onix, /ONIXMessage/Product/DescriptiveDetail[ProductFormDetail = "A312"].
Instructions
  1. LET clarity be an empty array.
  2. IF text_to_speech_hinting: THEN APPEND "text-to-speech hinting provided" to clarity.
  3. IF color_not_sole_means_of_conveying_information: THEN APPEND "color is not the sole means of conveying information" to clarity.
  4. IF high_contrast_between_text_and_background: THEN APPEND "high contrast between text and background" to clarity.
  5. IF ultra_high_contrast_between_text_and_background: THEN APPEND "ultra high contrast between text and background" to clarity.
  6. IF visible_page_numbering: THEN APPEND "visible page numbering " to clarity.
  7. IF high_contrast_between_foreground_and_background_audio: THEN APPEND "high contrast between foreground and background audio" to clarity.
  8. IF without_background_sounds: THEN APPEND "without background sounds" to clarity.
  9. IF clarity is NOT empty:
    1. LET clarity_string be the result of:
      • calling join on clarity with the separator ", "
      • making uppercase the first character
      • replacing the last occurence of ", " with " and ".
    2. display clarity_string.

Acknowledgements

Contributors

Reviewers