将anyType与未定义的XML命名空间一起使用是否合法?

时间:2018-03-20 11:36:54

标签: xml

我们使用GSoap发送SOAP请求,并处理响应。但是,我们遇到了一个问题,因为远程服务器使用包含以下内容的XML回复:

< ax21:attributes xsi:type =" axis2ns9259:anyType">

ax21名称空间和xsi名称空间在上面的元素中定义,这很好(xsi是"标准" xmlns:xsi =" http://www.w3 .ORG / 2001 / XMLSchema的实例&#34)。但是,axis2ns9259命名空间是未知的(据我所知 - 在文档中的任何地方都没有提到它)。 GSoap并不喜欢它,并退出时出现错误,告诉我们类型不匹配。

然而,阅读XML规范,似乎" anyType" type存在于所有名称空间中(事实上,它是该名称空间的类型层次结构的" root" ur-type)。此类型接受ANYTHING(任意数量的元素和/或属性)

所以,我想知道:GSoap是否太严格"在这里,或者服务器是否应该定义这个命名空间,即使我们应该能够知道这种类型是什么?

我们不知道我们是否应该"纠正"我们的代码(也就是说,可能是屠夫GSoap以便它接受这个),或者责怪服务器发送错误的XML(格式正确,但无效 - 实际上,他们甚至不提供XSD或DTD)

1 个答案:

答案 0 :(得分:0)

这不是架构有效的。规则在XML Schema 1.0第1部分第1.3.3节中:

  

4如果元素中有属性信息项   信息项的[attributes]与[namespace name]相同   http://www.w3.org/2001/XMLSchema-instance和[本地名称]   类型,然后所有以下必须为真:

     

4.1对于内置的QName简单类型,该属性信息项的规范化值必须是·有效的,如   字符串有效(§3.14.4);

在您的示例中,xsi:type不是有效的QName,因为前缀尚未声明。

(我似乎记得在过去使用Axis生成的命名空间时遇到很多麻烦。)