我在libxmljs存储库上发布了一个问题并且它已关闭,因为他们认为这不是lib级别的问题 . 所以我在这里发布 .
我正在尝试使用OASIS提供的XML架构验证XLIFF文件,但我一直收到XSD错误 .
错误:在Document.validate(/Users/fluxb0x/Tests/xliff_parser/node_modules/libxmljs/lib/document.js:73:17)处的Request._callback(/ Users / fluxb0x / Tests / xliff_parser / main)中的XSD架构无效 . JS:25:21)在Request.self.callback(/Users/fluxb0x/Tests/xliff_parser/node_modules/request/request.js:199:22)在Request.emit(events.js:98:17)在请求 . (/Users/fluxb0x/Tests/xliff_parser/node_modules/request/request.js:1160:14)在Request.emit(events.js:117:20)在IncomingMessage . (/Users/fluxb0x/Tests/xliff_parser/node_modules/request/request.js:1111:12)在IncomingMessage.emit(events.js:117:20)在_stream_readable.js:938:16在process._tickCallback(节点 . JS:419:13)
我使用Oxygen XML编辑器测试验证,它没有问题 .
这是我导出的XLIFF文件:en.xliff
这是OASIS提供的XSD文件:xliff_schema.xsd
相当大的文件 .
感谢您的帮助 .
2 回答
如果XSD架构包含具有filesystem-relative
schemaLocation
属性的xsd:import
元素,则libxmljs.parseXml()
函数接受baseUrl
选项,该选项可用于设置这些属性的位置 .这避免了临时更改工作目录的需要 . 注意尾随斜线 .
正如您在libxmljs bug tracker上所述,
libxmljs
在使用导入另一个的模式文件验证XML时会引发错误 .发生这种情况是因为schemaLocation中的相对路径是在进程当前工作目录上计算的 . workaround 正在验证之前更改目录:
我不确定
libxml
如何处理这个:也许引用的文件是同步加载的,我想这是次优的 .此解决方法仅适用于本地文件,我不知道如何解决远程schemaLocation,如您的示例(
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
)即使它不是一个真正的解决方案,我认为这可能会有所帮助 .