<!--
	MusicXML common.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 file contains entities and elements that are common
	across multiple component DTDs. In particular, several
	elements here are common across both notes and measures.
-->

<!-- Entities -->

<!--
	If greater ASCII compatibility is desired, entity
	references may be used instead of the direct Unicode
	characters. Currently we include ISO Latin-1 for Western
	European characters and ISO Latin-2 for Central European
	characters. 
-->
<!ENTITY % ISOlat1 PUBLIC 
    "ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
    "ISOlat1.pen">
%ISOlat1;
<!ENTITY % ISOlat2 PUBLIC 
    "ISO 8879:1986//ENTITIES Added Latin 2//EN//XML"
    "ISOlat2.pen">
%ISOlat2;

<!--
	Data types. These nearly all resolve to strings but
	show intent for how data is formatted and used.
-->

<!--
	Calendar dates are represented yyyy-mm-dd format,
	following ISO 8601.
-->
<!ENTITY % yyyy-mm-dd "(#PCDATA)">

<!--
	The tenths entity is a number representing tenths of 
	interline space (positive or negative) for use in 
	attributes. The layout-tenths entity is the same for
	use in elements. Both integer and decimal values are 
	allowed, such as 5 for a half space and 2.5 for a 
	quarter space.
-->
<!ENTITY % tenths "CDATA">
<!ENTITY % layout-tenths "(#PCDATA)">

<!--
	Common structures between element and attribute definitions. 
-->

<!--
	Two entities for editorial information in notes. These
	entities, and their elements defined below, are used
	across all the different component DTDs.
-->
<!ENTITY % editorial "(footnote?, level?)">
<!ENTITY % editorial-voice "(footnote?, level?, voice?)">

<!--
	The start-stop and start-stop-continue entities are used 
	for musical elements that can either start or stop, such 
	as slurs, tuplets, and wedges. The start-stop-continue
	entity is used when there is a need to refer to an
	intermediate point in the symbol, as for complex slurs.
-->
<!ENTITY % start-stop "(start | stop)">
<!ENTITY % start-stop-continue "(start | stop | continue)">

<!--
	The yes-no entity is used for boolean-like attributes.
-->
<!ENTITY % yes-no "(yes | no)">

<!--
	The symbol-size entity is used to indicate full vs.
	cue-sized vs. oversized symbols. The large value
	for oversized symbols was added in version 1.1.
-->
<!ENTITY % symbol-size "(full | cue | large)">

<!--
	The up-down entity is used for arrow direction,
	indicating which way the tip is pointing.
-->
<!ENTITY % up-down "(up | down)">

<!--
	The top-bottom entity is used to indicate the top or
	bottom part of a vertical shape like non-arpeggiate.
-->
<!ENTITY % top-bottom "(top | bottom)">


<!--
	The position attributes are based on MuseData print
	suggestions. For most elements, any program will compute
	a default x and y position. The position attributes let
	this be changed two ways. 

	The default-x and default-y attributes change the 
	computation of the default position. For most elements,
	the origin is changed relative to the left-hand side of
	the note or the musical position within the bar (x) and
	the top line of the staff (y).

	For the following elements, the default-x value changes
	the origin relative to the start of the current measure:

		- note
		- figured-bass
		- harmony
		- link
		- directive
		- all descendants of the part-list element
		- all children of the direction-type element

	For the note, figured-bass, and harmony elements, the 
	default-x value is considered to have adjusted the 
	musical position within the bar for its descendant 
	elements.

	Since the <credit-words> element is not related to a
	measure, in this case the default-x and default-y 
	attributes adjust the origin relative to the bottom 
	left-hand corner of the first page.

	The relative-x and relative-y attributes change the 
	position relative to the default position, either as 
	computed by the individual program, or as overridden by 
	the default-x and default-y attributes.
	
	Positive x is right, negative x is left; positive y
	is up, negative y is down. All units are in tenths of
	interline space. For stems, positive relative-y 
	lengthens a stem while negative relative-y shortens it.

	As elsewhere in MusicXML, tenths are the global tenths 
	defined by the <scaling> element, not the local tenths
	of a staff resized by the <staff-size> element.

