<!-- ************************************************************** -->
<!--
NAME:     Music Encoding Initiative (MEI) DTD
          File      = meiClass.ent 
          Vers Date = 2006/09/01

NOTICE:   Copyright (c) 2001-2006 Perry Roland and the Rector and
          Visitors of the University of Virginia.  Licensed under
          the Educational Community License version 1.0.  See
          mei17b.dtd for License details.

PURPOSE:  This file contains shared declarations of attributes and
          content models. It is invoked by the mei.dtd driver 
          file.                                                     -->
<!-- ************************************************************** -->


<!-- ************************************************************** -->
<!-- Shared attributes (attribute classes)                          -->
<!-- ************************************************************** -->

<!-- Common analytical attributes:  The hand attribute provides a
reference to the description of the document hand in the header. The
source attribute is provided for linking to the bibliographic
description of the source(s) from which the element content is
drawn. -->
<!ENTITY % a.anl.common
                     'hand              IDREF                 #IMPLIED
                     source             IDREFS                #IMPLIED'>

<!-- Bibliographic attributes: The analog attribute contains a reference
to a field or element in another descriptive encoding system to which an
MEI element is comparable. Mapping elements from one system to another
may help a repository harvest selected data from the MEI file to build a
basic catalog record. The encoding system from which fields are taken
must be specified. When possible, subfields as well as fields should be
specified, e.g., subfields within MARC fields. A display label for an
element can be supplied using the label attribute when a meaningful
label cannot be derived by a style sheet from the element name or when a
heading element <head> is not available. -->
<!ENTITY % a.bibl
                     'analog            CDATA                 #IMPLIED
                     label              CDATA                 #IMPLIED'>

<!-- Common (but not global) attributes: The id attribute contains an
identifier used to name the element so that it can be referred to, or
referenced from, somewhere else. Each ID within a document must have a
unique value. The ID attribute regularizes the naming of the element and
thus facilitates building links between it and other resources. An
element may be characterized, using any convenient classification scheme
or typology via the type attribute. -->
<!ENTITY % a.common
                     'id                ID                    #IMPLIED
                     type               CDATA                 #IMPLIED'>

<!-- Control events have most of the same attributes as other events,
but staff and tstamp are required (in most cases) for synchronization
w/other events. The next attribute may be used to point to the next
control event(s) in a user-defined collection while the prev attribute
may point to the previous event(s). The plist (participant list)
attribute should contain references to logical events which participate
in the control event, e.g., notes under a phrase mark. The staff and
layer attributes allow the control event to encode its scope of
influence. The tstamp (timestamp) attribute provides a place to encode
the onset time of the control event. Making staff and tstamp IMPLIED and
adding start, end, and dur attribute where needed would allow control
events to use start, end, duration, timestamp or staff attributes in
whatever combination is necessary.  See the phrase element for an
example. -->
<!ENTITY % a.controlevent
                     'layer             %LAYERREFMETHOD;      #IMPLIED
                     next               IDREFS                #IMPLIED
                     plist              IDREFS                #IMPLIED
                     prev               IDREFS                #IMPLIED
                     staff              %STAFFREFMETHOD;      #REQUIRED
                     tstamp             %TIMESTAMP;           #IMPLIED'>

<!-- Attributes common to dates: calendar indicates the system or
calendar to which the date belongs, for example, Gregorian, Julian,
Roman, Mosaic, Revolutionary, Islamic; certainty indicates the degree of
precision to be attributed to the date, e.g. ca., approx, after, before,
etc.; reg gives the value of the date in standard ISO form. -->
<!ENTITY % a.date
                     'calendar          CDATA                 #IMPLIED
                     certainty          CDATA                 #IMPLIED
                     reg                %ISODATE;             #IMPLIED'>

<!-- Attributes that apply to all written events, e.g. beam, beatrpt,
chord, note, etc. The corresp attribute may be used to point to other
events or control events that correspond to this event in some
fashion, i.e. a note may point to one or more midi events which are
analogous to the note. The dur (duration) attribute is available on
many events and control events, but not all. Also, duration is often
broken across domains, i.e. written duration versus performed duration.
For these reasons, dur and dur.ges attributes are declared for each
element where they are necessary. -->
<!ENTITY % a.event
                     'corresp           IDREFS                #IMPLIED
                     layer              %LAYERREFMETHOD;      #IMPLIED
                     next               IDREFS                #IMPLIED
                     prev               IDREFS                #IMPLIED
                     staff              %STAFFREFMETHOD;      #IMPLIED
                     tstamp             %TIMESTAMP;           #IMPLIED'>

<!-- Attributes common to all linking elements: actuate defines whether
a link occurs automatically or must be requested by the user. It is used
in conjunction with the show attribute to determine link behavior. show
defines whether a remote resource that is the target of a link appears
at the point of the link, replaces the existing link, or appears in a
new window. targettype allows the remote resource to be characterized,
using any convenient classification scheme or typology. -->
<!ENTITY % a.link.common
                     'actuate           (onLoad|onRequest|other|none)
                                                              #IMPLIED
                     show               (new|replace|other|none)
                                                              #IMPLIED
                     targettype         CDATA                 #IMPLIED'>

<!-- Linking attributes for extptr element: entityref references a
previously-declared entity which represents a complete document. The
xpointer attribute allows one to identify a starting point within that
document. The href attribute allows the use of an undeclared URI. -->
<!ENTITY % a.link.external
                     'entityref         ENTITY                #IMPLIED
                     href               %URI;                 #IMPLIED
                     xpointer           CDATA                 #IMPLIED'>

<!-- Linking attributes for extref elements: An idref attribute contains
a pointer to the id of another element. -->
<!ENTITY % a.link.internal
                     'idref             IDREF                 #IMPLIED'>

<!-- Attributes shared by names:  The key attribute may be used to
record a value which serves as a primary key in an external database.
The reg attribute may be used to record a regularized form of the
name. -->
<!ENTITY % a.name
                     'dbkey             CDATA                 #IMPLIED
                     reg                CDATA                 #IMPLIED'>

<!-- Start and end attributes record IDs of other elements to which the
current element is attached. -->
<!ENTITY % a.startendid
                     'end               IDREF                 #IMPLIED
                     start              IDREF                 #IMPLIED'>

<!-- Attributes common to text elements: The lang attribute should be
used to identify the language of the word or phrase marked. Its value
must be the identifier of a <language> element supplied in the MEI
header of the current document. -->
<!ENTITY % a.text
                     'lang              IDREF                 #IMPLIED'>

<!-- Typographical attributes -->
<!ENTITY % a.typography
                     'fontfam           %FONTFAMILY;          #IMPLIED
                     fontname           %FONTNAME;            #IMPLIED
                     fontsize           %NUMBER;              #IMPLIED
                     fontstyle          %FONTSTYLE;           #IMPLIED
                     fontweight         %FONTWEIGHT;          #IMPLIED'>

<!-- Some items may have their location recorded in terms of offsets from
their programmatically-determined location. The ho attribute records the
horizontal offset while vo records the vertical. -->
<!ENTITY % a.visualoffset
                     'ho                %VISUALOFFSET;        #IMPLIED
                     vo                 %VISUALOFFSET;        #IMPLIED'>

<!-- Some elements may have exact coordinates recorded. -->
<!ENTITY % a.xy
                     'x                 %NUMBER;              #IMPLIED
                     y                  %NUMBER;              #IMPLIED'>

<!-- Some elements need 2 coordinate pairs -->
<!ENTITY % a.xy2
                     'x1                %NUMBER;              #IMPLIED
                     y1                 %NUMBER;              #IMPLIED
                     x2                 %NUMBER;              #IMPLIED
                     y2                 %NUMBER;              #IMPLIED'>

<!-- ************************************************************** -->
<!-- Element model classes                                          -->
<!-- ************************************************************** -->

<!-- Anchored text sub-elements. These occur as part of the
representation of the score, as opposed to the textual matter which
accompanies it. m.anchoredtext is equivalent to %m.textinline without
the pb element. -->
<!ENTITY % m.anchoredtext
                     '%n.address;|%n.bibref;|%n.corpname;|%n.date;|
                     %n.extptr;|%n.extref;|%n.geogname;|%n.identifier;|
                     %n.lb;|%n.num;|%n.periodname;|%n.persname;|
                     %n.ptr;|%n.ref;|%n.rend;|%n.stack;|%n.stylename;|
                     %n.title;'>

<!-- Control events. Events which modify or otherwise depend on the
existence of notated events. -->
<!ENTITY % m.controlevents
                     '%n.annot;|%n.arpeg;|%n.beam2;|%n.bend;|%n.dir;|
                     %n.dynam;|%n.gliss;|%n.hairpin;|%n.harm;|%n.harppedal;|
                     %n.lyrics;|%n.midi;|%n.mordent;|%n.octave;|
                     %n.pedal;|%n.phrase;|%n.reh;|%n.slur;|%n.tempo;|
                     %n.tie;|%n.trill;|%n.tuplet2;|%n.turn;'>

<!-- Notated events. Sometimes referred to as "logical" events. The
msrest, msrpt, multirest, and multirpt elements are not included in
this list since in the measure element's content model they are
alternatives to the elements listed here. They are, however, part of
the a.events class. -->
<!ENTITY % m.events
                     '%n.beam;|%n.beatrpt;|%n.btrem;|%n.chord;|
                     %n.clefchange;|%n.ftrem;|%n.note;|%n.pad;|
                     %n.rest;|%n.space;|%n.tuplet;'>

<!-- MIDI events -->
<!ENTITY % m.midievents
                     '%n.cc;|%n.chan;|%n.chanpr;|%n.cue;|%n.hex;|
                     %n.instr;|%n.marker;|%n.metatext;|%n.noteoff;|
                     %n.noteon;|%n.port;|%n.prog;|%n.seqnum;|
                     %n.trkname;|%n.vel;'>

<!-- Graphic primitives: curves, lines, symbols (made up of curves,
lines, symbols, or anchored text) -->
<!ENTITY % m.primitives
                     '%n.curve;|%n.line;|%n.symbol;'>

<!-- Lowest level text elements. Since these elements can occur in more
than one module, they're declared in the meiShared DTD. -->
<!ENTITY % m.textinline
                     '%n.address;|%n.bibref;|%n.corpname;|%n.date;|
                     %n.extptr;|%n.extref;|%n.geogname;|%n.identifier;|
                     %n.lb;|%n.num;|%n.pb;|%n.periodname;|%n.persname;|
                     %n.ptr;|%n.ref;|%n.rend;|%n.stack;|%n.stylename;|
                     %n.title;'>

<!-- Block level text elements. These elements are also declared in the
meiShared DTD. -->
<!ENTITY % m.textcomponents
                     '%n.blockquote;|%n.fig;|%n.lg;|%n.list;|%n.p;|
                     %n.table;|%n.textnote;'>

<!-- Paragraph content model. A paragraph may contain inline elements
and all the other block-level elements except lg and itself. -->
<!ENTITY % m.paracontent
                     '%n.blockquote;|%n.fig;|%n.list;|%n.table;|
                     %n.textnote;|%m.textinline;'>

<!-- ************************************************************** -->
<!-- Declare attributes in each musical domain, e.g. analytical,
gestural, visual, for the work-level elements in separate parameter
entities. This documents which domain an attribute operates in and
makes it easier to modify the attributes in a given domain
independently of the others. Declaring these here rather than in the
base tagset makes them available in any element models declared in the
meiModifications.dtd file.                                          -->
<!-- ************************************************************** -->

