Skema XML: Elemen dengan atribut yang hanya berisi teks?

133

Saya mengalami kesulitan mencari ini. Bagaimana saya mendefinisikan elemen dalam file skema XML untuk XML yang terlihat seperti ini:

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

Saya tidak tahu cara mendefinisikan elemen yang bertipe xs:stringdan juga memiliki atribut.

Inilah yang saya dapatkan sejauh ini:

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

Jawaban:

168

Mencoba

  <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>
David Norman
sumber
Saya mendapatkan pengecualian berikut saat mencoba kode Anda - org.xml.sax.SAXParseException: src-resol: Tidak dapat mengubah nama 'AttrElement' ke komponen (n) 'type definition'. Kenapa begitu?
Ashwin
1
Jika demikian, mungkin karena dokumen skema Anda memiliki namespace target dan Anda harus menggunakan nama awalan untuk menunjuk ke tipe. (Jika awalan tnsterikat ke namespace target dokumen skema, Anda akan menggunakan type="tns:AttrElement"untuk merujuk pada jenisnya.)
CM Sperberg-McQueen
@Ashwin, Anda mungkin perlu merujuk tipe dengan tipe namespace ( type="tns:AtrElement"jika namespace default XSD Anda adalah xs bukan targetNamespace dokumen. Biasanya dalam hal tnsini didefinisikan dan digunakan.
eckes
75

... atau yang setara sebaris:

<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>
Julian H
sumber
11
Saya merasa sangat tidak intuitif untuk mendefinisikan simpleContentdalam complexType. Tapi sekali lagi itu XSD, di mana tidak ada yang tampak sangat intuitif. Meskipun demikian, terima kasih! :-)
flu
Ini akan menunjukkan kesalahan bagi saya di IntelliJ ( V12.1.3 ): Atribut nilai "tidak diizinkan". Menggunakan complexContent bukan simpleContent memperbaikinya.
aZen
@ Cruno lebih baik membuka pertanyaan khusus SO untuk ini. Silakan tautkan ke sini di komentar (dan arahkan ke diskusi ini)
eckes
-2

Saya tahu itu tidak sama, tetapi itu bekerja untuk saya:

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