2003年6月22日(日)更新 |
■代替要素を使う例
たけち: 今回は、代替要素を使う場合について学ぼうね。 さらら: はい。 たけち: まずは代替要素を使ったXMLスキーマの例をみてみよう。 |
※XMLデータ例: 万葉歌 【manyouPoem1.xml】 |
※XML Schema例: 万葉歌 【manyouPoem1.xsd】 |
さらら: あっ、これって代替要素のところに出てきたわね。 たけち: そう、この例を、xsi:typeを使って、以下のようなXMLデータとXML Schemaの組み合わせに変えることができるんだよ。 |
![]() |
■xsi:typeを使うと、XMLスキーマで代替要素を使わなくて良い
※XMLデータ例: 万葉歌 【manyouPoem2.xml】 xsi:type属性を使用 |
※XML Schema例: 万葉歌 【manyouPoem2.xsd】 |
さらら: あら。今度のXMLスキーマは、代替要素を使ってないのね。 たけち: そうなんだ。XMLスキーマ【manyouPoem2.xsd】に さらら: あっ、そうよね。 たけち: そうなんだね。 |
<mp:poem> |
たけち: と書いたりすれば、エラーになるはずだよね。だけど、 |
<mp:poem xsi:type="mp:MiscellaneousPoemType"> |
たけち: と書くことによって、このpoem要素はMiscellaneousPoemType型を使って宣言されているのと同じことになるんだね。だから出現可能になっているんだよ。 さらら: なるほど。。。。。。代替要素を使ったのと似たようなことができるわけなのね。 |
![]() |
■複数のデータ型をとりうる場合に、そのどれかを指定する場合
たけち: それから例えば、こういう例を考えてみるね。 |
![]() |
※XMLデータ例: 固定的な金額が決められている場合(10,000円、など) |
※XMLデータ例: 率で決められている場合(かかった医療費の5%、など) |
さらら: 最初のXMLデータが、xsi:type="hi:Fix" で固定的な金額ということを示して、その次のXMLデータが xsi:type="hi:Ratio" で率ということを示しているのね。 たけち: そう、この場合は次のようにスキーマを書くことができるんだよ。 |
※XML Schema例: 医療費 【hi.xsd】 |
■unionのメンバー型をxsi:typeで指定できる
さらら: なるほど、実際のpaymentがとりうるデータ型のPaymentTypeは、FixとRatioのユニオン型なのね。こういう使い方があるのね... あら? あれ? あれれぇ?? たけち: えっ、どうしたの?(^ ^;) さらら: たけちって、最初に、 たけち: うん、そういう説明をしたよね(^ ^;) さらら: この場合、FixとRatioから派生してPaymentTypeが作られたのよね。FixとRatioは派生したデータ型ではなくて、派生の元になっているデータ型だわ。これでいいの? |
![]() |
たけち: 確かにそう思えるけれど、実はユニオン型の場合は例外なんだ。この場合は、派生の元となっているメンバー型の方が、xsi:typeを使って変更できるデータ型になるんだよ(^^;) さらら: そっ、そうなの? たけち: それについては次回にしようね。 さらら: うーん、ユニオン型だけ例外なのね。何かずるいみたい。 たけち: でも、この方が意味が通るよね(^ ^;) さらら: えぇ、そうだわねぇ。(^ ^* たけち: グローバル属性全般については、これでおしまいにするね。 さらら: はい。ありがとう。 次回に続きます...... (^ ^; |
■XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。 |