<!-- By default, analytical, gestural, and visual attributes are
enabled. In order to deactive them, the meiAnalysis, meiGestural, and
meiVisual entities must be set to "IGNORE" in the internal DTD subset or
in the meiModifications.ent file. -->
<!ENTITY % meiAnalysis 'INCLUDE'>
<!ENTITY % meiGestural 'INCLUDE'>
<!ENTITY % meiVisual   'INCLUDE'>

<!-- ************************************************************** -->
<!-- * Attributes for score                                       * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.score
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.score ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.score ''>
]]>
<!ENTITY % a.ges.score ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.score ''>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.score ''>
]]>
<!ENTITY % a.vis.score ''>

<!-- ************************************************************** -->
<!-- * Attributes for scoredef                                    * -->

<!-- Analytical domain attributes: Since the score element carries
analytical attributes for the score, it is unlikely a.anl.scoredef will
ever be used. -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.scoredef ''>
]]>
<!ENTITY % a.anl.scoredef ''>

<!-- Gestural domain attributes: 
   Definitions and suggested default values:
   grace              do grace notes get time from the current (acc) or
                      previous (unacc) main note? 'acc'
   midi.channel       '1'
   midi.div           MIDI pulses per quarter note '96'
   midi.duty          specifies the 'on' part of the duty cycle as a
                      percentage. '80'
   midi.instr         General MIDI instrument number '1'
   midi.instrname     General MIDI instrument name 'Acoustic Piano'
   midi.port          MIDI port number '1'
   midi.tempo         beats per minute '120'
   midi.track         MIDI track number '1'
   tune.pname         name of tuning reference pitch 'a'
   tune.Hz            frequency of tuning reference pitch '440'
   tune.temper        temperament 'equal'
-->
<![%meiGestural;[
   <!ENTITY % a.ges.scoredef
                     'grace             %GRACE;               #IMPLIED
                     midi.channel       %MIDICHANNEL;         #IMPLIED
                     midi.div           %INTEGER;             #IMPLIED
                     midi.duty          %PERCENT;             #IMPLIED
                     midi.instr         %MIDIVALUE;           #IMPLIED
                     midi.instrname     CDATA                 #IMPLIED
                     midi.port          %MIDIVALUE;           #IMPLIED
                     midi.tempo         %TEMPOVALUE;          #IMPLIED
                     midi.track         %INTEGER;             #IMPLIED
                     tune.pname         %PITCHNAME;           #IMPLIED
                     tune.Hz            %NUMBER;              #IMPLIED
                     tune.temper        %TEMPERAMENT;         #IMPLIED'>
]]>
<!ENTITY % a.ges.scoredef ''>

<!-- Logical domain attributes:
   beam.group         an example of how beaming (including secondary
                      beams) is to be done, e.g. (4.,4.,4.) indicates one
                      outer beam per measure with secondary beams broken
                      at each dotted quarter duration, no default
   beam.rests         should beams include rests shorter than a quarter
                      duration?, 'no'
   clef.line          position of the clef, '2'
   clef.shape         clef, 'G'
   clef.trans         octave shift indicated by the clef, '0'
   dur.default        default duration, '4'
   key.accid          tonic accidental, i.e., 's' or 'f', no default
   key.mode           mode, 'major'
   key.pname          tonic pitchname, no default
   key.sig            effective key signature, no default
   key.sig.mixed      key signature contains both sharps and flats, no
                      default
   meter.count        number of beats per measure, top number of the meter
                      sig, no default
   meter.sym          display a symbol, e.g. C, instead of numbers, like
                      4/4, no default
   meter.unit         beat unit, bottom number of the meter sig, no default
   octave.default     default octave when octave isn't specified on the
                      first note of the measure, '4'
   trans.diat         amount of diatonic pitch shift, e.g. C to C# = 0, C
                      to Db = 1, '0'
   trans.semi         amount of pitch shift in semitones, e.g. C to C# =
                      1, C to Db = 1, '0'. (Transposition requires both
                      trans.diat and trans.semi.)
-->
<!ENTITY % a.log.scoredef
                     'beam.group        CDATA                 #IMPLIED
                     beam.rests         %BOOLEAN;             #IMPLIED
                     clef.line          %INTEGER;             #IMPLIED
                     clef.shape         %CLEFSHAPE;           #IMPLIED
                     clef.trans         (8va|8vb|15va)        #IMPLIED
                     dur.default        %DURATION;            #IMPLIED
                     key.accid          %ACCIDENTAL.IMPLICIT; #IMPLIED
                     key.mode           %MODE;                #IMPLIED
                     key.pname          %PITCHNAME;           #IMPLIED
                     key.sig            %KEYSIGNATURE;        #IMPLIED
                     key.sig.mixed      CDATA                 #IMPLIED
                     meter.count        %NUMBER;              #IMPLIED
                     meter.sym          %METERTEXT;           #IMPLIED
                     meter.unit         %NUMBER;              #IMPLIED
                     octave.default     %OCTAVES;             #IMPLIED
                     trans.diat         %NUMBER;              #IMPLIED
                     trans.semi         %NUMBER;              #IMPLIED'>

<!-- Visual domain attributes: 
   Definitions and suggested software default values:
   mnum.visible       are measure numbers visible?, 'no'
   bar.place          placement of barlines, 'norm'
   beam.rend          encodes whether a beam is feathered and in which
                      direction, 'norm'
   beam.slope         default beam slope, Mup uses '1.0, 25.0'
   clef.visible       are clefs visible?, 'yes'
   dynam.dist         how far from staff to render dynamic marks, '2'
   ending.rend        where to draw ending marks, 'top'
   grid.show          display chord grids?, 'no'
   harm.dist          how far from staff to render harmony, '2'
   key.sig.show       display key signature?, 'yes'
   key.sig.showchange display cautionary key signature change?, 'yes'
   lyric.align        alignment of lyrics beneath notes, Mup uses '0.25'
   lyric.fam          font family for lyrics, 'times'
   lyric.name         font name for lyrics, 'rom'
   lyric.size         point size of lyrics, '12'
   meter.rend         display meter normally (3/4), with symbol as denom,
                      or invis, 'norm'
   meter.sig.showchange display cautionary meter signature change?, 'yes'
   ontheline          governs display of notes on a 1-line staff, 'yes'
   optimize           display only those staves with notes?, 'no'
   ** page.* attributes apply to the entire score/part
   page.height        height of page, '11'
   page.width         width of page, '8.5'
   page.units         real-world measurement (inches, centimeters,
                      millimeters), 'in'
   page.topmar        top page margin, '1'
   page.botmar        bottom page margin, '1'
   page.leftmar       left page margin, '.5'
   page.rightmar      right page margin, '.5'
   page.panels        number of logical pages to place on physical page, '1'
   page.scale         scale printed output by the specified factor, '1'
   pedal.rend         are piano pedal marks drawn as lines or as terms
                      (e.g. 'Ped.' & '*'), 'term'
   reh.enclose        default look of rehearsal letters/numbers, 'box'
   slur.rend          default look of slurs, 'medium'
   spacing.packexp    note spacing relative to its time value, '0.8'
   spacing.packfact   note spacing of output, '1'
   spacing.staff      minimum amount of space between staves in the same
                      system, '2'
   spacing.system     minimum and maximum amount of space between systems,
                      '12, 20'
   system.leftmar     left system margin relative to page.leftmar, '0'
   system.rightmar    right system margin relative to page.rightmar, '0'
   system.topmar      distance from page's top edge to the first system,
                      used for first page only
   text.dist          how far from staff to render text, '2'
   text.fam           font family for text, 'times'
   text.nam           font name for text, 'rom'
   text.size          point size of text, '12'
   tie.rend           default look of ties, 'medium'
-->
<![%meiVisual;[
   <!ENTITY % a.vis.scoredef
                     'bar.place         %BARPLACE;            #IMPLIED
                     beam.rend          (acc|rit|norm)        #IMPLIED
                     beam.slope         CDATA                 #IMPLIED
                     clef.visible       %BOOLEAN;             #IMPLIED
                     dynam.dist         %NUMBER;              #IMPLIED
                     ending.rend        (top|barred|grouped)  #IMPLIED
                     grid.show          %BOOLEAN;             #IMPLIED
                     harm.dist          %NUMBER;              #IMPLIED
                     key.sig.show       %BOOLEAN;             #IMPLIED
                     key.sig.showchange %BOOLEAN;             #IMPLIED
                     lyric.align        %NUMBER;              #IMPLIED
                     lyric.fam          %FONTFAMILY;          #IMPLIED
                     lyric.name         %FONTNAME;            #IMPLIED
                     lyric.size         %NUMBER;              #IMPLIED
                     lyric.style        %FONTSTYLE;           #IMPLIED
                     lyric.weight       %FONTWEIGHT;          #IMPLIED
                     meter.rend         (denomsym|norm|invis) #IMPLIED
                     meter.sig.showchange
                                        %BOOLEAN;             #IMPLIED
                     mnum.visible       %BOOLEAN;             #IMPLIED
                     multi.number       %BOOLEAN;             #IMPLIED
                     music.name         %MUSICFONT;           #IMPLIED
                     music.size         %NUMBER;              #IMPLIED
                     ontheline          %BOOLEAN;             #IMPLIED
                     optimize           %BOOLEAN;             #IMPLIED
                     page.height        %NUMBER;              #IMPLIED
                     page.width         %NUMBER;              #IMPLIED
                     page.units         %PGUNITS;             #IMPLIED
                     page.topmar        %NUMBER;              #IMPLIED
                     page.botmar        %NUMBER;              #IMPLIED
                     page.leftmar       %NUMBER;              #IMPLIED
                     page.rightmar      %NUMBER;              #IMPLIED
                     page.panels        (1|2)                 #IMPLIED
                     page.scale         %PGSCALE;             #IMPLIED
                     pedal.rend         (line|term)           #IMPLIED
                     reh.enclose        (box|circle|none)     #IMPLIED
                     slur.rend          %CURVERENDITION;      #IMPLIED
                     spacing.packexp    %NUMBER;              #IMPLIED
                     spacing.packfact   %NUMBER;              #IMPLIED
                     spacing.staff      %NUMBER;              #IMPLIED
                     spacing.system     CDATA                 #IMPLIED
                     system.leftmar     %NUMBER;              #IMPLIED
                     system.rightmar    %NUMBER;              #IMPLIED
                     system.topmar      %NUMBER;              #IMPLIED
                     text.dist          %NUMBER;              #IMPLIED
                     text.fam           %FONTFAMILY;          #IMPLIED
                     text.name          %FONTNAME;            #IMPLIED
                     text.size          %NUMBER;              #IMPLIED
                     text.style         %FONTSTYLE;           #IMPLIED
                     text.weight        %FONTWEIGHT;          #IMPLIED
                     tie.rend           %CURVERENDITION;      #IMPLIED'>
]]>
<!ENTITY % a.vis.scoredef ''>

