myGroup > myProject
 

start 要素

XML 文書のルート要素を定義

  • 文書のルート要素を指定します(XML Schema や DTD では、「文書へのスキーマの埋め込み」を前提としているため、スキーマ内でルート要素を指定することは出来ません)。

属性

combine 属性

  • 直上の grammar要素 が複数の start要素 を持つ場合の結合方法を指定します。とりうる値は choice もしくは interleave です。これらの start要素 のうち一つは combine 属性 を持たなくて (省略して) 構いませんがそれ以外は同一の属性値を持たなくてはなりません。
  • XML において属性値 interleave を指定できるのは grammar要素 を入れ子にした場合のみです。
  • 子ノード

    • 複数の コンテナ もしくは サブコンテナ を子要素に持つことが出来ます。とりうる コンテナ の組み合わせは文書の形式によって制約を受けます。
    • ref要素 でマクロを指定しても構いません(通常はこちらを用いることが多いでしょう)。

      ただし、XML の場合、参照先の define要素 の子要素が element要素 である必要があります。

    • XML 文書では、最上位に要素を一つだけ持ちます(ルート要素)。最上位の grammar要素 では、直下の子要素の element要素 で指定された要素が、ルート要素となります。指定するルート要素は、複数あっても構いません。ただし、複数から択一になるので、choice要素 を「かます」必要があります。その場合、実際に検証される文書では、スキーマ内で指定されたルート要素のいずれか一つをルート要素にすることが出来ます。

    使用例

    例 1: ref要素 を用いる方法

    <span class="codefrag">ref</span>要素 を用いる方法
    <?xml version="1.0"?>
    <grammar xmlns="http://relaxng.org/ns/structure/1.0"
      ns="http://lena.org/">
    
    <start>
     <ref name="document"/>
    </start>
    
    <define name="document">
     <element name="document">
       <empty/>
     </element>
    </define>
    </grammar>
    

    例 2: choice要素 を用い、ルート要素を複数指定する方法

    <span class="codefrag">choice</span>要素 を用い、ルート要素を複数指定する方法

    この例の場合、 doc1, doc2 いずれもルート要素とすることが出来る。ただし、内容の違いに注意。

    <start>
     <choice>
      <element name="doc1">
       <text/>
      </element>
      <element name="doc2">
       <empty/>
      </element>
     </choice>
    </start>
    

    例 3: start要素 を複数使用する方法

    <span class="codefrag">start</span>要素 を複数使用する方法

    実質的には、上記と全く同一。

    <start>
     <element name="doc1">
      <text/>
     </element>
    </start>
    
    <start combine="choice">
     <element name="doc2">
      <empty/>
     </element>
    </start>
    

    参考文献