En termes d'exemple les documents que je pense que vous dites que vous voulez AD
éléments qui sont des enfants ADConfig
éléments sont constitués uniquement d'une séquence de domainName, userName et passsword. Ailleurs, dans ce document d'instance, vous pourriez avoir un élément AD
qui avait les cinq enfants énumérés ci-dessus.
En supposant que j'ai ce correct, j'ai peur que votre exigence exacte ne soit simplement pas possible dans la version actuelle de XSD. Je crois que XML Schema 1.1 peut résoudre votre problème. Cependant, s'il est possible de réécrire légèrement votre schéma, cela devient possible. En créant deux types complexes, vous pouvez avoir deux modèles pour les éléments ayant le même nom (dans des contextes différents). Par exemple,
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
<xs:complexType name="ADType1">
<xs:sequence>
<xs:element name="hostName" type="xs:string"/>
<xs:element name="portNumber" type="xs:string"/>
<xs:element name="domainName" type="xs:string"/>
<xs:element name="userName" type="xs:string"/>
<xs:element name="password" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ADType2">
<xs:sequence>
<xs:element name="domainName" type="xs:string"/>
<xs:element name="userName" type="xs:string"/>
<xs:element name="password" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ADTest">
<xs:complexType>
<xs:sequence>
<xs:element ref="ADConfig1"/>
<xs:element ref="ADConfig2"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ADConfig1">
<xs:complexType>
<xs:sequence>
<xs:element type="ADType1" name="AD"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ADConfig2">
<xs:complexType>
<xs:sequence>
<xs:element type="ADType2" name="AD"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
ci-dessus a deux modèles ADType1
et ADType2
dont chacun peut être utilisé pour déclarer un élément nommé AD
. Dans votre situation, vous pouvez créer un type global pour AD
qui est utilisé dans l'élément ADConfig
et un type différent qui pourrait être utilisé ailleurs. Si vous ne pouvez pas utiliser ce type de modèle (le type pour AD
est défini ailleurs et corrigé), vous pouvez utiliser les annotations Schematron pour fournir le même type de validation pilotée par règles que celle qui sera fournie par XML Schema 1.1