<!-- Score-level encoding strategies for:
   a) alternating meter sig, e.g. 2/4 3/4 in alternating measures (Read,
      p. 164-165) and combined meters (Read, p.166-168): explicitly
      encode meters, make them invisible, display both meter sigs at the
      start of the section
   b) compound meter sig, e.g. 2+3+2/4 (Read, p. 168-170): set
      meter.count=2+3+2
   c) polymeters, e.g. different simultaneous meters (Read, p. 170-173):
      1. where barlines coincide, use beaming to elucidate the polymeter
      2. where barlines sometimes coincide, break into measures
      according to a common unit of time, draw barlines where visually
      required
      3. where barlines never coincide, encode as parts only
   d) mixed meter sig, e.g. 2/4 + 3/16 in the same measure (Read, p.
      173-174): encode in common time base, e.g. 11/16, make meter
      invisible, display both meter sigs at the start of the measure
   e) fractional meter sig, e.g. 3.5/4 (Read, p. 175-177):
      set meter.count=3.5
      The beat count may be displayed as a fraction or as its decimal
      equivalent.
-->

<!-- ************************************************************** -->
<!-- * Attributes for parts                                       * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.parts
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.parts ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.parts ''>
]]>
<!ENTITY % a.ges.parts ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.parts ''>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.parts ''>
]]>
<!ENTITY % a.vis.parts ''>

<!-- ************************************************************** -->
<!-- * Attributes for part                                        * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.part
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.part ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.part ''>
]]>
<!ENTITY % a.ges.part ''>

<!-- Logical domain attributes: The n attribute allows explicit
numbering of parts. -->
<!ENTITY % a.log.part
                     'n                 %INTEGER;             #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.part ''>
]]>
<!ENTITY % a.vis.part ''>

<!-- ************************************************************** -->
<!-- * Attributes for section                                     * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.section
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.section ''>

<!-- Gestural domain attributes: The expan attribute contains a list of
ids of child section, ending or app elements. This 'expansion list'
indicates how the section should be expanded into its 'through-composed'
form. See Read, p. 226 (ex. 12-10), 228-229 (ex. 12-16). -->
<![%meiGestural;[
   <!ENTITY % a.ges.section
                     'expan             IDREFS                #IMPLIED'>
]]>
<!ENTITY % a.ges.section ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.section ''>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.section ''>
]]>
<!ENTITY % a.vis.section ''>

<!-- ************************************************************** -->
<!-- * Attributes for ending                                      * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.ending
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.ending ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.ending ''>
]]>
<!ENTITY % a.ges.ending ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.ending ''>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.ending
                     'label             CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.vis.ending ''>

<!-- ************************************************************** -->
<!-- * Attributes for rdg                                         * -->

<!-- Analytical domain attributes: The priority attribute is available
so that variant readings may be assigned an order, e.g., for selection
and/or rendering purposes, other than the encoded order. The resp
attribute identifies the editor responsible for asserting this reading
in the source. -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.rdg
                     '%a.anl.common;
                     priority           CDATA                 #IMPLIED
                     resp               CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.anl.rdg ''>

<!-- Gestural domain attributes: The expan attribute contains a list of
ids of child section, ending or app elements. This 'expansion list'
indicates how the section should be expanded into its 'through-composed'
form. -->
<![%meiGestural;[
   <!ENTITY % a.ges.rdg
                     'expan             IDREFS                #IMPLIED'>
]]>
<!ENTITY % a.ges.rdg ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.rdg ''>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.rdg
                     'label             CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.vis.rdg ''>

<!-- ************************************************************** -->
<!-- * Attributes for staffgrp                                    * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.staffgrp ''>
]]>
<!ENTITY % a.anl.staffgrp ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.staffgrp
                     'midi.div           %INTEGER;             %INHERITED;'>
]]>
<!ENTITY % a.ges.staffgrp ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.staffgrp
                     'n                 %INTEGER;             #IMPLIED'>

<!-- Visual domain attributes: barthru indicates whether barlines go
across the space between staves (yes) or are only drawn across the
stafflines of each staff (no), label.full is used on the first page
while label.abbr is used thereafter, symbol indicates the left-hand
connecting symbol for the group, and the visible attribute indicates
whether this group is to be printed. The brace and bracket attributes
may be used (instead of additional staffgrp sub-elements) to indicate
sub-groupings of staves. -->
<![%meiVisual;[
   <!ENTITY % a.vis.staffgrp
                     'barthru           %BOOLEAN;             #IMPLIED
                     brace              CDATA                 #IMPLIED
                     bracket            CDATA                 #IMPLIED
                     label.abbr         CDATA                 #IMPLIED
                     label.full         CDATA                 #IMPLIED
                     symbol             (brace|bracket|line)  #IMPLIED
                     visible            %BOOLEAN;             #IMPLIED'>
]]>
<!ENTITY % a.vis.staffgrp ''>

<!-- ************************************************************** -->
<!-- * Attributes for staff                                       * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.staff
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.staff ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.staff ''>
]]>
<!ENTITY % a.ges.staff ''>

<!-- Logical domain attributes: The def attribute is a connection back
to the appropriate staffdef element. Usually %STAFFREFMETHOD is declared
so that it contains a number which explicitly states the ordinal
position of the staff (topmost staff is "1", next is "2", etc.). If the
def attribute is omitted, encoding order is presumed to match the staff
order.  Of course, if data is supplied for only a subset of staves, the
def attribute must be supplied. -->
<!ENTITY % a.log.staff
                     'def               %STAFFREFMETHOD;      #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.staff
                     'visible           %BOOLEAN;             #IMPLIED'>
]]>
<!ENTITY % a.vis.staff ''>

<!-- ************************************************************** -->
<!-- * Attributes for staffdef                                    * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.staffdef ''>
]]>
<!ENTITY % a.anl.staffdef ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.staffdef
                     'grace             %GRACE;               %INHERITED;
                     midi.channel       %MIDICHANNEL;         %INHERITED;
                     midi.div           %INTEGER;             %INHERITED;
                     midi.duty          %PERCENT;             %INHERITED;
                     midi.instr         %MIDIVALUE;           %INHERITED;
                     midi.instrname     CDATA                 %INHERITED;
                     midi.port          %MIDIVALUE;           %INHERITED;
                     midi.track         %INTEGER;             %INHERITED;'>
                     <!-- Adding tune.pname, tune.Hz, and tune.temper
                     attributes here would allow each staff to establish
                     its own tuning standard. -->
]]>
<!ENTITY % a.ges.staffdef ''>

<!-- Logical domain attributes: The n attribute is provided for explicit
staff numbering.  The staffdef may be referred to using the value in the
n attribute when %STAFFREFMETHOD is set to '%INTEGER'. -->
<!ENTITY % a.log.staffdef
                     'beam.group        CDATA                 %INHERITED;
                     beam.rests         %BOOLEAN;             %INHERITED;
                     clef.line          %INTEGER;             %INHERITED;
                     clef.shape         %CLEFSHAPE;           %INHERITED;
                     clef.trans         (8va|8vb|15va)        %INHERITED;
                     dur.default        %DURATION;            %INHERITED;
                     key.accid          %ACCIDENTAL.IMPLICIT; #IMPLIED
                     key.mode           %MODE;                %INHERITED;
                     key.pname          %PITCHNAME;           #IMPLIED
                     key.sig            %KEYSIGNATURE;        %INHERITED;
                     key.sig.mixed      CDATA                 %INHERITED;
                     meter.count        %NUMBER;              %INHERITED;
                     meter.sym          %METERTEXT;           %INHERITED;
                     meter.unit         %NUMBER;              %INHERITED;
                     n                  %INTEGER;             #IMPLIED
                     octave.default     %OCTAVES;             %INHERITED;
                     tab.strings        NMTOKENS              #IMPLIED
                     trans.diat         %NUMBER;              %INHERITED;
                     trans.semi         %NUMBER;              %INHERITED;'>

<!-- Visual domain attributes: It is a semantic error if the
clef.shape, clef.line, key.sig, meter.count, and meter.unit attributes
are not supplied or are not available from a scoredef ancestor. The
layerscheme attribute indicates the number of layers and the stem
direction. The lines attribute indicates the number of stafflines. The
lines.color attribute is structured; that is, it should have the same
number of space-separated rgb values as indicated by the lines
attribute. A line can be made invisible by assigning it the same RGB
value as the background, usually white. The tab.strings attribute
lists a written pitch and octave for each open string, e.g. "e3 a3 d4
g4 b4 e5" for standard guitar tuning. It should contain the number of
tokens indicated by the lines attribute. The spacing attribute should
be used to record the absolute distance (as opposed to the relative
distances recorded in scoredef elements) between this staff and the
preceding one in the same system.  This value is meaningless for the
first staff in a system since the spacing.system attribute indicates
the spacing between systems. -->
<![%meiVisual;[
   <!ENTITY % a.vis.staffdef
                     'beam.rend         (acc|rit|norm)        %INHERITED;
                     beam.slope         CDATA                 %INHERITED;
                     clef.visible       %BOOLEAN;             %INHERITED;
                     dynam.dist         %NUMBER;              %INHERITED;
                     grid.show          %BOOLEAN;             %INHERITED;
                     harm.dist          %NUMBER;              %INHERITED;
                     key.sig.show       %BOOLEAN;             %INHERITED;
                     key.sig.showchange %BOOLEAN;             %INHERITED;
                     label.full         CDATA                 #IMPLIED
                     label.abbr         CDATA                 #IMPLIED
                     layerscheme        %LAYERSCHEME;         #IMPLIED
                     lines              %INTEGER;             #IMPLIED
                     lines.color        NMTOKENS              #IMPLIED
                     lines.visible      %BOOLEAN;             #IMPLIED
                     lyric.align        %NUMBER;              %INHERITED;
                     lyric.fam          %FONTFAMILY;          %INHERITED;
                     lyric.name         %FONTNAME;            %INHERITED;
                     lyric.size         %NUMBER;              %INHERITED;
                     lyric.style        %FONTSTYLE;           #IMPLIED
                     lyric.weight       %FONTWEIGHT;          #IMPLIED
                     meter.rend         (denomsym|norm|invis) %INHERITED;
                     meter.sig.showchange
                                        %BOOLEAN;             %INHERITED;
                     multi.number       %BOOLEAN;             %INHERITED;
                     ontheline          %BOOLEAN;             %INHERITED;
                     pedal.rend         (line|term)           %INHERITED;
                     reh.enclose        (box|circle|none)     %INHERITED;
                     scale              %NUMBER;              #IMPLIED
                     slur.rend          %CURVERENDITION;      %INHERITED;
                     spacing            %NUMBER;              %INHERITED;
                     text.dist          %NUMBER;              %INHERITED;
                     text.fam           %FONTFAMILY;          %INHERITED;
                     text.name          %FONTNAME;            %INHERITED;
                     text.size          %NUMBER;              %INHERITED;
                     text.style         %FONTSTYLE;           #IMPLIED
                     text.weight        %FONTWEIGHT;          #IMPLIED
                     tie.rend           %CURVERENDITION;      %INHERITED;
                     visible            %BOOLEAN;             #IMPLIED'>
]]>
<!ENTITY % a.vis.staffdef ''>

<!-- ************************************************************** -->
<!-- * Attributes for layer                                       * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.layer
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.layer ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.layer ''>
]]>
<!ENTITY % a.ges.layer ''>

