<sch:rule context="mei:*[matches(@clef.shape, '[FCG]')]">
<sch:assert test="@clef.line">An 'F', 'C', or 'G' clef requires that its position be
specified.</sch:assert>
</sch:rule>
<sch:rule context="mei:*[matches(@clef.shape, '(TAB|perc)')]">
<sch:assert test="@lines">A TAB or percussion clef requires that the number of lines be
specified.</sch:assert>
</sch:rule>
<classSpec ident="att.cleffing.log" module="MEI.shared" type="atts">
<desc>Used by staffDef and scoreDef to provide default values for attributes in the logical
domain related to clefs.</desc>
<constraintSpec ident="clef_shape_requires_clef_line" scheme="isoschematron">
<constraint>
<sch:rule context="mei:*[matches(@clef.shape, '[FCG]')]">
<sch:assert test="@clef.line">An 'F', 'C', or 'G' clef requires that its position be
specified.</sch:assert>
</sch:rule>
<sch:rule context="mei:*[matches(@clef.shape, '(TAB|perc)')]">
<sch:assert test="@lines">A TAB or percussion clef requires that the number of lines be
specified.</sch:assert>
</sch:rule>
</constraint>
</constraintSpec>
<attList org="group">
<attDef ident="clef.shape" usage="opt">
<desc>Encodes a value for the clef symbol.</desc>
</attDef>
<attDef ident="clef.line" usage="opt">
<desc>Contains a default value for the position of the clef. The value must be in the range
between 1 and the number of lines on the staff. The numbering of lines starts with
the
lowest line of the staff.</desc>
</attDef>
<attDef ident="clef.dis" usage="opt">
<desc>Records the amount of octave displacement to be applied to the clef.</desc>
</attDef>
<attDef ident="clef.dis.place" usage="opt">
<desc>Records the direction of octave displacement to be applied to the clef.</desc>
</attDef>
</attList>
</classSpec>