Fel*_*arz 17 xml xsd soap wsdl xml-namespaces
我试图理解elementFormDefault="qualified/unqualified"
嵌入在WSDL(SOAP 1.1,WSDL 1)中的XML模式的含义.
例如,我在WSDL中有这个模式:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.example.com/library">
<xsd:element name="person">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)
在纯XML中,这显然是无效的,因为"name"没有指定的命名空间:
<lib:person xmlns:lib="http://www.example.com/library">
<name>XML Schema</name>
</lib:person>
Run Code Online (Sandbox Code Playgroud)
虽然这显然是有效的,因为所有元素都是合格的:
<lib:person xmlns:lib="http://www.example.com/library">
<lib:name>qualified xml</lib:name>
</lib:person>
Run Code Online (Sandbox Code Playgroud)
但令人惊讶的是libxml说以下内容也是有效的:
<person xmlns="http://www.example.com/library">
<name>XML Schema</name>
</person>
Run Code Online (Sandbox Code Playgroud)
问题1:我认为qualified
意思<person>
应该是这个样子<lib:person xmlns:lib="...">
.但结果似乎表明该xmlns
属性是一样的?
现在假设上面的XML是SOAP请求的一部分,例如
...
<s:Body>
<person xmlns="http://www.example.com/library">
<name>XML Schema</name>
</person>
</s:Body>
...
Run Code Online (Sandbox Code Playgroud)
问题2:如果WSDL包含qualified
上面显示的模式,请求上面的请求是否有效?(普通SOAP,无视WS-I基本配置文件)
问题3当我考虑WS-I Basic配置文件(特别是4.1.13 SOAP Body和Namespaces)时上述请求是否仍然有效?(被person
认为是"命名空间合格"?)
Mic*_*Kay 21
在模式中指定"qualified",这几乎总是正确的做法,意味着局部元素声明(xs:xs:complexType中的元素)引用模式的目标命名空间中的元素.没有它,它们引用没有命名空间的元素.
因此,对于您的情况,name元素必须位于名称空间http://www.example.com/library中.它将在此命名空间中
(a)您明确地将它放在此命名空间中,如下例所示:
<lib:person xmlns:lib="http://www.example.com/library">
<lib:name>qualified xml</lib:name>
</lib:person>
Run Code Online (Sandbox Code Playgroud)
(b)或者您使用默认命名空间,如下例所示:
<person xmlns="http://www.example.com/library">
<name>qualified xml</name>
</person>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21557 次 |
最近记录: |