Недавно я работал над xsd 1.1 и столкнулся с ситуацией, когда мне нужно проверить, имеет ли атрибут «network_mode» значение «Периодический», тогда другой атрибут «period_interval» является обязательным для заполнения пользователем xml.
Я пытался с утверждением, но я смущен с этим.Я не знаю, как использовать его в xsd.
Мой xml
<profile network_mode="Periodic" periodic_interval="3600" sample_size="250">"Gyroscope"</profile>
и Мой XSD
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:Test.Namespace" xmlns="urn:Test.Namespace"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
vc:minVersion="1.1" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning">
...
<xsd:attribute name="network_mode" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Periodic" />
<xsd:enumeration value="Real-Time" />
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="periodic_interval">
<xsd:simpleType>
<xsd:restriction base="xsd:nonNegativeInteger">
<xsd:assertion test="if (@network_mode = 'Periodic' and not(exists(@periodic_interval)) ) then false() else true()" />
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
...
Здесь это дает мне ошибку при утверждении.Я использую XSD 1.1.
Есть ли обходной путь?Любая помощь будет оценена.Спасибо.