Added MusicXML DTD for verification

This commit is contained in:
Matthias Neeracher 2011-09-02 02:45:26 +02:00
parent ec63fe8a7d
commit dfdc1ec17c
20 changed files with 4952 additions and 0 deletions

111
musicxml11/ISOlat1.pen Executable file
View File

@ -0,0 +1,111 @@
<!-- (C) International Organization for Standardization 1986
Permission to copy in any form is granted for use with
conforming SGML systems and applications as defined in
ISO 8879, provided this notice is included in all copies.
-->
<!-- Character entity set. Typical invocation:
<!ENTITY % ISOlat1 PUBLIC
"ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
"ISOlat1.pen" >
%ISOlat1;
or
<!ENTITY % HTMLlat1 PUBLIC
"ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
"ISOlat1.pen" >
%HTMLlat1;
-->
<!--
CATALOG ENTRIES
PUBLIC "ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
"ISOlat1.pen"
PUBLIC "ISO 8879-1986//ENTITIES Added Latin 1//EN//XML"
"ISOlat1.pen"
PUBLIC "ISO 8879:1986//ENTITIES Added Latin 1//EN"
"ISOlat1.pen"
PUBLIC "ISO 8879-1986//ENTITIES Added Latin 1//EN"
"ISOlat1.pen"
Note that the last two catalog entries are not correct for
SGML systems which need to ship the entities as SDATA.
-->
<!-- This version of the entity set can be used with any SGML document
which uses ISO 8859-1 or ISO 10646 as its document character
set. This includes XML documents and ISO HTML documents.
Prepared: Rick Jelliffe, Allette Systems, (using HTMLlat1)
Version: 1998-11-05
Thanks to Debbie Lapeyre and Evan Owens for pointing out the
error in the invocation example in the 1997-07-07 version.
-->
<!ENTITY Agrave "&#192;" ><!-- capital A, grave accent -->
<!ENTITY Aacute "&#193;" ><!-- capital A, acute accent -->
<!ENTITY Acirc "&#194;" ><!-- capital A, circumflex accent -->
<!ENTITY Atilde "&#195;" ><!-- capital A, tilde -->
<!ENTITY Auml "&#196;" ><!-- capital A, dieresis or umlaut mark -->
<!ENTITY Aring "&#197;" ><!-- capital A, ring -->
<!ENTITY AElig "&#198;" ><!-- capital AE diphthong (ligature) -->
<!ENTITY Ccedil "&#199;" ><!-- capital C, cedilla -->
<!ENTITY Egrave "&#200;" ><!-- capital E, grave accent -->
<!ENTITY Eacute "&#201;" ><!-- capital E, acute accent -->
<!ENTITY Ecirc "&#202;" ><!-- capital E, circumflex accent -->
<!ENTITY Euml "&#203;" ><!-- capital E, dieresis or umlaut mark -->
<!ENTITY Igrave "&#204;" ><!-- capital I, grave accent -->
<!ENTITY Iacute "&#205;" ><!-- capital I, acute accent -->
<!ENTITY Icirc "&#206;" ><!-- capital I, circumflex accent -->
<!ENTITY Iuml "&#207;" ><!-- capital I, dieresis or umlaut mark -->
<!ENTITY ETH "&#208;" ><!-- capital Eth, Icelandic -->
<!ENTITY Ntilde "&#209;" ><!-- capital N, tilde -->
<!ENTITY Ograve "&#210;" ><!-- capital O, grave accent -->
<!ENTITY Oacute "&#211;" ><!-- capital O, acute accent -->
<!ENTITY Ocirc "&#212;" ><!-- capital O, circumflex accent -->
<!ENTITY Otilde "&#213;" ><!-- capital O, tilde -->
<!ENTITY Ouml "&#214;" ><!-- capital O, dieresis or umlaut mark -->
<!ENTITY Oslash "&#216;" ><!-- capital O, slash -->
<!ENTITY Ugrave "&#217;" ><!-- capital U, grave accent -->
<!ENTITY Uacute "&#218;" ><!-- capital U, acute accent -->
<!ENTITY Ucirc "&#219;" ><!-- capital U, circumflex accent -->
<!ENTITY Uuml "&#220;" ><!-- capital U, dieresis or umlaut mark -->
<!ENTITY Yacute "&#221;" ><!-- capital Y, acute accent -->
<!ENTITY THORN "&#222;" ><!-- capital THORN, Icelandic -->
<!ENTITY szlig "&#223;" ><!-- small sharp s, German (sz ligature) -->
<!ENTITY agrave "&#224;" ><!-- small a, grave accent -->
<!ENTITY aacute "&#225;" ><!-- small a, acute accent -->
<!ENTITY acirc "&#226;" ><!-- small a, circumflex accent -->
<!ENTITY atilde "&#227;" ><!-- small a, tilde -->
<!ENTITY auml "&#228;" ><!-- small a, dieresis or umlaut mark -->
<!ENTITY aring "&#229;" ><!-- small a, ring -->
<!ENTITY aelig "&#230;" ><!-- small ae diphthong (ligature) -->
<!ENTITY ccedil "&#231;" ><!-- small c, cedilla -->
<!ENTITY egrave "&#232;" ><!-- small e, grave accent -->
<!ENTITY eacute "&#233;" ><!-- small e, acute accent -->
<!ENTITY ecirc "&#234;" ><!-- small e, circumflex accent -->
<!ENTITY euml "&#235;" ><!-- small e, dieresis or umlaut mark -->
<!ENTITY igrave "&#236;" ><!-- small i, grave accent -->
<!ENTITY iacute "&#237;" ><!-- small i, acute accent -->
<!ENTITY icirc "&#238;" ><!-- small i, circumflex accent -->
<!ENTITY iuml "&#239;" ><!-- small i, dieresis or umlaut mark -->
<!ENTITY eth "&#240;" ><!-- small eth, Icelandic -->
<!ENTITY ntilde "&#241;" ><!-- small n, tilde -->
<!ENTITY ograve "&#242;" ><!-- small o, grave accent -->
<!ENTITY oacute "&#243;" ><!-- small o, acute accent -->
<!ENTITY ocirc "&#244;" ><!-- small o, circumflex accent -->
<!ENTITY otilde "&#245;" ><!-- small o, tilde -->
<!ENTITY ouml "&#246;" ><!-- small o, dieresis or umlaut mark -->
<!ENTITY oslash "&#248;" ><!-- small o, slash -->
<!ENTITY ugrave "&#249;" ><!-- small u, grave accent -->
<!ENTITY uacute "&#250;" ><!-- small u, acute accent -->
<!ENTITY ucirc "&#251;" ><!-- small u, circumflex accent -->
<!ENTITY uuml "&#252;" ><!-- small u, dieresis or umlaut mark -->
<!ENTITY yacute "&#253;" ><!-- small y, acute accent -->
<!ENTITY thorn "&#254;" ><!-- small thorn, Icelandic -->
<!ENTITY yuml "&#255;" ><!-- small y, dieresis or umlaut mark -->

145
musicxml11/ISOlat2.pen Executable file
View File

