Oh so this is where I am confused. I thought that the start element
says what the root element is and if I wanted multiple possible roots
I would need multiple start elements.

But if a choice element under start does the same thing it is much
clearer to do it that way.

Anyways I cleaned up the schema a bit as Norman suggested.
Now does it do what I intend is the question.
I am attaching the newest version tell me if this is any better.

Thanks
Aaron


YAHOO! GROUPS LINKS




<?xml version="1.0" encoding="UTF-8"?>
<grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0"; 
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes";>
  <start>
    <!--Here is an outline of the structure of lilach a book can be the root 
element it must have either one or more pieces or  one or more songs-->
    <!--here are the structural elements for the xml type -->

<choice>
<ref name="book"></ref>
<ref name="piece"></ref>
<ref name="song"></ref>
<ref name="set"></ref>
aa/</choice>
  </start>

<define name="book">
  <element name="book">
    <element name="title">
      <text/>
    </element>
    <element name="bookinfo">
      <text />
      <ref name="frontmatter"/>
    </element>
    <!-- don't remember whats with set -->
  </element>
  
  <!--A book can have one or more pieces or one or more songs -->
  <choice>
    <oneOrMore>
    <element name="piece">
      <text />
      <optional>
        <element name="pieceinfo">
          <text />
          <ref name="frontmatter"/>
        </element>
      </optional>
      <!-- a piece can be without any movements(the child of piece will be 
score or if it has movements then movement will be the child of piece-->
        
      <ref name="movement"></ref>

      <!-- this ends the  movement element  -->

      <!--this begins the score as the child of piece -->
      <ref name="score"></ref>
      <ref name="header" />
      <ref name="midi" />
      <ref name="measure" />
    </element>
  </oneOrMore>
  <oneOrMore>
    <ref name="song"></ref>
  </oneOrMore>
</choice>


</define>
<define name="piece">

 <element name="piece">
      <text />
<ref name="frontmatter"></ref>
<ref name="movement"></ref>
<ref name="score"></ref>
<ref name="system"></ref>
<ref name="part"></ref>
<ref name="header"></ref>
<ref name="midi"></ref>
<ref name="measure"></ref>
    </element>

</define>
<define name="lyrics">
  <element name="lyrics">
    <text/>
  </element>
  <element name="include">
    <attribute name="ref">
      <data type="NCName"/>
    </attribute>
  </element>
            
</define>
                
              




<define name="section">
<element name="section">
         <text />
        </element></define>



<!--phrase is like a div element in html -->
<define name="phrase"><element name="phrase">
         <text />
        </element></define>
<define name="motiv"><element name="motiv">
         <text />
        </element></define>



<define name="song">
  <element name="song">
    <text />
    <ref name="frontmatter"></ref>
    <ref name="movement"></ref>
    <ref name="score"></ref>
    <ref name="system"></ref>
    <ref name="part"></ref>
    <element name="verse">
      <text />
    </element>
    <optional>
      <element name="chorus">
        <text />
      </element>
    </optional>
    <optional>
      <element name="refrain">
        <text />
      </element>
    </optional> 
    <ref name="header"></ref>
    <ref name="midi"></ref>
    <ref name="measure"></ref>
    <ref name="lyrics"></ref>
    <text />
  </element>
</define>

<!--Here are the score layout elements Score system part staff  which represent 
how a score is constructed.-->
        
<define name="movement">
        <zeroOrMore>
          <element name="movement">
            <text />
            <element name="movementinfo">
              <text />
              <ref name="frontmatter"/>
              <text/>
            </element>
          </element>
          <element name="score">
            <text />
            <attribute name="type">
              <data type="NCName"/>
            </attribute>
            <optional>
<!-- begin optional system element -->
              <element name="system">
                <text />
                <oneOrMore>
                  <element name="part">
                    <text />
                    <attribute name="name">
                    </attribute>
                    <element name="header">
                      <oneOrMore>
                        <choice>
                          <text/>
                          <ref name="clef"/>
                          <ref name="key"/>
                          <ref name="time"/>
                          <element name="comment">
                            <text/>
                          </element>
                        </choice>
                      </oneOrMore>
                    </element>
                  </element>
                </oneOrMore>
                <!-- midi subelements to be added later -->
                <optional>
                  <element name="midi">
                    <text />
                  </element>
                </optional>
              </element>
              <!--section,phrase,motiv are like a div element in html, wrappers 
to help divide or for styling usng external style sheet. However they have 
musical meanings which will make them obvious and useful. -->
              <optional>
                <element name="section">
                  <text />
                </element>
              </optional>
              <optional>
                <element name="phrase">
                  <text />
                </element>
              </optional>
              <optional>
                <element name="motiv">
                  <text />
                </element>
              </optional>
              <ref name="measure"></ref>
            </optional>
<!--end optional system element -->
           <ref name="part" />
             <ref name="header" />
             <ref name="midi" />
             <ref name="measure" />
          </element>
        </zeroOrMore>
</define>

<define name="system">
  <optional><element name="system"><text />
  <element name="part"><text />
  <attribute name="name"></attribute>
  <element name="header"><text /></element>
  <ref name="midi"></ref>
  <ref name="measure"></ref>
  </element>

  </element>
  </optional>


</define>

<define name="score">
        <element name="score">
          <attribute name="type">
            <data type="NCName"/>
          </attribute>
        </element>
</define>  
 <define name="frontmatter">        
<optional>  <element name="language">
            <text/>
          </element></optional>



        <optional>  <element name="title">
            <text/>
          </element></optional>
          <optional> <element name="subtitle">
            <text/>
          </element></optional>
          <optional> <element name="composer">
            <text/>
          </element></optional>

          <optional> <element name="instrument">
            <text/>
          </element></optional>
          <optional> <element name="texidoc">
            <text/>
          </element></optional>

 </define>

           <define name="tempo">
              <element name="tempo">
            <attribute name="mm">
              <data type="integer"/>
            </attribute>
            <attribute name="note">
              <data type="integer"/>
            </attribute>
            <data type="NCName"/>
          </element>

           </define>
             
               <define name="comment">
                 <element name="comment">
                   <text />
                 </element>


</define>
          
 
  <define name="time">
    <element name="time">
      <text/>
    </element>
  </define>
  
  <define name="clef">
    <element name="clef">
      <data type="NCName"/>
    </element>
  </define>


<define name="key">
 <element name="key">
      <data type="NCName"/>
    </element>
  </define>


<define name="header">
<element name="header"><text />

 <element name="time">
      <text/>
    </element>
   <element name="clef">
      <data type="NCName"/>
    </element> 

<element name="key">
      <data type="NCName"/>
    </element>

</element>
</define>
<define name="part">
  <oneOrMore>
    <element name="part">
      <text />
      <attribute name="name">
      </attribute>
      <element name="header">
        <oneOrMore>
          <choice>
            <text/>
            <ref name="clef"/>
            <ref name="key"/>
            <ref name="time"/>
            <element name="comment">
              <text/>
            </element>
          </choice>
        </oneOrMore>
      </element>
    </element>
  </oneOrMore>
</define>
 


<define name="midi">
<element name="midi"><text />

<attribute name="notevalue"></attribute>
<attribute name="mm"></attribute>
<element name="gminstname"><text /></element>
<element name="progname"><text /></element>
<element name="patchnumber"><text /></element>
</element>



</define> 
  <define name="measure">

    <element name="measure">
      <optional>
        <attribute name="barline">
          <data type="NCName"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="bartype">
          <data type="NCName"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="mark">
          <data type="NCName"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="num">
          <data type="integer"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="type">
          <data type="NCName"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="value">
          <data type="integer"/>
        </attribute>
      </optional>
      <oneOrMore>
        <choice>
          <text/>
          <ref name="beam"/>
          <element name="breathe">
            <empty/>
          </element>
          <element name="crescbegin">
            <empty/>
          </element>
          <element name="crescend">
            <empty/>
          </element>
          <element name="dimbegin">
            <empty/>
          </element>
          <element name="dimend">
            <empty/>
          </element>
          <element name="dynamic">
            <data type="NCName"/>
          </element>
          <element name="glissando">
            <empty/>
          </element>
          <element name="markup">
            <element name="emphasis">
              <text/>
            </element>
          </element>
          <element name="prall">
            <empty/>
          </element>
          <element name="rest">
            <optional>
              <attribute name="type">
                <data type="NCName"/>
              </attribute>
            </optional>
            <data type="integer"/>
          </element>
          <element name="slurbegin">
            <empty/>
          </element>
          <element name="slurend">
            <empty/>
          </element>
          <element name="staccato">
            <attribute name="repeat">
              <data type="integer"/>
            </attribute>
          </element>
          <element name="tuplet">
            <attribute name="bracket">
              <data type="integer"/>
            </attribute>
            <attribute name="label">
              <data type="integer"/>
            </attribute>
            <attribute name="type">
              <data type="integer"/>
            </attribute>
            <text/>
          </element>
<element name="polyphony"><text /></element>          
<element name="voice1">
            <oneOrMore>
              <choice>
                <text/>
                <element name="tremelo">
                  <attribute name="value">
                    <data type="integer"/>
                  </attribute>
                  <text/>
                </element>
              </choice>
            </oneOrMore>
          </element>
          <element name="voice2">
            <text/>
          </element>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="beam">
    <element name="beam">
      <oneOrMore>
        <choice>
          <text/>
          <element name="appogiatura">
            <oneOrMore>
              <choice>
                <text/>
                <ref name="beam"/>
              </choice>
            </oneOrMore>
          </element>
        </choice>
      </oneOrMore>
    </element>
  </define>

</grammar>

Reply via email to