XSD指示器

XSD指示器

作用:

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

指示器种类

Order 指示器:

  • All

  • Choice

  • Sequence

Occurrence 指示器:

  • maxOccurs

  • minOccurs

Group 指示器:

  • Group name

  • attributeGroup name


Order指示器

作用:

定义元素的顺序

All指示器

作用:

  • 规定子元素可以按照任意顺序出现

  • 且每个子元素必须只出现一次

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

(使用 <all> 指示器时,你可以把 <minOccurs> 设置为 0 或者 1,而只能把 <maxOccurs> 指示器设置为 1)

Choice指示器

<choice> 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼)

(choice本身为 n.选择)

<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>
Sequence指示器

<sequence> 规定子元素必须按照特定的顺序出现

(枚举出现)

<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指示器

作用:

定义某个元素出现的频率

注意:

所有的 "Order" 和 "Group" 指示器(any、all、choice、sequence、group name 以及 group reference),其中的 maxOccurs 以及 minOccurs 的默认值均为 1

maxOccurs指示器

规定某元素可出现的最大次数

<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>
minOccurs指示器

规定某元素可出现的最小次数

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

如需使某个元素的出现次数不受限制,请使用 maxOccurs="unbounded" 这个声明


实际的XML转XSD运用指示器的例子

<?xml version="1.0" encoding="ISO-8859-1"?>

<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
   <!--根元素是persons-->
   <!--根元素下又含有三个子元素person-->
   <!--每个子元素必须含有一个full_name元素,最多可包含5个child_name元素-->

<person>
 <full_name>Hege Refsnes</full_name>
 <child_name>Cecilie</child_name>
</person>

<person>
 <full_name>Tove Refsnes</full_name>
 <child_name>Hege</child_name>
 <child_name>Stale</child_name>
 <child_name>Jim</child_name>
 <child_name>Borge</child_name>
</person>

<person>
 <full_name>Stale Refsnes</full_name>
</person>

</persons>

根据以上条件转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 声明进行定义

<xs:group name="groupname">
...
</xs:group>

必须在 group 声明内部定义一个 all、choice 或者 sequence 元素

实例:

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

把 group 定义完毕以后,就可以在另一个定义中引用它

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

属性组

作用:

通过 attributeGroup 声明来进行定义

<xs:attributeGroup name="groupname">
...
</xs:attributeGroup>

实例:

定义了名为 "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>

定义完毕属性组之后,就可以在另一个定义中引用它

<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"/>
     <!--ref="内容"说明这个内容要在之前定义-->
 </xs:complexType>
</xs:element>

 

It's a lonely road!!!
原文地址:https://www.cnblogs.com/JunkingBoy/p/14657776.html