Recordare Main Navigation Menu Recordare

MusicXML 1.0 Common DTD Module

<!--
	MusicXML common.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
-->

<!--
	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)">

<!--
	Number representing tenths of interline space (positive
	or negative) for use in attributes. Both integer and
	decimal values are allowed, such as 5 for a half space
	and 2.5 for a quarter space.
-->
<!ENTITY % tenths "CDATA">

<!--
	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 symbols.
-->
<!ENTITY % symbol-size "(full | cue)">

<!--
	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 attribute lets
	this be changed two ways. The default-x and default-y
	attributes change the computation of the default
	position. The origin becomes the left-hand side of
	the note or the musical position within the bar (x)
	and the top line of the staff (y). 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. Positions can be applied to notes,
	notations, directions, and stems. For stems, positive y
	lengthens a stem while negative y shortens it. Negative
	values for default-y are not allowed.
-->
<!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. Normal slurs and S-shaped slurs need only two
	bezier points: one associated with the start of the
	slur, the other with the stop. Complex slurs and slurs
	divided over system breaks can specify 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 with
	a start type, and the incoming bezier point for
	slurs with types of continue or stop. 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 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 can be 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 the 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 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) or its augmentation
	dots. This is especially useful for notes that overlap
	in different voices. By default, all these attributes
	are set to yes. 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 both print-object and print-dot are no.
-->

<!ENTITY % printout
	"print-object  %yes-no;  #IMPLIED
	 print-dot     %yes-no;  #IMPLIED
	 print-spacing %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">

<!-- 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. The attributes
	allow specification of three common ways to indicate
	the editorial difference: putting parentheses or
	square brackets around a symbol, or making the symbol
	cue-size vs. full-size. If not specified, they are 
	left to application defaults.
-->
<!ELEMENT footnote (#PCDATA)>
<!ELEMENT level (#PCDATA)>
<!ATTLIST level
    parentheses %yes-no; #IMPLIED
    bracket %yes-no; #IMPLIED
    size %symbol-size; #IMPLIED
>
<!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
    %position; 
>
<!ELEMENT wavy-line EMPTY>
<!ATTLIST wavy-line
    type %start-stop-continue; #REQUIRED
    number %beam-level; #IMPLIED
    %position;
    %placement; 
    %trill-sound; 
>

<!--
	Staff assignment is only needed for music notated on the
	multiple staves. Used by both notes and directions. 
-->
<!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
    %position; 
>

<!ELEMENT coda EMPTY>
<!ATTLIST coda
    %position; 
>

<!--
	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/>.
	
	Currently these letter dynamic symbols are separated from
	crescendo, decrescrendo, 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
    %position; 
    %placement; 
    %font;
>
<!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.
-->
<!ELEMENT fingering (#PCDATA)>
<!ATTLIST fingering
    substitution (yes | no) #IMPLIED
    alternate (yes | no) #IMPLIED
    %position; 
    %placement;
    %font;
>

<!--
	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. 
-->
<!ELEMENT fret (#PCDATA)>
<!ELEMENT string (#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)>

Home - Music - Software - MusicXML - DTD Index - Events - Search - Store - About Us

Copyright © 2004 Recordare LLC.

Last updated January 13, 2004.