使用Apache Daffodil解析NITF转XML遇Schema错误如何解决?
解决Apache Daffodil解析NITF文件的schemaLocation错误
问题根源
主schema文件nitf.dfdl.xsd中对依赖schema的引用使用了带包层级的路径(com/tresys/nitf/xsd/xxx),但实际所有schema文件都平放在同一目录,导致Daffodil无法按指定路径找到依赖文件。
解决方法
方法一:修改schema内的路径引用
- 打开
nitf.dfdl.xsd,找到所有引用nitf_common_types.dfdl.xsd和nitf_extension_types.dfdl.xsd的语句,例如:<xs:import namespace="..." schemaLocation="com/tresys/nitf/xsd/nitf_common_types.dfdl.xsd"/> - 将
schemaLocation的值修改为直接的文件名,去掉前缀路径,改为:<xs:import namespace="..." schemaLocation="nitf_common_types.dfdl.xsd"/> - 对另一个依赖schema的引用做同样修改,保存文件后重新执行解析命令。
方法二:匹配schemaLocation的目录结构存放文件
- 在
daffodil.bat所在目录下创建目录结构:com\tresys\nitf\xsd(Windows系统用反斜杠) - 将
nitf_common_types.dfdl.xsd和nitf_extension_types.dfdl.xsd移动到该目录中 - 保持
nitf.dfdl.xsd在原目录,重新执行解析命令。
方法三:命令行指定schema搜索路径
执行解析命令时添加--schema-path参数,指定当前目录为schema搜索路径:
.\daffodil.bat parse --schema nitf.dfdl.xsd --schema-path . 2301573_3.ntf
该参数会让Daffodil在指定路径下查找所有依赖schema,忽略原schemaLocation中的路径结构。
内容的提问来源于stack exchange,提问作者Rina Tse
相关产品推荐
相关产品推荐

