$Id: step3.html 1.14 2000/02/29 07:26:56 murata Exp $
STEP 3では、データ型について説明します。
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で独自に導入したデータ型はnoneと
emptyStringの二つです。
none空のデータ型です。どんな文字列もこのデータ型に属することはありません。RELAXでは、noneを用いて属性の禁止を指定します。 次の例では、classという属性が禁止されています。
<tag name="p"> <attribute name="class" type="none"/> </tag>
emptyString空の文字列からなるデータ型です。DTDのEMPTYとの互換性が
あります。
<elementRule pred="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への参照です。要素minInclusiveと
maxInclusiveはそれぞれ最小値と最大値に関する追加条件を表
しています。したがって、age要素の内容は、18から65までの
整数を表す文字列になります。
<elementRule pred="age" type="integer"> <minInclusive value="18"/> <maxInclusive value="65"/> </elementRule>
age要素に、文字列"20"を内容として含むことができます。
<age>20</age>
しかし、文字列"11"は駄目です。
<age>11</age>
attributeの場合attributeが参照しているデータ型に制限を加えるには、
attributeに子要素を追加します。
以下の例では、employeeのsex属性は、
manかwomanのどちらかであると指定しています.
ここで、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!
mura034@attglobal.net