Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for EPUB Accessibility 1.1 conformance values #194

Closed
HadrienGardeur opened this issue Feb 11, 2025 · 6 comments · Fixed by #195
Closed

Support for EPUB Accessibility 1.1 conformance values #194

HadrienGardeur opened this issue Feb 11, 2025 · 6 comments · Fixed by #195

Comments

@HadrienGardeur
Copy link
Member

In a recent PR on the RWPM repo (readium/webpub-manifest#109), we introduced additional values for accessibility conformance that cover all the values currently supported in EPUB Accessibility 1.1.

To stay up to date with that work, we need to update the current parser to support all of these new values.

As a complementary feature, I'll also open an issue in the ts-toolkit to provide a helper that converts these URLs into a human-readable string.

@chocolatkey
Copy link
Member

@HadrienGardeur As I'm adding this, I see that when @mickael-menu added support for parsing of the currently supported values, he added some variants which I are assume to correct for mistakes made during authoring of EPUBs - you can see them here:

func a11yProfile(value string) manifest.A11yProfile {
	switch value {
	case "EPUB Accessibility 1.1 - WCAG 2.0 Level A",
		"http://idpf.org/epub/a11y/accessibility-20170105.html#wcag-a",
		"http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-a",
		"https://idpf.org/epub/a11y/accessibility-20170105.html#wcag-a",
		"https://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-a":
		return manifest.EPUBA11y10WCAG20A

	case "EPUB Accessibility 1.1 - WCAG 2.0 Level AA",
		"http://idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa",
		"http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa",
		"https://idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa",
		"https://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa":
		return manifest.EPUBA11y10WCAG20AA

	case "EPUB Accessibility 1.1 - WCAG 2.0 Level AAA",
		"http://idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa",
		"http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa",
		"https://idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa",
		"https://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa":
		return manifest.EPUBA11y10WCAG20AAA

	default:
		return ""
	}
}

Should I be adding the same corrections with http/https and www/no www to the new values as well?

@HadrienGardeur
Copy link
Member Author

HadrienGardeur commented Feb 14, 2025

@chocolatkey that's not needed because we'll only parse the human readable string for these new values. What might be needed is additional escaping to ignore trailing white spaces.

I'm not sure why "EPUB Accessibility 1.1 - WCAG 2.0 Level AA" is considered the same than http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa though, that was probably only a temporary workaround as we figure out how to deal with EPUB Accessibility 1.1.

http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa corresponds to "EPUB Accessibility 1.0 - WCAG 2.0 Level AA", so it should be in a different case.

@chocolatkey
Copy link
Member

@HadrienGardeur So is this the correct login then for parsing the EPUB metadata?

const (
	// EPUB Accessibility 1.0 - WCAG 2.0 Level A
	EPUBA11y10WCAG20A A11yProfile = "http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-a"
	// EPUB Accessibility 1.0 - WCAG 2.0 Level AA
	EPUBA11y10WCAG20AA A11yProfile = "http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa"
	// EPUB Accessibility 1.0 - WCAG 2.0 Level AAA
	EPUBA11y10WCAG20AAA A11yProfile = "http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa"
	// EPUB Accessibility 1.1 - WCAG 2.0 Level A
	EPUBA11y11WCAG20A A11yProfile = "https://www.w3.org/TR/epub-a11y-11#wcag-2.0-a"
	// EPUB Accessibility 1.1 - WCAG 2.0 Level AA
	EPUBA11y11WCAG20AA A11yProfile = "https://www.w3.org/TR/epub-a11y-11#wcag-2.0-aa"
	// EPUB Accessibility 1.1 - WCAG 2.0 Level AAA
	EPUBA11y11WCAG20AAA A11yProfile = "https://www.w3.org/TR/epub-a11y-11#wcag-2.0-aaa"
	// EPUB Accessibility 1.1 - WCAG 2.1 Level A
	EPUBA11y11WCAG21A A11yProfile = "https://www.w3.org/TR/epub-a11y-11#wcag-2.1-a"
	// EPUB Accessibility 1.1 - WCAG 2.1 Level AA
	EPUBA11y11WCAG21AA A11yProfile = "https://www.w3.org/TR/epub-a11y-11#wcag-2.1-aa"
	// EPUB Accessibility 1.1 - WCAG 2.1 Level AAA
	EPUBA11y11WCAG21AAA A11yProfile = "https://www.w3.org/TR/epub-a11y-11#wcag-2.1-aaa"
	// EPUB Accessibility 1.1 - WCAG 2.2 Level A
	EPUBA11y11WCAG22A A11yProfile = "https://www.w3.org/TR/epub-a11y-11#wcag-2.2-a"
	// EPUB Accessibility 1.1 - WCAG 2.2 Level AA
	EPUBA11y11WCAG22AA A11yProfile = "https://www.w3.org/TR/epub-a11y-11#wcag-2.2-aa"
	// EPUB Accessibility 1.1 - WCAG 2.2 Level AAA
	EPUBA11y11WCAG22AAA A11yProfile = "https://www.w3.org/TR/epub-a11y-11#wcag-2.2-aaa"
)

func a11yProfile(value string) manifest.A11yProfile {
	switch value {
	case "EPUB Accessibility 1.0 - WCAG 2.0 Level A",
		"http://idpf.org/epub/a11y/accessibility-20170105.html#wcag-a",
		"http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-a",
		"https://idpf.org/epub/a11y/accessibility-20170105.html#wcag-a",
		"https://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-a":
		return manifest.EPUBA11y10WCAG20A

	case "EPUB Accessibility 1.0 - WCAG 2.0 Level AA",
		"http://idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa",
		"http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa",
		"https://idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa",
		"https://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa":
		return manifest.EPUBA11y10WCAG20AA

	case "EPUB Accessibility 1.0 - WCAG 2.0 Level AAA",
		"http://idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa",
		"http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa",
		"https://idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa",
		"https://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa":
		return manifest.EPUBA11y10WCAG20AAA
	case "EPUB Accessibility 1.1 - WCAG 2.0 Level A":
		return manifest.EPUBA11y11WCAG20A
	case "EPUB Accessibility 1.1 - WCAG 2.0 Level AA":
		return manifest.EPUBA11y11WCAG20AA
	case "EPUB Accessibility 1.1 - WCAG 2.0 Level AAA":
		return manifest.EPUBA11y11WCAG20AAA
	case "EPUB Accessibility 1.1 - WCAG 2.1 Level A":
		return manifest.EPUBA11y11WCAG21A
	case "EPUB Accessibility 1.1 - WCAG 2.1 Level AA":
		return manifest.EPUBA11y11WCAG21AA
	case "EPUB Accessibility 1.1 - WCAG 2.1 Level AAA":
		return manifest.EPUBA11y11WCAG21AAA
	default:
		return ""
	}
}

@HadrienGardeur
Copy link
Member Author

The const looks right to me, but there's no need to support the following three values in those switch/case statements:

  • EPUB Accessibility 1.0 - WCAG 2.0 Level A
  • EPUB Accessibility 1.0 - WCAG 2.0 Level AA
  • EPUB Accessibility 1.0 - WCAG 2.0 Level AAA

I don't see any code dealing with trailing white spaces either, I really think we need to take it into account, it's the equivalent of screwing up the URI by switching http:// with https://.

@chocolatkey
Copy link
Member

chocolatkey commented Feb 14, 2025

@HadrienGardeur So to confirm, here's the new switch statement for the metadata in OPFs:

func a11yProfile(value string) manifest.A11yProfile {
	switch value {
	case "http://idpf.org/epub/a11y/accessibility-20170105.html#wcag-a",
		"http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-a",
		"https://idpf.org/epub/a11y/accessibility-20170105.html#wcag-a",
		"https://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-a":
		return manifest.EPUBA11y10WCAG20A

	case "http://idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa",
		"http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa",
		"https://idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa",
		"https://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa":
		return manifest.EPUBA11y10WCAG20AA

	case "http://idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa",
		"http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa",
		"https://idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa",
		"https://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa":
		return manifest.EPUBA11y10WCAG20AAA
	case "EPUB Accessibility 1.1 - WCAG 2.0 Level A":
		return manifest.EPUBA11y11WCAG20A
	case "EPUB Accessibility 1.1 - WCAG 2.0 Level AA":
		return manifest.EPUBA11y11WCAG20AA
	case "EPUB Accessibility 1.1 - WCAG 2.0 Level AAA":
		return manifest.EPUBA11y11WCAG20AAA
	case "EPUB Accessibility 1.1 - WCAG 2.1 Level A":
		return manifest.EPUBA11y11WCAG21A
	case "EPUB Accessibility 1.1 - WCAG 2.1 Level AA":
		return manifest.EPUBA11y11WCAG21AA
	case "EPUB Accessibility 1.1 - WCAG 2.1 Level AAA":
		return manifest.EPUBA11y11WCAG21AAA
	default:
		return ""
	}
}

Regarding the trimming of white space, that is already deal with for all metadata here

@HadrienGardeur
Copy link
Member Author

Looking good to me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants