<sch:rule context="@state">
<sch:assert role="warning" test="not(normalize-space(.) eq '')">@state attribute should
have content.</sch:assert>
<sch:assert role="warning" test="every $i in tokenize(., '\s+') satisfies substring($i,2)=//mei:genState/@xml:id">The value in @state should correspond to the @xml:id attribute of a genState
element.</sch:assert>
</sch:rule>
<classSpec ident="att.geneticState" module="MEI.genetic" type="atts">
<desc>Attributes that pertain to a genetic state.</desc>
<constraintSpec ident="check_changeState.targets" scheme="schematron">
<constraint>
<sch:rule context="@state">
<sch:assert role="warning" test="not(normalize-space(.) eq '')">@state attribute should
have content.</sch:assert>
<sch:assert role="warning" test="every $i in tokenize(., '\s+') satisfies substring($i,2)=//mei:genState/@xml:id">The value in @state should correspond to the @xml:id attribute of a genState
element.</sch:assert>
</sch:rule>
</constraint>
</constraintSpec>
<attList org="group">
<attDef ident="instant" usage="opt">
<desc>The @instant attribute is syntactic sugar for classifying a scribal intervention as
an
ad-hoc modification; that is, one which does not interrupt the writing process.</desc>
<datatype maxOccurs="1" minOccurs="1">
</datatype>
</attDef>
<attDef ident="state" usage="opt">
<desc>Points to the genetic state that results from this modification.</desc>
</attDef>
</attList>
</classSpec>