sequenceやchoiceのネスト

2002年10月6日(日)更新


■例: MMLの一部より

たけち: 今まで、sequenceやchoiceといったモデルグループの内容となるパーティクルとして、elementが出てくる例ばかり見てきたけれど、ここで復習の意味もこめて、これらを組み合わせた例を見てみようね。

さらら: 何か難しそう... (^ ^;)

たけち: うん。でも、一見難しそうなものでも、一つ一つ見ていくと、実は簡単な部品の組み合わせにすぎないことはよくあるから、そんな感じで見てみてね。今回はちょっと趣向を変えて、MML(Medical Markup Language)という規格の中に実在するDTDの一部を示してみるね。

たけち

■MMLからの抜粋(DTD)
    <!ELEMENT Name (((family, given, middle) | fullname), prefix?, degree?)>
    <!ELEMENT family (#PCDATA)>
    <!ELEMENT given (#PCDATA)>
    <!ELEMENT middle (#PCDATA)>
    <!ELEMENT fullname (#PCDATA)>
    <!ELEMENT prefix (#PCDATA)>
    <!ELEMENT degree (#PCDATA)>

さらら: きゃぁ、ややこしそう (^ ^;

たけち: でも、この程度のものは、実際に世の中に存在するXMLの応用規格にはあたりまえのように存在するからね。(^ ^;) このDTDに合致するXMLデータとしては例えばつぎのようなものが考えられるね。

【例-1】
    <Name>
      <family>大伴</family>
      <given>家持</given>
      <middle>宿禰</middle>
      <prefix>中納言</prefix>
      <degree>従三位</degree>
    </Name>

【例-2】
    <Name>
      <fullname>高市皇子</family>
      <prefix>太政大臣</prefix>
    </Name>

さらら: なるほど、実際にはこういうXMLの文書になるのね。でも、middleが宿禰、ってちょっと変じゃない?

たけち: あっ、まっ、まあそう言わずに。。。(^ ^; ちょっと万葉の時代のデータにあてはめてみただけだから。。。degreeの項目に「従三位」なんてのもしっくりこないけど。(^ ^;
それで、実際にさっきのDTDに相当するXML Schemaはどうなるか、というのが次だよ。

さらら

■上記MML DTDに相当するXML Schema
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="Name" type="NameType"/>

<xsd:complexType name="NameType">
    <xsd:sequence>
      <xsd:choice>
        <xsd:sequence>
        <xsd:element ref="family" />
        <xsd:element ref="given" />
        <xsd:element ref="middle" />
        </xsd:sequence>
        <xsd:element ref="fullname" />
      </xsd:choice>
      <xsd:element ref="prefix" minOccurs="0" />
      <xsd:element ref="degree" minOccurs="0" />
    </xsd:sequence>
</xsd:complexType>

<xsd:element name="family" type="xsd:string" />
<xsd:element name="given" type="xsd:string" />
<xsd:element name="middle" type="xsd:string" />
<xsd:element name="fullname" type="xsd:string" />
<xsd:element name="prefix" type="xsd:string" />
<xsd:element name="degree" type="xsd:string" />

</xsd:schema>

さらら: うわ〜、やっぱりややこしそう。。。。でもなんとなくDTDと比較するとわかったような気がするわね。

たけち: そうだね、DTDと比較しながら見てみてね。モデルグループの内容となるパーティクルとしては、こんなふうにelementだけでなくて、sequeceやchoice自身も使えるんだよ。sequeceやchoiceはモデルグループであると同時に、パーティクルでもあるんだよ。今日は短かったけれど、これでおしまい。

さらら: ありがと。

たけち: 次回は、sequece, choiceに続く、第3のモデルグループであるallについて勉強するね。

次はallです 。。。。 (^ ^)v


MMLは、異なる医療機関(具体的には、電子カルテシステム)の間で診療データを交換する為の、XMLをベースとした診療データ交換ドキュメント仕様です。

XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。