[XML] Polymorphisme

Froggy

fake geek
Bonjour les gens,

Je viens demander un petit coup de main à des gars qui connaitrait un peu XML et l'utilisation des XSD.

donc voici le contexte:
Je suis sensé définir l'interface d'un webservice à travers un XSD. J'ai donc défini mes "objets" dans un XSD et je les ai utilisées dans un autre qui défini l'interface IN du service. Le problème c'est quand j'essaye de valider un fichier XML par rapport à cette interface. Impossible de faire passer un enfant pour un parent. En gros, on dirati qu'il n'y a pas moyen de faire du polymorphisme avec XML, ce qui me semble un peu gros...

Le schéma des objets:
PHP:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:test="http://www.ing.be/test" targetNamespace="http://www.test.be/test" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:complexType name="ClassA">
        <xs:sequence>
            <xs:element name="elemA" type="xs:integer"/>
        </xs:sequence>
        <xs:attribute name="AttA" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="ClassB">
        <xs:complexContent>
            <xs:extension base="test:ClassA">
                <xs:sequence>
                    <xs:element name="elemB" type="xs:integer"/>
                </xs:sequence>
                <xs:attribute name="AttB" type="xs:string"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>
Le schéma de l'interface:
PHP:
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2008 rel. 2 sp1 (http://www.altova.com) by AppsPortables (Aplicaciones Portables) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:test="http://www.ing.be/test" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:import namespace="http://www.test.be/test" schemaLocation="ObjectSchemaTest.xsd"/>
    <xs:complexType name="Message">
        <xs:sequence>
            <xs:element name="A" type="test:ClassA" minOccurs="1" maxOccurs="1"/>
            <xs:element name="B" type="test:ClassB" minOccurs="1" maxOccurs="1"/>
            <xs:element name="A" type="test:ClassA" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="testElem" type="Message"/>
</xs:schema>
Et le fichier XML que j'essaye de valider:
PHP:
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2008 rel. 2 sp1 (http://www.altova.com)-->
<testElem xsi:noNamespaceSchemaLocation="MessageSchemaTest.xsd" xmlns:test="http://www.test.be/test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <A AttA="String">
        <test:elemA>0</test:elemA>
    </A>
    <B AttA="String" AttB="String">
        <test:elemA>0</test:elemA>
        <test:elemB>0</test:elemB>
    </B>
    <B AttA="String">
        <test:elemA>0</test:elemA>
        <test:elemB>0</test:elemB>
    </B>
</testElem>
Je remercie d'avance tous les zozos qui pourront m'aider! :love:
 
Haut