xml soap xsd wsdl xml-namespaces

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"?)