Utiliser le schéma XML pour étendre un élément plutôt qu'un complexType

Supposons que j'ai un certain schéma:

<xsd:schema ...>
    <xsd:element name="foo">
         <xsd:complexType>
             <xsd:sequence>
                 <xsd:element name="fooElement" type="xs:string" />
             </xsd:sequence>
         </xsd:complexType>
    </xsd:element>
</xsd:schema>

Ceci définit un élément foo qui a à l'intérieur un élément fooElement de type chaîne de caractères. J'aimerais maintenant étendre élément foo d'avoir aussi un élément barElement et d'appeler cette extension bar.

Pour compliquer les choses, supposons aussi que que quelqu'un d'autre a défini foo et le schéma ne peut pas être changé. Alors que l'exemple ici est trivial, supposons également que le contenu de foo pourrait être plus compliqué, et que la définition d'un nouveau schéma n'est pas tout à fait aussi simple que de copier l'élément fooElement.

Effectivement, j'aimerais définir un nouveau schéma:

<xsd:schema xmlns:fns="otherschema" ...>
    <xsd:import namespace="otherschema" />
    <xsd:element name="bar">
         <xsd:complexContent>
             <xsd:extension base="fns:foo">
                 <xsd:sequence>
                     <xsd:element name="barElement" type="xs:string" />
                 </xsd:sequence>
             </xsd:extension>
         </xsd:complexContent>
    </xsd:element>
</xsd:schema>

Malheureusement <xsd:extension>'s base attribut accepte uniquement de type XSD arguments, pas des éléments. Comment puis-je prolonger un élément? (puis-je prolonger un élément?)

source d'informationauteur Mark Elliot