data 要素
特定のデータ型を明示的に指定する要素
- 普通のテキストではなく、数値(整数や実数)や URI, Base64 などといった、特殊な形のテキストのみを許容したい場合、それを data要素 として明示します。
- 要素の中身としても、属性値としても使えます。それぞれ、element要素, attribute要素 の中身として data要素 を記述します。
- 先祖要素において、 datatypeLibrary 属性 によって、取り込むデータ型ライブラリを明示する必要があります。
属性
制約
data 要素は、 Mapping definition の以下の位置のみに現れることができます。
- - lang:value-of - lang:data -
- - dat:container - dat:data -
- - dat:container - lang:value-of - ums:data -
ただし、ここで dat:container は dat:byte, dat:bit, rng:element, rng:attribute などを示しています。以下は obsolete です。
- - lang:value-of - dat:container - ums:data -
以下の場合は、データが「不定」になります。
- decode 時の lang:data
- encode 時の dat:data
子ノード
- 空要素にした場合、データの制限は type 属性 の内容のみに依存します。
- param要素 を中身に入れることで、データ型にさらなる制限を附加させることが出来ます。param要素 を複数入れても構いません。
使用例
例 1: プロフィールの作成
W3C XML Schema Part 2 のライブラリを用いた例を紹介致します。尚、param要素 を併用した例に関しては、「param要素」の項を御覧ください。
プロフィール に、氏名, 年齢, 誕生日, サイトURI を入れたい場合は、以下のようなスキーマが作られるでしょう(簡単のため、要素の出現順序は固定とします)。
- スキーマ例
-
<?xml version="1.0"?> <element name="プロフィール" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <element name="氏名"> <data type="string"/> <!-- 通常の文字列 --> </element> <element name="年齢"> <data type="integer"/> <!-- データは整数 --> </element> <element name="誕生日"> <data type="date"/> <!-- データは日附(ISO 8601形式) --> </element> <element name="サイト"> <data type="anyURI"/> <!-- データは URI --> </element> </element>
- 妥当な XML 文書の一例
-
<?xml version="1.0"?> <プロフィール> <氏名>真田ゆり子</氏名> <年齢>18</年齢> <誕生日>1985-05-11</誕生日> <サイト>http://www.sanada.org/</サイト> </プロフィール>
- 妥当でない XML 文書の一例
-
<?xml version="1.0"?> <プロフィール> <氏名>金子時男</氏名> <年齢>さんじゅうに</年齢> <!-- 整数でない --> <誕生日>昭和40年5月1日</誕生日> <!-- ISO 8601 形式でない --> <サイト>金子プロ</サイト> <!-- URI でない --> </プロフィール>
参考文献
- James Clark and Makoto Murata, ISO/IEC FDIS 19757-2 Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG
- 古林 寛, 「data要素 @ ぽかぽか RELAX NG 工房」