- - PR -
XMLschemaの書き方
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-10-03 16:42
<aa bbb="ccc">ddd</aa>
<aa bbb="ccc"/> でも構わない場合のスキーマの表記方法はどうしたらいいでしょうか? <xs:element name="aa"> <xs:complexType> <xs:simpleContent <xs:extension base="xs:string"> <!-- これがoptional --> <xs:attribute name="hogehoge" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> |
|
投稿日時: 2003-10-04 12:54
deuさま、こんにちは。
上記のインスタンスでは属性名がbbbであるにもかかわらず、スキーマ側はhogehogeになっているという誤植がありますが、それは置いておいて… そこを直せばどちらのインスタンスも、XSVやMSXMLで、このスキーマでエラーなしに通過することを確認できました。 |
|
投稿日時: 2003-10-09 18:43
TAKABEさん、ありがとうございます。確認してみます。
また、よろしければもうひとつお聞きしたいのですが、 <xsd:element name="aaa" maxOccurs="10"> <xsd:complexType> <xsd:sequence> <xsd:element name="bbb" type="xsd:positiveInteger" fixed="1"/> <xsd:element name="ccc" type="xsd:positiveInteger"/> <xsd:element name="ddd" type="xsd:positiveInteger"/> </xsd:sequence> </xsd:complexType> </xsd:element> このように、同じaaa要素が10回まで現れていいものとして、 その要素ごとに子要素bbbの固定値(fixed="1")を、例えばカウントアップ 等のようにすべて買えたいのですが、どのように表記したらよいでしょうか? よろしくお願いいたします。 |
|
投稿日時: 2003-10-10 11:13
deuさま、こんんちは。
私が誤解しているかもしれませんが、deuさまの問題を以下のような例題であろうと解釈しました。 例えば、root要素の内容として、aaa要素が1〜10個まで出現しうる。各aaa要素のIDとして、それぞれのaaa要素の内容であるbbb要素の値が用いられる、といった話かと思いました。 【サンプルインスタンス】 <?xml version="1.0" encoding="UTF-8" ?> <root> <aaa> <bbb>1</bbb> <ccc>60</ccc> <ddd>3600</ddd> </aaa> <aaa> <bbb>2</bbb> <ccc>12</ccc> <ddd>365</ddd> </aaa> <aaa> <bbb>3</bbb> <ccc>7</ccc> <ddd>49</ddd> </aaa> </root> この場合、1つずつbbbの値がカウントアップされているかどうかといったチェックは、XML Schemaの能力の範囲外です。ただし、bbbの値がIDとして、重なった値がないかどうかを定義することは可能です。 一般にIDとしては、DTDでも定義できるID型の属性が使われることが多いのですが、この場合はID型を使うことはできません。なぜなら 1.IDとして使いたいbbbは、aaa要素の属性ではなくて要素である。 2.ID型はNameの規則に従わなければならないが、bbbはpositiveInteger型である。 というケースであるからです。 そのため、このような場合は「key」を使わなければなりません。 <?xml version="1.0" encoding="UTF-8" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="root"> <xsd:complexType> <xsd:sequence> <xsd:element ref="aaa" maxOccurs="10" /> </xsd:sequence> </xsd:complexType> <xsd:key name="aaa-bbb"> <xsd:selector xpath="aaa" /> <xsd:field xpath="bbb" /> </xsd:key> </xsd:element> <xsd:element name="aaa"> <xsd:complexType> <xsd:sequence> <xsd:element name="bbb" type="xsd:positiveInteger"/> <xsd:element name="ccc" type="xsd:positiveInteger"/> <xsd:element name="ddd" type="xsd:positiveInteger"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> 「key」についての詳細は http://www.cityfujisawa.ne.jp/~yanai/xml/schema/step35.html http://www.cityfujisawa.ne.jp/~yanai/xml/schema/step35-2.html http://www.cityfujisawa.ne.jp/~yanai/xml/schema/step35-3.html などをご参照いただければ幸いです。 |
|
投稿日時: 2003-10-10 14:04
TAKABEさま、ありがとうございます。
私の書き方が悪かったのですが、Bの値のチェックを行いたいわけでなく、 fixed属性を用いて、繰り返し事に違う値を入れたいのです。 つまり、同じ構造の「aaa」という属性以下の塊が複数回現れるとして、 その子要素、「bbb」にfixedを用いて、それぞれ違う値を指定したい、 という希望です。 判りにくくて、申し訳ありません。 |
|
投稿日時: 2003-10-10 17:34
deuさま、私の理解が拙くてすみません。未だにdeuさまの意図されることが理解できず申し訳ないのですが、どのようなインスタンスが良くて、どのようなインスタンスが悪いのか、具体的にお書きいただければ、私の理解力のない頭でもわかるかもしれません。
>fixed属性を用いて、繰り返し事に違う値を入れたいのです fixed属性を使うと、かえって必ず同じ値になると思うのですが… お手数をおかけいたしますが、どうぞよろしく御願い致します。 |
1