@ -0,0 +1,145 @@
<!-- (C) International Organization for Standardization 1986
Permission to copy in any form is granted for use with
conforming SGML systems and applications as defined in
ISO 8879, provided this notice is included in all copies.
-->
<!-- Character entity set. Typical invocation:
<!ENTITY % ISOlat2 PUBLIC
"ISO 8879:1986//ENTITIES Added Latin 2//EN//XML"
"ISOlat2.pen">
%ISOlat2;
-->
<!-- This version of the entity set can be used with any SGML document
which uses ISO 10646 as its document character set.
This includes XML documents and ISO HTML documents.
This entity set uses hexadecimal numeric character references.
Prepared: Rick Jelliffe, ricko@allette.com.au
Version: 1998-02-06
Thanks to Wilfried Wiehler for finding 3 errors with Sacute,
Zcaron, and zcaron in the 1997-07-07 version.
-->
<!ENTITY abreve "&#x103;" ><!--=small a, breve-->
<!ENTITY Abreve "&#x102;" ><!--=capital A, breve-->
<!ENTITY amacr "&#x101;" ><!--=small a, macron-->
<!ENTITY Amacr "&#x100;" ><!--=capital A, macron-->
<!ENTITY aogon "&#x105;" ><!--=small a, ogonek-->
<!ENTITY Aogon "&#x104;" ><!--=capital A, ogonek-->
<!ENTITY cacute "&#x107;" ><!--=small c, acute accent-->
<!ENTITY Cacute "&#x106;" ><!--=capital C, acute accent-->
<!ENTITY ccaron "&#x10D;" ><!--=small c, caron-->
<!ENTITY Ccaron "&#x10C;" ><!--=capital C, caron-->
<!ENTITY ccirc "&#x109;" ><!--=small c, circumflex accent-->
<!ENTITY Ccirc "&#x108;" ><!--=capital C, circumflex accent-->
<!ENTITY cdot "&#x10B;" ><!--=small c, dot above-->
<!ENTITY Cdot "&#x10A;" ><!--=capital C, dot above-->
<!ENTITY dcaron "&#x10F;" ><!--=small d, caron-->
<!ENTITY Dcaron "&#x10E;" ><!--=capital D, caron-->
<!ENTITY dstrok "&#x111;" ><!--=small d, stroke-->
<!ENTITY Dstrok "&#x110;" ><!--=capital D, stroke-->
<!ENTITY ecaron "&#x11B;" ><!--=small e, caron-->
<!ENTITY Ecaron "&#x11A;" ><!--=capital E, caron-->
<!ENTITY edot "&#x117;" ><!--=small e, dot above-->
<!ENTITY Edot "&#x116;" ><!--=capital E, dot above-->
<!ENTITY emacr "&#x113;" ><!--=small e, macron-->
<!ENTITY Emacr "&#x112;" ><!--=capital E, macron-->
<!ENTITY eogon "&#x119;" ><!--=small e, ogonek-->
<!ENTITY Eogon "&#x118;" ><!--=capital E, ogonek-->
<!ENTITY gacute "&#x1F5;" ><!--=small g, acute accent-->
<!ENTITY gbreve "&#x11F;" ><!--=small g, breve-->
<!ENTITY Gbreve "&#x11E;" ><!--=capital G, breve-->
<!ENTITY Gcedil "&#x122;" ><!--=capital G, cedilla-->
<!ENTITY gcirc "&#x11D;" ><!--=small g, circumflex accent-->
<!ENTITY Gcirc "&#x11C;" ><!--=capital G, circumflex accent-->
<!ENTITY gdot "&#x121;" ><!--=small g, dot above-->
<!ENTITY Gdot "&#x120;" ><!--=capital G, dot above-->
<!ENTITY hcirc "&#x125;" ><!--=small h, circumflex accent-->
<!ENTITY Hcirc "&#x124;" ><!--=capital H, circumflex accent-->
<!ENTITY hstrok "&#x127;" ><!--=small h, stroke-->
<!ENTITY Hstrok "&#x126;" ><!--=capital H, stroke-->
<!ENTITY Idot "&#x130;" ><!--=capital I, dot above-->
<!ENTITY Imacr "&#x12A;" ><!--=capital I, macron-->
<!ENTITY imacr "&#x12B;" ><!--=small i, macron-->
<!ENTITY ijlig "&#x133;" ><!--=small ij ligature-->
<!ENTITY IJlig "&#x132;" ><!--=capital IJ ligature-->
<!ENTITY inodot "&#x131;" ><!--=small i without dot-->
<!ENTITY iogon "&#x12F;" ><!--=small i, ogonek-->
<!ENTITY Iogon "&#x12E;" ><!--=capital I, ogonek-->
<!ENTITY itilde "&#x129;" ><!--=small i, tilde-->
<!ENTITY Itilde "&#x128;" ><!--=capital I, tilde-->
<!ENTITY jcirc "&#x135;" ><!--=small j, circumflex accent-->
<!ENTITY Jcirc "&#x134;" ><!--=capital J, circumflex accent-->
<!ENTITY kcedil "&#x137;" ><!--=small k, cedilla-->
<!ENTITY Kcedil "&#x136;" ><!--=capital K, cedilla-->
<!ENTITY kgreen "&#x138;" ><!--=small k, Greenlandic-->
<!ENTITY lacute "&#x13A;" ><!--=small l, acute accent-->
<!ENTITY Lacute "&#x139;" ><!--=capital L, acute accent-->
<!ENTITY lcaron "&#x13E;" ><!--=small l, caron-->
<!ENTITY Lcaron "&#x13D;" ><!--=capital L, caron-->
<!ENTITY lcedil "&#x13C;" ><!--=small l, cedilla-->
<!ENTITY Lcedil "&#x13B;" ><!--=capital L, cedilla-->
<!ENTITY lmidot "&#x140;" ><!--=small l, middle dot-->
<!ENTITY Lmidot "&#x139;" ><!--=capital L, middle dot-->
<!ENTITY lstrok "&#x142;" ><!--=small l, stroke-->
<!ENTITY Lstrok "&#x141;" ><!--=capital L, stroke-->
<!ENTITY nacute "&#x144;" ><!--=small n, acute accent-->
<!ENTITY Nacute "&#x143;" ><!--=capital N, acute accent-->
<!ENTITY eng "&#x14B;" ><!--=small eng, Lapp-->
<!ENTITY ENG "&#x14A;" ><!--=capital ENG, Lapp-->
<!ENTITY napos "&#x149;" ><!--=small n, apostrophe-->
<!ENTITY ncaron "&#x148;" ><!--=small n, caron-->
<!ENTITY Ncaron "&#x147;" ><!--=capital N, caron-->
<!ENTITY ncedil "&#x146;" ><!--=small n, cedilla-->
<!ENTITY Ncedil "&#x145;" ><!--=capital N, cedilla-->
<!ENTITY odblac "&#x151;" ><!--=small o, double acute accent-->
<!ENTITY Odblac "&#x150;" ><!--=capital O, double acute accent-->
<!ENTITY Omacr "&#x14C;" ><!--=capital O, macron-->
<!ENTITY omacr "&#x14D;" ><!--=small o, macron-->
<!ENTITY oelig "&#x153;" ><!--=small oe ligature-->
<!ENTITY OElig "&#x152;" ><!--=capital OE ligature-->
<!ENTITY racute "&#x155;" ><!--=small r, acute accent-->
<!ENTITY Racute "&#x154;" ><!--=capital R, acute accent-->
<!ENTITY rcaron "&#x159;" ><!--=small r, caron-->
<!ENTITY Rcaron "&#x158;" ><!--=capital R, caron-->
<!ENTITY rcedil "&#x157;" ><!--=small r, cedilla-->
<!ENTITY Rcedil "&#x156;" ><!--=capital R, cedilla-->
<!ENTITY sacute "&#x15B;" ><!--=small s, acute accent-->
<!ENTITY Sacute "&#x15A;" ><!--=capital S, acute accent-->
<!ENTITY scaron "&#x161;" ><!--=small s, caron-->
<!ENTITY Scaron "&#x160;" ><!--=capital S, caron-->
<!ENTITY scedil "&#x15F;" ><!--=small s, cedilla-->
<!ENTITY Scedil "&#x15E;" ><!--=capital S, cedilla-->
<!ENTITY scirc "&#x15C;" ><!--=small s, circumflex accent-->
<!ENTITY Scirc "&#x15D;" ><!--=capital S, circumflex accent-->
<!ENTITY tcaron "&#x165;" ><!--=small t, caron-->
<!ENTITY Tcaron "&#x164;" ><!--=capital T, caron-->
<!ENTITY tcedil "&#x162;" ><!--=small t, cedilla-->
<!ENTITY Tcedil "&#x163;" ><!--=capital T, cedilla-->
<!ENTITY tstrok "&#x167;" ><!--=small t, stroke-->
<!ENTITY Tstrok "&#x166;" ><!--=capital T, stroke-->
<!ENTITY ubreve "&#x16D;" ><!--=small u, breve-->
<!ENTITY Ubreve "&#x16C;" ><!--=capital U, breve-->
<!ENTITY udblac "&#x171;" ><!--=small u, double acute accent-->
<!ENTITY Udblac "&#x170;" ><!--=capital U, double acute accent-->
<!ENTITY umacr "&#x16B;" ><!--=small u, macron-->
<!ENTITY Umacr "&#x16A;" ><!--=capital U, macron-->
<!ENTITY uogon "&#x173;" ><!--=small u, ogonek-->
<!ENTITY Uogon "&#x172;" ><!--=capital U, ogonek-->
<!ENTITY uring "&#x16F;" ><!--=small u, ring-->
<!ENTITY Uring "&#x16E;" ><!--=capital U, ring-->
<!ENTITY utilde "&#x169;" ><!--=small u, tilde-->
<!ENTITY Utilde "&#x168;" ><!--=capital U, tilde-->
<!ENTITY wcirc "&#x175;" ><!--=small w, circumflex accent-->
<!ENTITY Wcirc "&#x174;" ><!--=capital W, circumflex accent-->
<!ENTITY ycirc "&#x177;" ><!--=small y, circumflex accent-->
<!ENTITY Ycirc "&#x176;" ><!--=capital Y, circumflex accent-->
<!ENTITY Yuml "&#x178;" ><!--=capital Y, dieresis or umlaut mark-->
<!ENTITY zacute "&#x17A;" ><!--=small z, acute accent-->
<!ENTITY Zacute "&#x179;" ><!--=capital Z, acute accent-->
<!ENTITY zcaron "&#x17E;" ><!--=small z, caron-->
<!ENTITY Zcaron "&#x17D;" ><!--=capital Z, caron-->
<!ENTITY zdot "&#x17C;" ><!--=small z, dot above-->
<!ENTITY Zdot "&#x17B;" ><!--=capital Z, dot above-->

195
musicxml11/MIDIEvents10.dtd Executable file
View File

