2011-06-10 2 views
1

J'ai une classe de base, marquée comme abstract:XSD - élément Remplacer

<!-- TYPE: BASE CLASS --> 
<xs:complexType name="BaseClass" abstract="true"> 
    <xs:sequence> 
     <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/> 
     <xs:element name="implementation" type="BaseClass" minOccurs="0" maxOccurs="1"/> 
    </xs:sequence> 
</xs:complexType> 

Maintenant, la classe qui hérite BaseClass et overrides de la mise en œuvre »avec null:

<xs:complexType name="MyClass"> 
    <xs:complexContent> 
     <xs:extension base="BaseClass"/> 
    </xs:complexContent> 
</xs:complexType> 

J'ai essayé ceci mais est invalide:

<xs:complexType name="MyClass"> 
    <xs:complexContent> 
     <xs:extension base="BaseClass"> 
      <xs:sequence> 
       <xs:element name="implementation" fixed="xs:nil"/> 
      </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

Y at-il un moyen de faire cela?

Répondre

1

Marquer quelque chose comme abstrait dans un schéma XSD signifie essentiellement qu'il ne peut pas apparaître dans un document d'instance. Il devrait être utilisé avec l'attribut substitutionGroup.

Par exemple

<xs:element name="replaceme" abstract="true" /> 
<xs:element name="replacement1" substitutionGroup="replaceme" /> 
<xs:element name="replacement2" substitutionGroup="replaceme" /> 

Cela signifie que dans un document d'instance vous seriez obligé d'utiliser soit un « replacement1 » ou un élément « remplacement2 », à savoir le xsd vous oblige à remplacer le « replaceme » élément avec l'un des remplacements du groupe de substitution. Pour réaliser ce que vous voulez, vous devez créer un groupe de substitution composé des types que vous souhaitez utiliser au lieu de votre type de base. Je ne suis pas sûr que ce soit possible avec des types complexes, mais essayez-le.

Questions connexes