You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:46:04