list 要素
空白区切りのデータ列挙を明示する
- 空白文字で区切られた一聯の列挙型データは、list要素 で明示出来ます。
- 要素の中身としても、属性の値としても使用出来ます。区切りは通常のスペース, タブ文字, 改行文字などが使えます。当然ですが、全角空白は空白とは見倣されません。
- XML では、通常、常に element要素, attribute要素, define要素 の子孫でなければなりません。
- grammar 要素の直下には置いてはなりません。
- スキーマのルート要素に用いることが出来ます。ただし、そのスキーマは単独では用いることは出来ず、 externalRef 要素の参照先としてのみ利用できます。
属性
- この要素に固有な属性はありません。
子ノード
- 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 赤"/>
以上の例では、色指定の個数制限は設けられておりません。もう少し複雑な記述をすれば、ある程度の制限を設けることは可能です。
参考文献
- James Clark and Makoto Murata, ISO/IEC FDIS 19757-2 Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG
- 古林 寛, 「list要素 @ ぽかぽか RELAX NG 工房」