В настоящее время я работаю над простой схемой со встроенными правилами схематрона. Одним из правил является проверка значения атрибута в конкретном элементе с именем @handle, который должен начинаться, например, с 12345. Но если у того же элемента есть другой необязательный атрибут с именем @remark, это правило не применяется, так как значение будет случайным.
У меня есть следующий xml:
<record handle="12345/random numbers"/>
<record handle="abcdef" remark="value"/>
И следующий фрагмент схемы:
<xs:element name="record">
<xs:annotation>
<xs:appinfo>
<sch:pattern id="handle check"
xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="@handle and not(../@remark)">
<sch:assert test="starts-with(.,'12345')">Handle-id, should start with 12345</sch:assert>
</sch:rule>
</sch:pattern>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="title" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="material" use="optional"/>
<xs:attribute name="remark" type="coll:remark" use="optional"/>
<xs:attribute name="handle" use="required">
</xs:attribute>
</xs:complexType>
</xs:element>
Но, используя это, я получаю ошибки компиляции таблицы стилей. Если я удаляю часть: а не (../@ примечание), она работает нормально и создает ошибки в элементах с @remark, как ожидалось, но я не могу исключить это, и если это вообще возможно.
Спасибо заранее, пытаясь помочь мне!