为蚂蚁`schemavalidate`任务启用xinclude处理

时间:2016-05-24 10:52:54

标签: java ant xinclude

我正在使用Ant的schemavalidate任务来验证XML文档。

<schemavalidate
    noNamespaceFile="${user.input.xsd}" file="${user.input.xml}">
</schemavalidate>

这可以按预期工作。但现在我使用XInclude的架构文件如下:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include href="..." xpointer="xmlns(xs=http://www.w3.org/2001/XMLSchema)xpointer(/xs:schema/xs:*)"/>
</xs:schema>

这在Ant中出现以下错误:

  

foo.xsd:8:136:s4s-elt-schema-ns:元素“include”的名称空间必须来自模式命名空间“http://www.w3.org/2001/XMLSchema”。

现在我尝试通过启用相应的功能启用XInclude处理:

<schemavalidate
    noNamespaceFile="${user.input.xsd}" file="${user.input.xml}">
  <attribute name="http://apache.org/xml/features/xinclude" value="true"/>
</schemavalidate>

但这没有用,错误信息保持不变。该功能似乎被解析器识别,因为当我更改属性元素以使用某些不存在的功能时,我会收到相应的错误消息,例如

  

Parser org.apache.xerces.jaxp.SAXParserImpl $ JAXPSAXParser无法识别功能http://apache.org/xml/features/xinclud

是否可以在此处启用XInclude处理?

编辑1

启用Ant调试模式时,我可以看到该功能设置正确:

[schemavalidate] Using SAX2 reader org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser
[schemavalidate] Setting feature http://xml.org/sax/features/validation=true
[schemavalidate] Setting feature http://apache.org/xml/features/xinclude=true
[schemavalidate] Setting feature http://xml.org/sax/features/namespaces=true
[schemavalidate] Setting feature http://apache.org/xml/features/validation/schema=true
[schemavalidate] Setting feature http://apache.org/xml/features/validation/schema-full-checking=true
[schemavalidate] Validating foo.xml...

0 个答案:

没有答案