Bonjour!

Là je sèche... Je n'arrive pas à étendre la définition d'un type dans un schéma, de manière à ce qu'un élément puisse contenir d'autres éléments que son type initial...

Je vais illustrer par un exemple. J'ai élagué les deux schémas en cause Smiley cligne .

Schéma a.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="typeA">
        <xs:choice maxOccurs="unbounded">
            <xs:element ref="a1"/>
            <xs:element ref="a2"/>
        </xs:choice>
    </xs:complexType>
    
    <xs:element name="a1"/>
    <xs:element name="a2"/>
    
</xs:schema>


Schéma b.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:redefine schemaLocation="a.xsd">
        <xs:complexType name="typeA">
            <xs:complexContent>
                <xs:extension base="typeA">
                    <xs:choice maxOccurs="unbounded">
                        <xs:element ref="b"/>
                    </xs:choice>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:redefine>
    
    <xs:element name="racine" type="typeA"/>
    <xs:element name="b"/>
</xs:schema>


Avec cette définition, le fichier suivant est valide:

<racine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="b.xsd">
<a1>hh</a1><a2>k</a2><b>jj</b><b>jjj</b>
</racine>


J'aimerais que les fichiers suivants soient aussi valides:

<racine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="b.xsd">
<a1>hh</a1>[b]<b>bla</b>[/b]<a2>k</a2><b>jj</b>
</racine>

et

<racine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="b.xsd">
[b]<b>bla</b>[/b]<a2>k</a2><b>jj</b>
</racine>



... Bref, aboutir à une définition équivalente à

<xs:complexType name="typeA">
    <xs:choice maxOccurs="unbounded">
        <xs:element ref="a1"/>
        <xs:element ref="a2"/>
        <xs:element ref="b"/>
    </xs:choice>
</xs:complexType>


En fait, j'ai l'impression que mon extension équivaut à écrire

<xs:complexType name="typeA">
<xs:sequence>
    <xs:choice maxOccurs="unbounded">
        <xs:element ref="a1"/>
        <xs:element ref="a2"/>
    </xs:choice>
    <xs:choice maxOccurs="unbounded">
        <xs:element ref="b" />
    </xs:choice>
</xs:sequence>
</xs:complexType>


Si j'essaie d'insérer dans le choice de b.xsd des références aux éléments a1 et a2, je me heurte à une erreur "unique particle attribution", ce qui est logique. Comment m'en sortir? Avez-vous une piste? Mon petit doigt me dit que cela doit être un problème classique, mais je ne n'arrive pas à mettre la main sur un début de solution... Merci!
Modifié par Gilles (14 Aug 2008 - 19:24)
J'ai eu le même problème que toi (http://forum.alsacreations.com/topic-3-35229-1-Heritage-en-xml-Schema.html) et je n'ai malheureusement pas trouver de solution, j'ai du utiliser un autre moyen de définir cet élément en xsd.