ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  420  : 記事  0  : コメント  9718  : トラックバック  76

ニュース

さて、今年は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

複合型を拡張した複合型では、属性・要素を既存の定義に追加できました。
では、単純型を拡張した複合型はどんなものが定義できるのでしょう。
単純型を拡張した複合型では、
<要素 属性名="属性値">ほげほげ</要素>
の形式のみ定義できます。(属性は複数でもかまいません)
残念ながら、
<要素>ほげほげ<子要素>ふがふが</子要素>げほげほ</要素>
のような形式は定義できません。
<一週間>
    <曜日 ="月">うんじゃらげ</曜日>
    <曜日 ="火">はんじゃらげ</曜日>
    <曜日 ="水">すいすいすい</曜日>
    <曜日 ="木">も~りもり</曜日>
    <曜日 ="金">きんきらきん</曜日>
    <曜日 ="土">ぎんぎらぎん</曜日>
    <曜日 ="日">らんららんららん</曜日>
</一週間>
たとえば上記の XML インスタンス文書に対する、XML Schema は下記のようになります。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="一週間">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="曜日" type="曜日型" maxOccurs="7"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:complexType name="曜日型">
        <xsd:simpleContent>
            <xsd:extension base="xsd:string">
                <!-- ここに xsd:element を定義することはできない -->
                <xsd:attribute name="名" type="xsd:string"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>
</xsd:schema>
<要素 属性名="属性値">ほげほげ</要素> の形式なんて、しょっちゅうでてくるわりには結構面倒な記述をしなければなりません。
ところが、実はこれ以外にも方法はあります。
<xsd:complexType name="曜日型" mixed="true">
    <xsd:attribute name="名" type="xsd:string"/>
</xsd:complexType>
これだけでおっけい!!
要は混合内容を使用するということです。
どうみてもこっちのほうが簡単です。
しかも混合内容なので、後から子要素を追加するのも簡単です。
どうしても、子要素を追加させたくなく、属性だけを追加した型を定義するときには、単純型を拡張した複合型定義を使うといいのかもしれません。
投稿日時 : 2007年3月24日 14:57

コメント

# re: 単純型を拡張した複合型 2007/03/25 17:13 シャノン
混合要素の場合は、その要素が子要素と属性だけでなく、テキストノードも持つことができるという違いはありますけどね。

# re: 単純型を拡張した複合型 2007/03/27 22:29 THREE-ONE
混合要素は個人的には、テキストノード「も」というよりは、テキストノードのほかに何か持てるって感じかな。
その方が個人的には区別しやすい

Post Feedback

タイトル
名前
Url:
コメント: