2008-12-18 12 views
117

J'ai de la difficulté à chercher ceci. Comment puis-je définir un élément dans un fichier de schéma XML pour XML qui ressemble à ceci:Schéma XML: élément avec des attributs contenant uniquement du texte?

<option value="test">sometext</option> 

Je ne peux pas comprendre comment définir un élément qui est de type xs:string et a également un attribut.

Voici ce que j'ai jusqu'à présent:

<xs:element name="option"> 
    <xs:complexType> 
     <xs:attribute name="value" type="xs:string" /> 
    </xs:complexType> 
</xs:element> 

Répondre

147

Try

<xs:element name="option" type="AttrElement" /> 

    <xs:complexType name="AttrElement"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute name="value" type="xs:string"> 
     </xs:attribute> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
+0

Je reçois l'exception suivante lors de l'essai de votre code - org.xml.sax.SAXParseException: src-resolve: Impossible de d'attribuer le nom 'AttrElement' à un composant 'définition de type'. Pourquoi est-ce si? – Ashwin

+1

Si tel est le cas, c'est probablement parce que votre document de schéma a un espace de noms cible et vous devrez utiliser un nom préfixé pour pointer vers le type. (Si le préfixe 'tns' est lié à l'espace de noms cible du document de schéma, vous utiliserez' type = "tns: AttrElement" 'pour faire référence au type.) –

+0

@Ashwin vous devrez peut-être référencer le type avec l'espace de nom de type ('type =" tns: AtrElement "' si votre espace de nommage par défaut du XSD est xs et non le targetNamespace du document Typiquement, dans ce cas, 'tns' est défini et utilisé – eckes

69

... ou l'équivalent en ligne:

<xs:element name="option"> 
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute name="value" type="xs:string" /> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 
+10

Je trouve vraiment peu intuitif de définir' simpleContent' dans un 'complexType' Mais là encore c'est XSD, où rien ne semble vraiment intuitif Merci quand même :-) – flu

+0

Cela affichera une erreur pour moi dans * IntelliJ * (* V12.1.3 *): L'attribut value est" not allowed " . L'utilisation de ** complexContent ** au lieu de ** simpleContent ** le corrige. – aZen

+0

@CrBruno mieux ouvrir une question dédiée SO pour cela. N'hésitez pas à lier ici dans les commentaires (et pointez vers cette rubrique) – eckes

-3

Je sais que ce ne sont pas les mêmes , mais ça marche pour moi:

<xsd:element name="option"> 
    <xsd:complexType mixed="true"> 
     <xsd:attribute name="value" use="optional" type="xsd:string"/> 
    </xsd:complexType> 
</xsd:element> 
Questions connexes