<!-- Logical domain attributes: The def attribute is a connection back
to the appropriate layerdef element. Usually %LAYERREFMETHOD is declared
so that it contains a number which explicitly states the ordinal
position of the layer (voice) (topmost voice is "1", next is "2", etc.).
If the def attribute is omitted, encoding order is presumed to match the
layer order. Of course, if data is supplied for only a subset of layers,
the def attribute must be supplied. -->
<!ENTITY % a.log.layer
                     'def               %LAYERREFMETHOD;      #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.layer
                       'visible         %BOOLEAN;             #IMPLIED'>
]]>
<!ENTITY % a.vis.layer ''>

<!-- ************************************************************** -->
<!-- * Attributes for layerdef                                    * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.layerdef ''>
]]>
<!ENTITY % a.anl.layerdef ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.layerdef
                     'grace             %GRACE;               %INHERITED;
                     midi.channel       %MIDICHANNEL;         %INHERITED;
                     midi.duty          %PERCENT;             %INHERITED;
                     midi.instr         %MIDIVALUE;           %INHERITED;
                     midi.instrname     CDATA                 %INHERITED;
                     midi.port          %MIDIVALUE;           %INHERITED;
                     midi.track         %INTEGER;             %INHERITED;'>

]]>
<!ENTITY % a.ges.layerdef ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.layerdef
                     'beam.group        CDATA                 %INHERITED;
                     beam.rests         %BOOLEAN;             %INHERITED;
                     dur.default        %DURATION;            %INHERITED;
                     octave.default     %OCTAVES;             %INHERITED;'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.layerdef
                     'beam.rend         (acc|rit|norm)        %INHERITED;
                     beam.slope         CDATA                 %INHERITED;
                     slur.rend          %CURVERENDITION;      %INHERITED;
                     text.fam           %FONTFAMILY;          %INHERITED;
                     text.name          %FONTNAME;            %INHERITED;
                     text.size          %NUMBER;              %INHERITED;
                     text.style         %FONTSTYLE;           #IMPLIED
                     text.weight        %FONTWEIGHT;          #IMPLIED
                     tie.rend           %CURVERENDITION;      %INHERITED;
                     visible            %BOOLEAN;             %INHERITED;'>
]]>
<!ENTITY % a.vis.layerdef ''>

<!-- ************************************************************** -->
<!-- * Attributes for sb                                          * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.sb
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.sb ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.sb ''>
]]>
<!ENTITY % a.ges.sb ''>

<!-- Logical domain attributes.  Including the following attributes:
                    leftmar             %NUMBER;              #IMPLIED
                    rightmar            %NUMBER;              #IMPLIED
                    spacing.staff       %NUMBER;              #IMPLIED
would make it possible to record layout changes without requiring them
to be at section boundaries. -->
<!ENTITY % a.log.sb ''>

<!-- Visual domain attributes: The rend attribute indicates whether
hash marks should be rendered between systems. See Read, p. 436, ex.
26-3. -->
<![%meiVisual;[
   <!ENTITY % a.vis.sb
                     'rend              (hash)                #IMPLIED'>
]]>
<!ENTITY % a.vis.sb ''>

<!-- ************************************************************** -->
<!-- * Attributes for ligature                                    * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.ligature
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.ligature ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.ligature ''>
]]>
<!ENTITY % a.ges.ligature ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.ligature ''>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.ligature
                     'form              (recta|obliqua|other) #IMPLIED'>
]]>
<!ENTITY % a.vis.ligature ''>

<!-- ************************************************************** -->

<!-- ************************************************************** -->
<!-- For the measure tagset, declare attributes in each musical domain,
e.g. analytical, gestural, and visual, in separate parameter entities.
This documents which domain an attribute operates in and makes it
easier to modify the attributes in a given domain independently of the
others. Declaring these here rather than in the individual tagsets
makes them available in any element models declared in the
meiModifications.dtd file.                                          -->
<!-- ************************************************************** -->

<!-- ************************************************************** -->
<!-- * Attributes for accid                                       * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.accid
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.accid ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.accid ''>
]]>
<!ENTITY % a.ges.accid ''>

<!-- Logical domain attributes: %ACCIDENTAL.EXPLICIT is the super-set.
The value attribute should really be restricted to the subset given by
the form attribute. -->
<!ENTITY % a.log.accid
                     'form              (implicit|explicit)   #IMPLIED
                     value              %ACCIDENTAL.EXPLICIT; #REQUIRED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.accid
                     '%a.xy;
                     enclose            %ENCLOSURE;           #IMPLIED
                     place              (above|below|staff)   #IMPLIED'>
]]>
<!ENTITY % a.vis.accid ''>

<!-- ************************************************************** -->
<!-- * Attributes for annot                                       * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.annot
                     'dur.anl           CDATA                 #IMPLIED
                     resp               CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.anl.annot ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.annot ''>
]]>
<!ENTITY % a.ges.annot ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.annot
                     '%a.controlevent;
                     %a.startendid;'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.annot
                     'label             CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.vis.annot ''>

<!-- ************************************************************** -->
<!-- * Attributes for arpeg                                       * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.arpeg
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.arpeg ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.arpeg ''>
]]>
<!ENTITY % a.ges.arpeg ''>

<!-- Logical domain attributes: dir=nonarp indicates a non-arpeggiated
chord. Arpeggiation across multiple staves requires 2 values in staff
attribute; if there's more than 1 layer in either staff, 2 values are
required in the layer attribute. -->
<!ENTITY % a.log.arpeg
                     '%a.controlevent;
                     dir                (up|down|nonarp)      #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.arpeg
                     '%a.visualoffset;
                     %a.xy;
                     arrow               %BOOLEAN;             #IMPLIED'>
]]>
<!ENTITY % a.vis.arpeg ''>

<!-- ************************************************************** -->
<!-- * Attributes for artic                                       * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.artic
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.artic ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.artic ''>
]]>
<!ENTITY % a.ges.artic ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.artic
                     'value             %ARTICULATION;        #REQUIRED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.artic
                     '%a.visualoffset;
                     %a.xy;
                     enclose            %ENCLOSURE;           #IMPLIED
                     place              (above|below)         #IMPLIED'>
]]>
<!ENTITY % a.vis.artic ''>

<!-- ************************************************************** -->
<!-- * Attributes for measure/barline                             * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.measure
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.measure ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.measure
                     'tstamp            %TIMESTAMP;           #IMPLIED'>
]]>
<!ENTITY % a.ges.measure ''>

<!-- Logical domain attributes: The complete attribute allows the
encoding of whether a measure matches the prevailing meter: a value of
'c' indicates a metrically complete measure, 'i' indicates a measure
with not enough beats, while 'o' is for measures with too many beats.
The control attribute indicates whether or not the barline is
"controlling", that is, indicates a point of alignment across all the
parts. Barlines within a score are always 'controlling'; that is, they
must 'line up'. Barlines within parts may or may not be 'controlling'.
The left attribute indicates the function of the left barline. It is
present here only for facilitation of translation from legacy encodings
which use it. Usually, it can be safely ignored.  The right attribute,
on the other hand, indicates the function of the right barline and is
structurally important.  The n attribute may contain an explicit measure
number (Read, p. 445). Most often measure numbers will be machine-
generated. However, an explicit measure number will restart numbering
with the given value. -->
<!ENTITY % a.log.measure
                     'complete          (c|i|o)               #IMPLIED
                     control            %BOOLEAN;             #IMPLIED
                     n                  %INTEGER;             #IMPLIED
                     left               %BARRENDITION;        #IMPLIED
                     right              %BARRENDITION;        #IMPLIED'>

<!-- Visual domain attributes: The taktplace attribute value must be a
number between 1 and the number of stafflines. A value of '5' puts the
barline through the top line of a 5-line staff. The width attribute
records a fixed width for the measure. -->
<![%meiVisual;[
   <!ENTITY % a.vis.measure
                     'barplace          %BARPLACE;            #IMPLIED
                     taktplace          %INTEGER;             #IMPLIED
                     width              %NUMBER;              #IMPLIED'>
]]>
<!ENTITY % a.vis.measure ''>

<!-- ************************************************************** -->
<!-- * Attributes for mrdg                                        * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.mrdg
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.mrdg ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.mrdg
                     'tstamp            %TIMESTAMP;           #IMPLIED'>
]]>
<!ENTITY % a.ges.mrdg ''>

<!-- Logical domain attributes:  -->
<!ENTITY % a.log.mrdg ''>

<!-- Visual domain attributes:  -->
<![%meiVisual;[
   <!ENTITY % a.vis.mrdg ''>
]]>
<!ENTITY % a.vis.mrdg ''>

<!-- ************************************************************** -->
<!-- * Attributes for beam                                        * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.beam
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.beam ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.beam ''>
]]>
<!ENTITY % a.ges.beam ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.beam
                     '%a.event;
                     with               (above|below)         #IMPLIED'>

<!-- Visual domain attributes: Secondary beams may be broken explicitly
using the breaksec attribute. -->
<![%meiVisual;[
   <!ENTITY % a.vis.beam
                     'breaksec          CDATA                 #IMPLIED
                     rend               (acc|rit|norm)        #IMPLIED'>
]]>
<!ENTITY % a.vis.beam ''>

<!-- ************************************************************** -->
<!-- * Attributes for beam2                                       * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.beam2
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.beam2 ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.beam2 ''>
]]>
<!ENTITY % a.ges.beam2 ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.beam2
                     '%a.controlevent;
                     %a.startendid;
                     with               (above|below)         #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.beam2
                     'breaksec          CDATA                 #IMPLIED
                     rend               (acc|rit|norm)        #IMPLIED'>
]]>
<!ENTITY % a.vis.beam2 ''>

<!-- ************************************************************** -->
<!-- * Attributes for beatrpt                                     * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.beatrpt
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.beatrpt ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.beatrpt ''>
]]>
<!ENTITY % a.ges.beatrpt ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.beatrpt
                     '%a.event;'>

<!-- Visual domain attributes: The expand attribute indicates whether to
render the source measures or the usual repeated beat symbol. The rend
attribute indicates the number of slashes required to render the
appropriate beat repeat symbol when the beat is divided into even notes
- 4ths or 8ths=1, 16ths=2, 32nds=3, 64ths=4, 128ths=5. When the beat is
comprised of mixed duration values, the symbol is always rendered as 2
slashes and 2 dots. See Read, pg. 223-224. -->
<![%meiVisual;[
   <!ENTITY % a.vis.beatrpt
                     'altsym            CDATA                 #IMPLIED
                     expand             %BOOLEAN;             #IMPLIED
                     rend               (4|8|16|32|64|128|mixed)
                                                              #REQUIRED'>
]]>
<!ENTITY % a.vis.beatrpt ''>

<!-- ************************************************************** -->
<!-- * Attributes for bend                                        * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.bend
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.bend ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.bend
                     'amount            (.25|.5|.75|1)        #IMPLIED'>
]]>
<!ENTITY % a.ges.bend ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.bend
                     '%a.controlevent;
                     %a.startendid;'>

