SOAP 1.1 encodingStyle属性验证错误

时间:2013-07-25 14:07:49

标签: soap xml-validation xsd-validation

查看SOAP 1.1规范(http://www.w3.org/TR/2000/NOTE-SOAP-20000508/)和相应的XSD(http://schemas.xmlsoap.org/soap/envelope/),我发现encodingStyle属性不匹配。

此W3C注释中有许多示例,显示了encodingStyle属性的用法,例如:

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
       <m:GetLastTradePrice xmlns:m="Some-URI">
           <symbol>DIS</symbol>
       </m:GetLastTradePrice>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

此外,第4.1.1节说:

The SOAP encodingStyle global attribute can be used to indicate the serialization rules 
used in a SOAP message. This attribute MAY appear on any element, and is scoped to that
element's contents and all child elements not themselves containing such an attribute, 
much as an XML namespace declaration is scoped. 

但是,XSD 不允许在信封中使用encodingStyle属性,也不允许使用标题元素:

<xs:complexType name="Envelope">
    <xs:sequence>
        <xs:element ref="tns:Header" minOccurs="0"/>
        <xs:element ref="tns:Body" minOccurs="1"/>
        <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
    </xs:sequence>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>

如您所见,有一个XSD通配符“## other”,表示允许来自OTHER THAN目标命名空间的任何属性。但是,示例中的目标命名空间是相同的,因此示例不应该是有效的。另外做一个快速测试可以验证这一点:尝试验证包含此soap示例的xml文档将导致失败(在Intellij Idea中测试)。

有人能告诉我,W3C笔记中是否有错误,在XSD中,还是我遗漏了什么? 提前谢谢。

0 个答案:

没有答案