Bonjour à tous,

J'ai eu besoin dans mon xml schema, de déclarer que des éléments puissent apparaître dans n'importe quel ordre et autant de fois que voulu, j'ai donc utiliser un <sequence> et <choice> imbriquer, voici un exemple :
<xs:complexType ="mainType">
	<xs:sequence>
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element ref="element1" minOccurs="0" maxOccurs="unbounded" />
			<xs:element ref="element2" minOccurs="0" maxOccurs="unbounded" />
		</xs:choice>
	</xs:sequence>
</xs:complexType>


Je veux étendre ce type en rajoutant un élément, j'utilise ce code :

 <xs:complexType name="extendedType>
	<xs:complexContent>
		<xs:extension base="mainType">
			<xs:sequence>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="element3" minOccurs="0" maxOccurs="unbounded" />
				</xs:choice>
			</xs:sequence>
		</xs:extension>
	</xs:complexContent>
</xs:complexType>


Je pense que le code obtenu au final ressemble à quelque chose de ce genre (après extension):

<xs:complexType ="finalType">
	<xs:sequence>
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element ref="element1" minOccurs="0" maxOccurs="unbounded" />
			<xs:element ref="element2" minOccurs="0" maxOccurs="unbounded" />	
		</xs:choice>
	</xs:sequence>
	<xs:sequence>
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element ref="element3" minOccurs="0" maxOccurs="unbounded" />
		</xs:choice>
	</xs:sequence>
</xs:complexType>


Mais cela ne répond plus à mon premier besoin (autant d'élément que voulu et dans n'importe quel ordre), je voudrai plutôt obtenir ce qui suit :
		
<xs:complexType ="finalType">
	<xs:sequence>
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element ref="element1" minOccurs="0" maxOccurs="unbounded" />
			<xs:element ref="element2" minOccurs="0" maxOccurs="unbounded" />
			<xs:element ref="element3" minOccurs="0" maxOccurs="unbounded" />
		</xs:choice>
	</xs:sequence>
</xs:complexType>


mais en utilisant une extension

Est ce que j'ai correctement compris comment les extensions marchent ? Si non, comment cela marche t-il, si oui, comment faire pour résoudre mon problème ?

Merci d'avance.
Modifié par Kahor (09 Jun 2008 - 14:33)