我正在编写 DocBook 5 文档,并希望根据 RELAXNG 和 Schematron 模式对其进行全面验证。
这是我尝试过的:
- 据我所知,libxml2 包中的 xmllint 无法处理嵌入了 Schematron 的 RELAXNG 模式,并且独立的 schematron 模式(
docbook.sch
)无法根据 xmllint 成功编译。 - MSV 似乎可以处理所有事情,但我没有使用
relames
JAR(我使用的是 2013.6.1),所以我不确定它是否正在执行嵌入式 Schematron。 - JNVDL 似乎也能起作用,尽管它给了我一个验证错误,告诉我我在文档中多次使用了一个 ID,而事实上我只使用了一次。
如何根据 RELAXNG 和 Schematron 模式全面验证我的 DocBook 5 文档?
答案1
有点尴尬,我没有早点注意到这一点,但我想出了一些办法。我还没有找到一种能够正确处理嵌入 Schematron 的单个 RELAXNG 模式的验证方法,但我已经找到了一种正确验证 DocBook 5 文档的方法。
事实证明,DocBook 5.0 不使用 Schematron 的 ISO 标准,而是使用 Schematron 1.5。因此,我尝试使用 ISO Schematron 资源提取和验证 Schematron 规则失败了。使用 XSL 脚本和方法http://www.topologi.com/resources/schtrn_xsd_paper.html#Processing(确保获取与 Schematron 1.5 兼容的过时文件 RNG2Schtrn.xsl 和 XSD2Schtrn.xsl)成功。
要点是:
使用 XSL 文件 (
RNG2Schtrn.xsl
) 从 RELAXNG 架构中提取 Schematron 1.5 规则使用 Schematron 1.5 验证 XSL 文件(
schematron-basic.xsl
位于http://xml.ascc.net/schematron/1.5/basic1-5/schematron-basic.html) 根据 Schematron 规则为 DocBook 文档创建验证 XSL 文件。使用步骤 2 中创建的验证 XSL 处理 DocBook 文档并在输出中查找错误。
使用可以处理 RELAXNG 模式的工具来验证 DocBook 文档的其余部分。