Entendiendo elementFormDefault calificado/no calificado al validar xml contra un WSDL(esquema xsd)
soap xml-namespaces (1)
Especificar "calificado" en el esquema, que es casi siempre lo correcto, significa que las declaraciones de elementos locales (xs: elemento dentro de xs: complexType) se refieren a elementos en el espacio de nombres de destino del esquema. Sin ella, se refieren a elementos en ningún espacio de nombres.
De modo que, en su caso, calificado, el elemento de nombre debe estar en el espacio de nombres http://www.example.com/library . Estará en este espacio de nombres si cualquiera
(a) lo pones explícitamente en este espacio de nombres, como en este ejemplo:
<lib:person xmlns:lib="http://www.example.com/library">
<lib:name>qualified xml</lib:name>
</lib:person>
(b) o utiliza un espacio de nombres predeterminado, como en este ejemplo:
<person xmlns="http://www.example.com/library">
<name>qualified xml</name>
</person>
Estoy tratando de entender las implicaciones de elementFormDefault="qualified/unqualified"
en un esquema XML que está incrustado en WSDL (SOAP 1.1, WSDL 1).
Por ejemplo tengo este esquema dentro de 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 plano, esto obviamente no es válido porque "nombre" no tiene un espacio de nombres especificado:
<lib:person xmlns:lib="http://www.example.com/library">
<name>XML Schema</name>
</lib:person>
Si bien esto es obviamente válido porque todos los elementos están calificados:
<lib:person xmlns:lib="http://www.example.com/library">
<lib:name>qualified xml</lib:name>
</lib:person>
Pero sorprendentemente libxml dice que lo siguiente también es válido:
<person xmlns="http://www.example.com/library">
<name>XML Schema</name>
</person>
Pregunta 1 : asumí que qualified
significaba que <person>
debería verse como <lib:person xmlns:lib="...">
. ¿Pero los resultados parecen indicar que el atributo xmlns
hace lo mismo?
Ahora suponga que el XML anterior es parte de una solicitud SOAP, por ejemplo
...
<s:Body>
<person xmlns="http://www.example.com/library">
<name>XML Schema</name>
</person>
</s:Body>
...
Pregunta 2 : ¿Es válida la solicitud anterior si el WSDL contiene un esquema qualified
como se muestra arriba? (SOAP simple, sin tener en cuenta el perfil básico WS-I)
Pregunta 3 Cuando considero que el perfil WS-I Basic (especialmente 4.1.13 Cuerpo de SOAP y espacios de nombres ) ¿la solicitud anterior sigue siendo válida? (¿la person
es considerada "espacio de nombres calificado"?)