externalRef 要素
外部スキーマをマクロとして参照する要素
- 外部スキーマを、まるごとマクロとして参照、埋め込みを行うための要素です。
- include要素 が grammar要素 を最上位要素としたスキーマを取り込むのに対し、externalRef要素 は、主にそれ以外の要素が最上位要素であるスキーマを参照するのに用いられます。
- コンテナ の属性 (XML 文書なら要素/属性名) の定義の中では使用できません。
つまり、XML の name要素, anyName要素, nsName要素 の「置き換え」としては使えない、ということです。当然、要素や属性名の定義に関係した記述は「モジュール化」は出来ません。
- 一応、最上位要素としても記述できます。意味があるのかどうかはともかく、取り敢えず可能です。
- ref要素 との違いは、define要素 の中身を指定するか外部スキーマの内容を指定するかの違いだけで、原則として機能は全く同一です。つまり、externalRef要素 で参照される外部スキーマの書式は、define要素 の中身と成り得る書式と同一である必要があります。具体例に関しては後述します。
- grammar 要素の直下には置いてはなりません。
属性
href 属性
- 取り込む外部スキーマ名を指定します。 値は URI です。
ns,xmlns:xxx,datatypeLibrary 属性
共通属性 ns 属性 ,xmlns:xxxx 属性 , datatypeLibrary 属性 が使用できます。例えば、外部ファイルへの参照を行う場合、名前空間やデータ型の再定義をしたい際に使用出来ます(ただし、参照先で既に定義されている場合は、そちらが優先されます)。
子ノード
- 常に空要素。子ノードを持ちません。
使用例
例 1: externalRef要素 を使用した例
- schema1.rng
-
<?xml version="1.0"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0"> <start> <element name="drinkshop"> <externalRef href="schema2.rng"/> <!-- 外部スキーマの参照 --> </element> </start> </grammar>
- schema2.rng (最上位要素は大抵パターン関聯要素 ; ここでは choice 要素)
-
<?xml version="1.0"?> <choice xmlns="http://relaxng.org/ns/structure/1.0"> <element name="favoriteItem"> <text/> </element> <element name="regularItem"> <text/> </element> </choice>
例 2: externalRef 要素を使わない場合
schema1.rng は、以下の記述と同一になります (強調部分は、 externalRef 要素によって取り込まれた記述)。
<?xml version="1.0"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0"> <start> <element name="drinkshop"> <choice> <element name="favoriteItem"> <text/> </element> <element name="regularItem"> <text/> </element> </choice> </element> </start> </grammar>