href
属性(必須)で明示します。grammar
要素をルート要素としないスキーマは取り込めません。替わりに externalRef
要素を用いてください。grammar
要素の直下に記述しなければなりません。その条件さえ満たしていれば、どこに置いても構いません。ref
要素で、外部スキーマに記述されたマクロを参照出来ます。ただし、定義されていないマクロを参照してはなりません。start
, div
, define
各要素を子要素とすることが出来ます。include
要素直下の define
要素は、 include
要素で示される参照先のスキーマの定義の上書きをする場合にのみ用いられます。新たな定義をしたり、 combine
属性を用いた定義の結合をしたりすることは出来ません。以下の一聯のファイルを例に挙げます。
<?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>
<?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>
以下の一聯のファイルを例に挙げます。
<?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>
<?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>