parentRef 要素

親階層のマクロを参照する要素

中身及び属性

記述例

ref 要素の場合

以下のスキーマを考えてみます。

<grammar xmlns="http://relaxng.org/ns/structure/1.0">

<define name="想い出の品1">
 <value>卒業アルバム</value>
</define>

<start>
 <element name="僕">
  <choice>
   <ref name="想い出の品1"/>
   <grammar>
    <start>
     <element name="私">
      <ref name="想い出の品2"/>
     </element>
    </start>
    <define name="想い出の品2">
     <value>ビーズのネックレス</value>
    </define>
   </grammar>
  </choice>
 </element>
</start>

</grammar>

grammar 要素が入れ子になっているため、要素にある想い出の品1のマクロは、要素のそれとは「違う階層に属するもの」として扱われます。

ref 要素は「同じ grammar 要素の階層に存在するマクロ」しか参照しません。従って上記の例では、マクロそのものを移動させない限り、いかなるマクロ名を用いたとしても、以下の二種類の文書しか妥当として扱われません。

また、 ref 要素では、要素内から 想い出の品1 を参照することも出来ませんし、要素内から想い出の品2 を参照することも出来ません。

parentRef 要素を用いた場合

要素内から親階層に存在する想い出の品1のマクロを参照する場合は、以下のように書き直します。

<grammar xmlns="http://relaxng.org/ns/structure/1.0">

<define name="想い出の品1">
 <value>卒業アルバム</value>
</define>

<start>
 <element name="僕">
  <choice>
   <ref name="想い出の品1"/>
   <grammar>
    <start>
     <element name="私">
      <parentRef name="想い出の品1"/>
     </element>
    </start>
    <define name="想い出の品2">
     <value>ビーズのネックレス</value>
    </define>
   </grammar>
  </choice>
 </element>
</start>

</grammar>

このようにすることで、要素が取り得る中身は、想い出の品1、つまり「卒業アルバム」に変わります。

附記