ref 要素
マクロを参照する要素
- define要素 で定義されたマクロを、他のパターンの中で参照し、埋め込むための要素です。
- include要素 や externalRef要素 を使って外部ファイルを取り込んでいる場合は、異なるファイル間で ref要素 と define要素 が対応していても構いません。
- コンテナ の属性 (XML 文書なら要素/属性名) の定義の中では使用できません。
つまり、XML の name要素, anyName要素, nsName要素 の「置き換え」としては使えない、ということです。当然、要素や属性名の定義に関係した記述は「モジュール化」は出来ません。
- 入れ子の参照
自分自身が含まれるパターンを取り込んだり、参照先の定義に自分自身への参照先を記述したりすることも可能です。例えば、以下の記述では、 nest 要素が無限に入れ子可能であることが定義されています。
<define name="NestPattern"> <element name="nest"> <ref name="NestPattern"/> </element> </define>
XML において、このような入れ子が可能であるのは、大抵は要素の中身の定義内のみに限られます。属性の定義を入れ子にすることなどはもともと不可能なので、上記のような記述は出来ません。
- スキーマのルート要素に用いることが出来ます。ただし、そのスキーマは単独では用いることは出来ず、 externalRef 要素の参照先としてのみ利用できます。
属性
name 属性
マクロ名を指定します。 NCName なので、コロンは使えません。アンダースコア、ハイフン、ピリオドは使用できます。大文字小文字は区別されますので、注意してください。また、参照先が define要素 で定義されていない場合はエラーになります。
ns,xmlns:xxx,datatypeLibrary 属性
共通属性 ns 属性 ,xmlns:xxxx 属性 , datatypeLibrary 属性 が使用できます。例えば、外部ファイルへの参照を行う場合、名前空間やデータ型の再定義をしたい際に使用出来ます。
子ノード
- 常に空要素。子ノードを持ちません。
使用例
参考文献
- James Clark and Makoto Murata, ISO/IEC FDIS 19757-2 Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG
- 古林 寛, 「ref要素 @ ぽかぽか RELAX NG 工房」