[英]Using the command line to validate multiple DITA XSD 1.1 files (folder) using Saxon
当我运行 Saxon 命令行来验证多个 DITA 文件时:
a) 对文件夹使用 -s 选项不起作用。 b) 对文件使用通配符可以,但仅限于单一主题类型:
C:\Users\542470>java -cp C:\Tools\SaxonEE11-3J\saxon-ee-11.3.jar com.saxonica.Validate -catalog:C:\Tools\dita-schemas\catalog-dita.xml -xi:on -xsiloc:on -xsdversion:1.1 "C:\Tools\SaxonEE11-3J\garage\tasks\*"
Saxon license expires in 25 days
Warning at xs:import on line 42 column 73 of softwareDomain.xsd:
SXWN9018 The schema document at urn:oasis:names:tc:dita:xsd:xml.xsd:1.3 is not being read
because schema components for this namespace are already available
Warning at xs:import on line 42 column 73 of uiDomain.xsd:
SXWN9018 The schema document at urn:oasis:names:tc:dita:xsd:xml.xsd:1.3 is not being read
because schema components for this namespace are already available
Warning at xs:import on line 63 column 73 of commonElementMod.xsd:
SXWN9018 The schema document at urn:oasis:names:tc:dita:xsd:xml.xsd:1.3 is not being read
because schema components for this namespace are already available
Warning at xs:import on line 31 column 78 of topicMod.xsd:
SXWN9018 The schema document at urn:oasis:names:tc:dita:xsd:ditaarch.xsd:1.3 is not being
read because schema components for this namespace are already available. To force the
schema document to be read, set --multipleSchemaImports:on
Error on line 13 column 11 of garagetaskoverview.dita:
XQDY0084 One validation error was reported: Cannot validate <Q{}**concept**>: no element
declaration available
在这种情况下,所有主题都经过验证没有错误,但主题未被识别。 我正在使用 DITA-OT/Oxygen garage DITA 示例来测试命令行。 验证单个 DITA 文件不会出现问题。 只有在同一文件夹中混合 DITA 主题类型时才会发生这种情况。
使用的 DITA 主题类型:
<concept id="taskconcept" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:oasis:names:tc:dita:xsd:concept.xsd:1.3"
xml:lang="en-US">...
<task id="changeoil" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:oasis:names:tc:dita:xsd:task.xsd:1.3"
xml:lang="en-US">...
注意:拥有数千个文件会消除列出要验证的文件的选项。
所有 DITA XML 模式都没有命名空间,如果 Saxon 有某种模式缓存,一旦它为第一个验证任务加载“urn:oasis:names:tc:dita:xsd:task.xsd:1.3”模式,它考虑到没有命名空间它已经有一个架构,因此它可能会重新使用“task.xsd”的架构来验证概念文件。 我没有看到避免在命令行中使用此架构缓存的设置。 也许您可以尝试在 Windows bat 文件中使用“for”循环迭代文件夹中的所有文件,并为每个文件运行验证过程,而不是对整个文件夹运行验证。 您也可以直接在 Saxonica 用户列表上询问有关此缓存的建议。
我不是 DITA 专家,但我认为所有 DITA 模式模块都相互兼容,因为您可以将任何选择的模块组合到一个模式中。 例如,您可以为要使用的 DITA 模块的任何子集编写一个包含xs:include
的模式文档。 我建议在 Saxon validate 命令的 -xsd 选项中使用这样的复合模式。
或者,尝试使用选项 --multipleSchemaImports:on - 这应该会导致 Saxon 为特定命名空间(或 null 命名空间)加载模式模块,即使它已经加载了该命名空间的模式模块。 (但请注意,如果两个模式模块具有重叠定义,这可能会导致失败——我不知道这是否适用于 DITA。)
但是,如果您编写一个小的 Java 应用程序来重复调用 Saxon,而不是尝试从命令行在单个命令中执行所有操作,那么您将对这样的任务有更多的控制权。
我终于在批处理文件中做了一个“for 循环”。
命令行:batch-validate C:\XML-WORK\repair\DITA-xsd\topics > testlog.txt 2> testerrors.txt
批处理文件命令:对于 (*) 中的 %%i,执行 java com.saxonica.Validate -catalog:C:\Tools\dita-schemas\catalog-dita.xml -xi:on -xsiloc:on -xsdversion:1.1 %%我
注意:将类路径设置为 Saxon,并将 Dir (CD) 更改为要在运行批处理文件之前验证的文件夹
验证大约 4,000 个文件花费了 3 个多小时。 我使用的是 Saxon 的试用版。 如果这始终是预期的结果,则使用批处理文件是不可行的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.