我在http://msdn.microsoft.com/en-us/library/ms996486.aspx上找到了关于WSDL的这篇非常有用的文章,正如SO在其他帖子中的推荐。
但是我想知道,如果这个例子中没有错误。
这是(简化)架构:
<xs:schema
targetNamespace="http://example.org/math/types/"
xmlns="http://example.org/math/types/"
>
<xs:complexType name="MathInput">
<xs:sequence>
<xs:element name="x" type="xs:double"/>
<xs:element name="y" type="xs:double"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Add" type="MathInput"/>
</xs:schema>
这是实例(用SOAP覆盖):
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
>
<SOAP-ENV:Body>
<m:Add xmlns:m="http://example.org/math/types/">
<x>3.14159265358979</x>
<y>3.14159265358979</y>
</m:Add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我的不确定性是关于&lt; x&gt;。和&lt; y&gt;元素。是o.k.他们是不合格的?
[更新] XML实例是否会针对给定的Schema进行验证?
答案 0 :(得分:2)
这是一种非常规的XML设计,我不喜欢它,但它完全有效。模式没有指定elementFormDefault =“Qualified”,因此本地元素x和y没有名称空间。
答案 1 :(得分:0)
这取决于你想要什么。 如果我对你的XML执行以下Xpath:
//*[namespace-uri()='http://example.org/math/types/' and local-name()='x']
不会返回任何元素。
如果我按如下方式更改XML: -
<m:x>3.14159265358979</m:x>
将返回该元素。
如果你想让X和Y不合格,像这样的X路会将它们挖出来: -
//*[namespace-uri()='http://example.org/math/types/' and local-name()='Add']/x