<!-- Visual domain attributes: The bulge or, alternatively, the bezier
attribute, describes the shape of the bend.  The bulge attribute
describes the curve as a set of distance values above or below an
imaginary line connecting the endpoints of the curve while the bezier
attribute records the placement of Bezier control points as a series
of comma-separated xy coordinates, eg. 19,45,-32,118.  If the bulge or
bezier attributes are present, the bend should be rendered as a curve.
Otherwise, it should be rendered as a line. The bulge attribute must
contain one or more values of type %NUMBER. The rend attribute records
the typographical style of the curve or line while the ho and vo
attributes describe the visual offset of the entire rendered bend. The
endho, endvo and startho, startvo attribute pairs may be used to
encode start and end points relative to their programmatic placement.
For exact placement of the endpoints of the bend use the xy coordinate
pairs. -->
<![%meiVisual;[
   <!ENTITY % a.vis.bend
                     '%a.visualoffset;
                     %a.xy2;
                     bezier             CDATA                 #IMPLIED
                     bulge              CDATA                 #IMPLIED
                     endho              %VISUALOFFSET;        #IMPLIED
                     endvo              %VISUALOFFSET;        #IMPLIED
                     rend               %CURVERENDITION;      #IMPLIED
                     startho            %VISUALOFFSET;        #IMPLIED
                     startvo            %VISUALOFFSET;        #IMPLIED'>
]]>
<!ENTITY % a.vis.bend ''>

<!-- ************************************************************** -->
<!-- * Attributes for btrem                                       * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.btrem
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.btrem ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.btrem ''>
]]>
<!ENTITY % a.ges.btrem ''>

<!-- Logical domain attributes: The num attribute should be explicitly
set for measured tremolandi. The stem modifier (slash or z) must also be
explicity set on the child note or chord element for a complete visual
representation. -->
<!ENTITY % a.log.btrem
                     '%a.event;
                     form               (meas|unmeas)         #IMPLIED
                     num                CDATA                 #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.btrem
                     'num.place         (above|below)         #IMPLIED'>
]]>
<!ENTITY % a.vis.btrem ''>

<!-- ************************************************************** -->
<!-- * Attributes for chord                                       * -->

<!-- Analytical domain attributes: hfunc = harmonic function,
mfunc = melodic function. -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.chord
                     '%a.anl.common;
                     hfunc              CDATA                 #IMPLIED
                     mfunc              CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.anl.chord ''>

<!-- Gestural domain (performance) attributes: The artic.ges and
dur.ges attributes record the articulation and duration information
when the performed values differ from the written values. Unlike dur
attributes elsewhere, the dur.ges attribute (performed duration) type
is CDATA. This allows the expression of performance duration in user-
defined terms, such as measures[s]:beat[s].beatpart, MIDI clicks,
Humdrum *recip values, etc. Because dur.ges isn't limited to the
standard duration values, a dots.ges attribute is unnecessary. -->
<![%meiGestural;[
   <!ENTITY % a.ges.chord
                     'artic.ges         %ARTICULATIONS;       #IMPLIED
                     detune             CDATA                 #IMPLIED
                     dur.ges            CDATA                 #IMPLIED
                     grace              %GRACE;               #IMPLIED
                     grace.time         %PERCENT;             #IMPLIED
                     instr              IDREF                 #IMPLIED'>
]]>
<!ENTITY % a.ges.chord ''>

<!-- Logical domain attributes: The artic, dots, and dur attributes
encode the *written* articulations, augmentation dots, and duration
values. -->
<!ENTITY % a.log.chord
                     '%a.event;
                     artic              %ARTICULATIONS;       #IMPLIED
                     beam               %BEAMS;               #IMPLIED
                     dots               %AUGMENTDOT;          #IMPLIED
                     dur                %DURATION;            %PROPAGATED;
                     fermata            (above|below)         #IMPLIED
                     lv                 %BOOLEAN;             #IMPLIED
                     slur               %SLURS;               #IMPLIED
                     syl                CDATA                 #IMPLIED
                     tie                %TIES;                #IMPLIED
                     tuplet             %TUPLETS;             #IMPLIED'>

<!-- Visual domain attributes:  The altsym attribute indicates that the
specified alternative visual symbol is to be displayed. See Read, p.
320-321 re: tone clusters. Processing of chords and notes will be easier
if a distinction is made between articulations, which indicate sound
quality, and text strings, such as numbers for fingering, etc. Only
articulations should be encoded in the artic attribute; fingerings
should be encoded using the <dir> element. Articulations may be encoded
in order from the notehead outward; that is, away from the stem. See
additional notes at a.vis.note. The slur, slur.dir, slur.rend, tie,
tie.dir, and tie.rend attributes here are syntactic sugar for these
attributes on each of the chord's individual notes. The values here
apply to all the notes in the chord. If some notes are slurred or tied
while others aren't, then the individual note attributes must be used.
The coloration attribute should not be confused with visual color.
Coloration is when a void notehead is displayed filled and vice versa.
The dot.ho and dot.vo attributes record the offset of the dot from its
"normal" position while the dot.x and dot.y attributes record the
precise position of the dot.  The %a.visualoffset entity is expanded
here in order to disallow a vertical offset. -->
<![%meiVisual;[
   <!ENTITY % a.vis.chord
                     '%a.xy;
                     altsym             %CLUSTERS;            #IMPLIED
                     beam.with          (above|below)         #IMPLIED
                     coloration         (inverse)             #IMPLIED
                     dot.ho             %VISUALOFFSET;        #IMPLIED
                     dot.vo             %VISUALOFFSET;        #IMPLIED
                     dot.x              %NUMBER;              #IMPLIED
                     dot.y              %NUMBER;              #IMPLIED
                     ho                 %VISUALOFFSET;        #IMPLIED
                     size               %SIZE;                #IMPLIED
                     slur.dir           (up|down)             #IMPLIED
                     slur.rend          (dotted|dashed)       #IMPLIED
                     stem.dir           (up|down)             #IMPLIED
                     stem.len           %NUMBER;              #IMPLIED
                     stem.mod           %STEMMODIFIER;        #IMPLIED
                     stem.pos           %STEMPOSITION;        #IMPLIED
                     stem.with          (above|below)         #IMPLIED
                     tie.dir            (up|down)             #IMPLIED
                     tie.rend           (dotted|dashed)       #IMPLIED'>
]]>
<!ENTITY % a.vis.chord ''>

<!-- ************************************************************** -->
<!-- * Attributes for clefchange                                  * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.clefchange
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.clefchange ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.clefchange ''>
]]>
<!ENTITY % a.ges.clefchange ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.clefchange
                     '%a.event;
                     clef.line          %INTEGER;             #REQUIRED
                     clef.shape         %CLEFSHAPE;           #REQUIRED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.clefchange  ''>
]]>
<!ENTITY % a.vis.clefchange  ''>

<!-- ************************************************************** -->
<!-- * Attributes for dir                                         * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.dir
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.dir ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.dir
                     'dur.ges           CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.ges.dir ''>

<!-- Logical domain attributes: The dur attribute encodes logical and
visual duration while the dur.ges attribute encodes performed duration
of the rendered symbol or text. If logical and visual duration differ,
it may be necessary to add a dur.vis attribute. -->
<!ENTITY % a.log.dir
                     '%a.controlevent;
                     %a.startendid;
                     dur                CDATA                 #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.dir
                     '%a.visualoffset;
                     %a.xy;
                     place              (above|below|between) #IMPLIED'>
]]>
<!ENTITY % a.vis.dir ''>

<!-- ************************************************************** -->
<!-- * Attributes for dynam                                         * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.dynam
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.dynam ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.dynam
                     'dur.ges           CDATA                 #IMPLIED
                     value              %MIDIVALUE;           #IMPLIED'>
]]>
<!ENTITY % a.ges.dynam ''>

<!-- Logical domain attributes: The dur attribute encodes logical and
visual duration while the dur.ges attribute encodes performed duration
of the dynamic indication. If logical and visual duration differ, it may
be necessary to add a dur.vis attribute. -->
<!ENTITY % a.log.dynam
                     '%a.controlevent;
                     %a.startendid;
                     dur                CDATA                 #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.dynam
                     '%a.visualoffset;
                     %a.xy;
                     place              (above|below|between) #IMPLIED'>
]]>
<!ENTITY % a.vis.dynam ''>

<!-- ************************************************************** -->
<!-- * Attributes for ftrem                                       * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.ftrem
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.ftrem ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.ftrem
                     'form               (meas|unmeas)         #IMPLIED'>
]]>
<!ENTITY % a.ges.ftrem ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.ftrem
                     '%a.event;'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.ftrem ''>
]]>
<!ENTITY % a.vis.ftrem ''>

<!-- ************************************************************** -->
<!-- * Attributes for gliss                                       * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.gliss
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.gliss ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.gliss ''>
]]>
<!ENTITY % a.ges.gliss ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.gliss
                     '%a.controlevent;
                     %a.startendid;'>

<!-- Visual domain attributes: The text attribute may be used to record
any text, such as 'gliss.' that accompanies the glissando mark. -->
<![%meiVisual;[
   <!ENTITY % a.vis.gliss
                     '%a.visualoffset;
                     %a.xy2;
                     endho              %VISUALOFFSET;        #IMPLIED
                     endvo              %VISUALOFFSET;        #IMPLIED
                     rend               %LINERENDITION;       #IMPLIED
                     startho            %VISUALOFFSET;        #IMPLIED
                     startvo            %VISUALOFFSET;        #IMPLIED
                     text               CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.vis.gliss ''>

<!-- ************************************************************** -->
<!-- * Attributes for grpsym                                      * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.grpsym
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.grpsym ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.grpsym ''>
]]>
<!ENTITY % a.ges.grpsym ''>

<!-- Logical domain attributes: The staves attribute must be used when
multiple grpsym elements are present. -->
<!ENTITY % a.log.grpsym
                     'barthru           %BOOLEAN;             #IMPLIED
                     label.abbr         CDATA                 #IMPLIED
                     label.full         CDATA                 #IMPLIED
                     start              CDATA                 #REQUIRED
                     end                CDATA                 #REQUIRED
                     symbol             (brace|bracket|line)  #REQUIRED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.grpsym
                     '%a.visualoffset;
                     %a.xy;'>
]]>
<!ENTITY % a.vis.grpsym ''>

<!-- ************************************************************** -->
<!-- * Attributes for hairpin                                     * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.hairpin
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.hairpin ''>

