如何在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>
答
我不知道它是通过任何手段最好的可能性,但一个可能性是Server1
和Server2
是只需要输入姓名,然后创建这是一个联合的元素Server1
和Server2
。
<xsd:comlexType name=Server1>
<sequence>
// ...
</sequence>
</xsd:complextype>
<xsd:complexType name=Server2>
// ...
</xsd:complexType>
<element name="Server">
<xsd:union memberTypes = "Server1 Server2" />
</element>
它可能更好地使用引用,而不是嵌套元素(它使维护更加容易,从长远来看),但它绝对是正确的做法 – 2010-09-25 20:24:52
感谢马捷,提供你所工作的解决方案。 – ravi 2010-09-26 08:08:04