XSD 复合类型指示器

通过指示器,我们可以控制在文档中使用元素的方式。

指示器

有七种指示器:

Order 指示器:

  • All
  • Choice
  • Sequence

Occurrence 指示器:

  • maxOccurs
  • minOccurs

Group 指示器:

  • Group name
  • attributeGroup name

Order tagapagpahintulot

Order tagapagpahintulot ay ginagamit upang tukuyin ang pagkakasunod-sunod ng mga elemento.

All tagapagpahintulot

<all> tagapagpahintulot ay nagbibigay-daan sa pagtutukoy na ang mga sub-elemento ay maaaring lumabas sa anumang pagkakasunod-sunod, at ang bawat sub-elemento ay dapat lumabas ng isang beses lamang:

<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>

Komento:Kung ginagamit ang <all> tagapagpahintulot, puwedeng ilagay ang <minOccurs> bilang 0 o 1, at puwedeng ilagay lamang ang <maxOccurs> tagapagpahintulot bilang 1 (magiging mas lalong ilalatag sa susunod ang <minOccurs> at <maxOccurs>).

Choice tagapagpahintulot

<choice> tagapagpahintulot ay nagbibigay-daan sa pagtutukoy na ang isang sub-elemento o anong ibang sub-elemento (ng hindi ito lamang) ay maaaring lumabas:

<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>

Mga paalala:Kung gusto mong itakda na ang paglabas ng sub-elemento ay anumang beses, ilagay ang <maxOccurs> (magiging mas lalong ilalatag sa susunod) bilang unbounded (walang hanggan na beses).

Sequence tagapagpahintulot

<sequence> ay nagbibigay-daan sa pagtutukoy na ang mga sub-elemento ay dapat lumabas sa tiyak na pagkakasunod-sunod:

<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>

Occurrence tagapagpahintulot

Occurrence tagapagpahintulot ay ginagamit upang tukuyin ang pagkakaroon ng isang elemento.

Komento:Para sa lahat ng "Order" at "Group" tagapagpahintulot (any, all, choice, sequence, group name at group reference), ang default na halaga ng maxOccurs at minOccurs ay 1.

MaxOccurs tagapagpahintulot

<maxOccurs> tagapagpahintulot ay nagbibigay-daan sa pagtutukoy ng pinakamataas na bilang ng pagkakaroon ng isang 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>

Ang halimbawa na ito ay nagpapakita na ang sub-elemento "child_name" ay maaaring lumabas sa elemento "person" ng hindi bababa sa isang beses (kung minsan ang default na halaga ng minOccurs ay 1), hanggang sa 10 beses.

MinOccurs tagapagpahintulot

<minOccurs> tagapagpahintulot ay nagbibigay-daan sa pagtutukoy ng pinakamaliit na bilang ng pagkakaroon ng isang 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>

Ang halimbawa na ito ay nagpapakita na ang sub-elemento "child_name" ay maaaring lumabas sa elemento "person" ng hindi bababa sa 0 beses, hanggang sa 10 beses.

Mga paalala:Kung gusto mong hindi magbabawas ang bilang ng pagkakaroon ng isang elemento, gamitin ang pahintulot na maxOccurs="unbounded":

一个实际的例子:

名为 "Myfamily.xml" 的 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>

上面这个 XML 文件含有一个名为 "persons" 的根元素。在这个根元素内部,我们定义了三个 "person" 元素。每个 "person" 元素必须含有一个 "full_name" 元素,同时它可以包含多至 5 个 "child_name" 元素。

这是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>

Group 指示器

Group 指示器用于定义相关的数批元素。

Grupo ng elemento

Ang grupo ng elemento ay tinatag sa pamamagitan ng pahayag ng group:

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

Kailangan mong magtatag ng isang all, choice o sequence na elemento sa loob ng pahayag ng group. Ang sumusunod na halimbawa ay nagtatag ng isang group na may pangalan na "persongroup", na nagtatag ng isang grupo ng mga elemento na dapat lumitaw sa eksaktong pagkakasunod-sunod:

<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>

Pagkatapos na iyong nagawa na magtatag ng group, maari mo nang magsalita ng iyon sa ibang pagtatag:

<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 ng attribute

Ang grupo ng attribute ay tinatag sa pamamagitan ng pahayag ng attributeGroup:

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

Ang sumusunod na halimbawa ay nagtatag ng isang grupo ng attribute na may pangalan na "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>

Pagkatapos na iyong nagawa na magtatag ng grupo ng attribute, maari mo nang magsalita ng iyon sa ibang pagtatag, tulad nang ito:

<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>