<!-- Gestural domain attributes: dur.ges represents the performed
duration. -->
<![%meiGestural;[
   <!ENTITY % a.ges.hairpin
                     'dur.ges           CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.ges.hairpin ''>

<!-- Logical domain attributes: The dur attribute encodes logical and
visual duration. If logical and visual durations differ, it may be
necessary to add a dur.vis attribute. -->
<!ENTITY % a.log.hairpin
                     '%a.controlevent;
                     %a.startendid;
                     dur                CDATA                 #IMPLIED
                     form               (cres|dim)            #REQUIRED'>

<!-- Visual domain attributes: The voleft attribute records the vertical
offset of the left end, voright records the vertical offset of the right
end, and the width attribute records the width of the opening on the
open end in staff inter-line units. The x1 and y1 attributes give the
absolute coordinates of the left side of the hairpin while x2 and y2
record the coordinates of the right side. -->
<![%meiVisual;[
   <!ENTITY % a.vis.hairpin
                     '%a.visualoffset;
                     %a.xy2;
                     place              (above|below|between) #REQUIRED
                     holeft             %VISUALOFFSET;        #IMPLIED
                     horight            %VISUALOFFSET;        #IMPLIED
                     voleft             %VISUALOFFSET;        #IMPLIED
                     voright            %VISUALOFFSET;        #IMPLIED
                     width              %NUMBER;              #IMPLIED'>
]]>
<!ENTITY % a.vis.hairpin ''>

<!-- ************************************************************** -->
<!-- * Attributes for harm                                        * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.harm
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.harm ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.harm
                     'dur.ges           CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.ges.harm ''>

<!-- Logical domain attributes: The dur attribute encodes logical and
visual duration while the dur.ges attribute encodes the performed
duration. If the logical and visual durations differ, it may be
necessary to add a dur.vis attribute. -->
<!ENTITY % a.log.harm
                     '%a.controlevent;
                     %a.startendid;
                     chordref           IDREF                 #IMPLIED
                     dur                CDATA                 #IMPLIED'>

<!-- Visual domain attributes: If the rendgrid attribute is set to
'grid', then the chord grid defined in the chordtable should be rendered
instead of the text contents of the harm element; if rendgrid equals
'gridname', both the harm element's text and the grid should be
displayed; otherwise, only the text content of the harm element, e.g.
'Cmaj' or 'V7/III', should be rendered. -->
<![%meiVisual;[
   <!ENTITY % a.vis.harm
                     '%a.visualoffset;
                     %a.xy;
                     extender           %BOOLEAN;             #IMPLIED
                     place              (above|below|between) #IMPLIED
                     rendgrid           (grid|gridname)       #IMPLIED'>
]]>
<!ENTITY % a.vis.harm ''>

<!-- ************************************************************** -->
<!-- * Attributes for harppedal                                   * -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.harppedal
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.harppedal ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.harppedal
                     'dur.ges           CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.ges.harppedal ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.harppedal
                     '%a.controlevent;
                     %a.startendid;
                     c                  (f|n|s)               "n"
                     d                  (f|n|s)               "n"
                     e                  (f|n|s)               "n"
                     f                  (f|n|s)               "n"
                     g                  (f|n|s)               "n"
                     a                  (f|n|s)               "n"
                     b                  (f|n|s)               "n"'>

<!-- Visual domain attributes:  -->
<![%meiVisual;[
   <!ENTITY % a.vis.harppedal
                     '%a.visualoffset;
                     %a.xy;
                     place              (above|below|between) #IMPLIED'>
]]>
<!ENTITY % a.vis.harppedal ''>

<!-- ************************************************************** -->
<!-- * Attributes for lyrics                                      * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.lyrics
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.lyrics ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.lyrics ''>
]]>
<!ENTITY % a.ges.lyrics ''>

<!-- Logical domain attributes: %a.controlevent is expanded here in
order to allow only the staff and layer attributes from this class. -->
<!ENTITY % a.log.lyrics
                     'layer             %LAYERREFMETHOD;      #IMPLIED
                     staff              %STAFFREFMETHOD;      #REQUIRED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.lyrics
                     '%a.typography;
                     place              (above|below|between) #IMPLIED'>
]]>
<!ENTITY % a.vis.lyrics ''>

<!-- ************************************************************** -->
<!-- * Attributes for midi                                        * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.midi ''>
]]>
<!ENTITY % a.anl.midi ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.midi ''>
]]>
<!ENTITY % a.ges.midi ''>

<!-- Logical domain attributes: %a.controlevent is expanded here in
order to allow only the staff and layer attributes from this class. The
staff attribute may point to a staffgrp. If staff is made implied, then
MIDI data can be encoded without reference to score layout, for use when
reading in a MIDI source file, for instance. -->
<!ENTITY % a.log.midi
                     'layer             %LAYERREFMETHOD;      #IMPLIED
                     staff              %STAFFREFMETHOD;      #REQUIRED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.midi ''>
]]>
<!ENTITY % a.vis.midi ''>

<!-- ************************************************************** -->
<!-- * Attributes for mordent                                     * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.mordent
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.mordent ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.mordent ''>
]]>
<!ENTITY % a.ges.mordent ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.mordent
                     '%a.controlevent;
                     %a.startendid;
                     acciupper          %ACCIDENTAL.EXPLICIT; #IMPLIED
                     accilower          %ACCIDENTAL.EXPLICIT; #IMPLIED
                     form               (inv|norm)            #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.mordent
                     '%a.visualoffset;
                     place              (above|below)         #IMPLIED'>
]]>
<!ENTITY % a.vis.mordent ''>

<!-- ************************************************************** -->
<!-- * Attributes for msrest                                      * -->

<!-- Analytical domain attributes: The n attribute is used to
explicitly encode this measure's position in a string of measures
containing only msrest elements. -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.msrest
                     '%a.anl.common;
                     n                  %INTEGER;             #IMPLIED'>
]]>
<!ENTITY % a.anl.msrest ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.msrest
                     'dur.ges           CDATA                 #IMPLIED
                     instr              IDREF                 #IMPLIED'>
]]>
<!ENTITY % a.ges.msrest ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.msrest
                     '%a.event;
                     fermata            (above|below)         #IMPLIED'>

<!-- Visual domain attributes: The altsym attribute indicates that the
specified alternative visual symbol is to be displayed. When set to
'rest' the cutout attribute indicates that the staff lines are to be
displayed but not the rest itself. When set to 'staff' even the staff
lines should not be drawn for this measure. See _56 Songs You Like to
Sing_, p. 32. -->
<![%meiVisual;[
   <!ENTITY % a.vis.msrest
                     '%a.visualoffset;
                     %a.xy;
                     altsym             CDATA                 #IMPLIED
                     cutout             (rest|staff)          #IMPLIED
                     size               %SIZE;                #IMPLIED'>
]]>
<!ENTITY % a.vis.msrest ''>

<!-- ************************************************************** -->
<!-- * Attributes for msrpt                                       * -->

<!-- Analytical domain attributes: The meas attribute is provided to
explicitly indicate the measure whose contents are to be repeated here.
The n attribute is used to explicitly encode this measure's position in
a string of measures containing only msrpt elements. -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.msrpt
                     '%a.anl.common;
                     meas               IDREF                 #IMPLIED
                     n                  %INTEGER;             #IMPLIED'>
]]>
<!ENTITY % a.anl.msrpt ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.msrpt ''>
]]>
<!ENTITY % a.ges.msrpt ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.msrpt
                     '%a.event;'>

<!-- Visual domain attributes: The expand attribute indicates whether or
not to render the source measure. -->
<![%meiVisual;[
   <!ENTITY % a.vis.msrpt
                     'altsym            CDATA                 #IMPLIED
                     expand             %BOOLEAN;             #IMPLIED'>
]]>
<!ENTITY % a.vis.msrpt ''>

<!-- ************************************************************** -->
<!-- * Attributes for multirest                                   * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.multirest
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.multirest ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.multirest
                     'dur.ges           CDATA                 #IMPLIED
                     instr              IDREF                 #IMPLIED'>
]]>
<!ENTITY % a.ges.multirest ''>

<!-- Logical domain attributes: The n attribute contains the number of
measures of rest. -->
<!ENTITY % a.log.multirest
                     '%a.event;
                     n                  %INTEGER;             #REQUIRED'>

<!-- Visual domain attributes: When the block attribute is used,
combinations of the 1, 2, & 4 measure rest forms (Read, p. 104) should
be rendered instead of the modern form. -->
<![%meiVisual;[
   <!ENTITY % a.vis.multirest
                     'altsym            CDATA                 #IMPLIED
                     block              %BOOLEAN;             #IMPLIED'>
]]>
<!ENTITY % a.vis.multirest ''>

<!-- ************************************************************** -->
<!-- * Attributes for multirpt                                    * -->

<!-- Analytical domain attributes: The meas attribute is provided to
explicitly reference the measures where the source content exists. -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.multirpt
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.multirpt ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.multirpt ''>
]]>
<!ENTITY % a.ges.multirpt ''>

<!-- Logical domain attributes:  The n attribute contains the number of
measures to be repeated. -->
<!ENTITY % a.log.multirpt
                     '%a.event;
                     meas               IDREFS                #IMPLIED
                     n                  %INTEGER;             #REQUIRED'>


<!-- Visual domain attributes: The expand attribute indicates whether or
not to render the source measures. -->
<![%meiVisual;[
   <!ENTITY % a.vis.multirpt
                     'altsym            CDATA                 #IMPLIED
                     expand             %BOOLEAN;             #IMPLIED'>
]]>
<!ENTITY % a.vis.multirpt ''>

<!-- ************************************************************** -->
<!-- * Attributes for note                                        * -->

<!-- Analytical domain attributes:
     acci.cautionary cautionary accidental
     acci.editorial  editorial accidental or musica ficta
     hfunc           harmonic function, e.g. root, 3rd, 5th
     inth            harmonic interval from pitch in same chord
     intm            melodic interval from previous pitch
     mfunc           melodic function, e.g. appogg., N.T.
     pclass          pitch class 
     psolfa          solfa, e.g. do, re, mi, etc.
