У меня есть небольшая проблема с существующим XSD и дополнительным правилом, которое я хочу реализовать. Вот часть моего оригинального XSD:XSD со строгой комбинацией
<xs:complexType name="action">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="actid" type="xs:string" use="required" />
<xs:attribute name="acttyp" type="acttype" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="acttype">
<xs:restriction base="xs:string">
<xs:enumeration value="type1" />
<xs:enumeration value="type2" />
<xs:enumeration value="type3" />
<xs:enumeration value="type4" />
</xs:restriction>
</xs:simpleType>
Итак, вы видите, что существуют действия с различными типами действий, которые я определил. Теперь есть новое правило, если есть специальный actid, давайте возьмем «123», чем разрешен только тип1. Так, чтобы показать вам:
<action actid="123" acttype="type1"> = permitted
<action actid="234" acttype="type1"> = permitted
<action actid="234" acttype="type2"> = permitted
<action actid="123" acttype="type2"> = forbidden
Есть ли способ сделать это с XSD? Я не знаю, как объединить перечисление с этим правилом. Кто-нибудь может мне помочь?
Здравствуйте Kachna и спасибо за Ваш ответ, выглядит довольно хорошо для меня, но я получаю сообщение об ошибке с помощью XSD. s4s-elt-invalid-content.1: Содержимое «действия» недействительно. Элемент «assert» недействителен, неуместен или встречается слишком часто. Я думаю, что проблема заключается в нашей версии XSD-Parser. К сожалению, у нас нет поддержки XSD 1.1 Parser и Xpath 2.0 в нашем проекте, и я также не уполномочен изменять это. Есть ли способ сделать то же самое с XSD 1.0? – Arronax
AFAIk, это не может быть сделано с использованием XSD 1.0. – Kachna