Как применять абстрактные правила к атрибутам на Скиматроне?
Если я хочу иметь какое-то общее правило для узлов — например, текст узла должен быть числом с плавающей точкой, то это легко сделать с помощью абстрактных правил:
<sch:rule abstract="true" id="float-number">
<sch:assert test="matches(., '^(\+|-)?([0-9]+(\.[0-9]*)?|\.[0-9]+)([Ee](\+|-)?[0-9]+)?|(\+|-)?INF|NaN$')">Element <sch:value-of select="name(.)"/> must be decimal numeral with or without a decimal point, numeral in scientific (exponential) notation, or one of INF, +INF,'-INF or NaN literals</sch:assert>
</sch:rule>
И далее это правило можно применять к любому узлу:
<sch:rule context="/*/opioid/content">
<sch:extends rule="float-number"/>
<sch:extends rule="be-high"/>
</sch:rule>
Как можно красиво писать такие же правила для атрибутов??
Если писать напрямую:
<sch:rule context="/*/opioid/@content">
<sch:extends rule="float-number"/>
</sch:rule>
то это не работает (причина понятна, если посмотреть XSL, в который этот скиматрон компилируется).