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