NIFF XML Proposal - XML Schema

From: http://niffty.sourceforge.net/xml/NIFFML.xsd. See: NIFF XML Proposal on SourceForge.



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE schema SYSTEM "XMLSchema.dtd">
<!-- From: http://niffty.sourceforge.net/xml/NIFFML.xsd -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="NIFF" elementFormDefault="unqualified" attributeFormDefault="unqualified">
  <xs:element name="NIFF">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Setup"/>
        <xs:element ref="Data"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Setup">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="NiffInformation"/>
        <xs:element ref="PartsList"/>
        <xs:choice maxOccurs="unbounded" minOccurs="0">
          <xs:element ref="RiffInfo"/>
          <xs:element ref="StaffGroupings"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="NiffInformation">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="SpacingByPart" type="Empty"/>
      </xs:choice>
      <xs:attribute use="required" name="niffVersion" type="xs:string"/>
      <xs:attribute name="writingProgramType">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="engraving program"/>
            <xs:enumeration value="scanning program"/>
            <xs:enumeration value="MIDI interpreter"/>
            <xs:enumeration value="sequencer"/>
            <xs:enumeration value="research program"/>
            <xs:enumeration value="educational program"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="standardUnits">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="inches"/>
            <xs:enumeration value="centimeters"/>
            <xs:enumeration value="points"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="absoluteUnitsPerStandardUnit" type="xs:integer"/>
      <xs:attribute name="midiTicksPerQuarter" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="PartsList">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element ref="PartDescription"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="PartDescription">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="LyricVerseOffset" type="LyricVerseOffset"/>
        <xs:element name="ChordSymbolsOffset" type="IntegerValue"/>
        <xs:element name="GuitarGridOffset" type="IntegerValue"/>
        <xs:element name="RehearsalMarkOffset" type="IntegerValue"/>
        <xs:element name="FiguredBassOffset" type="IntegerValue"/>
      </xs:choice>
      <xs:attribute use="required" name="partID" type="xs:integer"/>
      <xs:attribute name="name" type="xs:string"/>
      <xs:attribute name="abbreviation" type="xs:string"/>
      <xs:attribute use="required" name="numberOfStaves" type="xs:integer"/>
      <xs:attribute name="midiChannel" type="xs:integer"/>
      <xs:attribute name="midiCable" type="xs:integer"/>
      <xs:attribute name="transpose" type="xs:integer" default="0"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="RiffInfo">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element ref="Copyright"/>
        <xs:element ref="Engineer"/>
        <xs:element ref="Software"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="Copyright">
    <xs:complexType>
      <xs:attribute use="required" name="value" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Engineer">
    <xs:complexType>
      <xs:attribute use="required" name="value" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Software">
    <xs:complexType>
      <xs:attribute use="required" name="value" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="StaffGroupings">
    <xs:complexType>
      <xs:sequence maxOccurs="unbounded" minOccurs="0">
        <xs:element ref="StaffGrouping"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="StaffGrouping">
    <xs:complexType>
      <xs:attribute use="required" name="groupingType">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="vertical line"/>
            <xs:enumeration value="brace"/>
            <xs:enumeration value="bracket"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute use="required" name="firstStaff" type="xs:integer"/>
      <xs:attribute use="required" name="lastStaff" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Data">
    <xs:complexType>
      <xs:sequence maxOccurs="unbounded" minOccurs="0">
        <xs:element ref="Page"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Page">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="PageHeader"/>
        <xs:choice maxOccurs="unbounded" minOccurs="0">
          <xs:element ref="System"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="PageHeader">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="Width" type="IntegerValue"/>
        <xs:element name="Height" type="IntegerValue"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="System">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="SystemHeader"/>
        <xs:sequence maxOccurs="unbounded" minOccurs="0">
          <xs:element ref="Staff"/>
        </xs:sequence>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="SystemHeader">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="AnchorOverride" type="StringValue"/>
        <xs:element name="AbsolutePlacement" type="HorizontalVertical"/>
        <xs:element name="LogicalPlacement" type="LogicalPlacement"/>
        <xs:element name="Width" type="IntegerValue"/>
        <xs:element name="Height" type="IntegerValue"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="Staff">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="StaffHeader"/>
        <xs:choice maxOccurs="unbounded" minOccurs="0">
          <xs:element ref="TimeSlice"/>
          <xs:element ref="Accidental"/>
          <xs:element ref="AlternateEndingGraphic"/>
          <xs:element ref="AugmentationDot"/>
          <xs:element ref="Barline"/>
          <xs:element ref="Beam"/>
          <xs:element ref="ChordSymbol"/>
          <xs:element ref="Clef"/>
          <xs:element ref="FiguredBass"/>
          <xs:element ref="GuitarGrid"/>
          <xs:element ref="HarpPedalSymbol"/>
          <xs:element ref="KeySignature"/>
          <xs:element ref="Lyric"/>
          <xs:element ref="Notehead"/>
          <xs:element ref="OctaveSign"/>
          <xs:element ref="RehearsalMark"/>
          <xs:element ref="RepeatSign"/>
          <xs:element ref="Rest"/>
          <xs:element ref="Slur"/>
          <xs:element ref="Stem"/>
          <xs:element ref="TempoMarking"/>
          <xs:element ref="Text"/>
          <xs:element ref="Tie"/>
          <xs:element ref="TimeSignature"/>
          <xs:element ref="Tuplet"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="StaffHeader">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="PartID" type="IntegerValue"/>
        <xs:element name="PartDescriptionOverride" type="PartDescriptionOverride"/>
        <xs:element name="AnchorOverride" type="StringValue"/>
        <xs:element name="AbsolutePlacement" type="HorizontalVertical"/>
        <xs:element name="LogicalPlacement" type="LogicalPlacement"/>
        <xs:element name="Width" type="IntegerValue"/>
        <xs:element name="Height" type="IntegerValue"/>
        <xs:element name="NumberOfStaffLines" type="IntegerValue"/>
        <xs:element name="Silent" type="Empty"/>
        <xs:element name="Ossia" type="Ossia"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="TimeSlice">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="PartID" type="IntegerValue"/>
        <xs:element name="PartDescriptionOverride" type="PartDescriptionOverride"/>
        <xs:element name="AlternateEnding" type="IntegerValue"/>
        <xs:element name="AnchorOverride" type="StringValue"/>
        <xs:element name="AbsolutePlacement" type="HorizontalVertical"/>
        <xs:element name="LogicalPlacement" type="LogicalPlacement"/>
        <xs:element name="Width" type="IntegerValue"/>
        <xs:element name="Height" type="IntegerValue"/>
        <xs:element name="EndOfSystem" type="Empty"/>
        <xs:element name="NumberOfStaffLines" type="IntegerValue"/>
        <xs:element name="Silent" type="Empty"/>
      </xs:choice>
      <xs:attribute use="required" name="type">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="measure-start"/>
            <xs:enumeration value="event"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute use="required" name="startTimeN" type="xs:integer"/>
      <xs:attribute use="required" name="startTimeD" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Accidental">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="SmallSize" type="Empty"/>
      </xs:choice>
      <xs:attribute use="required" name="shape">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="double flat"/>
            <xs:enumeration value="flat"/>
            <xs:enumeration value="natural"/>
            <xs:enumeration value="sharp"/>
            <xs:enumeration value="double sharp"/>
            <xs:enumeration value="quarter tone flat"/>
            <xs:enumeration value="three quarter tones flat"/>
            <xs:enumeration value="quarter tone sharp"/>
            <xs:enumeration value="three quarter tones sharp"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="AlternateEndingGraphic">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="MultiNodeID" type="IntegerValue"/>
        <xs:element name="MultiNodeEndOfSystem" type="Empty"/>
        <xs:element name="MultiNodeStartOfSystem" type="Empty"/>
        <xs:element name="NumberOfNodes" type="IntegerValue"/>
      </xs:choice>
      <xs:attribute use="required" name="bracketShape">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="no down-jog"/>
            <xs:enumeration value="down-jog at beginning"/>
            <xs:enumeration value="down-jog at end"/>
            <xs:enumeration value="down-jog at beginning and end"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="text" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="AugmentationDot">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="LogicalPlacement" type="LogicalPlacement"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="Barline">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="Width" type="IntegerValue"/>
        <xs:element name="EndOfSystem" type="Empty"/>
        <xs:element name="LineQuality" type="LineQuality"/>
      </xs:choice>
      <xs:attribute use="required" name="type">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="thin line"/>
            <xs:enumeration value="thick line"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute use="required" name="extendsTo">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="bottom of bottom staff"/>
            <xs:enumeration value="in spaces between staves"/>
            <xs:enumeration value="deprecated option 2"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute use="required" name="numberOfStaves" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Beam">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="MultiNodeID" type="IntegerValue"/>
        <xs:element name="MultiNodeEndOfSystem" type="Empty"/>
        <xs:element name="MultiNodeStartOfSystem" type="Empty"/>
        <xs:element name="NumberOfNodes" type="IntegerValue"/>
        <xs:element name="FannedBeam" type="FannedBeam"/>
      </xs:choice>
      <xs:attribute use="required" name="partsToLeft" type="xs:integer"/>
      <xs:attribute use="required" name="partsToRight" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="ChordSymbol">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="FontID" type="IntegerValue"/>
      </xs:choice>
      <xs:attribute name="textDescription" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Clef">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="AnchorOverride" type="StringValue"/>
        <xs:element name="AbsolutePlacement" type="HorizontalVertical"/>
        <xs:element name="LogicalPlacement" type="LogicalPlacement"/>
        <xs:element name="StaffStepOverride" type="IntegerValue"/>
        <xs:element name="VoiceID" type="IntegerValue"/>
      </xs:choice>
      <xs:attribute use="required" name="shape">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="G clef"/>
            <xs:enumeration value="F clef"/>
            <xs:enumeration value="C clef"/>
            <xs:enumeration value="percussion"/>
            <xs:enumeration value="double G clef"/>
            <xs:enumeration value="TAB for guitar"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute use="required" name="staffStep" type="xs:integer"/>
      <xs:attribute name="octaveNumber" default="no number">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="no number"/>
            <xs:enumeration value="8 above"/>
            <xs:enumeration value="8 below"/>
            <xs:enumeration value="15 above"/>
            <xs:enumeration value="15 below"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="FiguredBass">
    <xs:complexType>
      <xs:attribute name="textDescription" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="GuitarGrid">
    <xs:complexType>
      <xs:attribute use="required" name="numberOfFrets" type="xs:integer"/>
      <xs:attribute use="required" name="numberOfStrings" type="xs:integer"/>
      <xs:attribute name="textDescription" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="HarpPedalSymbol">
    <xs:complexType>
      <xs:attribute name="pedalPositions" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="KeySignature">
    <xs:complexType>
      <xs:attribute use="required" name="standardCode">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="no sharps or flats"/>
            <xs:enumeration value="1 sharp"/>
            <xs:enumeration value="2 sharps"/>
            <xs:enumeration value="3 sharps"/>
            <xs:enumeration value="4 sharps"/>
            <xs:enumeration value="5 sharps"/>
            <xs:enumeration value="6 sharps"/>
            <xs:enumeration value="7 sharps"/>
            <xs:enumeration value="1 flat"/>
            <xs:enumeration value="2 flats"/>
            <xs:enumeration value="3 flats"/>
            <xs:enumeration value="4 flats"/>
            <xs:enumeration value="5 flats"/>
            <xs:enumeration value="6 flats"/>
            <xs:enumeration value="7 flats"/>
            <xs:enumeration value="1 natural in sharp position"/>
            <xs:enumeration value="2 naturals in sharp positions"/>
            <xs:enumeration value="3 naturals in sharp positions"/>
            <xs:enumeration value="4 naturals in sharp positions"/>
            <xs:enumeration value="5 naturals in sharp positions"/>
            <xs:enumeration value="6 naturals in sharp positions"/>
            <xs:enumeration value="7 naturals in sharp positions"/>
            <xs:enumeration value="1 natural in flat position"/>
            <xs:enumeration value="2 naturals in flat positions"/>
            <xs:enumeration value="3 naturals in flat positions"/>
            <xs:enumeration value="4 naturals in flat positions"/>
            <xs:enumeration value="5 naturals in flat positions"/>
            <xs:enumeration value="6 naturals in flat positions"/>
            <xs:enumeration value="7 naturals in flat positions"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="Lyric">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="FontID" type="IntegerValue"/>
        <xs:element name="LineQuality" type="LineQuality"/>
        <xs:element name="ReferencePointOverride" type="ReferencePointOverride"/>
      </xs:choice>
      <xs:attribute name="text" type="xs:string"/>
      <xs:attribute use="required" name="verseID" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Notehead">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="PartID" type="IntegerValue"/>
        <xs:element name="PartDescriptionOverride" type="PartDescriptionOverride"/>
        <xs:element name="VoiceID" type="IntegerValue"/>
        <xs:element name="AnchorOverride" type="StringValue"/>
        <xs:element name="AbsolutePlacement" type="HorizontalVertical"/>
        <xs:element name="LogicalPlacement" type="LogicalPlacement"/>
        <xs:element name="StaffStepOverride" type="IntegerValue"/>
        <xs:element name="MidiPerformance" type="MidiPerformance"/>
        <xs:element name="SmallSize" type="Empty"/>
        <xs:element name="LargeSize" type="Empty"/>
        <xs:element name="Invisible" type="Empty"/>
        <xs:element name="SplitStem" type="Empty"/>
        <xs:element name="Silent" type="Empty"/>
        <xs:element name="GraceNoteOffset" type="GraceNoteOffset"/>
      </xs:choice>
      <xs:attribute use="required" name="shape">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="breve"/>
            <xs:enumeration value="whole"/>
            <xs:enumeration value="half"/>
            <xs:enumeration value="filled"/>
            <xs:enumeration value="open diamond"/>
            <xs:enumeration value="solid diamond"/>
            <xs:enumeration value="x notehead"/>
            <xs:enumeration value="open x notehead"/>
            <xs:enumeration value="filled guiter slash"/>
            <xs:enumeration value="open guitar slash"/>
            <xs:enumeration value="filled square"/>
            <xs:enumeration value="open square"/>
            <xs:enumeration value="filled triangle"/>
            <xs:enumeration value="open triangle"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute use="required" name="staffStep" type="xs:integer"/>
      <xs:attribute use="required" name="durationN" type="xs:integer"/>
      <xs:attribute use="required" name="durationD" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="OctaveSign">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="LineQuality" type="LineQuality"/>
      </xs:choice>
      <xs:attribute use="required" name="numberOfOctaves" type="xs:integer"/>
      <xs:attribute use="required" name="aboveOrBelow">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="above"/>
            <xs:enumeration value="below"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute use="required" name="type">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="to be transposed"/>
            <xs:enumeration value="to be doubled"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="text" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="RehearsalMark">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="FontID" type="IntegerValue"/>
        <xs:element name="AnchorOverride" type="StringValue"/>
        <xs:element name="AbsolutePlacement" type="HorizontalVertical"/>
        <xs:element name="LogicalPlacement" type="LogicalPlacement"/>
      </xs:choice>
      <xs:attribute name="text" type="xs:string"/>
      <xs:attribute use="required" name="enclosure">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="none"/>
            <xs:enumeration value="box"/>
            <xs:enumeration value="circle"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="RepeatSign">
    <xs:complexType>
      <xs:attribute use="required" name="graphicalCode">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="no graphical symbol"/>
            <xs:enumeration value="segno symbol"/>
            <xs:enumeration value="coda symbol"/>
            <xs:enumeration value="1 slash"/>
            <xs:enumeration value="2 slashes"/>
            <xs:enumeration value="3 slashes"/>
            <xs:enumeration value="2 slashes with dots"/>
            <xs:enumeration value="1 slash with dots"/>
            <xs:enumeration value="1 slash with dots and barline"/>
            <xs:enumeration value="2 slashes with dots and barline"/>
            <xs:enumeration value="repeat dots"/>
            <xs:enumeration value="D.C."/>
            <xs:enumeration value="D.C. al Fine"/>
            <xs:enumeration value="D.C. al Segno"/>
            <xs:enumeration value="D.C. al Segno e poi la Coda"/>
            <xs:enumeration value="D.S."/>
            <xs:enumeration value="D.S. al Fine"/>
            <xs:enumeration value="Fine"/>
            <xs:enumeration value="Coda"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute use="required" name="logicalCode">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="no repeat function"/>
            <xs:enumeration value="beginning of section"/>
            <xs:enumeration value="end of section"/>
            <xs:enumeration value="previous beat"/>
            <xs:enumeration value="previous measure"/>
            <xs:enumeration value="previous two measures"/>
            <xs:enumeration value="as described by D.C., etc."/>
            <xs:enumeration value="repeat chord for 1 beat"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="Rest">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="PartID" type="IntegerValue"/>
        <xs:element name="PartDescriptionOverride" type="PartDescriptionOverride"/>
        <xs:element name="VoiceID" type="IntegerValue"/>
        <xs:element name="AnchorOverride" type="StringValue"/>
        <xs:element name="AbsolutePlacement" type="HorizontalVertical"/>
        <xs:element name="LogicalPlacement" type="LogicalPlacement"/>
        <xs:element name="StaffStepOverride" type="IntegerValue"/>
        <xs:element name="MidiPerformance" type="MidiPerformance"/>
        <xs:element name="SmallSize" type="Empty"/>
        <xs:element name="LargeSize" type="Empty"/>
        <xs:element name="Invisible" type="Empty"/>
        <xs:element name="SplitStem" type="Empty"/>
        <xs:element name="Silent" type="Empty"/>
        <xs:element name="GraceNoteOffset" type="GraceNoteOffset"/>
      </xs:choice>
      <xs:attribute use="required" name="shape">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="breve"/>
            <xs:enumeration value="whole"/>
            <xs:enumeration value="half"/>
            <xs:enumeration value="quarter"/>
            <xs:enumeration value="eighth"/>
            <xs:enumeration value="sixteenth"/>
            <xs:enumeration value="32nd"/>
            <xs:enumeration value="64th"/>
            <xs:enumeration value="128th"/>
            <xs:enumeration value="256th"/>
            <xs:enumeration value="multiple rest - 4 measures"/>
            <xs:enumeration value="multiple measure - thick horizontal bar"/>
            <xs:enumeration value="multiple measure - thick slanted bar"/>
            <xs:enumeration value="vocal breath comma"/>
            <xs:enumeration value="vocal breath 2 small slashes"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute use="required" name="staffStep" type="xs:integer"/>
      <xs:attribute use="required" name="durationN" type="xs:integer"/>
      <xs:attribute use="required" name="durationD" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Slur">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="MultiNodeID" type="IntegerValue"/>
        <xs:element name="MultiNodeEndOfSystem" type="Empty"/>
        <xs:element name="MultiNodeStartOfSystem" type="Empty"/>
        <xs:element name="NumberOfNodes" type="IntegerValue"/>
        <xs:element name="TieDirection" type="TieDirection"/>
        <xs:element name="BezierIncoming" type="HorizontalVertical"/>
        <xs:element name="BezierOutgoing" type="HorizontalVertical"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="Stem">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="AnchorOverride" type="StringValue"/>
        <xs:element name="AbsolutePlacement" type="HorizontalVertical"/>
        <xs:element name="LogicalPlacement" type="LogicalPlacement"/>
        <xs:element name="VoiceID" type="IntegerValue"/>
        <xs:element name="PartID" type="IntegerValue"/>
        <xs:element name="PartDescriptionOverride" type="PartDescriptionOverride"/>
        <xs:element name="MultiNodeID" type="IntegerValue"/>
        <xs:element name="MultiNodeEndOfSystem" type="Empty"/>
        <xs:element name="MultiNodeStartOfSystem" type="Empty"/>
        <xs:element name="NumberOfNodes" type="IntegerValue"/>
        <xs:element name="Height" type="IntegerValue"/>
        <xs:element name="SmallSize" type="Empty"/>
        <xs:element name="LargeSize" type="Empty"/>
        <xs:element name="Silent" type="Empty"/>
        <xs:element name="SlashedStem" type="Empty"/>
        <xs:element name="NumberOfFlags" type="IntegerValue"/>
        <xs:element name="GraceNoteOffset" type="GraceNoteOffset"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="TempoMarking">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="FontID" type="IntegerValue"/>
      </xs:choice>
      <xs:attribute name="text" type="xs:string"/>
      <xs:attribute use="required" name="noteValueN" type="xs:integer"/>
      <xs:attribute use="required" name="noteValueD" type="xs:integer"/>
      <xs:attribute use="required" name="beatsPerMinute" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Text">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="FontID" type="IntegerValue"/>
        <xs:element name="StaffName" type="Empty"/>
      </xs:choice>
      <xs:attribute name="value" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Tie">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="MultiNodeID" type="IntegerValue"/>
        <xs:element name="MultiNodeEndOfSystem" type="Empty"/>
        <xs:element name="MultiNodeStartOfSystem" type="Empty"/>
        <xs:element name="NumberOfNodes" type="IntegerValue"/>
        <xs:element name="TieDirection" type="TieDirection"/>
        <xs:element name="BezierIncoming" type="HorizontalVertical"/>
        <xs:element name="BezierOutgoing" type="HorizontalVertical"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="TimeSignature">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="AnchorOverride" type="StringValue"/>
        <xs:element name="AbsolutePlacement" type="HorizontalVertical"/>
        <xs:element name="LogicalPlacement" type="LogicalPlacement"/>
        <xs:element name="LargeSize" type="Empty"/>
        <xs:element name="SmallSize" type="Empty"/>
      </xs:choice>
      <xs:attribute use="required" name="topNumber" type="xs:integer"/>
      <xs:attribute use="required" name="bottomNumber" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Tuplet">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="TupletDescription" type="TupletDescription"/>
        <xs:element name="NumberStyle" type="NumberStyle"/>
        <xs:element name="MultiNodeID" type="IntegerValue"/>
        <xs:element name="MultiNodeEndOfSystem" type="Empty"/>
        <xs:element name="MultiNodeStartOfSystem" type="Empty"/>
        <xs:element name="NumberOfNodes" type="IntegerValue"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="ArticulationDirection">
    <xs:attribute use="required" name="value">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="pointed up"/>
          <xs:enumeration value="pointed down"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="CustomFontCharacter">
    <xs:attribute use="required" name="fontID" type="xs:integer"/>
    <xs:attribute use="required" name="characterCode" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="FannedBeam">
    <xs:attribute use="required" name="value">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="expanding toward right"/>
          <xs:enumeration value="shrinking toward right"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="GraceNoteOffset">
    <xs:attribute use="required" name="numerator" type="xs:integer"/>
    <xs:attribute use="required" name="denominator" type="xs:integer"/>
  </xs:complexType>
  <xs:complexType name="LineQuality">
    <xs:attribute use="required" name="lineQuality">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="no line"/>
          <xs:enumeration value="dotted line"/>
          <xs:enumeration value="dashed line"/>
          <xs:enumeration value="wavy line"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="LogicalPlacement">
    <xs:attribute name="horizontal" default="default">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="default"/>
          <xs:enumeration value="left"/>
          <xs:enumeration value="right"/>
          <xs:enumeration value="stem side"/>
          <xs:enumeration value="note side"/>
          <xs:enumeration value="centered"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="vertical" default="default">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="default"/>
          <xs:enumeration value="above"/>
          <xs:enumeration value="below"/>
          <xs:enumeration value="stem side"/>
          <xs:enumeration value="note side"/>
          <xs:enumeration value="centered"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="proximity" default="default">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="default"/>
          <xs:enumeration value="touching or exactly aligned"/>
          <xs:enumeration value="offset slightly"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="LyricVerseOffset">
    <xs:attribute use="required" name="lineOffset" type="xs:integer"/>
    <xs:attribute use="required" name="verseID" type="xs:integer"/>
  </xs:complexType>
  <xs:complexType name="MidiPerformance">
    <xs:attribute use="required" name="startTimeTicks" type="xs:integer"/>
    <xs:attribute use="required" name="durationTicks" type="xs:integer"/>
    <xs:attribute use="required" name="pitch" type="xs:integer"/>
    <xs:attribute use="required" name="velocity" type="xs:integer"/>
  </xs:complexType>
  <xs:complexType name="Ossia">
    <xs:attribute use="required" name="value">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="do not play back"/>
          <xs:enumeration value="play ossia instead"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="PartDescriptionOverride">
    <xs:attribute use="required" name="midiChannel" type="xs:integer"/>
    <xs:attribute use="required" name="midiCable" type="xs:integer"/>
    <xs:attribute use="required" name="transpose" type="xs:integer"/>
  </xs:complexType>
  <xs:complexType name="ReferencePointOverride">
    <xs:attribute use="required" name="anchorHorizontal" type="xs:integer"/>
    <xs:attribute use="required" name="dependentHorizontal">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="symbol's default"/>
          <xs:enumeration value="left of bounding box"/>
          <xs:enumeration value="right of bounding box"/>
          <xs:enumeration value="horizontal center"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute use="required" name="anchorVertical" type="xs:integer"/>
    <xs:attribute use="required" name="dependentVertical">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="symbol's default"/>
          <xs:enumeration value="top of bounding box"/>
          <xs:enumeration value="bottom of bounding box"/>
          <xs:enumeration value="vertical center"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="TieDirection">
    <xs:attribute use="required" name="value">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="rounded above"/>
          <xs:enumeration value="rounded below"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="TupletDescription">
    <xs:attribute use="required" name="transformationA" type="xs:integer"/>
    <xs:attribute use="required" name="transformationB" type="xs:integer"/>
    <xs:attribute use="required" name="transformationC" type="xs:integer"/>
    <xs:attribute use="required" name="transformationD" type="xs:integer"/>
    <xs:attribute use="required" name="groupingSymbol">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="default"/>
          <xs:enumeration value="number only"/>
          <xs:enumeration value="number with broken slur"/>
          <xs:enumeration value="number outside slur"/>
          <xs:enumeration value="number inside slur"/>
          <xs:enumeration value="number with broken bracket"/>
          <xs:enumeration value="number outside bracket"/>
          <xs:enumeration value="number inside bracket"/>
          <xs:enumeration value="bracket only"/>
          <xs:enumeration value="slur only"/>
          <xs:enumeration value="no symbol"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="NumberStyle">
    <xs:attribute use="required" name="value">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="default"/>
          <xs:enumeration value="first number only"/>
          <xs:enumeration value="two number with colon"/>
          <xs:enumeration value="number string"/>
          <xs:enumeration value="no number"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="HorizontalVertical">
    <xs:attribute use="required" name="horizontal" type="xs:integer"/>
    <xs:attribute use="required" name="vertical" type="xs:integer"/>
  </xs:complexType>
  <xs:complexType name="StringValue">
    <xs:attribute use="required" name="value" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="IntegerValue">
    <xs:attribute use="required" name="value" type="xs:integer"/>
  </xs:complexType>
  <xs:complexType name="Empty"/></xs:schema>