-->
<!ENTITY % position
	"default-x     %tenths;    #IMPLIED
	 default-y     %tenths;    #IMPLIED
	 relative-x    %tenths;    #IMPLIED
	 relative-y    %tenths;    #IMPLIED">

<!--
	The placement attribute indicates whether something is
	above or below another element, such as a note or a
	notation.
-->
<!ENTITY % placement
	"placement (above | below) #IMPLIED">

<!--
	The orientation attribute indicates whether slurs and
	ties are overhand (tips down) or underhand (tips up).
	This is distinct from the placement entity used by any
	notation type.
-->
<!ENTITY % orientation
	"orientation (over | under) #IMPLIED">

<!--
	The bezier entity is used to indicate the curvature of
	slurs and ties, representing the control points for a 
	cubic bezier curve. For ties, the bezier entity is 
	used with the tied element.

	Normal slurs, S-shaped slurs, and ties need only two 
	bezier points: one associated with the start of the slur 
	or tie, the other with the stop. Complex slurs and slurs 
	divided over system breaks can specify additional 
	bezier data at slur elements with a continue type.
	
	The bezier-offset, bezier-x, and bezier-y attributes
	describe the outgoing bezier point for slurs and ties 
	with a start type, and the incoming bezier point for
	slurs and ties with types of stop or continue. The 
	attributes bezier-offset2, bezier-x2, and bezier-y2 
	are only valid with slurs of type continue, and 
	describe the outgoing bezier point.
	
	The bezier-offset and bezier-offset2 attributes are
	measured in terms of musical divisions, like the offset
	element. These are the recommended attributes for
	specifying horizontal position. The other attributes
	are specified in tenths, relative to any position 
	settings associated with the slur or tied element.
-->
<!ENTITY % bezier
	"bezier-offset  CDATA     #IMPLIED
	 bezier-offset2 CDATA     #IMPLIED
	 bezier-x       %tenths;  #IMPLIED
	 bezier-y       %tenths;  #IMPLIED
	 bezier-x2      %tenths;  #IMPLIED
	 bezier-y2      %tenths;  #IMPLIED">

<!--
	Slurs, tuplets, and many other features can be
	concurrent and overlapping within a single musical
	part. The number-level attribute distinguishes up to
	six concurrent objects of the same type. A reading
	program should be prepared to handle cases where
	the number-levels stop in an arbitrary order.
	Different numbers are needed when the features
	overlap in MusicXML file order.
-->
<!ENTITY % number-level "(1 | 2 | 3 | 4 | 5 | 6)">

<!--
	MusicXML supports six levels of beaming, up to 256th 
	notes. Unlike the number-level attribute, the beam-level
	identifies concurrent beams in a beam group. It does not
	distinguish overlapping beams such as grace notes within
	regular notes, or beams used in different voices.
-->
<!ENTITY % beam-level "(1 | 2 | 3 | 4 | 5 | 6)">

<!--
	The font entity gathers together attributes for
	determining the font within a directive or direction.
	They are based on the text styles for Cascading
	Style Sheets. The font-family is a comma-separated list
	of font names. These can be specific font styles such
	as Maestro or Opus, or one of three generic font styles:
	music, serif, or sans-serif. The font-style can be 
	normal or italic. The font-size can be one of the CSS 
	sizes (xx-small, x-small, small, medium, large, x-large,
	xx-large) or a numeric point size. The font-weight can 
	be normal or bold. The default is application-dependent,
	but is a text font vs. a music font.
-->

<!ENTITY % font
	"font-family  CDATA  #IMPLIED
	 font-style   CDATA  #IMPLIED
	 font-size    CDATA  #IMPLIED
	 font-weight  CDATA  #IMPLIED">
	
