【问题标题】:Make element required when attribute is set to some value using XSD (1.1)使用 XSD (1.1) 将属性设置为某个值时使元素成为必需
【发布时间】:2021-07-06 13:54:11
【问题描述】:

我有以下架构 (1.1)。我想要一个模式来检查一系列参数是否具有“1”类型的补充参数和“2”类型的可选参数。我使用替代品来做到这一点,因为不同的类型有不同的属性列表。

如何编写断言来检查类型 1 的参数是否是假的?

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified" vc:minVersion="1.1">
   <xs:element name="rule">
      <xs:complexType>
         <xs:sequence>
            <xs:element name="conditions" maxOccurs="unbounded">
               <xs:complexType>
                  <xs:sequence>
                     <xs:element name="condition" maxOccurs="unbounded" minOccurs="1">
                        <xs:complexType>
                           <xs:sequence>
                              <xs:element name="parameter" maxOccurs="unbounded" minOccurs="1">
                                 <xs:alternative test="@type = '1'" type="typeOne"/>
                                 <xs:alternative test="@type = '2'" type="typeTwo" />
                              </xs:element>
                           </xs:sequence>
                        </xs:complexType>
                     </xs:element>
                  </xs:sequence>
               </xs:complexType>
            </xs:element>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   <xs:complexType name="typeOne">
      <xs:attribute name="type" type="xs:string" use="required"/>
   </xs:complexType>
   <xs:complexType name="typeTwo">
      <xs:attribute name="type" type="xs:string" use="required" />
   </xs:complexType>
</xs:schema>

我使用了替代品,因为不同的类型有不同的属性列表。

【问题讨论】:

    标签: xsd xsd-1.1


    【解决方案1】:

    应该是这样的:

    <xs:element name="condition" maxOccurs="unbounded" minOccurs="1">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="parameter" maxOccurs="unbounded" minOccurs="1">
                    <xs:alternative test="@type = '1'" type="typeOne"/>
                    <xs:alternative test="@type = '2'" type="typeTwo" />
                </xs:element>
            </xs:sequence>
            <xs:assert id="type-1-mandatory" test="parameter[@type eq '1']"></xs:assert>
        </xs:complexType>
    </xs:element>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多