我正在重写的遗留应用程序现在定义了具有 XSD 的入站 XML 消息。
架构看起来像:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/myapp">
<xsd:element name="my-root">...</xsd:element>
但是,XML 消息不包含 xmlns
声明。他们直接以<my-root>
开始, 不适用于 <myns:my-root xmlns:myns="http://www.example.com/myapp">
.除此之外,结构是正确的。
新应用将使用 JAXB2(可以使用其他应用,如果需要,我们使用 Spring O/X)。
现在的问题与标题中的相同:没有命名空间声明的 XML 消息在哪些情况下或选项仍然可以根据模式成功验证?我有点怀疑(我认为不应该,这正是模式定义 namespace 的原因),但是,这可能吗?如果没有,就我而言,最简单的解决方案是删除 targetNamespace
来自 XSD 的声明,它不会改变并且会被废弃。
最佳答案
您的实例对架构无效,因为它使用了不同的命名空间。
这几乎是有效的,如果正如您所说的命名空间是唯一的区别;如果您想消除这种差异,则必须在验证之前更改实例,或者更改模式。两者都可以使用 XSLT 轻松完成;更改实例可能更容易。
关于xml - 如果 XSD 定义了 targetNamespace,是否可以验证没有命名空间的 XML 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25903475/