<classSpec ident="att.beamRend" module="MEI.cmn" type="atts">
<desc xml:lang="en">Attributes that record the visual rendition of beams.</desc>
<attList>
<attDef ident="form" usage="opt">
<desc xml:lang="en">Captures whether a beam is "feathered" and in which direction.</desc>
<valList type="closed">
<valItem ident="acc">
<gloss versionDate="2022-05-18" xml:lang="en">accelerando</gloss>
<desc xml:lang="en">means that the secondary beams become progressively more distant
toward the end of the beam.</desc>
</valItem>
<valItem ident="mixed">
<gloss versionDate="2022-05-18" xml:lang="en">mixed acc and rit</gloss>
<desc xml:lang="en">for beams that are "feathered" in both directions.</desc>
</valItem>
<valItem ident="rit">
<gloss versionDate="2022-05-18" xml:lang="en">ritardando</gloss>
<desc xml:lang="en">indicates that the secondary beams get progressively closer together
toward the end of the beam.</desc>
</valItem>
<valItem ident="norm">
<gloss versionDate="2022-05-18" xml:lang="en">normal</gloss>
<desc xml:lang="en">indicates that the secondary beams are equidistant along the course of
the beam.</desc>
</valItem>
</valList>
</attDef>
<attDef ident="place" usage="opt">
<desc xml:lang="en">Records the placement of the beam relative to the events it affects.</desc>
<constraintSpec ident="check_beam_place" scheme="schematron">
<constraint>
<sch:rule context="mei:beam[@place eq 'mixed' and not(descendant::mei:*[local-name() eq 'note' or local-name()
eq 'chord'][@staff != ./@staff] or descendant::mei:*[local-name() eq 'note' or local-name()
eq 'chord'][@staff != ancestor::mei:staff/@n])]">
<sch:assert test="count(descendant::mei:*[local-name() eq 'note' or local-name() eq 'chord'][@stem.dir])
= count(descendant::mei:*[local-name() eq 'note' or local-name() eq 'chord'])">Stem direction must be specified for all notes and chords under the
beam.</sch:assert>
<sch:assert test="count(distinct-values(descendant::mei:*[local-name() eq 'note' or local-name() eq
'chord']/@stem.dir)) > 1">Opposing stem directions are required for a beam with @place="mixed".</sch:assert>
</sch:rule>
<sch:rule context="mei:beam[@place eq 'mixed' and (descendant::mei:*[local-name() eq 'note' or local-name()
eq 'chord'][@staff != ./@staff] or descendant::mei:*[local-name() eq 'note' or local-name()
eq 'chord'][@staff != ancestor::mei:staff/@n]) and count(descendant::mei:*[local-name()
eq 'note' or local-name() eq 'chord'][@stem.dir]) = count(descendant::mei:*[local-name()
eq 'note' or local-name() eq 'chord'])]">
<sch:assert test="count(distinct-values(descendant::mei:*[local-name() eq 'note' or local-name() eq
'chord']/@stem.dir)) > 1">Opposing stem directions are required for a beam with @place="mixed".</sch:assert>
</sch:rule>
</constraint>
</constraintSpec>
</attDef>
<attDef ident="slash" usage="opt">
<desc xml:lang="en">Indicates presence of slash through the beam.</desc>
</attDef>
<attDef ident="slope" usage="opt">
<desc xml:lang="en">Records the slope of the beam.</desc>
<datatype>
<rng:data type="decimal"/>
</datatype>
</attDef>
</attList>
</classSpec>