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文書の検証」をするための機構であり、何かしらの前提をスキーマ自身に盛りこむべきではない、との理念に基づいているからです。