XMLスキーマ:テキストのみを含む属性を持つ要素?


133

これを検索するのに苦労しています。次のようなXMLのXMLスキーマファイルで要素を定義するにはどうすればよいですか。

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

タイプxs:stringがあり、属性もある要素を定義する方法がわかりません。

これが私がこれまでに得たものです:

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

回答:


168

試す

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

コードの試行時に次の例外が発生します-org.xml.sax.SAXParseException:src-resolve:名前 'AttrElement'をa(n) 'type definition'コンポーネントに解決できません。どうしてこんなことに?
アシュウィン

1
その場合は、おそらくスキーマドキュメントにターゲット名前空間があり、型を指すために接頭辞付きの名前を使用する必要があるためです。(接頭辞tnsがスキーマドキュメントのターゲット名前空間にバインドされている場合はtype="tns:AttrElement"、タイプを参照するために使用します。)
CM Sperberg-McQueen

@Ashwin型の名前空間を使用して型を参照する必要がある場合があります(type="tns:AtrElement"XSDのデフォルトの名前空間がドキュメントのtargetNamespaceではなくxsの場合。通常、その場合tnsは定義されて使用されます。)
16

75

...または同等のインライン:

<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
simpleContent内で定義するのは非常に直感的でないと思いますcomplexType。しかし、それもまた、XSDです。それにもかかわらずありがとう!:-)
インフルエンザ

これはIntelliJV12.1.3)で私にエラーを表示します:value属性は「許可されていません」。simpleContentの代わりにcomplexContentを使用すると修正されました。
aZen 2013年

@CrBrunoは、このための専用のSO質問を開く方が適切です。コメントでこの記事に自由にリンクしてください(そしてこの議論を指してください)
eckes '27 / 07/21

-2

私はそれが同じではないことを知っていますが、それは私にとってはうまくいきます:

<xsd:element name="option">
    <xsd:complexType mixed="true">
        <xsd:attribute name="value" use="optional" type="xsd:string"/>
    </xsd:complexType>
</xsd:element>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.