Как проверить, является ли значение атрибута A, тогда атрибут B является обязательным, иначе другой атрибут будет следующим в xsd 1.1?

Недавно я работал над xsd 1.1 и столкнулся с ситуацией, когда мне нужно проверить, имеет ли атрибут 'network_mode' значение 'Periodic', тогда другой атрибут '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.

Любое решение? Любая помощь будет оценена. Спасибо.

1 ответ

Вы можете сделать это либо с утверждениями, либо с условным присвоением типа.

С утверждениями:

test="not(@network_mode='Periodic') or exists('periodic_interval')" 

Или вы можете найти инверсию более интуитивным:

test="not(@network_mode='Periodic' and not(exists('periodic_interval')))

При условном присвоении типа вы пишете набор xs:alternative элементы, которые назначают один тип (с обязательным атрибутом), если атрибут имеет одно значение, и другой тип (с необязательным атрибутом), если он имеет другое значение.

Другие вопросы по тегам