myGroup > myProject
 

list 要素

空白区切りのデータ列挙を明示する

  • 空白文字で区切られた一聯の列挙型データは、list要素 で明示出来ます。
  • 要素の中身としても、属性の値としても使用出来ます。区切りは通常のスペース, タブ文字, 改行文字などが使えます。当然ですが、全角空白は空白とは見倣されません。
  • XML では、通常、常に element要素, attribute要素, define要素 の子孫でなければなりません。
  • grammar 要素の直下には置いてはなりません。
  • スキーマのルート要素に用いることが出来ます。ただし、そのスキーマは単独では用いることは出来ず、 externalRef 要素の参照先としてのみ利用できます。

属性

separator 属性

区切り文字を表します。

  • decode : 区切り文字が連続した場合、それらを1つの区切り文字として扱います。
  • encode : 終端の token の後に、指定した区切り文字を出力しません。

delimiter 属性

区切り文字を表します。

  • decode : 区切り文字が連続した場合、空データとして扱います。
  • encode : 終端の token の後に、指定した区切り文字を出力します。

属性の省略

separator 属性が指定された場合と同等の動きをします。 その際、区切り文字は、" "、"\t"、"\n"、"\r"となります。

制約

区切り文字に、文字列を指定することはできません。

「A,,B」というように空文字がある際、数値の場合はエラーとして扱います。 文字データの場合は、長さ 0 の文字として扱います。

子ノード

  • value要素, data要素 を中身に置くことが出来ます。ただし、text要素 など、それ自体に空白を含み得るデータを置くことは出来ません。区切りの関係が不明確になるためです。
  • XML では element要素, attribute要素 を子孫に入れてはいけません。
  • 子要素パターンの出現順位の関係は保たれます(要素の中身, 属性値いずれにも当て嵌まります)。順位不同にしたい場合は、interleave要素, choice要素 どを適宜使う必要があります。

使用例

例 1: 地図中での進行順路

地図中での進行順路

ゲームマップなどで宝の在処を指し示したい場合に、入口からどのように進めば何が得られるかをデータ化したい場合があるかも知れません。その場合、空白区切りで一画面毎の順路を記述しておくと便利な場合があるでしょう。以下にスキーマと XML 文書(の断片)の一例を示します。

スキーマ断片の一例
<element name="宝">
 <attribute name="名前"><text/></attribute>
 <list>
  <oneOrMore>
   <choice>
    <value>上</value>
    <value>下</value>
    <value>左</value>
    <value>右</value>
   </choice>
  </oneOrMore>
 </list>
</element>
妥当な XML 文書の断片の一例
<宝 名前="エメラルドロッド">
上 上 左 下 左 上 上 右 下
</宝>
妥当でない XML 文書の一例
<宝 名前="黄金の兜">
上 上 左 下 左  上 右 下 <!-- "中" が含まれている -->
</宝>

例 2: 色の列挙

色の列挙

Cascading Style Sheets では、 枠線の色指定は空白区切りで列挙します(上, 右, 下, 左の順)。この表記を XML の属性(ここでは属性とします)で実現させるための一つの方法として、list要素 を使うことを考えます。以下の例では、 RGB.datatype は既に定義済 (#RRGGBB のみの形を許す) とします。ついでに、基本的な色 (, , 黄色)に関しては、名前を使えるとします。

スキーマ断片の一例
<element name="枠線">
 <empty/>
 <attribute name="色">
  <list>
   <oneOrMore>
    <choice>
     <ref name="RGB.datatype"/>
     <value>赤</value>
     <value>青</value>
     <value>黄色</value>
    </choice>
   </oneOrMore>
  </list>
 </attribute>
</element>
妥当な XML 文書断片の例
  • <枠線 色=" #222255 #ab7766 #00a3b1 #ff0022 "/>
  • <枠線 色=" 黄色 #ab7766 赤 "/>

以上の例では、色指定の個数制限は設けられておりません。もう少し複雑な記述をすれば、ある程度の制限を設けることは可能です。

参考文献