myGroup > myProject
 

value 要素

特定値のテキストを要求する要素

  • ある要素の中身もしくは属性値において、ある特定の値を持つテキストのみを許すようにしたい場合、その値を value要素 として明示します。
  • element要素 もしくは attribute要素 の子孫要素として主に用いられます。
  • grammar 要素の直下には置いてはなりません。

属性

type 属性

データ型を指定します。

  • type 属性 が存在する場合、先祖(もしくは自分自身の)要素の datatypeLibrary 属性 によるデータ型ライブラリに応じたデータ型が適用されます。当然ですが、value要素 の中身は、そのデータ型に準じたものでなければなりません。
  • type 属性 が存在しない場合は、 type="token" が(暗示的に)指定されたものと見倣され、先祖要素の datatypeLibrary 属性 による指定は無視されます(RELAX NG 由来のデフォルトのデータ型になる)。

制約

value 要素は、 Mapping definition の以下の位置のみに現れることができます。

  • - lang:value-of - lang:value -
  • - dat:container - dat:value -
  • - dat:container - lang:value-of - ums:value -

ただし、ここで dat:container は dat:byte, dat:bit, rng:element, rng:attribute などを示しています。以下は obsolete です。

  • - lang:value-of - dat:container - ums:value -

子ノード

テキストノードを子に一つ持ち特定の値を定義します。

使用例

例 1: 要素の中身

要素の中身

例えば、 好物 要素の中身を ステーキショートケーキクリームシチューの三つからの択一にしたい場合は、以下のような記述が考えられます。

スキーマ(の一部)
<element name="好物">
 <choice>
  <value>ステーキ</value>
  <value>ショートケーキ</value>
  <value>クリームシチュー</value>
 </choice>
</element>
実際の XML 文書(の断片)の一例
  • <好物>ショートケーキ</好物> <!-- 正しい -->
  • <好物>ハンバーグ</好物> <!-- エラー -->

例 2: 属性値

属性値

例えば、 画像 要素において ファイル 属性と 配置 属性を定義し、ファイル属性は任意のテキスト、配置属性には のどれかの値を入れられるようにしたい場合、以下のような記述が出来ます(要素は空要素とします)。

スキーマ(の一部)
<element name="画像">
 <empty/>
 <attribute name="ファイル">
  <text/>
 </attribute>
 <attribute name="配置">
  <choice>
   <value>右</value>
   <value>左</value>
  </choice>
 </attribute>
</element>
実際の XML 文書(の断片)の一例
  • <画像 ファイル="RheineRiver.jpg" 配置="左"/> <!-- 正しい -->
  • <画像 ファイル="ObiRiver.gif" 配置="中央"/> <!-- エラー -->

以上の例のように、value要素 は、choice要素 と用いることが多いかと思われます。また、値を一つしか持ち得ないような場合は、choice要素 を介さず、value要素 を直截子要素として記述することが可能です。

DTD の如く「何も入れなかった場合の初期値」を決定することは出来ません。RELAX-NGはあくまで「XML文書の検証」をするための機構であり、何かしらの前提をスキーマ自身に盛りこむべきではない、との理念に基づいているからです。

参考文献