<!--
	MusicXML direction.dtd

	Version 1.1 - 20 May 2005
	
	Copyright © 2004-2005 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
-->

<!--
	This direction component DTD contains the direction
	element and its children. Directions are not note-
	specific, and therefore might attach to a part or the
	overall score. Hence its separate location in this DTD
	to allow multiple compositions of these basic elements.
	
	Harmony indications and general print and sound
	suggestions are likewise not necessarily attached to
	particular note elements, and are included here as well.
-->

<!-- Elements -->

<!--
	A direction is a musical indication that is not attached
	to a specific note. Two or more may be combined to
	indicate starts and stops of wedges, dashes, etc.
-->
<!ELEMENT direction (direction-type+, offset?,
	%editorial-voice;, staff?, sound?)>
<!ATTLIST direction
    %placement; 
>

<!--
	Textual direction types may have more than 1 component
	due to multiple font numbers.
-->
<!ELEMENT direction-type (rehearsal+ | segno+ | words+ |
	coda+ | wedge | dynamics+ | dashes | bracket | pedal | 
	metronome | octave-shift | harp-pedals | damp | 
	damp-all | eyeglasses | scordatura | other-direction)>

<!--
	Print style entities apply to the individual
	direction-type, not to the overall direction.
-->

<!--
	Language is Italian ("it") by default. Enclosure is
	square by default.
