From 392c2f68fbf09d1e5a174a758d337c2fe498ba53 Mon Sep 17 00:00:00 2001 From: MURATA Makoto Date: Mon, 10 Jul 2017 18:33:45 +0900 Subject: [PATCH] Allow xml:lang="" by replacing datatype.languagecode by datatype.languagecode | string "". (#778) * Allow xml:lang="" by replacing datatype.languagecode by datatype.languagecode | string "". * Add test for schema changes for empty lang attribute fixes #777 --- .../com/adobe/epubcheck/schema/30/mod/datatypes.rnc | 2 +- .../epubcheck/schema/30/mod/html5/html5-attrib-30.rnc | 6 +++--- .../epubcheck/schema/30/mod/html5/html5-embed-30.rnc | 2 +- .../java/com/adobe/epubcheck/ops/OPSCheckerTest.java | 7 +++++++ .../30/single/xhtml/valid/issue777-empty-lang.xhtml | 11 +++++++++++ 5 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 src/test/resources/30/single/xhtml/valid/issue777-empty-lang.xhtml diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/datatypes.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/datatypes.rnc index f90a81cc4..eacaa4c09 100644 --- a/src/main/resources/com/adobe/epubcheck/schema/30/mod/datatypes.rnc +++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/datatypes.rnc @@ -6,7 +6,7 @@ div { datatype.languagecode = datatype.BCP47 # http://www.w3.org/TR/xmlschema11-2/#language - datatype.BCP47 = xsd:language { pattern = "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*" } + datatype.BCP47 = xsd:language # http://www.w3.org/TR/xmlschema11-2/#ID datatype.ID.xsd = xsd:ID # http://www.w3.org/TR/xmlschema11-2/#NCName diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-attrib-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-attrib-30.rnc index e18a99a2a..b6c566334 100644 --- a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-attrib-30.rnc +++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-attrib-30.rnc @@ -9,8 +9,8 @@ - html5.lang.attr = attribute lang { datatype.languagecode } - html5.xml.lang.attr = attribute xml:lang { datatype.languagecode } + html5.lang.attr = attribute lang { datatype.languagecode | string "" } + html5.xml.lang.attr = attribute xml:lang { datatype.languagecode | string "" } html5.dir.attr = attribute dir { 'ltr' | 'rtl' | 'auto' } html5.id.attr = attribute id { datatype.html5.token } html5.title.attr = attribute title { string } @@ -19,7 +19,7 @@ html5.xml.space.attr = attribute xml:space { 'preserve' | 'default' } html5.href.attr = attribute href { datatype.html5.URL.spaces } - html5.hreflang.attr = attribute hreflang { datatype.languagecode } + html5.hreflang.attr = attribute hreflang { datatype.languagecode | string ""} html5.target.attr = attribute target { datatype.html5.browsing.context.name.or.keyword } html5.rel.attr = attribute rel { datatype.html5.space.separated.tokens } html5.media.attr = attribute media { datatype.html5.media.query } diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-embed-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-embed-30.rnc index 53d793c69..9bbe68a78 100644 --- a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-embed-30.rnc +++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-embed-30.rnc @@ -37,7 +37,7 @@ & html5.track.srclang.attr? & html5.track.label.attr? html5.track.kind.attr = attribute kind { 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata' } - html5.track.srclang.attr = attribute srclang { datatype.languagecode } + html5.track.srclang.attr = attribute srclang { datatype.languagecode | string "" } html5.track.label.attr = attribute label { datatype.string } html5.track.default.attr = attribute default { 'default' | '' } diff --git a/src/test/java/com/adobe/epubcheck/ops/OPSCheckerTest.java b/src/test/java/com/adobe/epubcheck/ops/OPSCheckerTest.java index b9addd56e..42d58830a 100644 --- a/src/test/java/com/adobe/epubcheck/ops/OPSCheckerTest.java +++ b/src/test/java/com/adobe/epubcheck/ops/OPSCheckerTest.java @@ -928,4 +928,11 @@ public void testValidateXHTMLEmptyClass_EPUB2_Valid() EPUBVersion.VERSION_2); } + @Test + public void testValidateEmptyLangAttribute_EPUB3_Valid() + { + testValidateDocument("xhtml/valid/issue777-empty-lang.xhtml", "application/xhtml+xml", + EPUBVersion.VERSION_3); + } + } diff --git a/src/test/resources/30/single/xhtml/valid/issue777-empty-lang.xhtml b/src/test/resources/30/single/xhtml/valid/issue777-empty-lang.xhtml new file mode 100644 index 000000000..6228b9a7e --- /dev/null +++ b/src/test/resources/30/single/xhtml/valid/issue777-empty-lang.xhtml @@ -0,0 +1,11 @@ + + + + + Allow empty lang attribute + + +

This para has an empty lang attribute which was invalid prior to v4.1

+

Details: https://github.com/IDPF/epubcheck/issues/777

+ + \ No newline at end of file