Indicador do Tipo Complexo do XSD

Através do indicador, podemos controlar o uso de elementos no documento.

Indicador

Há sete indicadores:

Indicador de ordem:

  • Todos
  • Escolha
  • Sequência

Indicador de ocorrência:

  • maxOccurs
  • minOccurs

Indicador de grupo:

  • Nome do grupo
  • attributeGroup name

Indicador de ordem

O indicador de ordem é usado para definir a ordem dos elementos.

Indicador de all

<all> Indicador determina que os elementos filhos podem aparecer em qualquer ordem e que cada subelemento deve aparecer apenas uma vez:

<xs:element name="person">
  <xs:complexType>
    <xs:all>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:all>
  </xs:complexType>
</xs:element>

Comentário:Quando usar o indicador <all>, você pode definir <minOccurs> como 0 ou 1, mas pode definir apenas o indicador <maxOccurs> como 1 (que será explicado em breve).

Indicador de choice

<choice> Indicador determina que um subelemento pode aparecer ou pode aparecer outro subelemento (ouro ou prata):

<xs:element name="person">
  <xs:complexType>
    <xs:choice>
      <xs:element name="employee" type="employee"/>
      <xs:element name="member" type="member"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

Dica:Para definir que um elemento filho pode aparecer qualquer número de vezes, defina <maxOccurs> (que será explicado em breve) como unbounded (infinito).

Indicador de sequência

<sequence> Determina que os elementos filhos devem aparecer em uma ordem específica:

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Indicador de ocorrência

O indicador de ocorrência é usado para definir a frequência de ocorrência de um elemento.

Comentário:Para todos os indicadores "Order" e "Group" (any, all, choice, sequence, nome do grupo e referência do grupo), os valores padrão de maxOccurs e minOccurs são ambos 1.

Indicador maxOccurs

<maxOccurs> Indicador pode determinar a maior ocorrência de um elemento:

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="full_name" type="xs:string"/>
      <xs:element name="child_name" type="xs:string"/> maxOccurs="10"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

O exemplo acima indica que o elemento filho "child_name" pode aparecer no elemento "person" pelo menos uma vez (onde o valor padrão de minOccurs é 1) e no máximo 10 vezes.

Indicador minOccurs

<minOccurs> Indicador pode determinar a menor ocorrência de um elemento:

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="full_name" type="xs:string"/>
      <xs:element name="child_name" type="xs:string"/>
      maxOccurs="10" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

O exemplo acima indica que o elemento filho "child_name" pode aparecer no elemento "person" pelo menos 0 vezes e no máximo 10 vezes.

Dica:Para que a ocorrência de um elemento não seja limitada, use a declaração maxOccurs="unbounded":

Um exemplo real:

O arquivo XML chamado "Myfamily.xml":

<?xml version="1.0" encoding="ISO-8859-1"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Tony Smith</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>David Smith</full_name>
<child_name>Jogn</child_name>
<child_name>mike</child_name>
<child_name>kyle</child_name>
<child_name>mary</child_name>
</person>
<person>
<full_name>Michael Smith</full_name>
</person>
</persons>

O arquivo XML acima contém um elemento raiz chamado "persons". Dentro deste elemento raiz, definimos três elementos "person". Cada elemento "person" deve conter um elemento "full_name", e pode conter até 5 elementos "child_name".

Este é o arquivo schema "family.xsd":

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="persons">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="person" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="full_name" type="xs:string"/>
            <xs:element name="child_name" type="xs:string"/>
            minOccurs="0" maxOccurs="5"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>

Indicador Group

O indicador Group é usado para definir elementos de lote relacionados.

Grupo de elementos

O grupo de elementos é definido através da declaração group:

<xs:group name="组名称">
  ...
</xs:group>

Você deve definir um elemento all, choice ou sequence dentro da declaração group. O exemplo a seguir define um grupo chamado "persongroup", que define um grupo de elementos que devem aparecer na ordem exata:

<xs:group name="persongroup">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
    <xs:element name="birthday" type="xs:date"/>
  </xs:sequence>
</xs:group>

Depois de você ter definido o grupo, você pode chamá-lo em outra definição:

<xs:group name="persongroup">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
    <xs:element name="birthday" type="xs:date"/>
  </xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
  <xs:sequence>
    <xs:group ref="persongroup"/>
    <xs:element name="country" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

Grupo de atributos

O grupo de atributos é definido através da declaração attributeGroup:

<xs:attributeGroup name="组名称">
  ...
</xs:attributeGroup>

O exemplo a seguir define um grupo de atributos chamado "personattrgroup":

<xs:attributeGroup name="personattrgroup">
  <xs:attribute name="firstname" type="xs:string"/>
  <xs:attribute name="lastname" type="xs:string"/>
  <xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>

Após você ter definido o grupo de atributos, você pode chamá-lo em outra definição, assim:

<xs:attributeGroup name="personattrgroup">
  <xs:attribute name="firstname" type="xs:string"/>
  <xs:attribute name="lastname" type="xs:string"/>
  <xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
  <xs:complexType>
    <xs:attributeGroup ref="personattrgroup"/>
  </xs:complexType>
</xs:element>