Меня попросили изучить использование XML-схем версии 1.1 в среде MarkLogic для объединения утверждений Schematron в XML-схему.
Одна вещь, которую XSD 1.1 не указывает, - это использование пользовательских сообщений об ошибках в том виде, в каком они находятся в файлах Schematron.
Я обнаружил, что и Saxonica, и Xerces имеют расширения для решения этой проблемы.
Вот как Саксоника решает проблему:
<xs:element name="date">
<xs:simpleType>
<xs:restriction base="xs:date" xmlns:saxon="http://saxon.sf.net/">
<xs:assertion test=". lt current-date()"
saxon:message="The date must not be in the future"/>
<xs:pattern value="[^Z:]*"
saxon:message="The date must not have a timezone"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Вот как Xerces решает проблему:
<xs:simpleType name="myPrecisionDecimal">
<xs:restriction base="xs:decimal" xmlns:xerces="http://xerces.apache.org">
<xs:totalDigits value="6" />
<xs:fractionDigits value="4" />
<xs:assertion test="string-length(substring-after(string($value), '.')) ge 2"
xerces:message="minScale of this decimal number should be 2" />
</xs:restriction>
</xs:simpleType>
Также: Обрабатывает ли какое-либо из этих расширений что-либо вроде тегов <sch:name/>
или <sch:value-of/>
в Schematron assert tag <sch:assert test="..."/>
?