Powered by SmartDoc
ENGLISHJAPANESE

STEP 3: データ型

$Id: step3.sdoc 1.10 2000/08/26 03:14:38 murata Exp $

STEP 3では,データ型について説明します.

XML Schema Part 2のデータ型

XML Schema Part 2は,多くの組み込み済みデータ型を導入しています.それらは,XML Schema以外の仕様からも利用できるように配慮されています.RELAXは,これらの組み込み済みデータ型をすべて引き継いでいます.

XML Schema Part 2の組み込み済みデータ型には,XMLのDTDから借りたものと,新規に導入されたものがあります.次に,XMLのDTDから借りたものの一覧を示します.

次に,XML Schema Part 2で新たに導入した組み込み済みデータ型の一覧を示します.

XML Schema Part 2では,これらのデータ型を指定するとき,範囲などの制限をつけることができます.RELAXでも同様です.ただし,XML Schema Part 2とは異なり,ユーザがデータ型を定義することは出来ません.

RELAX独自のデータ型

RELAXで独自に導入したデータ型はnoneemptyStringの二つです.

none

空のデータ型です.どんな文字列もこのデータ型に属することはありません.RELAXでは,noneを用いて属性の禁止を指定します.次の例では,classという属性が禁止されています.noneを導入する理由は,STEP 8で明らかになります.

<tag name="p">
  <attribute name="class" type="none"/>
</tag>

したがって,次の開始タグは許されません.

  <p class="foo">

emptyString

空の文字列からなるデータ型です.DTDのEMPTYとの互換性があります.

<elementRule role="em" type="emptyString"/>

このelementRuleは,次の二つに限って許しています.<em></em>の間に空白が入ることは許されません.

<em/>
<em></em>

付加条件

XML Schema Part 2と同様に,RELAXでもデータ型に制限を加えることができます.たとえば,integerに「15以上,65以下」という制限を加えることができます.制限を示す構文も,XML Schema Part 2と同様です.

elementRuleの場合

elementRuleが参照しているデータ型に制限を加えるには,elementRuleに子要素を追加します.

以下の例では,要素型ageの生け垣モデルはintegerへの参照です.要素minInclusivemaxInclusiveはそれぞれ最小値と最大値に関する追加条件を表しています.したがって,age要素の内容は,18から65までの整数を表す文字列になります.

<elementRule role="age" type="integer">
  <minInclusive value="18"/>
  <maxInclusive value="65"/>
</elementRule>

age要素に,文字列"20"を内容として含むことができます.

<age>20</age>

しかし,文字列"11"は駄目です.

<age>11</age>

attributeの場合

attributeが参照しているデータ型に制限を加えるには,attributeに子要素を追加します.

以下の例では,employeesex属性は,manwomanのどちらかであると指定しています.ここで,enumerationは許される値を指定する付加条件です.

<tag name="employee">
  <attribute name="sex" type="NMTOKEN">
    <enumeration value="man"/>
    <enumeration value="woman"/>
  </attribute>
</tag>

sex属性は文字列"man"を持つことが出来ます.

<employee sex="man"/>

しかし,文字列"foo"は駄目です.

<employee sex="foo"/>

まとめ

STEP 3まででもRELAXは十分使いでがあると思います.RELAX!