-->
<![%meiAnalysis;[
   <!ENTITY % a.anl.note
                     '%a.anl.common;
                     acci.cautionary    %ACCIDENTAL.EXPLICIT; #IMPLIED
                     acci.editorial     %ACCIDENTAL.EXPLICIT; #IMPLIED
                     hfunc              CDATA                 #IMPLIED
                     inth               CDATA                 #IMPLIED
                     intm               CDATA                 #IMPLIED
                     mfunc              CDATA                 #IMPLIED
                     pclass             %PITCHCLASS;          #IMPLIED
                     psolfa             CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.anl.note ''>

<!-- Gestural domain (performance) attributes: The artic.ges, dur.ges,
oct.ges, pname.ges attributes record the articulation, duration,
octave, and pitch name when the performed value differs from the
written value. The acci.ges attribute may be used to record the
implicit accidental, that is, the pitch alteration required by the key
signature, for use in conversion to sound and for harmonic analysis.
Therefore, only the flat, double flat, sharp and double sharp values
are permitted. Unlike dur attributes elsewhere, the dur.ges attribute
(performed duration) type is CDATA. This allows the expression of
performance duration in user-defined terms, such as
measures[s]:beat[s].beatpart, MIDI clicks, Humdrum *recip values, etc.
Because dur.ges isn't limited to the standard duration values, a
dots.ges attribute is unnecessary. See Read, p. 238-241, for a
discussion of grace notes. The pnum attribute holds a pitch-to-number
mapping, a base-40 or MIDI note number, for example. -->
<![%meiGestural;[
   <!ENTITY % a.ges.note
                     'acci.ges          %ACCIDENTAL.IMPLICIT; #IMPLIED
                     artic.ges          %ARTICULATIONS;       #IMPLIED
                     detune             CDATA                 #IMPLIED
                     dur.ges            CDATA                 #IMPLIED
                     gliss              %GLISSANDO;           #IMPLIED
                     grace              %GRACE;               #IMPLIED
                     grace.time         %PERCENT;             #IMPLIED
                     instr              IDREF                 #IMPLIED
                     oct.ges            CDATA                 #IMPLIED
                     pname.ges          %PITCHNAME.GES;       #IMPLIED
                     pnum               %PITCHNUMBER;         #IMPLIED'>
]]>
<!ENTITY % a.ges.note ''>

<!-- Logical domain attributes: The pname, acci, oct, dur, dots, and
artic attributes encode the *written* note name, accidental, octave,
duration, articulations, augmentation dots, and articulations. The acci
attribute records the notated accidental for the note, e.g. flat, sharp,
natural, double flat, double sharp (both forms), natural+flat,
natural+sharp, and the quarter tone accidentals. The beam attribute
records the presence of a beam in which this note participates. Software
may use this attribute or beam elements for rendering. The dots
attribute records the number of augmentation dots required by a dotted
duration. The slur, tie, lv (laissez vibrer), and tuplet attributes encode
the presence of a slur, tie, lv, or tuplet in which this note participates.
Software may render slur, tie, lv or tuplet indications based on these
attributes or require separate slur, tie, generic curve, or tuplet elements
for visual rendition. Tablature information can be recorded in the tab.fret
and tab.string attributes. -->
<!ENTITY % a.log.note
                     '%a.event;
                     acci               %ACCIDENTAL.EXPLICIT; #IMPLIED
                     artic              %ARTICULATIONS;       #IMPLIED
                     beam               %BEAMS;               #IMPLIED
                     dots               %AUGMENTDOT;          #IMPLIED
                     dur                %DURATION;            %PROPAGATED;
                     fermata            (above|below)         #IMPLIED
                     lv                 %BOOLEAN;             #IMPLIED
                     oct                %OCTAVES;             %PROPAGATED;
                     pname              %PITCHNAME;           %PROPAGATED;
                     slur               %SLURS;               #IMPLIED
                     syl                CDATA                 #IMPLIED
                     tab.fret           %NUMBER;              #IMPLIED
                     tab.string         %NUMBER;              #IMPLIED
                     tie                %TIES;                #IMPLIED
                     tuplet             %TUPLETS;             #IMPLIED'>

<!-- Visual domain attributes:  The distance between the accidental and
the note it modifies should be recorded in the acci.dist attribute. The
altsym attribute may be used to override the headshape normally used for
the given duration. The enclose.acci and enclose.note attributes record
the symbol to be used around the accidental and the entire note,
respectively. For an example of cautionary accidentals enclosed in
parentheses or brackets see Read, p. 131, ex. 9-14. The coloration
attribute may be used to indicate a reverse coloration, i.e., black
instead of white or white instead of black. The dot.ho and dot.vo
attributes record the offset of the dot from its "normal" position while
the dot.x and dot.y attributes record the precise position of the dot.
The %a.visualoffset entity is expanded here in order to disallow a
vertical offset. -->
<![%meiVisual;[
   <!ENTITY % a.vis.note
                     '%a.xy;
                     acci.dist          %NUMBER;              #IMPLIED
                     altsym             %HEADSHAPE;           #IMPLIED
                     beam.with          (above|below)         #IMPLIED
                     coloration         (inverse)             #IMPLIED
                     dot.ho             %VISUALOFFSET;        #IMPLIED
                     dot.vo             %VISUALOFFSET;        #IMPLIED
                     dot.x              %NUMBER;              #IMPLIED
                     dot.y              %NUMBER;              #IMPLIED
                     enclose.acci       %ENCLOSURE;           #IMPLIED
                     enclose.note       %ENCLOSURE;           #IMPLIED
                     ho                 %VISUALOFFSET;        #IMPLIED
                     size               %SIZE;                #IMPLIED
                     slur.dir           (up|down)             #IMPLIED
                     slur.rend          (dotted|dashed)       #IMPLIED
                     stem.dir           (up|down)             #IMPLIED
                     stem.len           %NUMBER;              #IMPLIED
                     stem.mod           %STEMMODIFIER;        #IMPLIED
                     stem.pos           %STEMPOSITION;        #IMPLIED
                     stem.with          (above|below)         #IMPLIED
                     tie.dir            (up|down)             #IMPLIED
                     tie.rend           (dotted|dashed)       #IMPLIED
                     visible            %BOOLEAN;             #IMPLIED'>
]]>
<!ENTITY % a.vis.note ''>

<!-- ************************************************************** -->
<!-- * Attributes for octave                                      * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.octave
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.octave ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.octave
                     'dur.ges           CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.ges.octave ''>

<!-- Logical domain attributes: dur is NOT REQUIRED because the octave
displacement can be visually instantaneous. The place attribute
indicates direction of displacement and display location and therefore
is REQUIRED. The dis attribute states the amount of displacement while
coll (Read, p. 47-48) encodes whether the octave displacement should be
performed simultaneously with the written notes. -->
<!ENTITY % a.log.octave
                     '%a.controlevent;
                     %a.startendid;
                     coll               (coll)                #IMPLIED
                     dis                (8|15|22)             #REQUIRED
                     dur                CDATA                 #IMPLIED
                     place              (above|below)         #REQUIRED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.octave
                     '%a.xy;
                     %a.visualoffset;
                     rend               %LINERENDITION;       #IMPLIED'>
]]>
<!ENTITY % a.vis.octave ''>

<!-- ************************************************************** -->
<!-- * Attributes for ossia                                       * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.ossia
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.ossia ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.ossia ''>
]]>
<!ENTITY % a.ges.ossia ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.ossia ''>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.ossia ''>
]]>
<!ENTITY % a.vis.ossia ''>

<!-- ************************************************************** -->
<!-- * Attributes for pad                                         * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.pad ''>
]]>
<!ENTITY % a.anl.pad ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.pad ''>
]]>
<!ENTITY % a.ges.pad ''>

<!-- Logical domain attributes: The n attribute is the amount of
horizontal space to be added, expressed in inter-line staff units. -->
<!ENTITY % a.log.pad
                     '%a.event;
                     n                  %NUMBER;              #REQUIRED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.pad ''>
]]>
<!ENTITY % a.vis.pad ''>

<!-- ************************************************************** -->
<!-- * Attributes for pedal (piano damper pedal)                  * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.pedal
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.pedal ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.pedal ''>
]]>
<!ENTITY % a.ges.pedal ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.pedal
                     '%a.controlevent;
                     %a.startendid;
                     dir                (down|up|half)        #REQUIRED'>

<!-- Visual domain attributes: When style is set to 'line', the pedal
mark is rendered with a continuous line. When it's set to pedstar, a
pedal down is rendered with "Ped.", a pedal up is rendered as "*", and a
pedal "bounce" is rendered with "Ped. *".  When set to altpedstar pedal
up and down indications are the same as with pedstar but a bounce is
rendered with "Ped." only. -->
<![%meiVisual;[
   <!ENTITY % a.vis.pedal
                     '%a.xy;
                     %a.visualoffset;
                     place              (below)               #IMPLIED
                     style              (line|pedstar|
                                         altpedstar)          #IMPLIED'>
]]>
<!ENTITY % a.vis.pedal ''>

<!-- ************************************************************** -->
<!-- * Attributes for phrase                                      * -->

<!-- Analytical domain attributes:
The join attribute should be used for linking visually separate phrase
marks, sometimes necessary due to system breaks, that form a single
musical phrase. -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.phrase
                     '%a.anl.common;
                     join               IDREFS                #IMPLIED'>
]]>
<!ENTITY % a.anl.phrase ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.phrase ''>
]]>
<!ENTITY % a.ges.phrase ''>

<!-- Logical domain attributes: Phrase may either use tstamp, duration,
and place attributes or start, end, and bulge attributes. It is a
semantic error not to specify one of these attribute combinations. -->
<!ENTITY % a.log.phrase
                     '%a.controlevent;
                     %a.startendid;
                     dur                CDATA                 #IMPLIED'>

<!-- Visual domain attributes: The bulge or, alternatively, the bezier
attribute, describes the shape of the phrase mark.  The bulge attribute
describes the curve as a set of distance values above or below an
imaginary line connecting the endpoints of the curve while the bezier
attribute records the placement of Bezier control points as a series
of comma-separated xy coordinates, eg. 19,45,-32,118. The bulge
attribute must contain one or more values of type %NUMBER. The vo
attribute is the vertical offset (from its normal position) of the
entire rendered phrase mark. -->
<![%meiVisual;[
   <!ENTITY % a.vis.phrase
                     '%a.visualoffset;
                     %a.xy2;
                     bezier             CDATA                 #IMPLIED
                     bulge              CDATA                 #IMPLIED
                     endho              %VISUALOFFSET;        #IMPLIED
                     endvo              %VISUALOFFSET;        #IMPLIED
                     place              (above|below)         #IMPLIED
                     rend               %CURVERENDITION;      #IMPLIED
                     startho            %VISUALOFFSET;        #IMPLIED
                     startvo            %VISUALOFFSET;        #IMPLIED'>
]]>
<!ENTITY % a.vis.phrase ''>

<!-- ************************************************************** -->
<!-- * Attributes for reh                                         * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.reh
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.reh ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.reh ''>
]]>
<!ENTITY % a.ges.reh ''>

<!-- Logical domain attributes: %a.controlevent is expanded here in
order to disallow the plist and layer attributes. reh may use either a
tstamp or start attribute.  It is a semantic error not to include one of
these attributes. The a.startendid entity is expanded here in order to
disallow the end attribute. -->
<!ENTITY % a.log.reh
                     'next              IDREFS                #IMPLIED
                     prev               IDREFS                #IMPLIED
                     staff              %STAFFREFMETHOD;      #REQUIRED
                     tstamp             %TIMESTAMP;           #IMPLIED
                     start              IDREF                 #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.reh
                     '%a.typography;
                     %a.visualoffset;
                     %a.xy;
                     enclose            (box|circle|none)     #IMPLIED
                     place              (above)               #IMPLIED'>
]]>
<!ENTITY % a.vis.reh ''>

<!-- ************************************************************** -->
<!-- * Attributes for rest                                        * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.rest
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.rest ''>

<!-- Gestural domain (performance) attributes:  The dur.ges attribute
records the performed duration of the rest when it differs from the
written duration. -->
<![%meiGestural;[
   <!ENTITY % a.ges.rest
                     'dur.ges           CDATA                 #IMPLIED
                     instr              IDREF                 #IMPLIED'>
]]>
<!ENTITY % a.ges.rest ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.rest
                     '%a.event;
                     beam               %BEAMS;               #IMPLIED
                     dots               %AUGMENTDOT;          #IMPLIED
                     dur                %DURATION;            %PROPAGATED;
                     fermata            (above|below)         #IMPLIED
                     tuplet             %TUPLETS;             #IMPLIED'>

<!-- Visual domain attributes:  The altsym attribute indicates that the
specified alternative visual symbol is to be displayed. See Read, ex.
7-14 for vertical offset example. -->
<![%meiVisual;[
   <!ENTITY % a.vis.rest
                     '%a.visualoffset;
                     %a.xy;
                     altsym             CDATA                 #IMPLIED
                     beam.with          (above|below)         #IMPLIED
                     dot.ho             %VISUALOFFSET;        #IMPLIED
                     dot.vo             %VISUALOFFSET;        #IMPLIED
                     dot.x              %NUMBER;              #IMPLIED
                     dot.y              %NUMBER;              #IMPLIED
                     size               %SIZE;                #IMPLIED'>
]]>
<!ENTITY % a.vis.rest ''>

<!-- ************************************************************** -->
<!-- * Attributes for slur                                        * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.slur
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.slur ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.slur ''>
]]>
<!ENTITY % a.ges.slur ''>

<!-- Logical domain attributes: The slur element may use either the
tstamp, duration, and place attributes or the start, end, and bulge
attributes. It is a semantic error not to include one of these attribute
combinations. -->
<!ENTITY % a.log.slur
                     '%a.controlevent;
                     %a.startendid;
                     dur                CDATA                 #IMPLIED
                     place              (above|below)         #IMPLIED'>

