2008-12-18 7 views
117

Ho difficoltà a cercare questo. Come faccio a definire un elemento in un file schema XML per XML che assomiglia a questo:Schema XML: elemento con attributi contenenti solo testo?

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

io non riesco a capire come definire un elemento che è di tipo xs:string e ha anche un attributo.

Ecco quello che ho finora:

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

risposta

147

Prova

<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

Sto ottenendo la seguente eccezione durante la prova del codice: org.xml.sax.SAXParseException: src-resolve: impossibile r esullare il nome 'AttrElement' in un componente (n) 'definizione del tipo'. Perchè è così? – Ashwin

+1

Se è così, è probabilmente perché il documento dello schema ha uno spazio dei nomi di destinazione e sarà necessario utilizzare un nome prefisso per puntare al tipo. (Se il prefisso 'tns' è associato allo spazio dei nomi di destinazione del documento dello schema, si utilizzerà' type = "tns: AttrElement" 'per fare riferimento al tipo.) –

+0

@Ashwin potrebbe essere necessario fare riferimento al tipo con lo spazio dei nomi del tipo ('type =" tns: AtrElement "' se lo spazio dei nomi predefinito dell'XSD è xs non lo spazio dei nomi di destinazione del documento.In genere in questo caso viene definito e utilizzato 'tns' – eckes

69

... o la linea equivalente:

<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

Trovo davvero non intuitivo definire' simpleContent' all'interno di un 'complexType'. Ma ancora una volta è XSD, dove nulla sembra davvero intuitivo. Grazie comunque! :-) – flu

+0

Questo mostrerà un errore per me in * IntelliJ * (* V12.1.3 *): L'attributo value è" not allowed " . L'utilizzo di ** complexContent ** invece di ** simpleContent ** lo ha risolto. – aZen

+0

@CrBruno meglio aprire una domanda SO dedicata per questo. Sentiti libero di collegarlo qui nei commenti (e indica questa discussione) – eckes

-3

So che non è la stessa , ma funziona per me:

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