как применить хотя бы один случай для двух типов элементов в схеме XSD - PullRequest
1 голос
/ 25 сентября 2010

Мне нужно разработать 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 ]

3 голосов
/ 25 сентября 2010

Вы можете заключить их в выбор элемент схемы с атрибутом 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 голосов
/ 25 сентября 2010

Я не уверен, что это лучшая возможность с любой точки зрения, но одна возможность будет для Server1 и Server2 быть просто именами типов, а затем создать элемент, объединяющий Server1 и * 1004. *.

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

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

<element name="Server">
   <xsd:union memberTypes = "Server1 Server2" />
</element>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...