@ -0,0 +1,195 @@
<!--
XML DTD for MIDI messages
Version 1.0, 19 January 2003
Formal Public Identifier:
"-//MIDI Manufacturers Association//DTD MIDIEvents 1.0//EN"
URI:
"http://www.midi.org/dtds/MIDIEvents10.dtd"
Parameter entities which must be defined before use:
%ChannelRequired; #IMPLIED
for use in contexts, where the event is always
rechannelized
#REQUIRED
when channel messages require Channel attribute
e.g.
<!ENTITY % MIDIDTD PUBLIC "-//MIDI Manufacturers Association//DTD MIDIEvents 1.0//EN"
"http://www.midi.org/dtds/MIDIEvents10.dtd" >
%MIDIDTD;
-->
<!--
CHANNEL MESSAGES
Attribute values:
Note, Velocity, Pressure, Control, Value, Number are all 0..127
except: PitchBend's Value is 0..16383
-->
<!ELEMENT NoteOn EMPTY>
<!ATTLIST NoteOn
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;
Note NMTOKEN #REQUIRED
Velocity NMTOKEN #REQUIRED>
<!ELEMENT NoteOff EMPTY>
<!ATTLIST NoteOff
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;
Note NMTOKEN #REQUIRED
Velocity NMTOKEN #REQUIRED>
<!ELEMENT PolyKeyPressure EMPTY>
<!ATTLIST PolyKeyPressure
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;
Note NMTOKEN #REQUIRED
Pressure NMTOKEN #REQUIRED>
<!ELEMENT ControlChange EMPTY>
<!ATTLIST ControlChange
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;
Control NMTOKEN #REQUIRED
Value NMTOKEN #REQUIRED>
<!ELEMENT ProgramChange EMPTY>
<!ATTLIST ProgramChange
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;
Number NMTOKEN #REQUIRED>
<!ELEMENT ChannelKeyPressure EMPTY>
<!ATTLIST ChannelKeyPressure
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;
Pressure NMTOKEN #REQUIRED>
<!ELEMENT PitchBendChange EMPTY>
<!ATTLIST PitchBendChange
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;
Value NMTOKEN #REQUIRED>
<!--
Channel mode messages
-->
<!ELEMENT AllSoundOff EMPTY>
<!ATTLIST AllSoundOff
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;>
<!ELEMENT ResetAllControllers EMPTY>
<!ATTLIST ResetAllControllers
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;>
<!ELEMENT LocalControl EMPTY>
<!ATTLIST LocalControl
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;
Value (off|on) #REQUIRED>
<!ELEMENT AllNotesOff EMPTY>
<!ATTLIST AllNotesOff
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;>
<!ELEMENT OmniOff EMPTY>
<!ATTLIST OmniOff
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;>
<!ELEMENT OmniOn EMPTY>
<!ATTLIST OmniOn
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;>
<!ELEMENT MonoMode EMPTY>
<!ATTLIST MonoMode
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;
Value NMTOKEN #REQUIRED>
<!ELEMENT PolyMode EMPTY>
<!ATTLIST PolyMode
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;>
<!--
14-bit control changes:
Value is 0..16383
ControlChange14's Control is MSB 0..31
RPNN and NRPN are 0..16383
-->
<!ELEMENT ControlChange14 EMPTY>
<!ATTLIST ControlChange14
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;
Control NMTOKEN #REQUIRED
Value NMTOKEN #REQUIRED>
<!ELEMENT RPNChange EMPTY>
<!ATTLIST RPNChange
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;
RPN NMTOKEN #REQUIRED
Value NMTOKEN #REQUIRED>
<!ELEMENT NRPNChange EMPTY>
<!ATTLIST NRPNChange
Channel (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16) %ChannelRequired;
NRPN NMTOKEN #REQUIRED
Value NMTOKEN #REQUIRED>
<!--
SYSTEM MESSAGES
-->
<!ELEMENT SysEx (#PCDATA | SysExDeviceID | SysExChannel)*>
<!-- contains string of hex bytes without radix information, e.g.:
<SysEx>F0 01 02 <SysExDeviceID/> 03 04 05 <SysExChannel Multiplier="1" Offset="32"/> F7</SysEx>
-->
<!ELEMENT SysExDeviceID EMPTY> <!-- Byte as a function of user-visible Device ID
e.g. 17 as the default on many Roland devices.
Most sysex messages will use this element. -->
<!ATTLIST SysExDeviceID
Multiplier NMTOKEN "1"
Offset NMTOKEN "0"> <!-- multiplier and offset are decimal -->
<!ELEMENT SysExChannel EMPTY> <!-- Byte as a function of MIDI Channel 1-16, for
specialized situations where a sys-ex message
is being directed to a specific MIDI channel.
Generally only older devices require use of this. -->
<!ATTLIST SysExChannel
Multiplier NMTOKEN "1"
Offset NMTOKEN "0"> <!-- multiplier and offset are decimal -->
<!ELEMENT MTCQuarterFrame EMPTY>
<!ATTLIST MTCQuarterFrame
MessageType (FrameLSNibble | FrameMSNibble |
SecsLSNibble | SecsMSNibble |
MinsLSNibble | MinsMSNibble |
HrsLSNibble | HrsMSNibbleSMPTEType) #REQUIRED
DataNibble NMTOKEN #REQUIRED>
<!ELEMENT SongPositionPointer EMPTY>
<!ATTLIST SongPositionPointer
Position NMTOKEN #REQUIRED> <!-- 0-16383 -->
<!ELEMENT SongSelect EMPTY>
<!ATTLIST SongSelect
Number NMTOKEN #REQUIRED> <!-- 0-127 -->
<!ELEMENT TuneRequest EMPTY>
<!ELEMENT TimingClock EMPTY>
<!ELEMENT Start EMPTY>
<!ELEMENT Continue EMPTY>
<!ELEMENT Stop EMPTY>
<!ELEMENT ActiveSensing EMPTY>
<!ELEMENT SystemReset EMPTY>
<!--
ENTITIES
-->
<!ENTITY % MIDIChannelVoiceMessage "(NoteOn | NoteOff | PolyKeyPressure | ControlChange | ProgramChange
| ChannelKeyPressure | PitchBendChange)">
<!ENTITY % MIDIChannelModeMessage "(AllSoundOff | ResetAllControllers | LocalControl | AllNotesOff
| OmniOff | OmniOn | MonoMode | PolyMode)">
<!ENTITY % MIDIChannelMessage "(%MIDIChannelVoiceMessage; | %MIDIChannelModeMessage;)">
<!ENTITY % MIDISystemMessage "(SysEx | MTCQuarterFrame | SongPositionPointer | SongSelect
| TuneRequest | TimingClock | Start | Continue | Stop | ActiveSensing | SystemReset)">
<!ENTITY % MIDIMessage "(%MIDIChannelMessage; | %MIDISystemMessage; )">

361
musicxml11/attributes.dtd Executable file
View File

