grammar
要素の子要素として記述することは出来ません。include
要素が grammar
要素を最上位要素としたスキーマを取り込むのに対し、 externalRef
要素は、それ以外の要素 (主にパターン関聯要素)が最上位要素であるスキーマを参照するのに用いられます。ref
要素と同様、要素/属性名の定義の中では使用できません。href
属性で指定します。 値は URI です。ns
, xmlns:xxx
, datatypeLibrary
各属性が使用できます。例えば、外部ファイルへの参照を行う場合、名前空間やデータ型の再定義をしたい際に使用出来ます (ただし、参照先で既に定義されている場合は、そちらが優先されます)。ref
要素との違いは、 define
要素の中身を指定するか外部スキーマの内容を指定するかの違いだけで、原則として機能は全く同一です。
つまり、 externalRef
要素で参照される外部スキーマの書式は、 define
要素の中身と成り得る書式と同一である必要があります。具体例に関しては後述します。
<?xml version="1.0"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0"> <start> <element name="drinkshop"> <externalRef href="schema2.rng"/> <!-- 外部スキーマの参照 --> </element> </start> </grammar>
<?xml version="1.0"?> <choice xmlns="http://relaxng.org/ns/structure/1.0"> <element name="favoriteItem"> <text/> </element> <element name="regularItem"> <text/> </element> </choice>
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>