<!--
	The color entity indicates the color of an element.
	Color may be represented as hexadecimal RGB triples,
	as in HTML, or as hexadecimal ARGB tuples, with the
	A indicating alpha of transparency. An alpha value
	of 00 is totally transparent; FF is totally opaque.
	If RGB is used, the A value is assumed to be FF. 

	For instance, the RGB value "#800080" represents
	purple. An ARGB value of "#40800080" would be a
	transparent purple.

	As in SVG 1.1, colors are defined in terms of the
	sRGB color space (IEC 61966).
-->
<!ENTITY % color
	"color CDATA #IMPLIED">

<!--
	The justify entity is used to indicate left, center,
	or right justification. The default value varies for
	different elements.
-->
<!ENTITY % justify
	"justify (left | center | right) #IMPLIED">

<!--
	In cases where text extends over more than one line, 
	horizontal alignment and justify values can be 
	different. The most typical case is for credits, 
	such as:

		Words and music by
		  Pat Songwriter

	Typically this type of credit is aligned to the right,
	so that the position information refers to the right-
	most part of the text. But in this example, the text 
	is center-justified, not right-justified.

	The halign attribute is used in these situations. If it 
	is not present, its value is the same as for the justify
	attribute.
-->
<!ENTITY % halign
	"halign (left | center | right) #IMPLIED">

<!--
	The valign entity is used to indicate vertical
	alignment to the top, middle, bottom, or baseline 
	of the text. Defaults are implementation-dependent.
-->
<!ENTITY % valign
	"valign (top | middle | bottom | baseline) #IMPLIED">

<!--
	The most popular combination of printing attributes
	is position, font, and color.
-->
<!ENTITY % print-style
	"%position;
	 %font;
	 %color;">

<!--
	The line-shape entity is used to distinguish between
	straight and curved lines. The line-type entity
	distinguishes between solid, dashed, dotted, and
	wavy lines.
-->
<!ENTITY % line-shape
	"line-shape (straight | curved) #IMPLIED">

<!ENTITY % line-type
	"line-type (solid | dashed | dotted | wavy) #IMPLIED">

<!--
	The printout entity is based on MuseData print
	suggestions. They allow a way to specify not to print
	print an object (e.g. note or rest), its augmentation
	dots, or its lyrics. This is especially useful for notes 
	that overlap in different voices, or for chord sheets
	that contain lyrics and chords but no melody. For wholly
	invisible notes, such as those providing sound-only data,
	the attribute for print-spacing may be set to no so that
	no space is left for this note. The print-spacing value
	is only used if no note, dot, or lyric is being printed.

	By default, all these attributes are set to yes. If 
	print-object is set to no, print-dot and print-lyric are
	interpreted to also be set to no if they are not present.
-->
<!ENTITY % print-object
	"print-object  %yes-no;  #IMPLIED">

<!ENTITY % print-spacing
	"print-spacing %yes-no;  #IMPLIED">

<!ENTITY % printout
	"%print-object;
	 print-dot     %yes-no;  #IMPLIED
	 %print-spacing;
	 print-lyric   %yes-no;  #IMPLIED">

<!--
	The trill-sound entity includes attributes used to guide
	the sound of trills, mordents, turns, shakes, and wavy
	lines, based on MuseData sound suggestions. The default
	choices are:
	
		start-note = "upper"
		trill-step = "whole"
		two-note-turn = "none"
		accelerate = "no"
		beats = "4" (minimum of "2").
	
	Second-beat and last-beat are percentages for landing
	on the indicated beat, with defaults of 25 and 75
	respectively.
	
	For mordent and inverted-mordent elements, the defaults
	are different:
	
		The default start-note is "main", not "upper".
		The default for beats is "3", not "4".
		The default for second-beat is "12", not "25".
		The default for last-beat is "24", not "75".
-->
<!ENTITY % trill-sound
	"start-note    (upper | main | below)  #IMPLIED
	 trill-step    (whole | half | unison) #IMPLIED
	 two-note-turn (whole | half | none)   #IMPLIED
	 accelerate    %yes-no; #IMPLIED
	 beats         CDATA    #IMPLIED
	 second-beat   CDATA    #IMPLIED
	 last-beat     CDATA    #IMPLIED">

