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 .
Schéma a.xsd
Schéma b.xsd
Avec cette définition, le fichier suivant est valide:
J'aimerais que les fichiers suivants soient aussi valides:
et
... Bref, aboutir à une définition équivalente à
En fait, j'ai l'impression que mon extension équivaut à écrire
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)
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 .
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)