web-dev-qa-db-fra.com

choix xsd pour plusieurs éléments

J'aimerais que mon fichier Xml ressemble à ce qui suit

<root>
<name>a</name>
<age>23</age>
</root>

 or 

<root>
<empno>b<empno>
<designation>ase</designation>
</root>

est-il possible de créer un schéma XML pour ce qui précède en utilisant un indicateur "choix"? quelque chose comme ci-dessous.

    <xsd:element name="root">
    <xsd:complexType>
    <xsd:choice>

    <xsd:element name="name"/>
    <xsd:element name="age" />

     or

    <xsd:element name="empno"/>
    <xsd:element name="designation" />

    <xsd:choice>

    </xsd:complexType>
    <xsd:element>

Est-il possible de faire comme ça?

19
Pradeep Achar

Oui, vous y êtes presque .. il manque juste un sequence .. Puisque c'est l'ensemble de champs que vous devez les encapsuler dans l'ordre ..

Ces balises de séquence seront sous <Choice> tag. Maintenant, l'un de ces ensembles de balises (séquence) sera validé.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root" type="root"/>
  <xs:complexType name="root">
    <xs:choice>
      <xs:sequence>
        <xs:element name="empno" type="xs:string" />
        <xs:element name="designation" type="xs:string" />
      </xs:sequence>
      <xs:sequence>
        <xs:element name="name" type="xs:string" />
        <xs:element name="age" type="xs:unsignedByte" />
      </xs:sequence>
    </xs:choice>
  </xs:complexType>
</xs:schema>

-------------------------------------------------- ---------------------------------------

Je voudrais ajouter une autre suggestion ici:

J'observe que vous utilisez des déclarations imbriquées .. comme ceci:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="trunk">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="branch1" type="xs:string"/>
              <xs:element name="branch2" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="other" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Préférez toujours l'utilisation de types personnalisés! Comme ça:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root" type="root"/>

  <xs:complexType name="root">
    <xs:sequence>
      <xs:element name="trunk" type="trunk"/>
      <xs:element name="other" type="xs:string" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="trunk">
    <xs:sequence>
      <xs:element name="branch1" type="xs:string"/>
      <xs:element name="branch2" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Cela améliore la lisibilité et vous pouvez réutiliser le complexType/simpleType ..

j'espère que ça aide..

35
InfantPro'Aravind'