繁体   English   中英

XSD:如果element具有特定值,则另一个应该是可选的

[英]XSD: If element has a specific value, another should be optional

我有一个XML文档,如:

<?xml version="1.0" encoding="UTF-8"?>
<html2filename xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/mapper.xsd">
    <htmlFile filename="N5670A">
        <variant>1</variant>
        <groups>
            <group>
                <name>Removing thermostat</name>
            </group>
            <someOtherElements>asdasd</someOtherElements>
        </groups>
    </htmlFile>
</html2filename>

现在元素“组” - >“组” - >“名称” - >应该有一个约束:如果“variant”的值为3,则应该是可选的。如果不是,则应该是必需的。

XSD可以处理吗? 如果有,怎么样?

XSD 1.1

xs:assert可以实现这样一个对值敏感的约束:

            <xs:assert test="(variant = 3) or groups/group/name"/>

在这里,它将在完整的XSD环境中验证您提供的XML:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
  vc:minVersion="1.1">
  <xs:element  name="html2filename">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="htmlFile">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="variant"/>
              <xs:element name="groups">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="group" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="name" minOccurs="0"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="someOtherElements"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="filename"/>
            <xs:assert test="(variant = 3) or groups/group/name"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
     </xs:complexType>    
  </xs:element>
</xs:schema>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM