Comprendre elementFormDefault qualifié / non qualifié lors de la validation de xml par rapport à un WSDL (schéma xsd)
Je suis en train d'essayer de comprendre les implications de elementFormDefault="qualified/unqualified"
dans un schéma XML qui est intégré dans WSDL (SOAP 1.1, WSDL 1).
Par exemple, j'ai ce schéma à l'intérieur d'un 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>
En XML en clair, ce n'est évidemment pas valide car "nom" n'a pas d'espace de noms spécifié:
<lib:person xmlns:lib="http://www.example.com/library">
<name>XML Schema</name>
</lib:person>
tout cela est évidemment valable, car tous les éléments sont qualifiés:
<lib:person xmlns:lib="http://www.example.com/library">
<lib:name>qualified xml</lib:name>
</lib:person>
Mais étonnamment libxml dit que celui-ci est également valable:
<person xmlns="http://www.example.com/library">
<name>XML Schema</name>
</person>
Question 1: je suppose que qualified
signifiait <person>
devrait ressembler à quelque chose comme <lib:person xmlns:lib="...">
. Mais les résultats semblent indiquer que la xmlns
attribut fait la même chose?
Supposons maintenant que le XML ci-dessus fait partie d'une requête SOAP, par exemple
...
<s:Body>
<person xmlns="http://www.example.com/library">
<name>XML Schema</name>
</person>
</s:Body>
...
Question 2: la demande Est-elle au-dessus valide si le WSDL contient un qualified
schéma, comme affiché ci-dessus? (SAVON ordinaire, en faisant abstraction de WS-I basic profile)
Question 3 Lorsque je considère WS-I Basic profile (surtout 4.1.13 SAVON Corps et les espaces de noms) est la requête ci-dessus est valide? (est person
considéré comme "espace de noms qualifiés"?)
source d'informationauteur Felix Schwarz
Vous devez vous connecter pour publier un commentaire.
En précisant "qualifiés" dans le schéma, ce qui est presque toujours la bonne chose à faire, signifie que les déclarations d'élément (xs:element dans xs:complexType) renvoie à des éléments dans l'espace de noms cible du schéma. Sans cela, ils se réfèrent à des éléments dans aucun espace de noms.
Donc qualifié, dans votre cas, le nom de l'élément doit être dans l'espace de noms http://www.example.com/library. Il sera dans cet espace de noms si
(a) explicitement le mettre dans cet espace de noms, comme dans cet exemple:
(b) ou d'utiliser un espace de noms par défaut, comme dans cet exemple: