diff --git a/src/main/java/com/adobe/epubcheck/vocab/PackageVocabs.java b/src/main/java/com/adobe/epubcheck/vocab/PackageVocabs.java index 129a22383..469124736 100644 --- a/src/main/java/com/adobe/epubcheck/vocab/PackageVocabs.java +++ b/src/main/java/com/adobe/epubcheck/vocab/PackageVocabs.java @@ -88,6 +88,7 @@ public static enum LINKREL_PROPERTIES implements PropertyStatus MODS_RECORD(DEPRECATED), ONIX_RECORD(DEPRECATED), RECORD, + VOICING, XML_SIGNATURE(DEPRECATED), XMP_RECORD(DEPRECATED); diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/package-30.sch b/src/main/resources/com/adobe/epubcheck/schema/30/package-30.sch index 75b99c30a..f0d8b3ab0 100644 --- a/src/main/resources/com/adobe/epubcheck/schema/30/package-30.sch +++ b/src/main/resources/com/adobe/epubcheck/schema/30/package-30.sch @@ -54,6 +54,13 @@ have a 'refines' attribute). + + + + 'voicing' links must have a 'media-type' attribute identifying an audio MIME type. + 'voicing' links must have a 'refines' attribute. + + diff --git a/src/test/java/com/adobe/epubcheck/opf/OPFCheckerTest.java b/src/test/java/com/adobe/epubcheck/opf/OPFCheckerTest.java index 901d70c6e..6f18dc673 100644 --- a/src/test/java/com/adobe/epubcheck/opf/OPFCheckerTest.java +++ b/src/test/java/com/adobe/epubcheck/opf/OPFCheckerTest.java @@ -764,6 +764,37 @@ public void testLinkRelRecordWithRefines() expectedErrors.add(MessageId.RSC_005); testValidateDocument("invalid/link-rel-record-refines.opf", EPUBVersion.VERSION_3); } + + @Test + public void testLinkRelVoicing() + { + // tests that the 'voicing' link rel keyword is accepted + testValidateDocument("valid/link-rel-voicing.opf", EPUBVersion.VERSION_3); + } + + @Test + public void testLinkRelVoicingWithNoRefinesAttribute() + { + // tests that 'voicing' links must have a 'refines' attribute + expectedErrors.add(MessageId.RSC_005); + testValidateDocument("invalid/link-rel-voicing-no-refines.opf", EPUBVersion.VERSION_3); + } + + @Test + public void testLinkRelVoicingWithNoMediaType() + { + // tests that 'voicing' links must have a 'media-type' attribute + expectedErrors.add(MessageId.RSC_005); + testValidateDocument("invalid/link-rel-voicing-no-type.opf", EPUBVersion.VERSION_3); + } + + @Test + public void testLinkRelVoicingWithMediaTypeNotAudio() + { + // tests that 'voicing' links must refer to resources with an audio mime type + expectedErrors.add(MessageId.RSC_005); + testValidateDocument("invalid/link-rel-voicing-not-audio.opf", EPUBVersion.VERSION_3); + } @Test public void testLink_ResourceInManifest() diff --git a/src/test/resources/30/single/opf/invalid/link-rel-voicing-no-refines.opf b/src/test/resources/30/single/opf/invalid/link-rel-voicing-no-refines.opf new file mode 100644 index 000000000..34cd1b43c --- /dev/null +++ b/src/test/resources/30/single/opf/invalid/link-rel-voicing-no-refines.opf @@ -0,0 +1,17 @@ + + + + xxx + Title + en + 2019-01-01T12:00:00Z + + + + + + + + + diff --git a/src/test/resources/30/single/opf/invalid/link-rel-voicing-no-type.opf b/src/test/resources/30/single/opf/invalid/link-rel-voicing-no-type.opf new file mode 100644 index 000000000..21e2d5cce --- /dev/null +++ b/src/test/resources/30/single/opf/invalid/link-rel-voicing-no-type.opf @@ -0,0 +1,17 @@ + + + + xxx + Title + en + 2019-01-01T12:00:00Z + + + + + + + + + diff --git a/src/test/resources/30/single/opf/invalid/link-rel-voicing-not-audio.opf b/src/test/resources/30/single/opf/invalid/link-rel-voicing-not-audio.opf new file mode 100644 index 000000000..1d0ef7177 --- /dev/null +++ b/src/test/resources/30/single/opf/invalid/link-rel-voicing-not-audio.opf @@ -0,0 +1,17 @@ + + + + xxx + Title + en + 2019-01-01T12:00:00Z + + + + + + + + + diff --git a/src/test/resources/30/single/opf/valid/link-rel-voicing.opf b/src/test/resources/30/single/opf/valid/link-rel-voicing.opf new file mode 100644 index 000000000..f1ab0d74d --- /dev/null +++ b/src/test/resources/30/single/opf/valid/link-rel-voicing.opf @@ -0,0 +1,17 @@ + + + + xxx + Title + en + 2019-01-01T12:00:00Z + + + + + + + + +