- PR -

Schemaで、属性を持ち内部にタグ要素を持たないタグの宣言の仕方

1
投稿者投稿内容
cobalt
会議室デビュー日: 2005/05/02
投稿数: 14
投稿日時: 2005-07-14 10:44
 初めて投稿させてもらいますcobaltと言う者です。

 Schemaで、属性を持ち内部にタグ要素を持たないタグの宣言の仕方を教えて下さい。
  <出演 属性="なんたら">田中一郎</出演>
  <出演>田中次郎</出演> <!-- 属性はオプション -->
 こんな感じのXMLを表現するSchemaを書きたいのです。

 イメージ的にはこんな感じですが、
  <xsd:simpleType name="出演">
    <xsd:restriction base="xsd:token">
      <xsd:attribute name="属性" type="xsd:token" use="optional"/>
    </xsd:restriction>
  </xsd:simpleType>
 これでやると XMLSchema:attribute 要素はこのコンテキストではサポートされません というエラーが出てしまいます。

 ご存知の方はご教授お願いします。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-07-14 15:05
@IT > XML & SOA > XMLテクニック集 > XML Schemaで複雑型要素を定義する
http://www.atmarkit.co.jp/fxml/tecs/020xsd/20.html
cobalt
会議室デビュー日: 2005/05/02
投稿数: 14
投稿日時: 2005-07-14 16:49
 MMXさん返信ありがとうございます。

 複雑型要素でやろうとすると今度は、開始タグと終了タグの中身がかけなくなってしまいます。

  <!-- Schema -->
  <xsd:element name="出演">
    <xsd:complexType>
      <xsd:attribute name="属性" type="xsd:token" use="optional"/>
    </xsd:complexType>
  </xsd:element>

  <!-- XML -->
  <出演 属性="なんたら">田中一郎</出演>
  <出演>田中次郎</出演>

 でチェックをかけると、チェック段階で
  要素にはテキストまたはスペースは使用できません。コンテンツ モデルが空です。
 というエラーが起きてしまいます。

 複雑型要素の sequenceタグの中に子要素を宣言しますが、そこにタグない要素が書ければ解決しそうなのですが。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-07-14 18:32
2.5.1 Complex Types from Simple Types
http://www.w3.org/TR/xmlschema-0/primer.html#complexTfromSimpleT
では
Example
<internationalPrice currency="EUR">423.46</internationalPrice>
Example
Deriving a Complex Type from a Simple Type
<xsd:element name="internationalPrice">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:decimal">
<xsd:attribute name="currency" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>

とか
この「ひねり技」の解説は 識者にお願いします

[ メッセージ編集済み 編集者: MMX 編集日時 2005-07-14 18:40 ]

<xsd:complexType mixed="true"> と属性
テキトーな指定では、これでもいいです。

[ メッセージ編集済み 編集者: MMX 編集日時 2005-07-15 10:59 ]
cobalt
会議室デビュー日: 2005/05/02
投稿数: 14
投稿日時: 2005-07-15 11:52
MMXさんの教え頂いた方法で無事解決しました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)