如何在XSD架构中强制执行至少一个2元素类型的出现

时间:2010-09-25 18:25:35

标签: xsd

我需要为场景开发一个xsd。其中我有2个类型的Server1和Server2类型。 Server1和Server2可能有任意数量的出现,但至少有一个出现是Server1或Server2必需的。

<element name="Server1">
  <complexType>
   <sequence>
    <element name="hostName" type="string"/>
    <element name="portNumber" type="integer"/>
    <element name="userName" type="string"/>
   </sequence>
  </complexType>
</element>
<element name="Server2">
  <complexType>
   <sequence>
    <element name="hostName" type="string"/>
    <element name="portNumber" type="integer"/>
   </sequence>
  </complexType>
</element>

由于 拉维

2 个答案:

答案 0 :(得分:3)

您可以将 choice 架构元素包装到 maxOccurs 属性设置为无界

样品:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <element name="root">
        <complexType>
            <choice maxOccurs="unbounded">
                <element name="Server1">
                    <complexType>
                        <sequence>
                            <element name="hostName" type="string"/>
                            <element name="portNumber" type="integer"/>
                            <element name="userName" type="string"/>
                        </sequence>
                    </complexType>
                </element>
                <element name="Server2">
                    <complexType>
                        <sequence>
                            <element name="hostName" type="string"/>
                            <element name="portNumber" type="integer"/>
                        </sequence>
                    </complexType>
                </element>
            </choice>
        </complexType>
    </element>
</schema>

答案 1 :(得分:0)

我不确定这是最好的可能性,但有一种可能性是Server1Server2只是类型名称,然后创建一个{{1}联合的元素1}}和Server1

Server2