使用Saxon命令行批量验证多类型DITA XSD 1.1文件遇阻求助
解决Saxon命令行批量验证混合类型DITA文件的问题
问题概述
批量验证DITA文件时遇到两个核心问题:
-s选项指定文件夹无法生效,无法自动遍历文件- 通配符指定文件仅支持单一主题类型,混合task/concept等主题时,非首个主题类型的文件会报元素未定义错误
解决方案
1. 解决-s文件夹指定无效的问题
Saxon的Validate命令不会自动遍历文件夹内的文件,需使用通配符模式明确匹配目标文件:
- 仅匹配当前目录下的DITA文件:
-s:"C:\Tools\SaxonEE11-3J\garage\tasks\*.dita" - 递归遍历所有子目录的DITA文件(需使用PowerShell执行,CMD不支持
**递归通配符):-s:"C:\Tools\SaxonEE11-3J\garage\tasks\**\*.dita" - 若必须使用CMD,可通过循环逐个验证文件:
for /r "C:\Tools\SaxonEE11-3J\garage\tasks" %f in (*.dita) do 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 "%f"
2. 解决混合主题类型验证失败的问题
错误XQDY0084: Cannot validate <Q{}concept>: no element declaration available的根源是:Saxon默认在单次验证会话中复用已加载的Schema组件。当第一个文件加载了task主题的Schema后,后续concept文件指定的Schema会被忽略,导致上下文无concept元素定义。
需添加两个关键参数修复:
-repeat:on:强制为每个待验证文件启动独立的验证会话,重新加载对应主题的Schema-multipleSchemaImports:on:解决重复导入Schema的警告,确保不同主题的Schema能正确加载
修改后的完整命令(PowerShell环境)
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 ^ -repeat:on ^ -multipleSchemaImports:on ^ -s:"C:\Tools\SaxonEE11-3J\garage\tasks\**\*.dita"
关键说明
-repeat:on会增加一定性能开销,但对于数千个文件的场景,仍是比逐个手动验证高效的方案- 确保使用的Saxon版本支持
-repeat参数(Saxon EE 11.x版本已支持) - 若使用DITA Catalog文件,需确保其能正确解析所有主题类型的Schema urn(如
urn:oasis:names:tc:dita:xsd:concept.xsd:1.3)
内容的提问来源于stack exchange,提问作者Diane
相关产品推荐
相关产品推荐