@ -0,0 +1,361 @@
<!--
MusicXML attributes.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
-->
<!--
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.
The optional number attribute refers to staff numbers,
from top to bottom on the system. If absent, the key
signature applies to all staves in the part.
-->
<!ELEMENT key ((cancel?, fifths, mode?) |
((key-step, key-alter)*))>
<!ATTLIST key
number CDATA #IMPLIED
%color;
>
<!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.
The print-object attribute allows a time signature to be
specified but not printed, as is the case for excerpts
from the middle of a score. The value is "yes" if
not present. The optional number attribute refers to staff
numbers, from top to bottom on the system. If absent, the
time signature applies to all staves in the part.
-->
<!ELEMENT time ((beats, beat-type)+ | senza-misura)>
<!ATTLIST time
number CDATA #IMPLIED
symbol (common | cut | single-number | normal) #IMPLIED
%print-object;
%color;
>
<!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
%color;
>
<!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. The print-object attribute
is used to indicate when a staff is not printed in a part,
usually in large scores where empty parts are omitted.
It is yes by default. If print-spacing is yes while
print-object is no, the score is printed in cutaway
format where vertical space is left for the empty part.
-->
<!ELEMENT staff-details (staff-type?, staff-lines?,
staff-tuning*, capo?, staff-size?)>
<!ATTLIST staff-details
number CDATA #IMPLIED
show-frets (numbers | letters) #IMPLIED
%print-object;
%print-spacing;
>
<!ELEMENT staff-type (#PCDATA)>
<!ELEMENT staff-lines (#PCDATA)>
<!--
The tuning-step, tuning-alter, and tuning-octave
elements are defined in the common.dtd file. Staff
lines are numbered from bottom to top.
-->
<!ELEMENT staff-tuning
(tuning-step, tuning-alter?, tuning-octave)>
<!ATTLIST staff-tuning
line CDATA #REQUIRED
>
<!--
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)>
<!--
The staff-size element indicates how large a staff
space is on this staff, expressed as a percentage of
the work's default scaling. Values less than 100 make
the staff space smaller while values over 100 make the
staff space larger. A staff-type of cue, ossia, or
editorial implies a staff-size of less than 100, but
the exact value is implementation-dependent unless
specified here. Staff size affects staff height only,
not the relationship of the staff to the left and
right margins.
-->
<!ELEMENT staff-size (#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
%print-style;
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
%font;
%color;
>
<!--
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
>

98
musicxml11/barline.dtd Executable file
View File

@ -0,0 +1,98 @@
<!--
MusicXML barline.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
-->
<!--
If a barline is other than a normal single barline, it
should be represented by a barline element that describes
it. This includes information about repeats and multiple
endings, as well as line style. Barline data is on the
same level as the other musical data in a score - a child
of a measure in a partwise score, or a part in a timewise
score. This allows for barlines within measures, as in
dotted barlines that subdivide measures in complex
meters. The two fermata elements allow for fermatas
on both sides of the barline (the lower one inverted).
Barlines have a location attribute to make it easier to
process barlines independently of the other musical data
in a score. It is often easier to set up measures
separately from entering notes. The location attribute
must match where the barline element occurs within the
rest of the musical data in the score. If location is
left, it should be the first element in the measure; if
location is right, it should be the last element. If no
location is specified, the right barline is the default.
-->
<!-- Elements -->
<!ELEMENT barline (bar-style?, %editorial;, wavy-line?,
segno?, coda?, (fermata, fermata?)?, ending?, repeat?)>
<!ATTLIST barline
location (right | left | middle) "right"
>
<!--
Bar-style contains style information. Choices are
regular, dotted, dashed, heavy, light-light,
light-heavy, heavy-light, heavy-heavy, and none.
-->
<!ELEMENT bar-style (#PCDATA)>
<!ATTLIST bar-style
%color;
>
<!--
The voice entity and the wavy-line, segno, and fermata
elements are defined in the common.dtd file. They can
apply to both notes and barlines.
-->
<!--
Endings refers to multiple (e.g. first and second)
endings. Typically, the start type is associated with
the left barline of the first measure in an ending. The
stop and discontinue types are associated with the right
barline of the last measure in an ending. Stop is used
when the ending mark concludes with a downward jog, as
is the case for first endings. Discontinue is used when
there is no downward jog, as in the final ending. The
length of the jog can be specified using the end-length
attribute. The number attribute reflects what is under
the ending line. Single endings such as "1" or multiple
endings such as "1, 2" may be used. The ending element
text is used when the text displayed in the ending is
different than what appears in the number attribute.
-->
<!ELEMENT ending (#PCDATA)>
<!ATTLIST ending
number CDATA #REQUIRED
type (start | stop | discontinue) #REQUIRED
%print-style;
end-length %tenths; #IMPLIED
>
<!--
Repeat marks. The start of the repeat has a forward
direction while the end of the repeat has a backward
direction. Backward repeats that are not part of an
ending can use the times attribute to indicate the
number of times the repeated section is played.
-->
<!ELEMENT repeat EMPTY>
<!ATTLIST repeat
direction (backward | forward) #REQUIRED
times CDATA #IMPLIED
>

644
musicxml11/common.dtd Executable file
View File

@ -0,0 +1,644 @@
<!--
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)>

616
musicxml11/direction.dtd Executable file
View File

@ -0,0 +1,616 @@
<!--
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
>

99
musicxml11/identity.dtd Executable file
View File

@ -0,0 +1,99 @@
<!--
MusicXML identity.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
-->
<!--
The identify component DTD contains the identification
element and its children, containing metadata about a
score.
-->
<!-- Elements -->
<!--
Identification contains basic metadata about the score.
It includes the information in MuseData headers that
may apply at a score-wide, movement-wide, or part-wide
level. The creator and rights elements are based on
Dublin Core.
-->
<!ELEMENT identification (creator*, rights*, encoding?,
source?, miscellaneous?)>
<!--
Creator is borrowed from Dublin Core. It is the composer
of the score (the artist field in NIFF). The type
attribute can be used to distinguish words and music so
as to represent lyricists and librettists as well as
composers. Thus, there can be multiple creators in an
identification. We do not use the creator / contributor
distinction from Dublin Core.
-->
<!ELEMENT creator (#PCDATA)>
<!ATTLIST creator
type CDATA #IMPLIED
>
<!--
Rights is borrowed from Dublin Core. It contains
copyright and other intellectual property notices.
Words, music, and derivatives can have different types,
so multiple rights tags with different type attributes
are supported.
-->
<!ELEMENT rights (#PCDATA)>
<!ATTLIST rights
type CDATA #IMPLIED
>
<!--
Encoding contains information about who did the digital
encoding, when, with what software, and in what aspects.
The supports element indicates if the encoding supports
a particular MusicXML element. This is recommended for
elements like beam, stem, and accidental, where the
absence of an element is ambiguous if you do not know
if the encoding supports that element.
-->
<!ELEMENT encoding ((encoding-date | encoder | software |
encoding-description | supports)*)>
<!ELEMENT encoding-date %yyyy-mm-dd;>
<!ELEMENT encoder (#PCDATA)>
<!ATTLIST encoder
type CDATA #IMPLIED
>
<!ELEMENT software (#PCDATA)>
<!ELEMENT encoding-description (#PCDATA)>
<!ELEMENT supports EMPTY>
<!ATTLIST supports
type %yes-no; #REQUIRED
element CDATA #REQUIRED
>
<!--
The source for the music that is encoded. This is not
quite the same as the Dublin Core publisher (or source)
element, so we keep the MuseData terminology.
-->
<!ELEMENT source (#PCDATA)>
<!--
If a program has other metadata not yet supported
in MusicXML, it can go in the miscellaneous area.
-->
<!ELEMENT miscellaneous (miscellaneous-field*)>
<!ELEMENT miscellaneous-field (#PCDATA)>
<!ATTLIST miscellaneous-field
name CDATA #REQUIRED
>

120
musicxml11/layout.dtd Executable file
View File

@ -0,0 +1,120 @@
<!--
MusicXML layout.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
-->
<!--
MusicXML 1.1 adds layout information for pages,
systems, staffs, and measures. These layout elements
join the print and sound elements in providing
formatting data as elements rather than attributes.
Everything is measured in tenths of staff space.
Tenths are then scaled to millimeters within the
scaling element, used in the defaults element at
the start of a score. Individual staves can apply
a scaling factor to adjust staff size. When a
MusicXML element or attribute refers to tenths,
it means the global tenths defined by the scaling
element, not the local tenths as adjusted by the
staff-size element.
-->
<!-- Elements -->
<!--
Margins, page sizes, and distances are all measured in
tenths to keep MusicXML data in a consistent coordinate
system as much as possible. The translation to absolute
units is done in the scaling element, which specifies
how many millimeters are equal to how many tenths. For
a staff height of 7 mm, millimeters would be set to 7
while tenths is set to 40. The ability to set a formula
rather than a single scaling factor helps avoid roundoff
errors.
-->
<!ELEMENT scaling (millimeters, tenths)>
<!ELEMENT millimeters (#PCDATA)>
<!ELEMENT tenths %layout-tenths;>
<!--
Margin elements are included within many of the
larger layout elements.
-->
<!ELEMENT left-margin %layout-tenths;>
<!ELEMENT right-margin %layout-tenths;>
<!ELEMENT top-margin %layout-tenths;>
<!ELEMENT bottom-margin %layout-tenths;>
<!--
Page layout can be defined both in score-wide
defaults and in the print element. Page margins
are specified either for both even and odd pages,
or via separate odd and even page number values.
The type is not needed when used in as part of
a print element. If omitted when used in the
defaults element, "both" is the default.
-->
<!ELEMENT page-layout (page-height, page-width,
page-margins?, page-margins?)>
<!ELEMENT page-height %layout-tenths;>
<!ELEMENT page-width %layout-tenths;>
<!ELEMENT page-margins (left-margin, right-margin,
top-margin, bottom-margin)>
<!ATTLIST page-margins
type (odd | even | both) #IMPLIED
>
<!--
System layout includes left and right margins and the
vertical distance from the previous system. Margins
are relative to the page margins. Positive values
indent and negative values reduce the margin size.
The system distance is measured from the bottom line
of the previous system to the top line of the current
system. It is ignored for the first system on a page.
The top system distance is measured from the page's
top margin to the top line of the first system. It is
ignored for all but the first system on a page.
-->
<!ELEMENT system-layout
(system-margins?, system-distance?, top-system-distance?)>
<!ELEMENT system-margins (left-margin, right-margin)>
<!ELEMENT system-distance %layout-tenths;>
<!ELEMENT top-system-distance %layout-tenths;>
<!--
Staff layout includes the vertical distance from
the bottom line of the previous staff in this system
to the top line of the staff specified by the number
attribute. The first staff of the part is used if
the number attribute is missing. When used in the
defaults element, the values apply to all parts.
This value is ignored for the first staff in a system.
-->
<!ELEMENT staff-layout (staff-distance?)>
<!ELEMENT staff-distance %layout-tenths;>
<!ATTLIST staff-layout
number CDATA #IMPLIED
>
<!--
Measure layout includes the horizontal distance
from the previous measure. This value is only used
for systems where there is horizontal whitespace
in the middle of a system, as in systems with codas.
To specify the measure width, use the width attribute
of the measure element.
-->
<!ELEMENT measure-layout (measure-distance?)>
<!ELEMENT measure-distance %layout-tenths;>

60
musicxml11/link.dtd Executable file
View File

@ -0,0 +1,60 @@
<!--
MusicXML link.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 DTD describes the entity and elements used for
simple XLink support. The link element serves as an
outgoing XLink. The bookmark element serves as a well-
defined target for an incoming XLink. The entity for
link-attributes is also used to connect a MusicXML
score with a MusicXML opus.
-->
<!-- Entities -->
<!--
Namespace entity for the XLink recommendation.
-->
<!ENTITY % xlink.ns "http://www.w3.org/1999/xlink">
<!--
The link-attributes entity includes all the
simple XLink attributes supported in MusicXML.
-->
<!ENTITY % link-attributes
"xmlns:xlink CDATA #FIXED '%xlink.ns;'
xlink:href CDATA #REQUIRED
xlink:type (simple) #FIXED 'simple'
xlink:role CDATA #IMPLIED
xlink:title CDATA #IMPLIED
xlink:show (new | replace | embed | other | none)
'replace'
xlink:actuate (onRequest | onLoad | other | none)
'onRequest'">
<!-- Elements -->
<!ELEMENT link EMPTY>
<!ATTLIST link
%link-attributes;
name CDATA #IMPLIED
%position;
>
<!ELEMENT bookmark EMPTY>
<!ATTLIST bookmark
id ID #REQUIRED
name CDATA #IMPLIED
>

221
musicxml11/midixml.dtd Executable file
View File

@ -0,0 +1,221 @@
<!--
Standard MIDI File DTD: MIDI XML
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
-->
<!--
MIDI XML is an XML representation of standard MIDI files.
Unlike standard MIDI files, it can have timestamps
present as either absolute or delta values. This makes
it convenient as an intermediate format to convert from
MusicXML or other formats where note on and note off are
not represented as discrete events. To convert to
standard MIDI files, delta values must be used.
Suggested use:
<!DOCTYPE MIDIFile PUBLIC
"-//Recordare//DTD MusicXML 1.1 MIDI//EN"
"http://www.musicxml.org/dtds/midixml.dtd">
-->
<!--
For Standard MIDI Files, channels are required; events
are not rechannelized.
-->
<!ENTITY % ChannelRequired "#REQUIRED">
<!-- Component DTDs -->
<!--
The MMA MIDI DTD contains the definitions of all
MIDI events. Its regular address is:
http://www.midi.org/dtds/MIDIEvents10.dtd
For convenience, we include a local copy with our
definition, and reference that here.
-->
<!ENTITY % midi PUBLIC
"-//MIDI Manufacturers Association//DTD MIDIEvents 1.0//EN"
"MIDIEvents10.dtd">
%midi;
<!--
Timestamps are either delta or absolute. They must all
be one or the other throughout the MidiXML file.
Timestamps are numeric values measured in MIDI ticks.
-->
<!ENTITY % Timestamp "(Delta | Absolute)">
<!ELEMENT Delta (#PCDATA)>
<!ELEMENT Absolute (#PCDATA)>
<!--
Standard MIDI File events include MIDI Channel messages,
meta-events, and system exclusive events. Each track is
a series of events. The MetaEvent and SysExEvent elements
are defined below. The MIDIChannelMessage and MIDIMessage
events are defined in the MMA's MIDI DTD (RP-038).
-->
<!ENTITY % MetaEvent
"(SequenceNumber | TextEvent | CopyrightNotice |
TrackName | InstrumentName | Lyric | Marker |
CuePoint | ProgramName | DeviceName | Port |
MIDIChannelPrefix | EndOfTrack | SetTempo |
SMPTEOffset | TimeSignature | KeySignature |
SequencerSpecific | OtherMetaEvent)">
<!ENTITY % SysExEvent
"(SystemExclusive | EndOfExclusive)">
<!ENTITY % SmfEvent
"(%MIDIChannelMessage; | %MetaEvent; | %SysExEvent;)">
<!ELEMENT Event (%Timestamp;, %SmfEvent;)>
<!--
MIDI meta events. If empty, the value for the event
is contained in an attribute, following the pattern
of the MMA's MIDI DTD. Textual meta events have their
values as text within the element.
-->
<!ELEMENT SequenceNumber EMPTY>
<!ATTLIST SequenceNumber
Value NMTOKEN #REQUIRED>
<!ELEMENT TextEvent (#PCDATA)>
<!ELEMENT CopyrightNotice (#PCDATA)>
<!ELEMENT TrackName (#PCDATA)>
<!ELEMENT InstrumentName (#PCDATA)>
<!ELEMENT Lyric (#PCDATA)>
<!ELEMENT Marker (#PCDATA)>
<!ELEMENT CuePoint (#PCDATA)>
<!ELEMENT MIDIChannelPrefix EMPTY>
<!ATTLIST MIDIChannelPrefix
Value NMTOKEN #REQUIRED>
<!ELEMENT EndOfTrack EMPTY>
<!ELEMENT SetTempo EMPTY>
<!ATTLIST SetTempo
Value NMTOKEN #REQUIRED>
<!ELEMENT SMPTEOffset EMPTY>
<!ATTLIST SMPTEOffset
TimeCodeType NMTOKEN #REQUIRED
Hour NMTOKEN #REQUIRED
Minute NMTOKEN #REQUIRED
Second NMTOKEN #REQUIRED
Frame NMTOKEN #REQUIRED
FractionalFrame NMTOKEN #REQUIRED>
<!ELEMENT TimeSignature EMPTY>
<!ATTLIST TimeSignature
Numerator NMTOKEN #REQUIRED
LogDenominator NMTOKEN #REQUIRED
MIDIClocksPerMetronomeClick NMTOKEN #REQUIRED
ThirtySecondsPer24Clocks NMTOKEN #REQUIRED>
<!ELEMENT KeySignature EMPTY>
<!ATTLIST KeySignature
Fifths NMTOKEN #REQUIRED
Mode NMTOKEN #REQUIRED>
<!ELEMENT SequencerSpecific (#PCDATA)>
<!--
The ProgramName and DeviceName meta-events are described
in RP-019 from the MMA. They allow a Standard MIDI file
to address multiple devices, enabling more than 16
channels of MIDI playback.
-->
<!ELEMENT ProgramName (#PCDATA)>
<!ELEMENT DeviceName (#PCDATA)>
<!--
The XMFPatchTypePrefix meta-event is described in
RP-032 from the MMA. It allows specification of using
General MIDI 1, General MIDI 2, or DLS to interpret
subsequent program change and bank select messages
in the same track.
-->
<!ELEMENT XMFPatchTypePrefix EMPTY>
<!ATTLIST XMFPatchTypePrefix
Value NMTOKEN #REQUIRED>
<!--
The meta-event hex 21 has been used, at least
unofficially, for a MIDI port or cable number.
RP-019 deprecates this in favor of the DeviceName
meta-event, but programs still use this.
-->
<!ELEMENT Port EMPTY>
<!ATTLIST Port
Value NMTOKEN #REQUIRED>
<!--
An unrecognized meta-event has attributes for both its
event number in hex and its length. The data for the
invent is represented in hex within the element, as is
done for system exclusives.
-->
<!ELEMENT OtherMetaEvent (#PCDATA)>
<!ATTLIST OtherMetaEvent
Number NMTOKEN #REQUIRED>
<!--
MIDI system exclusive and end of exclusive events have
their data represented as a series of 2-digit hex
elements separated by spaces, as in the MMA MIDI DTD.
-->
<!ELEMENT SystemExclusive (#PCDATA)>
<!ELEMENT EndOfExclusive (#PCDATA)>
<!-- MIDI is the root element -->
<!ELEMENT MIDIFile (Format, TrackCount,
(TicksPerBeat | (FrameRate, TicksPerFrame)),
TimestampType, Track+)>
<!--
Format indicates MIDI format 0, 1, or 2. So far only
types 0 and 1 are explicitly supported by MidiXML.
-->
<!ELEMENT Format (#PCDATA)>
<!--
TrackCount indicate the number of tracks in a file:
1 for type 0, usually more for types 1 and 2.
-->
<!ELEMENT TrackCount (#PCDATA)>
<!--
How many ticks in a beat (MIDI quarter note).
-->
<!ELEMENT TicksPerBeat (#PCDATA)>
<!--
Frame rate and ticks per frame are used with SMPTE
time codes.
-->
<!ELEMENT FrameRate (#PCDATA)>
<!ELEMENT TicksPerFrame (#PCDATA)>
<!--
TimestampType should be Delta or Absolute. Indicates the
element name to look for in the initial timestamp in
each MIDI event.
-->
<!ELEMENT TimestampType (#PCDATA)>
<!--
Tracks contain the musical data and are made up of a
series of events. The track number attribute is
required.
-->
<!ELEMENT Track (Event*)>
<!ATTLIST Track Number NMTOKEN #REQUIRED>

57
musicxml11/midixml.xsl Executable file
View File

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
MIDI XML midixml.xsl for sorting MIDI files with
absolute timestamps.
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
-->
<!--
XSL Stylesheet for sorting MIDI XML by absolute timestamp.
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--
The identity transformation. Used for everything aside
from the track element.
-->
<xsl:template match="text()">
<xsl:value-of select="." />
</xsl:template>
<xsl:template match="*|@*|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates
select="*|@*|comment()|processing-instruction()|text()"/>
</xsl:copy>
</xsl:template>
<!--
When we get to a Track, sort all events within the
track by their Absolute timestamp.
-->
<xsl:template match="Track">
<xsl:element name="Track">
<xsl:apply-templates>
<xsl:sort data-type="number" select="Absolute" />
</xsl:apply-templates>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

1026
musicxml11/note.dtd Executable file

File diff suppressed because it is too large Load Diff

66
musicxml11/opus.dtd Executable file
View File

@ -0,0 +1,66 @@
<!--
MusicXML Opus 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
-->
<!--
An opus collects MusicXML scores together into a larger
entity. The individual scores could be movements in a
symphony, scenes or acts in an opera, or songs in an
album. The opus definition allows arbitrary nesting
either via an opus (included in the document) or an
opus-link (linked like scores). Future versions of
MusicXML may expand this DTD to include reference
data and other metadata related to musical scores.
Suggested use:
<!DOCTYPE opus PUBLIC
"-//Recordare//DTD MusicXML 1.1 Opus//EN"
"http://www.musicxml.org/dtds/opus.dtd">
-->
<!-- Component DTDs -->
<!-- XLink attributes DTD. -->
<!ENTITY % link PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Link//EN"
"link.dtd">
%link;
<!-- Elements -->
<!--
Opus is the document element.
-->
<!ELEMENT opus (title?, (opus | opus-link | score)*)>
<!--
Scores provide the links to the individual movements.
-->
<!ELEMENT score EMPTY>
<!ATTLIST score %link-attributes;>
<!--
An opus-link provides a link to another opus document,
allowing for multiple levels of opus collections via
linking as well as nesting.
-->
<!ELEMENT opus-link EMPTY>
<!ATTLIST opus-link %link-attributes;>
<!--
Future versions may include metadata elements. In
this version, we just include the title of the opus.
-->
<!ELEMENT title (#PCDATA)>

173
musicxml11/parttime.xsl Executable file
View File

@ -0,0 +1,173 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
MusicXML parttime.xsl
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
-->
<!--
Parttime.xsl is an XSLT stylesheet for transforming
partwise MusicXML scores into timewise scores. Thus
instead of having measures included within each part,
the transformed score includes parts within each measure.
This type of transformation allows the 2-dimensional
nature of a musical score to be adequately represented
within a hierarchical format like XML.
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--
XML output, with a DOCTYPE refering the timewise DTD.
Here we use the full Internet URL.
-->
<xsl:output method="xml" indent="yes" encoding="UTF-8"
omit-xml-declaration="no" standalone="no"
doctype-system="http://www.musicxml.org/dtds/timewise.dtd"
doctype-public="-//Recordare//DTD MusicXML 1.1 Timewise//EN" />
<!--
For the root, only look for score-partwise and
score-timewise. Anything else as a root element gets
ignored.
-->
<xsl:template match="/">
<xsl:apply-templates select="./score-partwise"/>
<xsl:apply-templates select="./score-timewise"/>
</xsl:template>
<!--
If we have a timewise score, we really shouldn't be
applying this stylesheet. Copy everthing as-is without
triggering templates.
-->
<xsl:template match="score-timewise">
<xsl:copy-of select="." />
</xsl:template>
<!-- The identity transformation. Used by default. -->
<xsl:template match="text()">
<xsl:value-of select="." />
</xsl:template>
<!--
Whitespace within an xsl:copy could cause problems with
empty elements.
-->
<xsl:template match="*|@*|comment()|processing-instruction()">
<xsl:copy><xsl:apply-templates
select="*|@*|comment()|processing-instruction()|text()"
/></xsl:copy>
</xsl:template>
<!--
We need to take control at the document element level
explicitly to redo the tree. The header elements should
all be copied. After that, we loop through the measures
in part 1, and create the part elements (for part 1 and
all others) from within that loop.
-->
<xsl:template match="score-partwise">
<!-- Create the score-timewise element. -->
<xsl:element name="score-timewise">
<!--
Copy the seven score header elements and their
children. The DTD specifies that these occur, if
present, in a fixed order.
-->
<xsl:apply-templates select="@version[.!='1.0']"/>
<xsl:apply-templates select="work"/>
<xsl:apply-templates select="movement-number"/>
<xsl:apply-templates select="movement-title"/>
<xsl:apply-templates select="identification"/>
<xsl:apply-templates select="defaults"/>
<xsl:apply-templates select="credit"/>
<xsl:apply-templates select="part-list"/>
<!--
Now loop through all measures in the first part.
-->
<xsl:for-each select="part[1]/measure">
<!--
Bind measure number to a variable for use
throughout the loop, including inner loop
where we will lose the immediate context.
-->
<xsl:variable name="measure-number">
<xsl:value-of select="@number"/>
</xsl:variable>
<!-- Create the measure element. -->
<xsl:element name="measure">
<!--
Now we need to copy the measure attributes.
-->
<xsl:attribute name="number">
<xsl:value-of select="$measure-number"/>
</xsl:attribute>
<xsl:if test="@implict[yes]">
<xsl:attribute name="implicit">
<xsl:value-of select="@implicit"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@non-controlling[yes]">
<xsl:attribute name="non-controlling">
<xsl:value-of select="@non-controlling"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@width">
<xsl:attribute name="width">
<xsl:value-of select="@width"/>
</xsl:attribute>
</xsl:if>
<!--
Now for the inner loop. We go back to the root
ancestor, and loop through each part and
measure, looking for the ones that match the
measure number, and add it here.
This is inefficient. but it provides a working
starting point.
-->
<xsl:for-each select="../../part/measure">
<xsl:if test="@number=$measure-number">
<!-- Create the part element. -->
<xsl:element name="part">
<!-- Copy the ID from the parent part element. -->
<xsl:attribute name="id">
<xsl:value-of select="parent::part/@id"/>
</xsl:attribute>
<!--
Now copy all the descendants using
identity transforms.
-->
<xsl:apply-templates />
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

149
musicxml11/partwise.dtd Executable file
View File

@ -0,0 +1,149 @@
<!--
MusicXML Partwise 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
-->
<!--
MusicXML is designed to represent musical scores,
specifically common western musical notation from the
17th century onwards. It is designed as an interchange
format for notation, analysis, retrieval, and performance
applications. Therefore it is intended to be sufficient,
not optimal, for these applications.
MusicXML is based on the MuseData and Humdrum formats.
Humdrum explicitly represents the two-dimensional nature
of musical scores by a 2-D layout notation. Since XML
is a hierarchical format, we cannot do this explicitly.
Instead, there are two top-level formats:
partwise.dtd Represents scores by part/instrument
timewise.dtd Represents scores by time/measure
Thus partwise.dtd contains measures within each part,
while timewise.dtd contains parts within each measure.
XSLT stylesheets are provided to convert between the
two formats.
The partwise and timewise score DTDs represent a single
movement of music. Multiple movements or other musical
collections are presented using opus.dtd. An opus
document contains XLinks to individual scores.
Suggested use:
<!DOCTYPE score-partwise PUBLIC
"-//Recordare//DTD MusicXML 1.1 Partwise//EN"
"http://www.musicxml.org/dtds/partwise.dtd">
This DTD is made up of a series of component DTDs, all
of which are included here.
-->
<!-- Entities -->
<!--
The partwise and timewise entities are used with
conditional sections to control the differences between
the partwise and timewise DTDs. The values for these
entities are what distinguish the partwise and timewise
DTD files.
-->
<!ENTITY % partwise "INCLUDE">
<!ENTITY % timewise "IGNORE">
<!-- Component DTDs -->
<!--
The common DTD contains the entities and elements that
are shared among multiple component DTDs.
-->
<!ENTITY % common PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Common//EN"
"common.dtd">
%common;
<!--
The layout DTD contains formatting information for
pages, systems, staves, and measures.
-->
<!ENTITY % layout PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Layout//EN"
"layout.dtd">
%layout;
<!--
The identity DTD contains identification and metadata
elements.
-->
<!ENTITY % identity PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Identity//EN"
"identity.dtd">
%identity;
<!--
The attributes DTD includes elements that usually
change at the start of a measure, such as key
signatures, time signatures, and clefs.
-->
<!ENTITY % attributes PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Attributes//EN"
"attributes.dtd">
%attributes;
<!--
The link DTD contains XLink attributes.
-->
<!ENTITY % link PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Link//EN"
"link.dtd">
%link;
<!--
The note DTD contains the bulk of the elements and
attributes for a musical scores relating to individual
notes and rests.
-->
<!ENTITY % note PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Note//EN"
"note.dtd">
%note;
<!--
The barline DTD contains elements regarding
barline style, repeats, and multiple endings.
-->
<!ENTITY % barline PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Barline//EN"
"barline.dtd">
%barline;
<!--
The direction DTD contains elements for musical
directions not tied to individual notes. This
includes harmony and chord symbol elements.
-->
<!ENTITY % direction PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Direction//EN"
"direction.dtd">
%direction;
<!--
The score DTD contains the top-level elements
for musical scores, including the root document
elements.
-->
<!ENTITY % score PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Score//EN"
"score.dtd">
%score;

309
musicxml11/score.dtd Executable file
View File

@ -0,0 +1,309 @@
<!--
MusicXML score.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
-->
<!--
Works and movements are optionally identified by number
and title. The work element also may indicate a link
to the opus document that composes multiple movements
into a collection.
-->
<!ELEMENT work (work-number?, work-title?, opus?)>
<!ELEMENT work-number (#PCDATA)>
<!ELEMENT work-title (#PCDATA)>
<!ELEMENT opus EMPTY>
<!ATTLIST opus
%link-attributes;
>
<!ELEMENT movement-number (#PCDATA)>
<!ELEMENT movement-title (#PCDATA)>
<!--
Collect score-wide defaults. This includes scaling
and layout, defined in layout.dtd, and default values
for the music font, word font, lyric font, and
lyric language. The number and name attributes in
lyric-font and lyric-language elements are typically
used when lyrics are provided in multiple languages.
If the number and name attributes are omitted, the
lyric-font and lyric-language values apply to all
numbers and names.
-->
<!ELEMENT defaults (scaling?, page-layout?,
system-layout?, staff-layout*, music-font?,
word-font?, lyric-font*, lyric-language*)>
<!ELEMENT music-font EMPTY>
<!ATTLIST music-font
%font;
>
<!ELEMENT word-font EMPTY>
<!ATTLIST word-font
%font;
>
<!ELEMENT lyric-font EMPTY>
<!ATTLIST lyric-font
number NMTOKEN #IMPLIED
name CDATA #IMPLIED
%font;
>
<!ELEMENT lyric-language EMPTY>
<!ATTLIST lyric-language
number NMTOKEN #IMPLIED
name CDATA #IMPLIED
xml:lang NMTOKEN #REQUIRED
>
<!--
Credit elements refer to the title, composer, arranger,
lyricist, copyright, dedication, and other text that
appears on the first page of a score. The credit-words
element is similar to the words element for directions.
However, since the credit is not part of a measure,
the default-x and default-y attributes adjust the
origin relative to the bottom left-hand corner of
the first page. The enclosure is none by default.
-->
<!ELEMENT credit (credit-words+)>
<!ELEMENT credit-words (#PCDATA)>
<!ATTLIST credit-words
%justify;
%halign;
%valign;
%print-style;
xml:lang NMTOKEN #IMPLIED
enclosure (rectangle | oval | none) #IMPLIED
>
<!--
The part-list identifies the different musical parts in
this movement. Each part has an ID that is used later
within the musical data. Since parts may be encoded
separately and combined later, identification elements
are present at both the score and score-part levels.
There must be at least one score-part, combined as
desired with part-group elements that indicate braces
and brackets. Parts are ordered from top to bottom in
a score based on the order in which they appear in the
part-list.
Each MusicXML part corresponds to a track in a Standard
MIDI Format 1 file. The score-instrument elements are
used when there are multiple instruments per track.
The midi-device element is used to make a MIDI device
or port assignment for the given track. Initial
midi-instrument assignments may be made here as well.
-->
<!ELEMENT part-list (part-group*, score-part,
(part-group | score-part)*)>
<!ELEMENT score-part (identification?, part-name,
part-abbreviation?, group*, score-instrument*,
midi-device?, midi-instrument*)>
<!ATTLIST score-part
id ID #REQUIRED
>
<!--
The part-name indicates the full name of the musical
part. The part-abbreviation indicates the abbreviated
version of the name of the musical part. The part-name
will often precede the first system, while the
part-abbreviation will precede the other systems.
-->
<!ELEMENT part-name (#PCDATA)>
<!ATTLIST part-name
%print-style;
%print-object;
%justify;
>
<!ELEMENT part-abbreviation (#PCDATA)>
<!ATTLIST part-abbreviation
%print-style;
%print-object;
%justify;
>
<!--
The part-group element indicates groupings of parts in
the score, usually indicated by braces and brackets.
The number attribute is used to distinguish overlapping
and nested part-groups, not the sequence of groups. As
with parts, groups can have a name and abbreviation.
The group-symbol element indicates how the group is
indicated on the score. Values include none (default),
brace, line, and bracket. Values for the child elements
are ignored at the stop of a group. The group-barline
element indicates if the group should have common
barlines. Values can be yes, no, or Mensurstrich.
-->
<!ELEMENT part-group (group-name?, group-abbreviation?,
group-symbol?, group-barline?, %editorial;)>
<!ATTLIST part-group
type %start-stop; #REQUIRED
number CDATA "1"
>
<!ELEMENT group-name (#PCDATA)>
<!ATTLIST group-name
%print-style;
%justify;
>
<!ELEMENT group-abbreviation (#PCDATA)>
<!ATTLIST group-abbreviation
%print-style;
%justify;
>
<!ELEMENT group-symbol (#PCDATA)>
<!ATTLIST group-symbol
%position;
%color;
>
<!ELEMENT group-barline (#PCDATA)>
<!ATTLIST group-barline
%color;
>
<!--
The score-instrument element allows for multiple
instruments per score-part. As with the score-part
element, each score-instrument has a required ID
attribute, a name, and an optional abbreviation.
A score-instrument element is also required if the
score specifies MIDI channels, banks, or programs.
An initial midi-instrument assignment can also
be made here. MusicXML software should be able to
automatically assign reasonable channels and
instruments without these elements in simple cases,
such as where part names match General MIDI
instrument names.
The midi-instrument element is defined in common.dtd,
as it can be used within both the score-part and
sound elements.
-->
<!ELEMENT score-instrument
(instrument-name, instrument-abbreviation?)>
<!ATTLIST score-instrument
id ID #REQUIRED
>
<!ELEMENT instrument-name (#PCDATA)>
<!ELEMENT instrument-abbreviation (#PCDATA)>
<!--
The midi-device content corresponds to the DeviceName
meta event in Standard MIDI Files. The optional port
attribute is a number from 1 to 16 that can be used
with the unofficial MIDI port (or cable) meta event.
-->
<!ELEMENT midi-device (#PCDATA)>
<!ATTLIST midi-device
port CDATA #IMPLIED
>
<!--
The group element allows the use of different versions
of the part for different purposes. Typical values
include score, parts, sound, and data. Ordering
information that is directly encoded in MuseData can
be derived from the ordering within a score or opus
in MusicXML.
-->
<!ELEMENT group (#PCDATA)>
<!--
Here is the basic musical data that is either associated
with a part or a measure, depending on whether partwise
or timewise hierarchy is used.
-->
<!ENTITY % music-data
"(note | backup | forward | direction | attributes |
harmony | figured-bass | print | sound | barline |
grouping | link | bookmark)*">
<!--
The score-header entity contains basic score metadata
about the work and movement, score-wide defaults for
layout and fonts, credits that appear on the first page,
and the part list.
-->
<!ENTITY % score-header
"(work?, movement-number?, movement-title?,
identification?, defaults?, credit*, part-list)">
<!--
The score is the root element for the DTD. It includes
the score-header entity, followed either by a series of
parts with measures inside (score-partwise) or a series
of measures with parts inside (score-timewise). Having
distinct top-level elements for partwise and timewise
scores makes it easy to ensure that an XSLT stylesheet
does not try to transform a document already in the
desired format.
The version attribute is new to MusicXML 1.1. It provides
an easier way to get version information than through the
MusicXML public ID. The default value is 1.0 to make it
possible for programs that handle version 1.1 to
distinguish version 1.0 files reliably. Programs that
write MusicXML 1.1 files should set this attribute.
-->
<![ %partwise; [
<!ELEMENT score-partwise (%score-header;, part+)>
<!ATTLIST score-partwise
version CDATA "1.0"
>
<!ELEMENT part (measure+)>
<!ELEMENT measure (%music-data;)>
]]>
<![ %timewise; [
<!ELEMENT score-timewise (%score-header;, measure+)>
<!ATTLIST score-timewise
version CDATA "1.0"
>
<!ELEMENT measure (part+)>
<!ELEMENT part (%music-data;)>
]]>
<!--
In either format, the part element has an id attribute
that is an IDREF back to a score-part in the part-list.
Measures have a required number attribute (going from
partwise to timewise, measures are grouped via the
number).
-->
<!ATTLIST part
id IDREF #REQUIRED
>
<!--
The implicit attribute is set to "yes" for measures where
the measure number should never appear, such as pickup
measures and the last half of mid-measure repeats. The
value is "no" if not specified.
The non-controlling attribute indicates that this measure
in this part does not necessarily synchronize with other
measures in other parts. This is intended for use in
multimetric music like the Don Giovanni minuet. The
value is "no" if not specified.
Measure width is specified in tenths. These are the
global tenths specified in the scaling element, not
local tenths as modified by the staff-size element.
-->
<!ATTLIST measure
number CDATA #REQUIRED
implicit %yes-no; #IMPLIED
non-controlling %yes-no; #IMPLIED
width %tenths; #IMPLIED
>

176
musicxml11/timepart.xsl Executable file
View File

@ -0,0 +1,176 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
MusicXML timepart.xsl
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
-->
<!--
Timepart.xsl is an XSLT stylesheet for transforming
timewise MusicXML scores into partwise scores. Thus
instead of having parts included within each measure,
the transformed score includes measures within each part.
This type of transformation allows the 2-dimensional
nature of a musical score to be adequately represented
within a hierarchical format like XML.
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--
XML output, with a DOCTYPE refering the partwise DTD.
Here we use the full Internet URL.
-->
<xsl:output method="xml" indent="yes" encoding="UTF-8"
omit-xml-declaration="no" standalone="no"
doctype-system="http://www.musicxml.org/dtds/partwise.dtd"
doctype-public="-//Recordare//DTD MusicXML 1.1 Partwise//EN" />
<!--
For the root, only look for score-partwise and
score-timewise. Anything else as a root element gets
ignored.
-->
<xsl:template match="/">
<xsl:apply-templates select="./score-partwise"/>
<xsl:apply-templates select="./score-timewise"/>
</xsl:template>
<!--
If we have a partwise score, we really shouldn't be
applying this stylesheet. Copy everthing as-is without
triggering templates.
-->
<xsl:template match="score-partwise">
<xsl:copy-of select="." />
</xsl:template>
<!-- The identity transformation. Used by default. -->
<xsl:template match="text()">
<xsl:value-of select="." />
</xsl:template>
<!--
Whitespace within an xsl:copy could cause problems with
empty elements.
-->
<xsl:template match="*|@*|comment()|processing-instruction()">
<xsl:copy><xsl:apply-templates
select="*|@*|comment()|processing-instruction()|text()"
/></xsl:copy>
</xsl:template>
<!--
We need to take control at the document element level
explicitly to redo the tree. The header elements should
all be copied. After that, we loop through the parts in
measure 1, and create the part elements (for measure 1
and all others) from within that loop.
-->
<xsl:template match="score-timewise">
<!-- Create the score-partwise element. -->
<xsl:element name="score-partwise">
<!--
Copy the seven score header elements and their
children. The DTD specifies that these occur, if
present, in a fixed order.
-->
<xsl:apply-templates select="@version[.!='1.0']"/>
<xsl:apply-templates select="work"/>
<xsl:apply-templates select="movement-number"/>
<xsl:apply-templates select="movement-title"/>
<xsl:apply-templates select="identification"/>
<xsl:apply-templates select="defaults"/>
<xsl:apply-templates select="credit"/>
<xsl:apply-templates select="part-list"/>
<!--
Now loop through all parts in the first measure.
-->
<xsl:for-each select="measure[1]/part">
<!--
Bind part ID to a variable for use throughout the
loop, including inner loop where we will lose the
immediate context.
-->
<xsl:variable name="part-id">
<xsl:value-of select="@id"/>
</xsl:variable>
<!-- Create the part element. -->
<xsl:element name="part">
<!--
Now we need to copy the part id attribute.
-->
<xsl:copy-of select="@id" />
<!--
Now for the inner loop. We go back to the root
ancestor, and loop through each measure and
part, looking for the ones that match the part
ID, and add it here.
This is inefficient. but it provides a working
starting point.
-->
<xsl:for-each select="../../measure/part">
<xsl:if test="@id=$part-id">
<!-- Create the measure element. -->
<xsl:element name="measure">
<!--
Copy the attributes from the parent
measure element.
-->
<xsl:attribute name="number">
<xsl:value-of select="parent::measure/@number"/>
</xsl:attribute>
<xsl:if test="parent::measure/@implict[yes]">
<xsl:attribute name="implicit">
<xsl:value-of select="parent::measure/@implicit"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="parent::measure/@non-controlling[yes]">
<xsl:attribute name="non-controlling">
<xsl:value-of
select="parent::measure/@non-controlling"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="parent::measure/@width">
<xsl:attribute name="width">
<xsl:value-of
select="parent::measure/@width"/>
</xsl:attribute>
</xsl:if>
<!--
Now copy all the descendants using
identity transforms.
-->
<xsl:apply-templates />
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

149
musicxml11/timewise.dtd Executable file
View File

@ -0,0 +1,149 @@
<!--
MusicXML Timewise 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
-->
<!--
MusicXML is designed to represent musical scores,
specifically common western musical notation from the
17th century onwards. It is designed as an interchange
format for notation, analysis, retrieval, and performance
applications. Therefore it is intended to be sufficient,
not optimal, for these applications.
MusicXML is based on the MuseData and Humdrum formats.
Humdrum explicitly represents the two-dimensional nature
of musical scores by a 2-D layout notation. Since XML
is a hierarchical format, we cannot do this explicitly.
Instead, there are two top-level formats:
partwise.dtd Represents scores by part/instrument
timewise.dtd Represents scores by time/measure
Thus partwise.dtd contains measures within each part,
while timewise.dtd contains parts within each measure.
XSLT stylesheets are provided to convert between the
two formats.
The partwise and timewise score DTDs represent a single
movement of music. Multiple movements or other musical
collections are presented using opus.dtd. An opus
document contains XLinks to individual scores.
Suggested use:
<!DOCTYPE score-timewise PUBLIC
"-//Recordare//DTD MusicXML 1.1 Timewise//EN"
"http://www.musicxml.org/dtds/timewise.dtd">
This DTD is made up of a series of component DTDs, all
of which are included here.
-->
<!-- Entities -->
<!--
The partwise and timewise entities are used with
conditional sections to control the differences between
the partwise and timewise DTDs. The values for these
entities are what distinguish the partwise and timewise
DTD files.
-->
<!ENTITY % partwise "IGNORE">
<!ENTITY % timewise "INCLUDE">
<!-- Component DTDs -->
<!--
The common DTD contains the entities and elements that
are shared among multiple component DTDs.
-->
<!ENTITY % common PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Common//EN"
"common.dtd">
%common;
<!--
The layout DTD contains formatting information for
pages, systems, staves, and measures.
-->
<!ENTITY % layout PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Layout//EN"
"layout.dtd">
%layout;
<!--
The identity DTD contains identification and metadata
elements.
-->
<!ENTITY % identity PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Identity//EN"
"identity.dtd">
%identity;
<!--
The attributes DTD includes elements that usually
change at the start of a measure, such as key
signatures, time signatures, and clefs.
-->
<!ENTITY % attributes PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Attributes//EN"
"attributes.dtd">
%attributes;
<!--
The link DTD contains XLink attributes.
-->
<!ENTITY % link PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Link//EN"
"link.dtd">
%link;
<!--
The note DTD contains the bulk of the elements and
attributes for a musical scores relating to individual
notes and rests.
-->
<!ENTITY % note PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Note//EN"
"note.dtd">
%note;
<!--
The barline DTD contains elements regarding
barline style, repeats, and multiple endings.
-->
<!ENTITY % barline PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Barline//EN"
"barline.dtd">
%barline;
<!--
The direction DTD contains elements for musical
directions not tied to individual notes. This
includes harmony and chord symbol elements.
-->
<!ENTITY % direction PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Direction//EN"
"direction.dtd">
%direction;
<!--
The score DTD contains the top-level elements
for musical scores, including the root document
elements.
-->
<!ENTITY % score PUBLIC
"-//Recordare//ELEMENTS MusicXML 1.1 Score//EN"
"score.dtd">
%score;

177
musicxml11/to10.xsl Executable file
View File

@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
MusicXML to10.xsl
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
-->
<!--
To10.xsl converts from MusicXML 1.1 to 1.0 for
compatibility with older products.
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--
XML output, with a DOCTYPE refering the partwise DTD.
Here we use the full Internet URL.
-->
<xsl:output method="xml" indent="yes" encoding="UTF-8"
omit-xml-declaration="no" standalone="no"
doctype-system="http://www.musicxml.org/dtds/partwise.dtd"
doctype-public="-//Recordare//DTD MusicXML 1.0 Partwise//EN" />
<!--
For the root, only look for score-partwise. Anything else
as a root element gets ignored.
-->
<xsl:template match="/">
<xsl:apply-templates select="./score-partwise"/>
</xsl:template>
<!--
Transformations that remove post-1.0 elements and attributes.
-->
<!-- Additions in note.dtd -->
<xsl:template
match="tuplet-number/@* | tuplet-type/@* | tuplet-dot/@* |
tuplet/@line-shape | pluck | tremolo |
tied/@bezier-offset | tied/@bezier-offset2 |
tied/@bezier-x | tied/@bezier-x2 |
tied/@bezier-y | tied/@bezier-y2 |
heel/@substitution | toe/@substitution |
lyric/@justify | lyric/@placement |
lyric/@default-x | lyric/@default-y |
lyric/@relative-x | lyric/@relative-y |
figured-bass/@parentheses | elision/@* | extend/@* |
prefix/@* | figure-number/@* / suffix/@* | figure/extend"/>
<!--
Convert parentheses or bracket attributes on accidental
elements into the editorial attribute from MusicXML 1.0.
-->
<xsl:template match="accidental/@parentheses | accidental/@bracket">
<xsl:attribute name="editorial">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<!-- Additions in attributes.dtd -->
<xsl:template
match="staff-size | key/@number | time/@number |
staff-details/@print-object | staff-details/@print-spacing |
directive/@relative-x | directive/@relative-y |
directive/@default-x | directive/@default-y |
time/@print-object"/>
<!-- Additions in barline.dtd -->
<xsl:template
match="ending/@relative-x | ending/@relative-y |
ending/@default-x | ending/@default-y |
ending/@end-length | ending/text()"/>
<!-- Additions in common.dtd -->
<xsl:template
match="@color | @print-lyric | level/@reference |
fret/@* | string/@* | footnote/@*"/>
<xsl:template match="@size[.='large']"/>
<!--
MusicXML 1.1 makes much greater use of font attributes.
The more general rule strips the font attributes from
most elements. The more specific rule, which takes
priority, keeps them for the elements where they were
used in MusicXML 1.0.
-->
<xsl:template
match="@font-family | @font-style | @font-size | @font-weight"/>
<xsl:template
match="words/@font-family | words/@font-style |
words/@font-size | words/@font-weight |
rehearsal/@font-family | rehearsal/@font-style |
rehearsal/@font-size | rehearsal/@font-weight |
directive/@font-family | directive/@font-style |
directive/@font-size | directive/@font-weight |
text/@font-family | text/@font-style |
text/@font-size | text/@font-weight |
hammer-on/@font-family | hammer-on/@font-style |
hammer-on/@font-size | hammer-on/@font-weight |
pull-off/@font-family | pull-off/@font-style |
pull-off/@font-size | pull-off/@font-weight |
tap/@font-family | tap/@font-style |
tap/@font-size | tap/@font-weight">
<xsl:copy><xsl:apply-templates select="*|@*"/></xsl:copy>
</xsl:template>
<!-- Additions in layout.dtd -->
<xsl:template
match="scaling | page-layout | system-layout |
staff-layout | measure-layout"/>
<!-- Additions in direction.dtd -->
<xsl:template
match="barre | pedal[@type='change'] | kind/@* |
frame/@* | harp-pedals | scordatura |
harmony/offset | harmony/staff |
words/@halign | words/@valign | words/@enclosure |
rehearsal/@xml:lang | rehearsal/@enclosure |
print/@page-number"/>
<xsl:template match="pedal/@type[.='change']"/>
<!-- Additions in link.dtd -->
<xsl:template
match="link/@relative-x | link/@relative-y |
link/@default-x | link/@default-y"/>
<!-- Additions in score.dtd -->
<xsl:template
match="defaults | credit | measure/@width |
part-name/@* | part-abbreviation/@* |
group-name/@* | group-abbreviation/@* |
group-symbol/@* | group-barline/@* |
score-partwise/@* | score-timewise/@*"/>
<!--
Do not copy text for glissando or slide elements.
-->
<xsl:template match="glissando | slide">
<xsl:copy><xsl:apply-templates
select="*|@*|comment()|processing-instruction()"
/></xsl:copy>
</xsl:template>
<!--
The identity transformation. Used for everything that
stays the same in 1.0.
-->
<xsl:template match="text()">
<xsl:value-of select="." />
</xsl:template>
<!--
Whitespace within an xsl:copy could cause problems with
empty elements.
-->
<xsl:template match="*|@*|comment()|processing-instruction()">
<xsl:copy><xsl:apply-templates
select="*|@*|comment()|processing-instruction()|text()"
/></xsl:copy>
</xsl:template>
</xsl:stylesheet>