-->
<!ELEMENT rehearsal (#PCDATA)>
<!ATTLIST rehearsal
    %print-style;
    xml:lang NMTOKEN #IMPLIED
    enclosure (square | circle | none) #IMPLIED
>

<!ELEMENT words (#PCDATA)>
<!--
	Left justification is assumed if not specified. 
	Language is Italian ("it") by default. Enclosure
	is none by default.
-->
<!ATTLIST words
	%justify;
	%halign;
	%valign;
    %print-style;
    xml:lang NMTOKEN #IMPLIED
    enclosure (rectangle | oval | none) #IMPLIED
>

<!--
	Wedge spread is measured in tenths of staff line space.
	The type is crescendo for the start of a wedge that is
	closed at the left side, and diminuendo for the start
	of a wedge that is closed on the right side. Spread 
	values at the start of a crescendo wedge or end of a
	diminuendo wedge are ignored.
-->
<!ELEMENT wedge EMPTY>
<!ATTLIST wedge
    type (crescendo | diminuendo | stop) #REQUIRED
    number %number-level; #IMPLIED
    spread CDATA #IMPLIED
    %position;
    %color;
>

<!--
	Dashes, used for instance with cresc. and dim. marks.
-->
<!ELEMENT dashes EMPTY>
<!ATTLIST dashes
    type %start-stop; #REQUIRED
    number %number-level; #IMPLIED
    %position;
    %color;
>

<!--
	Brackets are combined with words in a variety of
	modern directions. The line-end attribute specifies
	if there is a jog up or down (or both), an arrow,
	or nothing at the start or end of the bracket. If
	the line-end is up or down, the length of the jog
	can be specified using the end-length attribute.
	The line-type is solid by default.
-->
<!ELEMENT bracket EMPTY>
<!ATTLIST bracket
    type %start-stop; #REQUIRED
    number %number-level; #IMPLIED
    line-end (up | down | both | arrow | none) #REQUIRED
    end-length %tenths; #IMPLIED
    %line-type;
    %position;
    %color;
>

<!-- 
	Piano pedal marks. The line attribute is yes if pedal
	lines are used, no if Ped and * signs are used. The
	change type is used with line set to yes.
-->
<!ELEMENT pedal EMPTY>
<!ATTLIST pedal
    type (start | stop | change) #REQUIRED
    line %yes-no;	#IMPLIED
    %print-style; 
>

<!--
	Standard metronome marks. The beat-unit values are the
	same as for a type element, and the beat-unit-dot works
	like the dot element. The per-minute element can
	be a number, or a text description including numbers.
	The parentheses attribute indicates whether or not
	to put the metronome mark in parentheses; its value
	is no if not specified.
-->
<!ELEMENT metronome (beat-unit, beat-unit-dot*, 
	(per-minute | (beat-unit, beat-unit-dot*)))>
<!ATTLIST metronome
    %print-style;
    parentheses %yes-no; #IMPLIED
>
<!ELEMENT beat-unit (#PCDATA)>
<!ELEMENT beat-unit-dot EMPTY>
<!ELEMENT per-minute (#PCDATA)> 

<!--
	Octave shifts indicate where notes are shifted up or down
	from their true pitched values because of printing
	difficulty. Thus a treble clef line noted with 8va will
	be indicated with an octave-shift down from the pitch
	data indicated in the notes. A size of 8 indicates one
	octave; a size of 15 indicates two octaves.
-->
<!ELEMENT octave-shift EMPTY>
<!ATTLIST octave-shift
    type (up | down | stop) #REQUIRED
    number %number-level; #IMPLIED
    size CDATA "8"
    %print-style; 
>

<!-- 
	The harp-pedals element is used to create harp
	pedal diagrams. The pedal-step and pedal-alter
	elements use the same values as the step and alter
	elements. For easiest reading, the pedal-tuning 
	elements show follow standard harp pedal order,
	with pedal-step values of D, C, B, E, F, G, and A.
-->
<!ELEMENT harp-pedals (pedal-tuning)+>
<!ATTLIST harp-pedals
    %print-style; 
>
<!ELEMENT pedal-tuning (pedal-step, pedal-alter)>
<!ELEMENT pedal-step (#PCDATA)>
<!ELEMENT pedal-alter (#PCDATA)>

<!-- Harp damping marks -->
<!ELEMENT damp EMPTY>
<!ATTLIST damp
    %print-style; 
>
<!ELEMENT damp-all EMPTY>
<!ATTLIST damp-all
    %print-style; 
>

<!-- Eyeglasses, common in commercial music. -->
<!ELEMENT eyeglasses EMPTY>
<!ATTLIST eyeglasses
    %print-style; 
>

<!-- 
	Scordatura string tunings are represented by a series
	of accord elements. The tuning-step, tuning-alter, 
	and tuning-octave elements are also used with the 
	staff-tuning element, and are defined in the common.dtd
	file. Strings are numbered from high to low.
-->
<!ELEMENT scordatura (accord+)>
<!ELEMENT accord
	(tuning-step, tuning-alter?, tuning-octave)>
<!ATTLIST accord
    string CDATA #REQUIRED
>

<!--
	The other-direction element is used to define
	any direction symbols not yet in the current version
	of MusicXML. This allows extended representation,
	though without application interoperability.
-->
<!ELEMENT other-direction (#PCDATA)>
<!ATTLIST other-direction
    %print-style; 
>

<!--
	An offset is represented in terms of divisions, and
	indicates where the direction will appear relative
	to the current musical location. This is for visual
	appearance only; any sound associated with the
	direction takes effect at the current location.
	If an element within a direction includes a default-x
	attribute, the offset value will be ignored for that
	element.
-->
<!ELEMENT offset (#PCDATA)>

<!-- Harmony -->
<!--
	The harmony elements are based on Humdrum's **harm
	encoding, extended to support chord symbols in popular
	music as well as functional harmony analysis in classical
	music.
-->
<!--
	A harmony element can contain many stacked chords (e.g.
	V of II). A sequence of harmony-chord entities is used
	for this type of secondary function, where V of II would
	be represented by a harmony-chord with a V function
	followed by a harmony-chord with a II function.
-->
<!ENTITY % harmony-chord "((root | function), kind,
	inversion?, bass?, degree*)">

<!--
	A root is a pitch name like C, D, E, where a function is
	an indication like I, II, III. Root is generally used
	with pop chord symbols, function with classical
	functional harmony. It is an either/or choice to avoid
	data inconsistency. Function requires that the key be
	specified in the encoding. The root element has a
	root-step and optional root-alter similar to the step
	and alter elements in a pitch, but renamed to 
	distinguish the different musical meanings.
-->
<!ELEMENT root (root-step, root-alter?)>
<!ELEMENT root-step (#PCDATA)>
<!ELEMENT root-alter (#PCDATA)>
<!ELEMENT function (#PCDATA)>

<!--
	Kind indicates the type of chord. Degree elements
	can then add, subtract, or alter from these
	starting points. Values include:
	
	Triads:
	    major (major third, perfect fifth)
	    minor (minor third, perfect fifth)
	    augmented (major third, augmented fifth)
	    diminished (minor third, diminished fifth)
	Sevenths:
	    dominant (major triad, minor seventh)
	    major-seventh (major triad, major seventh)
	    minor-seventh (minor triad, minor seventh)
	    diminished-seventh
	        (diminished triad, diminished seventh)
	    augmented-seventh
	        (augmented triad, minor seventh)
	    half-diminished
	        (diminished triad, minor seventh)
	    major-minor
	        (minor triad, major seventh)
	Sixths:
	    major-sixth (major triad, added sixth)
	    minor-sixth (minor triad, added sixth)
	Ninths:
	    dominant-ninth (dominant-seventh, major ninth)
	    major-ninth (major-seventh, major ninth)
	    minor-ninth (minor-seventh, minor ninth)
	11ths (usually as the basis for alteration):
	    dominant-11th (dominant-ninth, perfect 11th)
	    major-11th (major-ninth, perfect 11th)
	    minor-11th (minor-ninth, perfect 11th)
	13ths (usually as the basis for alteration):
	    dominant-13th (dominant-11th, major 13th)
	    major-13th (major-11th, major 13th)
	    minor-13th (minor-11th, major 13th)
	Suspended:
	    suspended-second (major second, perfect fifth)
	    suspended-fourth (perfect fourth, perfect fifth)
	Functional sixths:
	    Neapolitan
	    Italian
	    French
	    German
	Other:
	    pedal (pedal-point bass)
	    Tristan
	
	The "other" kind is used when the harmony is entirely
	composed of add elements. The "none" kind is used to
	explicitly encode absence of chords or functional
	harmony.

	The attributes are used to indicate the formatting
	of the symbol. Since the kind element is the constant
	in all the harmony-chord entities that can make up
	a polychord, many formatting attributes are here.

	The use-symbols attribute is yes if the kind should be
	represented when possible with harmony symbols rather
	than letters and numbers. These symbols include:

	    major: a triangle, like Unicode 25B3
	    minor: -, like Unicode 002D
	    augmented: +, like Unicode 002B
	    diminished: °, like Unicode 00B0
	    half-diminished: ø, like Unicode 00F8

	The text attribute describes how the kind should be 
	spelled if not using symbols; it is ignored if use-symbols
	is yes. The stack-degrees attribute is yes if the degree 
	elements should be stacked above each other. The 
	parentheses-degrees attribute is yes if all the degrees 
	should be in parentheses. The bracket-degrees attribute
	is yes if all the degrees should be in a bracket. If not 
	specified, these values are implementation-specific.
-->
<!ELEMENT kind (#PCDATA)>
<!ATTLIST kind
    use-symbols          %yes-no;   #IMPLIED
    text                 CDATA      #IMPLIED
    stack-degrees        %yes-no;   #IMPLIED
    parentheses-degrees  %yes-no;   #IMPLIED
    bracket-degrees      %yes-no;   #IMPLIED
>

<!--
	Inversion is a number indicating which inversion is used:
	0 for root position, 1 for first inversion, etc.
-->
<!ELEMENT inversion (#PCDATA)>

<!--
	Bass is used to indicate a bass note in popular music
	chord symbols, e.g. G/C. It is generally not used in
	functional harmony, as inversion is generally not used
	in pop chord symbols. As with root, it is divided into
	step and alter elements, similar to pitches.
-->
<!ELEMENT bass (bass-step, bass-alter?)>
<!ELEMENT bass-step (#PCDATA)>
<!ELEMENT bass-alter (#PCDATA)>

<!--
	The degree element is used to add, alter, or subtract
	individual notes in the chord. The degree-value element
	is a number indicating the degree of the chord (1 for
	the root, 3 for third, etc). The degree-alter element
	is like the alter element in notes: 1 for sharp, -1 for
	flat, etc. The degree-type element can be add, alter, or
	subtract. If the degree-type is alter or subtract, the
	degree-alter is relative to the degree already in the
	chord based on its kind element. If the degree-type is
	add, the degree-alter is relative to a dominant chord
	(major and perfect intervals except for a minor 
	seventh). The print-object attribute can be used to
	keep the degree from printing separately when it has
	already taken into account in the text attribute of
	the kind element.
	
	A harmony of kind "other" can be spelled explicitly by
	using a series of degree elements together with a root.
-->
<!ELEMENT degree (degree-value, degree-alter, degree-type)>
<!ATTLIST degree
    %print-object;
>
<!ELEMENT degree-value (#PCDATA)>
<!ELEMENT degree-alter (#PCDATA)>
<!ELEMENT degree-type (#PCDATA)>

<!--
	The frame element represents a frame or fretboard
	diagram used together with a chord symbol. The
	representation is based on the NIFF guitar grid
	with additional information. The frame-strings and
	frame-frets elements give the overall size of the
	frame in vertical lines (strings) and horizontal
	spaces (frets). The first-fret indicates which fret
	is shown in the top space of the frame; it is fret 1 
	if the element is not present. The frame-note element 
	represents each note included in the frame. The
	definitions for string, fret, and fingering are found
	in common.dtd.
-->
<!ELEMENT frame 
	(frame-strings, frame-frets, first-fret?, frame-note+)>
<!ATTLIST frame 
    %position;
    %color;
    height  %tenths;  #IMPLIED
    width   %tenths;  #IMPLIED
>
<!ELEMENT frame-strings (#PCDATA)>
<!ELEMENT frame-frets (#PCDATA)>
<!ELEMENT first-fret (#PCDATA)>
<!ELEMENT frame-note (string, fret, fingering?, barre?)>

<!-- 
	The barre element indicates placing a finger over 
	multiple strings on a single fret. The type is "start" 
	for the lowest pitched string (e.g., the string with 
	the highest MusicXML number) and is "stop" for the 
	highest pitched string.
-->
<!ELEMENT barre EMPTY>
<!ATTLIST barre
    type %start-stop; #REQUIRED
    %color;
>

<!--
	If there are alternate harmonies possible, this can be
	specified using multiple harmony elements differentiated
	by type. Explicit harmonies have all note present in the
	music; implied have some notes missing but implied;
	alternate represents alternate analyses. 
	
	The harmony object may be used for analysis or for
	chord symbols. The print-object attribute controls
	whether or not anything is printed due to the harmony
	element. The print-frame attribute controls printing
	of a frame or fretboard diagram.
-->
<!ELEMENT harmony ((%harmony-chord;)+, frame?, 
	offset?, %editorial;, staff?)>
<!ATTLIST harmony
    type (explicit | implied | alternate) #IMPLIED
    %print-object;
    print-frame  %yes-no; #IMPLIED
    %print-style;
    %placement;
>

<!--
	The grouping element is used for musical analysis. When
	the element type is "start", it usually contains one or
	more feature elements. The number attribute is used for
	distinguishing between overlapping and hierarchical
	groupings. The member-of attribute allows for easy
	distinguishing of what grouping elements are in what
	hierarchy. Feature elements contained within a "stop"
	type of grouping may be ignored.
	
	This element is flexible to allow for non-standard
	analyses. Future versions of MusicXML may add elements
	that can represent more standardized categories of
	analysis data, allowing for easier data sharing.
-->
<!ELEMENT grouping ((feature)*)>
<!ATTLIST grouping
    type %start-stop; #REQUIRED
    number CDATA "1"
    member-of CDATA #IMPLIED
>
<!ELEMENT feature (#PCDATA)>
<!ATTLIST feature
    type CDATA #IMPLIED
>

<!--
	The print element contains general printing parameters,
	including the layout elements defined in layout.dtd.
	
	The new-system and new-page attributes indicate whether
	to force a system or page break, or to force the current
	music onto the same system or page as the preceding 
	music. Normally this is the first music data within a
	measure. If used in multi-part music, they should be 
	placed in the same positions within each part, or the
	results are undefined. The page-number attribute sets
	the number of a new page; it is ignored if new-page
	is not "yes".

	Staff spacing between multiple staves is measured in
	tenths of staff lines (e.g. 100 = 10 staff lines).
	This is deprecated in MusicXML 1.1; the staff-layout
	element should be used instead. If both are present,
	the staff-layout values take priority.

	Layout elements in a print statement only apply to
	the current page, system, staff, or measure. Music
	that follows continues to take the default values 
	from the layout included in the <defaults> element.
-->
<!ELEMENT print (page-layout?, system-layout?, 
	staff-layout*, measure-layout?)>
<!ATTLIST print
	staff-spacing %tenths; #IMPLIED
	new-system %yes-no; #IMPLIED
	new-page %yes-no; #IMPLIED
	page-number CDATA #IMPLIED	
>

<!-- 
	The sound element contains general playback parameters.
	They can stand alone within a part/measure, or be a
	component element within a direction.
	
	Tempo is expressed in quarter notes per minute. If 0,
	the sound-generating program must prompt the user at the
	time of compiling a sound (MIDI) file.
	
	Dynamics (or MIDI velocity) are expressed as a percentage
	of the default forte value (90 for MIDI).
	
	Dacapo indicates to go back to the beginning of the
	movement. When used it always has the value "yes".
	
	Segno and dalsegno are used for backwards jumps to a
	segno sign; coda and tocoda are used for forward jumps
	to a coda sign. If there are multiple jumps, the value
	of these parameters can be used to name and distinguish
	them. If segno or coda is used, the divisions attribute
	can also be used to indicate the number of divisions
	per quarter note. Otherwise sound and MIDI generating
	programs may have to recompute this.
	
	A dalsegno or dacapo attribute indicates that the
	jump should occur the first time through; a tocoda
	attribute indicates the jump should occur the second
	time through.
	
	Forward-repeat is used when a forward repeat sign is
	implied, and usually follows a bar line. When used it
	always has the value of "yes".
	
	The fine attribute follows the final note or rest in a
	movement with a da capo direction. If numeric, the value
	represents the actual duration of the final note or rest,
	which can be ambiguous in written notation and different
	among parts and voices. The value may also be "yes" to
	indicate no change to the final duration.
	
	If the sound element applies only one time through a
	repeat, the time-only attribute indicates which time
	to apply the sound element.
	
	Pizzicato in a sound element effects all following notes.
	Yes indicates pizzicato, no indicates arco.
	
	Pan and elevation allow placing of sound in a 3-D space
	relative to the listener. Both are expressed in degrees
	ranging from -180 to 180. For pan, 0 is straight ahead,
	-90 is hard left, 90 is hard right, and -180 and 180
	are directly behind the listener. For elevation, 0 is
	level with the listener, 90 is directly above, and -90
	is directly below.
	
	The damper-pedal, soft-pedal, and sostenuto-pedal 
	attributes effect playback of the three common piano
	pedals and their MIDI controller equivalents. Yes
	indicates the pedal is depressed; no indicates the 
	pedal is released.
	
	MIDI instruments are changed using the midi-instrument
	element defined in common.dtd.
-->
<!ELEMENT sound (midi-instrument*)>
<!ATTLIST sound
	tempo CDATA #IMPLIED
	dynamics CDATA #IMPLIED
	dacapo %yes-no; #IMPLIED
	segno CDATA #IMPLIED
	dalsegno CDATA #IMPLIED
	coda CDATA #IMPLIED
	tocoda CDATA #IMPLIED
	divisions CDATA #IMPLIED
	forward-repeat %yes-no; #IMPLIED
	fine CDATA #IMPLIED
	time-only CDATA #IMPLIED
	pizzicato %yes-no; #IMPLIED
	pan CDATA #IMPLIED
	elevation CDATA #IMPLIED
	damper-pedal %yes-no; #IMPLIED
	soft-pedal %yes-no; #IMPLIED
	sostenuto-pedal %yes-no; #IMPLIED
>