今回は名前に関連する要素。
- <name>
- <anyName>
- <nsName>
- <except>
<name> 要素
<name> 要素は要素や属性の名前を定義するのに使います。 <element> 要素や <attribute> 要素の直下に <name> 要素を書くこともできますが、以下のように <choice> 要素によって幾つかの名前の中から選択することができます:
<element> <choice> <name>stylesheet</name> <name>transform</name> </choice> ... </element>
名前空間の指定方法はそのうちに。
<anyName> 要素
<anyName> 要素は全ての名前にマッチする(名前)パターンです。
★任意の要素にマッチするパターン★
以下のパターンは、任意の要素にマッチします:
<grammar xmlns="http://relaxng.org/ns/structure/1.0"> <start> <ref="anyElement"/> </start> <define name="anyElement"> <element> <anyName/> <zeroOrMore> <choice> <ref name="anyAttribute"/> <text/> <ref name="anyElement"/> </choice> </zeroOrMore> </element> </define> <define name="anyAttribute"> <attribute> <anyName/> </attribute> </define> </grammar>
<nsName> 要素
<nsName> 要素は特定の名前空間に属する名前を定義する要素です。 名前空間を特定するには @ns 属性を用います。 例えば RELAX NG 名前空間 ("http://relaxng.org/ns/structure/1.0") に属する名前を持つ要素は以下のように定義します:
<element> <nsName ns="http://relaxng.org/ns/structure/1.0"/> ... </element>
<nsName> 要素に @ns 属性が無ければ、祖先要素を遡って探します。 それでもなければ、空文字列 "" が指定されます。
<except> 要素
<anyName> 要素や <nsName> 要素の子要素として <except> 要素を書くことで、ある(名前)パターンにマッチする名前を除去することができます。
★ある名前空間に属しない名前を持つ要素のパターン★
以下の <define> 要素は、RELAX NG 名前空間に属しないすべての要素にマッチします:
<define name="foreignElement"> <element> <anyName> <except> <nsName ns="http://relaxng.org/ns/structure/1.0"/> </except> </anyName> <zeroOrMore> <choice> <ref name="anyAttribute"/> <text/> <ref name="anyElement"/> </choice> </zeroOrMore> </element> </define>
anyAttribute, anyElement は上記の「任意の要素にマッチするパターン」内で定義されているパターンです。