<!--
	MusicXML attributes.dtd

	Version 1.0 - 13 January 2004
	
	Copyright © 2004 Recordare LLC.
	http://www.recordare.com/
	
	This MusicXML work is being provided by the copyright
	holder under the MusicXML Document Type Definition 
	Public License Version 1.02, available from:
	
		http://www.recordare.com/dtds/license.html
-->

<!--
	The attributes component DTD contains the attributes
	element and its children, such as key and time
	signatures.
-->

<!-- Elements -->

<!--
	The attributes element contains musical information
	that typically changes on measure boundaries. This
	includes key and time signatures, clefs, transpositions,
	and staving.
-->
<!ELEMENT attributes (%editorial;, divisions?, key?, time?,
	staves?, instruments?, clef*, staff-details*, transpose?,
	directive*, measure-style*)>

<!--	
	Traditional key signatures are represented by the number
	of flats and sharps, plus an optional mode for major/
	minor/mode distinctions. Negative numbers are used for
	flats and positive numbers for sharps, reflecting the
	key's placement within the circle of fifths (hence the
	element name). A cancel element indicates that the old
	key signature should be cancelled before the new one
	appears. This will always happen when changing to C major
	or A minor and need not be specified then. The cancel
	value matches the fifths value of the cancelled key
	signature (e.g., a cancel of -2 will provide an explicit
	cancellation for changing from B flat major to F major).
	
	Non-traditional key signatures can be represented using
	the Humdrum/Scot concept of a list of altered tones.
	The key-step and key-alter elements are represented the
	same way as the step and alter elements are in the pitch
	element in note.dtd. The different element names indicate
	the different meaning of altering notes in a scale versus
	altering a sounding pitch.
	
	Valid mode values include major, minor, dorian, phrygian,
	lydian, mixolydian, aeolian, ionian, and locrian.
-->
<!ELEMENT key ((cancel?, fifths, mode?) |
	((key-step, key-alter)*))>