<!-- Visual domain attributes: The bulge or, alternatively, the bezier
attribute, describes the shape of the slur. The bulge attribute
describes the curve as a set of distance values above or below an
imaginary line connecting the endpoints of the curve while the bezier
attribute records the placement of Bezier control points as a series
of comma-separated xy coordinates, eg. 19,45,-32,118. The bulge
attribute must contain one or more values of type %NUMBER. The vo
attribute is the vertical offset (from its normal position) of the
entire rendered slur. -->
<![%meiVisual;[
   <!ENTITY % a.vis.slur
                     '%a.visualoffset;
                     %a.xy2;
                     bulge              CDATA                 #IMPLIED
                     endho              %VISUALOFFSET;        #IMPLIED
                     endvo              %VISUALOFFSET;        #IMPLIED
                     rend               %CURVERENDITION;      #IMPLIED
                     startho            %VISUALOFFSET;        #IMPLIED
                     startvo            %VISUALOFFSET;        #IMPLIED'>
]]>
<!ENTITY % a.vis.slur ''>

<!-- ************************************************************** -->
<!-- * Attributes for space                                       * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.space
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.space ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.space
                     'dur.ges           CDATA                 #IMPLIED'>
]]>
<!ENTITY % a.ges.space ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.space
                     '%a.event;
                     beam               %BEAMS;               #IMPLIED
                     dots               %AUGMENTDOT;          #IMPLIED
                     dur                %DURATION;            %PROPAGATED;'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.space
                     'compressable      %BOOLEAN;             #IMPLIED'>
]]>
<!ENTITY % a.vis.space ''>

<!-- ************************************************************** -->
<!-- * Attributes for syl                                         * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.syl
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.syl ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.syl ''>
]]>
<!ENTITY % a.ges.syl ''>

<!-- Logical domain attributes:
  Lyric syllable connectors:
    s (_s_pace) = word separator
    d (_d_ash)  = syllable separator
    u (_u_nderscore) = syllable extension
    t (_t_ilde) = syllable elision
  wordpos attribute records the position of the syllable in a word
   -->
<!ENTITY % a.log.syl
                     'con                (s|d|u|t)             #IMPLIED
                     wordpos             (i|m|t)               #IMPLIED'>

<!-- Visual domain attributes: The ho attribute allows any lyric
syllable to be horizontally offset from its normal (centered below the
note) position. -->
<![%meiVisual;[
   <!ENTITY % a.vis.syl
                     '%a.typography;
                     %a.visualoffset;
                     %a.xy;
                     rend                %TEXTRENDITION;       #IMPLIED'>
]]>
<!ENTITY % a.vis.syl ''>

<!-- ************************************************************** -->
<!-- * Attributes for tempo                                       * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.tempo
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.tempo ''>

<!-- Gestural domain attributes: The value attribute must contain the
number of quarter notes per minute in the range from 10 to 1000. -->
<![%meiGestural;[
   <!ENTITY % a.ges.tempo
                     'value             %TEMPOVALUE;          #IMPLIED'>
]]>
<!ENTITY % a.ges.tempo ''>

<!-- Logical domain attributes: The dur.vis attribute encodes visual
duration while the dur.ges attribute encodes performed duration. (Read,
p. 276-281) If logical and visual durations differ, it may be necessary
to add a dur attribute. The a.startendid entity is expanded here in order
to disallow the end attribute. -->
<!ENTITY % a.log.tempo
                     '%a.controlevent;
                     dur.vis            CDATA                 #IMPLIED
                     start              IDREF                 #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.tempo
                     '%a.visualoffset;
                     %a.xy;
                     place              (above|below|between) #IMPLIED'>
]]>
<!ENTITY % a.vis.tempo ''>

<!-- ************************************************************** -->
<!-- * Attributes for tie                                         * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.tie
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.tie ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.tie ''>
]]>
<!ENTITY % a.ges.tie ''>

<!-- Logical domain attributes: The a.startendid entity is expanded here
in order to make start and end attributes required. -->
<!ENTITY % a.log.tie
                     '%a.controlevent;
                     end                IDREF                 #REQUIRED
                     start              IDREF                 #REQUIRED'>

<!-- Visual domain attributes: The bulge or, alternatively, the bezier
attribute, describes the shape of the tie.  The bulge attribute
describes the curve as a set of distance values above or below an
imaginary line connecting the endpoints of the curve while the bezier
attribute records the placement of Bezier control points as a series
of comma-separated xy coordinates, eg. 19,45,-32,118. The bulge
attribute must contain one or more values of type %NUMBER. The vo
attribute is the vertical offset (from its normal position) of the
entire rendered tie. -->
<![%meiVisual;[
   <!ENTITY % a.vis.tie
                     '%a.visualoffset;
                     %a.xy2;
                     bezier             CDATA                 #IMPLIED
                     bulge              CDATA                 #REQUIRED
                     endho              %VISUALOFFSET;        #IMPLIED
                     endvo              %VISUALOFFSET;        #IMPLIED
                     rend               %CURVERENDITION;      #IMPLIED
                     startho            %VISUALOFFSET;        #IMPLIED
                     startvo            %VISUALOFFSET;        #IMPLIED'>
]]>
<!ENTITY % a.vis.tie ''>

<!-- ************************************************************** -->
<!-- * Attributes for trill                                       * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.trill
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.trill ''>

<!-- Gestural domain attributes: The dur.ges attribute records the
performed duration. -->
<![%meiGestural;[
   <!ENTITY % a.ges.trill ''>
]]>
<!ENTITY % a.ges.trill ''>

<!-- Logical domain attributes: The dur attribute is used to encode the
logical and visual duration of the trill. Alternatively, start and end
attributes may be used.  An accidental for the trill may be supplied in
the acci attribute. -->
<!ENTITY % a.log.trill
                     '%a.controlevent;
                     %a.startendid;
                     acci               %ACCIDENTAL.EXPLICIT; #IMPLIED
                     dur                CDATA                 #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.trill
                     '%a.visualoffset;
                     %a.xy;
                     place              (above|below)         #IMPLIED'>
]]>
<!ENTITY % a.vis.trill ''>

<!-- ************************************************************** -->
<!-- * Attributes for tuplet                                      * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.tuplet
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.tuplet ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.tuplet ''>
]]>
<!ENTITY % a.ges.tuplet ''>

<!-- Logical domain attributes: The dur attribute is the time taken up
by the tuplet. If dur is omitted, the default is to calculate the total
duration of the included notes and use the next shorter un-dotted value.
The dots attribute may be used for dotted durations. The num attribute
is a ratio. 
may be used for explicit labelling of the tuplet, i.e. '3' for an 8th-note
triplet, '3:2' for a quarter-note triplet, etc. -->
<!ENTITY % a.log.tuplet
                     '%a.event;
                     dots               %AUGMENTDOT;          #IMPLIED
                     dur                %DURATION;            #IMPLIED
                     num                CDATA                 #IMPLIED
                     numbase            %DURATION;            #IMPLIED
                     with               (above|below)         #IMPLIED'>

<!-- Visual domain attributes: The bracket.place attribute is used to
state where the bracket will be placed in relation to the noteheads
while the num.place attribute gives the placement of the number or ratio
label for the tuplet (if num.visible is 'yes'). The num.visible,
bracket.visible, and dur.visible attributes indicate whether the numbers,
bracket, and duration are visible. The num.format attribute controls how
the num attribute is to be displayed.
     software defaults:
     bracket.visible 'yes'
     num.visible 'yes' -->
<![%meiVisual;[
   <!ENTITY % a.vis.tuplet
                     'bracket.place     (above|below)         #IMPLIED
                     bracket.visible    %BOOLEAN;             #IMPLIED
                     dur.visible        %BOOLEAN;             #IMPLIED
                     num.format         (count|ratio)         #IMPLIED
                     num.place          (above|below)         #IMPLIED
                     num.visible        %BOOLEAN;             #IMPLIED'>
]]>
<!ENTITY % a.vis.tuplet ''>

<!-- ************************************************************** -->
<!-- * Attributes for tuplet2                                     * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.tuplet2
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.tuplet2 ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.tuplet2 ''>
]]>
<!ENTITY % a.ges.tuplet2 ''>

<!-- Logical domain attributes: -->
<!ENTITY % a.log.tuplet2
                     '%a.controlevent;
                     %a.startendid;
                     dots               %AUGMENTDOT;          #IMPLIED
                     dur                %DURATION;            #IMPLIED
                     num                CDATA                 #IMPLIED
                     numbase            %DURATION;            #IMPLIED
                     with               (above|below)         #IMPLIED'>

<![%meiVisual;[
<!-- Visual domain attributes:
   software defaults:
   bracket.visible 'yes'  What about triplets?
   num.visible 'yes'
-->
   <!ENTITY % a.vis.tuplet2
                     'bracket.place     (above|below)         #IMPLIED
                     bracket.visible    %BOOLEAN;             #IMPLIED
                     dur.visible        %BOOLEAN;             #IMPLIED
                     num.format         (count|ratio)         #IMPLIED
                     num.place          (above|below)         #IMPLIED
                     num.visible        %BOOLEAN;             #IMPLIED'>
]]>
<!ENTITY % a.vis.tuplet2 ''>

<!-- ************************************************************** -->
<!-- * Attributes for turn                                        * -->

<![%meiAnalysis;[
   <!ENTITY % a.anl.turn
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.turn ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.turn ''>
]]>
<!ENTITY % a.ges.turn ''>

<!-- Logical domain attributes: Accidentals for the turn may be supplied
in the acciupper and accilower attributes. The a.startendid entity is
expanded here in order to disallow the end attribute. -->
<!ENTITY % a.log.turn
                     '%a.controlevent;
                     acciupper          %ACCIDENTAL.EXPLICIT; #IMPLIED
                     accilower          %ACCIDENTAL.EXPLICIT; #IMPLIED
                     form               (inv|norm)            #IMPLIED
                     start              IDREF                 #IMPLIED'>

<!-- Visual domain attributes: -->
<![%meiVisual;[
   <!ENTITY % a.vis.turn
                     '%a.visualoffset;
                     %a.xy;
                     place              (above|below)         #IMPLIED'>
]]>
<!ENTITY % a.vis.turn ''>

<!-- ************************************************************** -->
<!-- * Attributes for verse                                       * -->

<!-- Analytical domain attributes: -->
<![%meiAnalysis;[
   <!ENTITY % a.anl.verse
                     '%a.anl.common;'>
]]>
<!ENTITY % a.anl.verse ''>

<!-- Gestural domain attributes: -->
<![%meiGestural;[
   <!ENTITY % a.ges.verse ''>
]]>
<!ENTITY % a.ges.verse ''>

<!-- Logical domain attributes: The n attribute is for verse numbers.
Numbers need not be consecutive; they may be expressed as ranges, e.g.
2-3,6. A value of 'c' may be used in the n attribute in order to
indicate a common, usually centered, refrain (Mup User's Guide, p. 44).
Better to use 'refrain' in type attribute? The rhythm attribute may be
used to specify a rhythm for the lyrics that differs from that of the
notes on the staff. -->
<!ENTITY % a.log.verse
                     'n                 CDATA                 #IMPLIED
                     rhythm             CDATA                 #IMPLIED'>

<!-- Visual domain attributes: The a.visualoffset entity is expanded
here in order to disallow ho. -->
<![%meiVisual;[
   <!ENTITY % a.vis.verse
                     '%a.typography;
                     %a.xy;
                     vo                 %VISUALOFFSET;        #IMPLIED'>
]]>
<!ENTITY % a.vis.verse ''>

<!-- ************************************************************** -->
