如果XSD定义了targetNamespace,是否可以验证没有命名空间的XML文档?

时间:2014-09-18 02:59:14

标签: xml namespaces xml-namespaces jaxb2 xsd-validation

我正在重写的遗留应用程序现在定义了有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消息仍能成功验证模式的情况或选项吗?我有点怀疑(我认为它不应该,这正是模式定义命名空间的原因)但是,它是否可能?如果没有,我的最简单的解决方案是从XSD中删除targetNamespace声明,它不会改变,它将被废弃。

1 个答案:

答案 0 :(得分:0)

您的实例对架构无效,因为它使用不同的命名空间。

它几乎是有效的,如果你说的命名空间是唯一的区别;如果要对这种差异进行折扣,则必须在验证之前更改实例,或者更改架构。两者都可以使用XSLT轻松完成;更改实例可能更容易。