<!--
	The bend-sound entity is used for bend and slide
	elements, and is similar to the trill-sound. Here the
	beats element refers to the number of discrete elements
	(like MIDI pitch bends) used to represent a continuous
	bend or slide. The first-beat indicates the percentage
	of the direction for starting a bend; the last-beat the
	percentage for ending it. The default choices are:
	
		accelerate = "no"
		beats = "4" (minimum of "2")
		first-beat = "25"
		last-beat = "75"
-->
<!ENTITY % bend-sound
	"accelerate    %yes-no; #IMPLIED
	 beats         CDATA    #IMPLIED
	 first-beat    CDATA    #IMPLIED
	 last-beat     CDATA    #IMPLIED">

<!--
	The level-display entity allows specification of 
	three common ways to indicate editorial indications:
	putting parentheses or square brackets around a 
	symbol, or making the symbol a different size. If 
	not specified, they are left to application defaults.
	It is used by the level and accidental elements.
-->
<!ENTITY % level-display
   "parentheses %yes-no;       #IMPLIED
    bracket     %yes-no;       #IMPLIED
    size        %symbol-size;  #IMPLIED">

<!-- Elements -->

<!--
	Footnote and level are used to specify editorial
	information, while voice is used to distinguish
	between multiple voices (what MuseData calls tracks)
	in individual parts. These elements are used
	throughout the component MusicXML DTDs. If the 
	reference attribute for the level element is yes,
	this indicates editorial information that is for 
	display only and should not affect playback. For 
	instance, a modern edition of older music may set 
	reference="yes" on the attributes containing the 
	music's original clef, key, and time signature. 
	It is no by default.
