value
要素として明示します。element
要素もしくは attribute
要素の子孫要素として主に用いられます。grammar
要素の直下には置いてはなりません。type
属性を用いて、データ型を明示することが出来ます。
type
属性が存在する場合、先祖(もしくは自分自身の)要素の dataTypeLibrary
属性によるデータ型ライブラリに応じたデータ型が適用されます。当然ですが、 value
要素の中身は、そのデータ型に準じたものでなければなりません。type
属性が存在しない場合は、 type="token"
が(暗示的に)指定されたものと見倣され、先祖要素の datatypeLibrary
属性による指定は無視されます(RELAX NG 由来のデフォルトのデータ型になる)。例えば、 好物
要素の中身を ステーキ
、ショートケーキ
、クリームシチュー
の三つからの択一にしたい場合は、以下のような記述が考えられます。
<element name="好物"> <choice> <value>ステーキ</value> <value>ショートケーキ</value> <value>クリームシチュー</value> </choice> </element>
<好物>ショートケーキ</好物> <!-- 正しい -->
<好物>ハンバーグ</好物> <!-- エラー -->
例えば、 画像
要素において ファイル
属性と 配置
属性を定義し、ファイル
属性は任意のテキスト、配置
属性には 右
、左
のどれかの値を入れられるようにしたい場合、以下のような記述が出来ます(要素は空要素とします)。
<element name="画像"> <empty/> <attribute name="ファイル"> <text/> </attribute> <attribute name="配置"> <choice> <value>右</value> <value>左</value> </choice> </attribute> </element>
<画像 ファイル="RheineRiver.jpg" 配置="左"/> <!-- 正しい -->
<画像 ファイル="ObiRiver.gif" 配置="中央"/> <!-- エラー -->
以上の例のように、 value
要素は、 choice
要素と用いることが多いかと思われます。また、値を一つしか持ち得ないような場合は、choice
要素を介さず、 value
要素を直截子要素として記述することが可能です。
DTD の如く「何も入れなかった場合の初期値」を決定することは出来ません。RELAX-NGはあくまで「XML文書の検証」をするための機構であり、何かしらの前提をスキーマ自身に盛りこむべきではない、との理念に基づいているからです。