WSDL(SOAP 1.1、WSDL 1)に埋め込まれているXMLスキーマでのelementFormDefault="qualified/unqualified"
の意味を理解しようとしています。
たとえば、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>
プレーンXMLでは、「name」に指定された名前空間がないため、これは明らかに無効です。
<lib:person xmlns:lib="http://www.example.com/library">
<name>XML Schema</name>
</lib:person>
すべての要素が修飾されているため、これは明らかに有効ですが、
<lib:person xmlns:lib="http://www.example.com/library">
<lib:name>qualified xml</lib:name>
</lib:person>
しかし、驚くべきことに、libxmlは次も有効であると言っています:
<person xmlns="http://www.example.com/library">
<name>XML Schema</name>
</person>
質問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>
...
質問2:上記のように、WSDLにqualified
スキーマが含まれている場合、上記のリクエストは有効ですか? (プレーンSOAP、WS-I基本プロファイルは無視)
質問3WS-I Basicプロファイル(特に 4.1.13 SOAP Body and Namespaces )上記のリクエストはまだ有効ですか?(person
は「名前空間修飾」と見なされますか?)
スキーマで「修飾」を指定することは、ほとんどの場合正しいことですが、ローカル要素宣言(xs:complexType内のxs:element)がスキーマのターゲット名前空間の要素を参照することを意味します。それがないと、名前空間のない要素を参照します。
したがって、修飾された場合、あなたの場合、name要素は名前空間 http://www.example.com/library にある必要があります。次のいずれかの場合、この名前空間になります
(a)この例のように、この名前空間に明示的に配置します。
<lib:person xmlns:lib="http://www.example.com/library">
<lib:name>qualified xml</lib:name>
</lib:person>
(b)または、次の例のように、デフォルトの名前空間を使用します。
<person xmlns="http://www.example.com/library">
<name>qualified xml</name>
</person>