<classSpec ident="att.extSym" module="MEI.externalsymbols" type="atts">
<desc xml:lang="en">Attributes used to associate MEI features with corresponding glyphs in an
externally-defined standard such as SMuFL.</desc>
<attList>
<attDef ident="glyph.auth" usage="opt">
<desc xml:lang="en">A name or label associated with the controlled vocabulary from which the value of
<att>glyph.name</att> or
<att>glyph.num</att> is taken.</desc>
<datatype>
<rng:data type="NMTOKEN"/>
</datatype>
<valList type="semi">
<valItem ident="smufl">
<desc xml:lang="en">Standard Music Font Layout.</desc>
</valItem>
</valList>
</attDef>
<attDef ident="glyph.name" usage="opt">
<desc xml:lang="en">Glyph name.</desc>
<datatype>
<rng:data type="string"/>
</datatype>
<constraintSpec ident="check_glyph.name" scheme="isoschematron">
<constraint>
<sch:rule context="@glyph.name">
<sch:assert role="warning" test="not(normalize-space(.) eq '')">@glyph.name attribute
should have content.</sch:assert>
</sch:rule>
</constraint>
</constraintSpec>
</attDef>
<attDef ident="glyph.num" usage="opt">
<desc xml:lang="en">Numeric glyph reference in hexadecimal notation,
<abbr>e.g.</abbr>, "#xE000" or "U+E000". N.B. SMuFL
version 1.18 uses the range U+E000 - U+ECBF.</desc>
<constraintSpec ident="check_glyph.num" scheme="isoschematron">
<constraint>
<sch:rule context="mei:*[@glyph.num and (lower-case(@glyph.auth) eq 'smufl' or @glyph.uri eq 'http://www.smufl.org/')]">
<sch:assert role="warning" test="matches(normalize-space(@glyph.num), '^(#x|U\+)E([0-9AB][0-9A-F][0-9A-F]|C[0-9A][0-9A-F]|CB[0-9A-F])$')">SMuFL version 1.18 uses the range U+E000 - U+ECBF.</sch:assert>
</sch:rule>
</constraint>
</constraintSpec>
</attDef>
<attDef ident="glyph.uri" usage="opt">
<desc xml:lang="en">The web-accessible location of the controlled vocabulary from which the value of
<att>glyph.name</att> or
<att>glyph.num</att> is taken.</desc>
</attDef>
</attList>
</classSpec>