如何在XSD架构中为2个元素类型执行至少一次发生

问题描述:

我需要为该场景开发一个xsd。我有2个元素的类型Server1和Server2。 Server1和Server2可以有任意数量的发生,但至少有一个发生是强制的Server1或Server2。如何在XSD架构中为2个元素类型执行至少一次发生

<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架构元素与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> 
+0

它可能更好地使用引用,而不是嵌套元素(它使维护更加容易,从长远来看),但它绝对是正确的做法 – 2010-09-25 20:24:52

+0

感谢马捷,提供你所工作的解决方案。 – ravi 2010-09-26 08:08:04

我不知道它是通过任何手段最好的可能性,但一个可能性是Server1Server2是只需要输入姓名,然后创建这是一个联合的元素Server1Server2

<xsd:comlexType name=Server1> 
    <sequence> 
    // ... 
    </sequence> 
</xsd:complextype> 

<xsd:complexType name=Server2> 
// ... 
</xsd:complexType> 

<element name="Server"> 
    <xsd:union memberTypes = "Server1 Server2" /> 
</element>