Поскольку XSD не покрывает мои потребности, я сейчас оцениваю Schematron.проверка на другие элементы, кроме разрешенных, кажется невозможной.Мне нужно проверить элементы, где @type="colorSet"
.. Для меня наиболее важны следующие тесты:
any other than this set of attributes
и
any other than this set of optional elements
во-вторых, как check if values are alphanumerical or digits
Кстати, допустимые параметры XML:
<defaultBgColor type="colorSet" r="255" g="255" b="255"/>
<defaultBgColor type="colorSet" r="255" g="255" b="255" a="100"/>
<paint type="colorSet">
<index>140</index>
</paint>
<paint type="colorSet">
<name>blue</name>
</paint>
Я хочу проверить;
- 'R', 'G', 'B' должно бытьприсутствует
- 'A' является необязательным, любой другой атрибут не допускается
- допускаются только подэлементы 'index' или 'name'
Это опытгде я застрял;
<!-- Don't know how to do the second assert? -->
<rule context="//*[@type='colorSet' and count(child::*) = 0]">
<assert test="@r and @g and @b" >One of R G B missing</assert>
<assert test="any other than @r,@g,@b,@a" >Invalid attribute </assert>
</rule>
<!-- is a test like isNumber possible? -->
<assert test="isNumber( text() )">Index is not a number</assert>
<!-- is a test like isAlpha possible? -->
<assert test="isAlpha( substring(text(),1) )">Invalid name</assert>
<!-- How to assert "any other than valid (optional) elements" -->
Любой комментарий или подсказка приветствуется!