@ns 属性と QName の優先順位
1つの要素もしくは属性の定義に対して @ns 属性と QName が両方とも指定されている場合、QName による指定が優先されます。 例えば次のようなスキーマ定義があったとすると
<element xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <name ns="abc">xsl:stylesheet</name> ... </element>
これは、次のスキーマ定義と同じと見なされます:
<element xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <name>xsl:stylesheet</name> ... </element>
これはまた、以下のスキーマ定義と等価です:
<element> <name ns="http://www.w3.org/1999/XSL/Transform">stylesheet</name> ... </element>
<externalRef> 要素の @ns 属性
<externalRef> 要素に @ns 属性が付加されている場合、<externalRef> 要素が参照先のパターンに置き換えられた後、@ns 属性が付加されます。
サンプルを見てみましょう。 まず、参照先のスキーマ定義「child.rng」は以下のようであるとします:
<!-- child.rng --> <element name="child" xmlns="http://relaxng.org/ns/structure/1.0"> <empty/> </element>
このスキーマ定義を参照する、以下のようなスキーマ定義があると、
<element name="parent" xmlns="http://relaxng.org/ns/structure/1.0"> <externalRef href="child.rng" ns="some-namespace"/> </element>
実質的に、以下のスキーマと同じと見なされます:
<element name="parent" xmlns="http://relaxng.org/ns/structure/1.0"> <element name="child" ns="some-namespace"> <empty/> </element> </element>