目次へ

4.5 listとUnion

既存のSimple Typeの「リスト」を、新たなSimple Typeとするには、list要素を使用します。 <

<simpleType name="SImple Type の名前">
<list itemType="リストにするSimple Typeの名前"/>
</simpleType> 

itemType属性の値に、どのSimple Typeをリストにするか、記述します。例を示します。

<orderDates>1999-12-21 2000-01-23 2000-05-05</orderDates>

各お客様がいつ注文を行ったか記録をとる、orderDatesという要素の型を新たに作るとします。orderDatesはdate型の値を複数連ねたものです。上の型の定義は以下のようになります。

<xsd:simpleType name="OrderDates">
  <xsd:list itemType="xsd:date">
</xsd:simpleType>

上のように、「リスト」になっているものをlist Simple Typeといいます。対して、上記例のdateのように、リストの一つ一つの構成単位となるような型をAtomic Simple Typeといいます。リストにできるのは、Atomic Simple Typeのみです。他のSimple TypeやComplex Typeをリストにすることはできません。

さて、作ったlist Simple Typeを「制限」してさらに新たなSimple Typeを作成することも可能です。可能な制限は、length、minlength、maxlength、enumerationです。list Simple Typeにおける「長さ」とは、itemTypeに指定した型のデータの出現回数になります。上の例ですと日付が3回記述されていますので、長さは「3」です。

上のOrderDate型において、日付の出現回数を20回に制限するとします。maxlengthを使用して、新たにOrderDate型に制限を加えます。

<xsd:simpleType name="OrderDates">
  <xsd:list itemType="xsd:date"/>
</xsd:simpleType>

<xsd:simpleType name="OrderDatesMaxTwenty">
  <xsd:restriction base="OrderDates">
   <xsd:maxlength value="20"/>
  </xsd:restriction>
</xsd:simpleType> 

既存の複数のSimple Typeをすべて含むようなSimple Typeを作るには、union要素を使用します。

<simpleType name="SImple Type の名前">
<union memberType="結合するSimple Type1 結合するSimple Type2  ... "/> 
</simpleType> 

memberType属性の値の中に、結合するSimple Typeの名前を、スペースで区切って列挙します。

例えば、orderdateに関しては、記述方法を、yyyy-mm-dd、--mm-dd、どちらも許すとします。すると、orderdate要素の型は、以下のようになります。

<xsd:simpleType name="OrderDate">
  <xsd:union base="xsd:date xsd:gMonthDay"/>
</xsd:simpleType> 

unionTypeは、Atomic Simple Typeとlist Simple Typeを接続することは可能です。

4.6 まとめ

  • Simple Typeとは、子供要素を含まない型
  • 標準のデータベースにあるデータ型のほとんどがSimple Typeとして用意されている
  • Simple Typeを作成する場合は、既存のSimple Typeを基にする
  • Simple Typeの作成方法には、Restriction、list、Unionがある

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp