myGroup > myProject
 

include 要素

外部モジュールを取り込む要素

  • 外部スキーマの定義を取り込むための要素です。
  • 当然、取り込まれるスキーマは文法に則ったものでなければなりません。また、 grammar要素 をルート要素としないスキーマは取り込めません。替わりに externalRef要素 を用いてください。
  • 必ず、 grammar要素 の直下に記述しなければなりません。その条件さえ満たしていれば、どこに置いても構いません。
  • ref要素 で、外部スキーマに記述されたマクロを参照出来ます。ただし、定義されていないマクロを参照してはなりません。
  • 異なる名前空間を持つスキーマも取り込むことが出来ます。このことにより、既に提供されている異なる種類のモジュールを単に組み合わせるだけで、名前空間の違いを配慮せずとも独自のスキーマを簡単に作ることが出来ます(当然、文書インスタンスでは、名前空間を考慮しなければなりません)。

属性

href 属性

  
  • 取り込む外部スキーマ名を指定します。 値は URI です。
  •   

子ノード

  • 単に取り込みたい場合は、空要素とします。
  • その他、start要素, div要素, define要素 を子要素とすることが出来ます。
  • include要素 直下の define要素 は、 include要素 で示される参照先のスキーマの定義の上書きをする場合にのみ用いられます。新たな定義をしたり、combine 属性 を用いた定義の結合をしたりすることは出来ません。

使用例

例 1: 再定義を含める場合

再定義を含める場合

以下の一聯のファイルを例に挙げます。

ファイル1: schema1.rng
<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
  ns="http://lena.org/">

<start>
 <element name="document">
   <ref name="para"/>
 </element>
</start>

<include href="schema2.rng">
 <define name="em-content"> <!-- "em-content" の再定義 -->
  <text/>
 </define>
</include>

</grammar>
ファイル2: schema2.rng
<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
  ns="http://lena.org/">

<define name="para">
 <element name="em">
  <ref name="em-content"/>
 </element>
</define>

<define name="em-content">
  <empty/>
</define>

</grammar>

以上の場合、 schema1.rng の内容は、以下の内容と等価になります (マクロの展開はしておりません)。

<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
  ns="http://lena.org/">

<start>
 <element name="document">
   <ref name="para"/>
 </element>
</start>

<define name="para">
 <element name="em">
  <ref name="em-content"/>
 </element>
</define>

<define name="em-content">
  <text/> <!-- define 要素によって上書きされた -->
</define>

</grammar>

例 2: 異なる名前空間を有するスキーマの取り込み

異なる名前空間を有するスキーマの取り込み

以下の一聯のファイルを例に挙げます。

ファイル1: schema1.rng
<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
  ns="http://lena.org/">

<start>
 <element name="document">
   <ref name="para"/>
 </element>
</start>

<include href="schema2.rng"/>

</grammar>
ファイル2: schema2.rng
<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
  ns="http://batz.org/">

<define name="para">
 <element name="em"><empty/></element>
</define>

</grammar>

以上の場合、 schema1.rng の内容は、以下の内容と等価になります。

<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
  xmlns:lena="http://lena.org/" xmlns:batz="http://batz.org/">

<start>
 <element name="lena:document">
   <ref name="para"/>
 </element>
</start>

<define name="para">
 <element name="batz:em"><empty/></element>
</define>

</grammar>

参考文献