<!ELEMENT cancel (#PCDATA)>
<!ELEMENT fifths (#PCDATA)>
<!ELEMENT mode (#PCDATA)>
<!ELEMENT key-step (#PCDATA)>
<!ELEMENT key-alter (#PCDATA)>

<!--
	Musical notation duration is commonly represented as
	fractions. The divisions element indicates how many 
	divisions per quarter note are used to indicate a note's
	duration. For example, if duration = 1 and divisions = 2,
	this is an eighth note duration. Duration and divisions
	are used directly for generating sound output, so they
	must be chosen to take tuplets into account. Using a
	divisions element lets us use just one number to 
	represent a duration for each note in the score, while
	retaining the full power of a fractional representation.
	For maximum compatibility with Standard MIDI Files, the
	divisions value should not exceed 16383.
-->
<!ELEMENT divisions (#PCDATA)>

<!--
	Time signatures are represented by two elements. The
	beats element indicates the number of beats, as found in
	the numerator of a time signature. The beat-type element
	indicates the beat unit, as found in the denominator of
	a time signature. The symbol attribute is used to
	indicate another notation beyond a fraction: the common 
	and cut time symbols, as well as a single number with an
	implied denominator. Normal (a fraction) is the implied
	symbol type if none is specified. Multiple pairs of
	beat and beat-type elements are used for composite
	time signatures with multiple denominators, such as
	2/4 + 3/8. A composite such as 3+2/8 requires only one
	beat/beat-type pair. A senza-misura element explicitly
	indicates that no time signature is present.
-->
<!ELEMENT time ((beats, beat-type)+ | senza-misura)>
<!ATTLIST time
    symbol (common | cut | single-number | normal) #IMPLIED
>
<!ELEMENT beats (#PCDATA)>
<!ELEMENT beat-type (#PCDATA)>
<!ELEMENT senza-misura EMPTY>

<!--
	Staves are used if there is more than one staff
	represented in the given part (e.g., 2 staves for
	typical piano parts). If absent, a value of 1 is assumed.
	Staves are ordered from top to bottom in a part in
	numerical order, with staff 1 above staff 2.
-->
<!ELEMENT staves (#PCDATA)>

<!--
	Instruments are only used if more than one instrument is
	represented in the part (e.g., oboe I and II where they
	play together most of the time). If absent, a value of 1
	is assumed.
-->
<!ELEMENT instruments (#PCDATA)>

<!--
	Clefs are represented by the sign, line, and
	clef-octave-change elements. Sign values include G, F, C,
	percussion, TAB, and none. Line numbers are counted from
	the bottom of the staff. Standard values are 2 for the
	G sign (treble clef), 4 for the F sign (bass clef), 3 
	for the C sign (alto clef) and 5 for TAB (on a 6-line
	staff). The clef-octave-change element is used for
	transposing clefs (e.g., a treble clef for tenors would
	have a clef-octave-change value of -1). The optional 
	number attribute refers to staff numbers, from top to
	bottom on the system. A value of 1 is assumed if not
	present.
-->
<!ELEMENT clef (sign, line?, clef-octave-change?)>
<!ATTLIST clef
    number CDATA #IMPLIED
>
<!ELEMENT sign (#PCDATA)>
<!ELEMENT line (#PCDATA)>
<!ELEMENT clef-octave-change (#PCDATA)>

<!--
	The staff-details element is used to indicate different
	types of staves. The staff-type element can be ossia,
	cue, editorial, regular, or alternate. An alternate
	staff indicates one that shares the same musical data
	as the prior staff, but displayed differently (e.g.,
	treble and bass clef, standard notation and tab).
	The staff-lines element specifies the number of lines for
	non 5-line staffs. The staff-tuning and capo elements are
	used to specify tuning when using tablature notation.
	The optional number attribute specifies the staff number
	from top to bottom on the system, as with clef. The
	optional show-frets attribute indicates whether to show
	tablature frets as numbers (0, 1, 2) or letters (a, b, c).
	The default choice is numbers.
-->
<!ELEMENT staff-details (staff-type?, staff-lines?, 
	staff-tuning*, capo?)>
<!ATTLIST staff-details
    number CDATA #IMPLIED
    show-frets (numbers | letters) #IMPLIED
>
<!ELEMENT staff-type (#PCDATA)>
<!ELEMENT staff-lines (#PCDATA)>

<!--
	The tuning-step, tuning-alter, and tuning-octave
	elements are represented like the step, alter, and
	octave elements, with different names to reflect their
	different function. Staff lines are numbered from
	bottom to top.
-->
<!ELEMENT staff-tuning
	(tuning-step, tuning-alter?, tuning-octave)>
<!ATTLIST staff-tuning
    line CDATA #REQUIRED
>
<!ELEMENT tuning-step (#PCDATA)>
<!ELEMENT tuning-alter (#PCDATA)>
<!ELEMENT tuning-octave (#PCDATA)>

<!--
	The capo element indicates at which fret a capo should
	be placed on a fretted instrument. This changes the
	open tuning of the strings specified by staff-tuning
	by the specified number of half-steps.
-->
<!ELEMENT capo (#PCDATA)>

<!--
	If the part is being encoded for a transposing instrument
	in written vs. concert pitch, the transposition must be
	encoded in the transpose element. The transposition is
	represented by chromatic steps (required) and three
	optional elements: diatonic pitch steps, octave changes,
	and doubling an octave down. The chromatic and
	octave-change elements are numeric values added to the
	encoded pitch data to create the sounding pitch. The
	diatonic element is also numeric and allows for correct
	spelling of enharmonic transpositions.
-->
<!ELEMENT transpose (diatonic?, chromatic, octave-change?,
	double?)>
<!ELEMENT diatonic (#PCDATA)>
<!ELEMENT chromatic (#PCDATA)>
<!ELEMENT octave-change (#PCDATA)>
<!ELEMENT double EMPTY>

<!--
	Directives are like directions, but can be grouped 
	together with attributes for convenience. This is
	typically used for tempo markings at the beginning
	of a piece of music. The language is Italian ("it")
	by default. Language names come from ISO 639, with
	optional country subcodes from ISO 3166.
-->
<!ELEMENT directive (#PCDATA)>
<!ATTLIST directive
    %font;
    xml:lang NMTOKEN #IMPLIED
>

<!--
	A measure-style indicates a special way to print
	partial to multiple measures within a part. This 
	includes multiple rests over several measures,
	repeats of betas, single, or multiple measures,
	and use of slash notation.
	
	The multiple-rest and measure-repeat symbols
	indicate the number of measures covered in the
	element content. The beat-repeat and slash 
	elements can cover partial measures. All but the
	multiple-rest element use a type attribute to 
	indicate starting and stopping the use of the
	style. The optional number attribute specifies 
	the staff number from top to bottom on the system,
	as with clef.
-->
<!ELEMENT measure-style (multiple-rest | 
	measure-repeat | beat-repeat | slash)>
<!ATTLIST measure-style
    number CDATA #IMPLIED
>

<!--
	The text of the multiple-rest element indicates the
	number of measures in the multiple rest. Multiple
	rests may use the 1-bar / 2-bar / 4-bar rest
	symbols, or a single shape. The use-symbols
	attribute indicates which to use; it is no
	if not specified.
-->
<!ELEMENT multiple-rest (#PCDATA)>
<!ATTLIST multiple-rest
    use-symbols %yes-no; #IMPLIED
>

<!--
	The measure-repeat and beat-repeat element specify
	a notation style for repetitions. The actual music
	being repeated needs to be repeated within the
	MusicXML file. These elements indicate to use the
	appropriate notation to indicate the repeat. 
-->

<!--
	The measure-repeat element is used for both
	single and multiple measure repeats. The text
	of the element indicates the number of measures
	to be repeated in a single pattern. The slashes
	attribute specifies the number of slashes to
	use in the repeat sign. It is 1 if not specified.
	Both the start and the stop of the measure-repeat
	must be specified.
-->
<!ELEMENT measure-repeat (#PCDATA)>
<!ATTLIST measure-repeat
    type %start-stop; #REQUIRED
    slashes NMTOKEN #IMPLIED
>

<!--
	The beat-repeat element is used to indicate
	that a single beat (but possibly many notes)
	is repeated. Both the start and stop of the
	beat being repeated should be specified. The
	slashes attribute specifies the number of
	slashes to use in the symbol. The use-dots
	attribute indicates whether or not to use
	dots as well (for instance, with mixed
	rhythm patterns). By default, the value for
	slashes is 1 and the value for use-dots
	is no.
-->
<!ELEMENT beat-repeat EMPTY>
<!ATTLIST beat-repeat
    type %start-stop; #REQUIRED
    slashes NMTOKEN #IMPLIED
    use-dots %yes-no; #IMPLIED
>

<!--
	The slash element is used to indicate that
	slash notation is to be used. If the slash is
	on every beat, use-stems is no (the default). 
	To indicate rhythms but not pitches, use-stems
	is set to yes. The type attribute indicates
	whether this is the start or stop of a slash 
	notation style. The use-dots attribute works 
	as for the beat-repeat element, and only 
	has effect if use-stems is no.
-->
<!ELEMENT slash EMPTY>
<!ATTLIST slash
    type %start-stop; #REQUIRED
    use-dots %yes-no; #IMPLIED
    use-stems %yes-no; #IMPLIED
>

<SCRIPT language="Javascript">
<!--

// FILE ARCHIVED ON 20040910122956 AND RETRIEVED FROM THE
// INTERNET ARCHIVE ON 20070826202052.
// JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
// ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
// SECTION 108(a)(3)).

   var sWayBackCGI = "http://web.archive.org/web/20040910122956/";

   function xResolveUrl(url) {
      var image = new Image();
      image.src = url;
      return image.src;
   }
   function xLateUrl(aCollection, sProp) {
      var i = 0;
      for(i = 0; i < aCollection.length; i++) {
         if (typeof(aCollection[i][sProp]) == "string") { 
          if (aCollection[i][sProp].indexOf("mailto:") == -1 &&
             aCollection[i][sProp].indexOf("javascript:") == -1) {
            if(aCollection[i][sProp].indexOf("http") == 0) {
                aCollection[i][sProp] = sWayBackCGI + aCollection[i][sProp];
            } else {
                aCollection[i][sProp] = sWayBackCGI + xResolveUrl(aCollection[i][sProp]);
            }
         }
         }
      }
   }

   xLateUrl(document.getElementsByTagName("IMG"),"src");
   xLateUrl(document.getElementsByTagName("A"),"href");
   xLateUrl(document.getElementsByTagName("AREA"),"href");
   xLateUrl(document.getElementsByTagName("OBJECT"),"codebase");
   xLateUrl(document.getElementsByTagName("OBJECT"),"data");
   xLateUrl(document.getElementsByTagName("APPLET"),"codebase");
   xLateUrl(document.getElementsByTagName("APPLET"),"archive");
   xLateUrl(document.getElementsByTagName("EMBED"),"src");
   xLateUrl(document.getElementsByTagName("BODY"),"background");
   var forms = document.getElementsByTagName("FORM");
   if (forms) {
       var j = 0;
       for (j = 0; j < forms.length; j++) {
              f = forms[j];
              if (typeof(f.action)  == "string") {
                 if(typeof(f.method)  == "string") {
                     if(typeof(f.method) != "post") {
                        f.action = sWayBackCGI + f.action;
                     }
                  }
              }
        }
    }


//-->
</SCRIPT>

