2015-10-28 1 views
2

Je voudrais définir un type complexe XSD en utilisant un autre type complexe.Extension de type complexe XSD avec un autre type complexe

<xs:complexType name="A"> 
    <!-- sequence with some elements --> 
</xs:complexType> 

<xs:complexType name="B"> 
    <!-- sequence with some elements --> 
</xs:complexType> 

<xs:complexType name="C">  
    <xs:complexContent>    
     <xs:extension base="A"> 
      <!-- ??? reference to complex type B ??? --> 
     </xs:extension> 
    </xs:complexContent>    
</xs:complexType> 

Y at-il un moyen de le faire sans déclarer un nouvel élément de type B?

EDIT:

Maintenant que je pense, type d'extension avec un autre type est probablement pas autorisé afin d'interdire l'auto-prolongation. Comme RCB l'a suggéré, on peut utiliser un groupe comme une solution de contournement comme

<xs:complexType name="A"> 
    <!-- sequence with some elements --> 
</xs:complexType> 

<xs:group name="B"> 
    <!-- sequence with some elements --> 
</xs:group> 

<xs:complexType name="B"> 
    <xs:group ref="B"/> 
</xs:complexType> 

<xs:complexType name="C">  
    <xs:complexContent>    
     <xs:extension base="A"> 
      <xs:group ref="B"/> 
     </xs:extension> 
    </xs:complexContent>    
</xs:complexType> 
+1

pour autant que je sache, il n'y a pas d'autre moyen. – Kachna

Répondre

1

Si vous êtes en mesure de changer B d'un complexType à un groupe, alors vous pourriez faire:

<xs:group name="B"> 
    <xs:sequence> 
     <!-- Some elements --> 
    </xs:sequence> 
</xs:group> 

<xs:complexType name="C"> 
    <xs:complexContent> 
     <xs:extension base="A"> 
      <xs:group ref="B"/> 
     </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 
+0

C'est intéressant. Il empêche cependant l'utilisation de B en tant que type. Mais puisque je peux définir un type B composé du groupe B, il peut être utilisé comme une solution de contournement. Merci. – Bastien