Schema XML: elemento con attributi contenenti solo testo?


133

Ho difficoltà a cercarlo. Come definirei un elemento in un file di schema XML per XML simile a questo:

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

Non riesco a capire come definire un elemento che è di tipo xs:stringe ha anche un attributo.

Ecco cosa ho finora:

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

Risposte:


168

Provare

  <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>

Ricevo la seguente eccezione nel provare il tuo codice: org.xml.sax.SAXParseException: src-resolver: impossibile risolvere il nome "AttrElement" in un componente (n) "definizione tipo". Perchè è così?
Ashwin,

1
In tal caso, è probabilmente perché il documento dello schema ha uno spazio dei nomi di destinazione e sarà necessario utilizzare un nome con prefisso per puntare al tipo. (Se il prefisso tnsè associato allo spazio dei nomi di destinazione del documento dello schema, verrà utilizzato type="tns:AttrElement"per fare riferimento al tipo.)
CM Sperberg-McQueen,

@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 target del documento. In genere in questo caso tnsviene definito e utilizzato.
eckes

75

... o l'equivalente in linea:

<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>

11
Trovo davvero poco intuitivo definire simpleContentall'interno di a complexType. Ma poi di nuovo è XSD, dove nulla sembra davvero intuitivo. Grazie comunque! :-)
influenza

Questo mostrerà un errore per me in IntelliJ ( V12.1.3 ): l'attributo value è "non consentito". L'utilizzo di complexContent invece di simpleContent lo ha risolto.
aZen,

@CrBruno meglio aprire una domanda SO dedicata per questo. Sentitevi liberi di collegarvi qui nei commenti (e puntare a questa dussussione)
diamine

-2

So che non è lo stesso, 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.