-->
<!ELEMENT footnote (#PCDATA)>
<!ATTLIST footnote
    %justify;
    %halign;
    %valign;
    %print-style;
>
<!ELEMENT level (#PCDATA)>
<!ATTLIST level
	reference %yes-no; #IMPLIED
    %level-display;
>
<!ELEMENT voice (#PCDATA)>

<!--
	Fermata and wavy-line elements can be applied both to
	notes and to measures, so they are defined here. Wavy
	lines are one way to indicate trills; when used with a
	measure element, they should always have type="continue"
	set. The fermata type is upright if not specified.
-->
<!ELEMENT fermata EMPTY>
<!ATTLIST fermata
    type (upright | inverted) #IMPLIED
    %print-style;
>
<!ELEMENT wavy-line EMPTY>
<!ATTLIST wavy-line
    type %start-stop-continue; #REQUIRED
    number %beam-level; #IMPLIED
    %position;
    %placement; 
    %color;
    %trill-sound; 
>

<!--
	Staff assignment is only needed for music notated on
	multiple staves. Used by both notes and directions.
	Staff values are numbers, with 1 referring to the
	top-most staff in a part.
-->
<!ELEMENT staff (#PCDATA)>

<!--
	Segno and coda signs can be associated with a measure
	or a general musical direction. These are visual 
	indicators only; a sound element is needed to guide
	playback applications reliably.
-->
<!ELEMENT segno EMPTY>
<!ATTLIST segno
    %print-style; 
>

<!ELEMENT coda EMPTY>
<!ATTLIST coda
    %print-style; 
>

<!--
	Dynamics can be associated either with a note or a
	general musical direction. To avoid inconsistencies
	between and amongst the letter abbreviations for
	dynamics (what is sf vs. sfz, standing alone or with a
	trailing dynamic that is not always piano), we use the
	actual letters as the names of these dynamic elements.
	The element other-dynamics allows other dynamic marks
	that are not covered here, but many of those should
	perhaps be included in a more general musical
	direction element. Dynamics may also be combined as
	in <sf/><mp/>.
	
	These letter dynamic symbols are separated from
	crescendo, decrescendo, and wedge indications. Dynamic
	representation is basically inconsistent in scores
	(lots of things are assumed by the composer and left out,
	such as returns to original dynamics), and is quite
	complex to do systematically. Humdrum for instance has
	at least 3 representation formats related to dynamics.
	MusicXML captures what is in the score, but does not try
	to be optimal for analysis or synthesis of dynamics.
-->
<!ELEMENT dynamics ((p | pp | ppp | pppp | ppppp | pppppp |
	f | ff | fff | ffff | fffff | ffffff | mp | mf | sf |
	sfp | sfpp | fp | rf | rfz | sfz | sffz | fz | 
	other-dynamics)*)>
<!ATTLIST dynamics
    %print-style; 
    %placement; 
>
<!ELEMENT p EMPTY>
<!ELEMENT pp EMPTY>
<!ELEMENT ppp EMPTY>
<!ELEMENT pppp EMPTY>
<!ELEMENT ppppp EMPTY>
<!ELEMENT pppppp EMPTY>
<!ELEMENT f EMPTY>
<!ELEMENT ff EMPTY>
<!ELEMENT fff EMPTY>
<!ELEMENT ffff EMPTY>
<!ELEMENT fffff EMPTY>
<!ELEMENT ffffff EMPTY>
<!ELEMENT mp EMPTY>
<!ELEMENT mf EMPTY>
<!ELEMENT sf EMPTY>
<!ELEMENT sfp EMPTY>
<!ELEMENT sfpp EMPTY>
<!ELEMENT fp EMPTY>
<!ELEMENT rf EMPTY>
<!ELEMENT rfz EMPTY>
<!ELEMENT sfz EMPTY>
<!ELEMENT sffz EMPTY>
<!ELEMENT fz EMPTY>
<!ELEMENT other-dynamics (#PCDATA)>

<!--
	The fret, string, and fingering elements can be
	used either in a technical element for a note
	or in a frame element as part of a chord symbol.
-->

<!--
	Fingering is typically indicated 1,2,3,4,5. Multiple
	fingerings may be given, typically to substitute
	fingerings in the middle of a note. The substitution
	and alternate values are "no" if the attribute is 
	not present. For guitar and other fretted instruments,
	the fingering element represents the fretting finger;
	the pluck element represents the plucking finger.
-->
<!ELEMENT fingering (#PCDATA)>
<!ATTLIST fingering
    substitution %yes-no; #IMPLIED
    alternate %yes-no; #IMPLIED
    %print-style; 
    %placement;
>

<!--
	Fret and string are used with tablature notation 
	and chord symbols. Fret numbers start with 0 for 
	an open string and 1 for the first fret. String
	numbers start with 1 for the highest string. 
	String can also be used in regular notation.
-->
<!ELEMENT fret (#PCDATA)>
<!ATTLIST fret
    %font;
    %color; 
>
<!ELEMENT string (#PCDATA)>
<!ATTLIST string
	%print-style;
	%placement;
>

<!--
	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. They are used in the staff-tuning
	and accord elements.
-->
<!ELEMENT tuning-step (#PCDATA)>
<!ELEMENT tuning-alter (#PCDATA)>
<!ELEMENT tuning-octave (#PCDATA)>

<!--
	The midi-instrument element can be a part of either
	the score-instrument element at the start of a part,
	or the sound element within a part. The id attribute
	refers to the score-instrument affected by the change.
-->
<!ELEMENT midi-instrument
	(midi-channel?, midi-name?, midi-bank?, midi-program?,
	 midi-unpitched?)>
<!ATTLIST midi-instrument
    id IDREF #REQUIRED
>

<!-- MIDI channel numbers range from 1 to 16. -->
<!ELEMENT midi-channel (#PCDATA)>

<!--
	MIDI names correspond to ProgramName meta-events within
	a Standard MIDI File.
-->
<!ELEMENT midi-name (#PCDATA)>

<!-- MIDI bank numbers range from 1 to 16,384. -->
<!ELEMENT midi-bank (#PCDATA)>

<!-- MIDI program numbers range from 1 to 128. -->
<!ELEMENT midi-program (#PCDATA)>

<!--
	For unpitched instruments, specify a MIDI note number
	ranging from 1 to 128. Usually used with MIDI banks
	for percussion.
-->
<!ELEMENT midi-unpitched (#PCDATA)>