
次のようなXMLのための定義を考えています。
<root>
<aaa />
<bbb />
</root>
1. aaa 要素と bbb 要素は、いずれも minOccurs=0 maxOccurs=1 です。
2. root 要素は、aaa 要素と bbb 要素のいずれか1つまたは両方を持つことができます。
3. root 要素は、必ず子要素を持つ必要があります。(aaa 要素および bbb 要素の両方またはいずれか1つを必ず含む)
このような条件の XSD 定義を作成することはできるのでしょうか。
1 と 2 を条件とする定義は次のように作成できたのです。
<xs:complexType>
<xs:sequence>
<xs:element name="aaa" minOccurs="0"/>
<xs:element name="bbb" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
しかし、3 の条件を考慮すると、どのように定義したらよいかわからなくなってしまいました。
このような定義が可能なら、どのようにすればよいのか、ご教示ください。
よろしくお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
試験受けたりしたくせに,XML Schemaはまともに勉強しなかったからさ,
回答のためにいろいろ書いてValidatorに怒られまくったorz。そのため愚痴が続きます。
#いや、試験の時にはXSLTもまともに勉強しなかったんで,ずたずたにされましたが。
#仕様書読むのが面倒くさいからって放置しっぱなしで巣
で,本題。
名前空間接頭辞付きで話をしているけど,こんな感じでいけそう。
とりあえず,ここでスキーマとインスタンス渡す分には成功している感じ。
http://tools.decisionsoft.com/schemaValidate/
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:sample="http://www.example.com/himajin100000/"
targetNamespace="http://www.example.com/himajin100000/"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="root">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element ref="sample:aaa" minOccurs="1" maxOccurs="1" />
<xs:element ref="sample:bbb" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:sequence>
<xs:element ref="sample:bbb" minOccurs="1" maxOccurs="1" />
<xs:element ref="sample:aaa" minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="aaa" type="xs:string" />
<xs:element name="bbb" type="xs:string" />
</xs:schema>
========================================
#最初は以下のように書いて怒られてました
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:sample="http://www.example.com/himajin100000/"
targetNamespace="http://www.example.com/himajin100000/"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="root">
<xs:complexType>
<xs:choice>
<xs:element ref="sample:aaa" minOccurs="1" maxOccurs="1" />
<xs:element ref="sample:bbb" minOccurs="1" maxOccurs="1" />
<xs:sequence>
<xs:element ref="sample:aaa" minOccurs="1" maxOccurs="1" />
<xs:element ref="sample:bbb" minOccurs="1" maxOccurs="1" />
</xs:sequence>
<xs:sequence>
<xs:element ref="sample:bbb" minOccurs="1" maxOccurs="1" />
<xs:element ref="sample:aaa" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="aaa" type="xs:string" />
<xs:element name="bbb" type="xs:string" />
</xs:schema>
たぶん
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:sample="http://www.example.com/himajin100000/"
targetNamespace="http://www.example.com/himajin100000/"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element ref="sample:aaa" minOccurs="1" maxOccurs="1" />
<xs:sequence>
<xs:element ref="sample:aaa" minOccurs="1" maxOccurs="1" />
<xs:element ref="sample:bbb" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:choice>
<xs:element ref="sample:bbb" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="aaa" type="xs:string" />
<xs:element name="bbb" type="xs:string" />
</xs:schema>
こういうことされると検出されにくいから root > a > bって来たときに候補が二つできてしまうから
xs:choiceの中は独立にならないといけない…って項目がどっかにあるんだと思う。面倒くさいから調べないけど。
あ、そうか!
起こりうるケースごとに Choice を書けばいいんですね。
頭いいですね!
ありがとうございます。
解決できました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XMLを作成してもタグしか表示さ...
-
XMLデータを変換し印刷する方法
-
論文に載せるグラフを作成したい
-
ChatGPT excel
-
公文書のxmlファイルの開き方が...
-
XMLサイトマップの登録方法がわ...
-
タモリさんを信じられますか?
-
自分のHTMLサイトでRSSを読み込...
-
ゲーミングPCに入っているAlris...
-
【BAT(バッチ)ファイル】Web...
-
XMLとは何ですか?
-
特殊文字の検索方法
-
フォルダー内検索
-
Webページに関するさまざまな情...
-
head要素
-
ヤフー知恵袋みたいなサイトを...
-
メールアドレスについて
-
マスターノード
-
エクセルのマクロについて教え...
-
クラウドサービスのlaaS paaS s...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipse でBASIC認証するには
-
計算問題が分かりません… どな...
-
PerlによるXMLからCSVへの変換...
-
XMLスキーマのrefの使い方
-
順不同・任意のタグ
-
PHPでXMLデータ生成、スキーマ...
-
Haskell: foldrの使用について
-
XML の属性部分を JavaScript ...
-
内容にテキストを持つタグの属...
-
XMLで主キーを自動的に入力する...
-
CPUの考え方を教えてください ...
-
ルート要素ノードが2個ある場合?
-
SNMP リンクダウンとノードダ...
-
東芝のDynabookなのですがアン...
-
XMLで要素が記述された順番に意...
-
XML、XSLTの適応エラー(IEから...
-
C#でTreeViewのCheckBoxのサイ...
-
xmlファイルが上手にHTMLに変換...
-
昔Winnyってありましたけど、あ...
-
バッチファイルでテキストファ...
おすすめ情報