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
- Visit your group "rng-users" on the web.
- To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
- Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
<?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>
