myGroup > myProject
 

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要素 を使用した例

<span class="codefrag">externalRef</span>要素 を使用した例
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 要素を使わない場合

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>

参考文献