XML Şeması: Yalnızca metin içeren niteliklere sahip öğe?


133

Bunu aramakta güçlük çekiyorum. XML için bir XML şema dosyasında şuna benzeyen bir öğeyi nasıl tanımlardım:

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

Tip xs:stringve aynı zamanda bir niteliği olan bir öğeyi nasıl tanımlayacağımı çözemiyorum.

Şimdiye kadar sahip olduğum şeyler:

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

Yanıtlar:


168

Deneyin

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

Kodunuzu denerken aşağıdaki istisnayı alıyorum - org.xml.sax.SAXParseException: src-resolversion: 'AttrElement' adı bir (n) 'tip tanımı' bileşenine dönüştürülemiyor. Neden böyle?
Ashwin

1
Eğer öyleyse, muhtemelen şema belgenizin bir hedef ad alanına sahip olmasından ve türe işaret etmek için önekli bir ad kullanmanız gerekeceğinden kaynaklanmaktadır. (Önek tnsşema belgesinin hedef ad type="tns:AttrElement"
alanına bağlıysa

@Ashwin, tür ad alanıyla türe başvurmanız gerekebilir (XSD'nin type="tns:AtrElement"varsayılan ad alanı xs ise, belgenin targetNamespace değil. Genellikle bu durumda tnstanımlanır ve kullanılır.
eckes

75

... veya satır içi eşdeğeri:

<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
Bir simpleContentiçinde tanımlamayı gerçekten sezgisel bulmuyorum complexType. Ama yine de hiçbir şeyin gerçekten sezgisel görünmediği XSD. Yine de teşekkürler! :-)
grip

Bu, IntelliJ'de ( V12.1.3 ) benim için bir hata gösterecek : Değer özniteliğine "izin verilmiyor". SimpleContent yerine complexContent kullanılması sorunu çözdü .
aZen

@CrBruno bunun için özel bir SO sorusu açsa iyi olur. Yorumlarda buraya bağlantı kurmaktan çekinmeyin (ve bu yanılgıyı işaret edin)
eckes

-2

Aynı olmadığını biliyorum ama benim için çalışıyor:

<xsd:element name="option">
    <xsd:complexType mixed="true">
        <xsd:attribute name="value" use="optional" type="xsd:string"/>
    </xsd:complexType>
</xsd:element>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.