XML Schema语法规则

根元素

<schema>元素是每一个XML Schema的根元素
例:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.example.org/SimpleXmlSchema" 
xmlns:tns="http://www.example.org/SimpleXmlSchema" 
elementFormDefault="qualified">
</xs:schema>

①第一行行表明schema中用到的元素和数据类型所来自的命名空间,同时表明来自该空间要加前缀xs:
②第二行显示被此schema定义的元素所在的命名空间
③第三行指出默认的命名空间
④第四行指出任何XML实例文档所使用的且在此schema中声明过的元素必须被命名空间限定

简易元素

仅包含文本的元素,不包含任何其他的元素或属性
语法:<xs:element name=" " type= " "/>
默认值:default = " "
固定值:fixed = " "
Tips:在定义简易元素时,数据类型可通过别名进行定义
<xs:element name=“simple” type=“myType”>
<xs:simpleType name=“myType”>
</xs:simpleType>

有关XSD限定(Facets,对文本范围内容进行约束)
①整型取值范围(0~100)

<xs:simpleType name="numberType">
  	<xs:restriction base="xs:integer">
   		<!-- 取值范围 -->
    		<xs:minInclusive value="0"/>
    		<xs:maxInclusive value="100"/>
  	</xs:restriction>
</xs:simpleType>

②模式匹配(取值为ABC、DEF中的某一个)

<xs:simpleType name="valueIN">
 	<xs:restriction base="xs:string">
  		<!-- 枚举匹配 -->
  		<xs:enumeration value="ABC"></xs:enumeration>
  		<xs:enumeration value="DEF"></xs:enumeration>
 	</xs:restriction>
</xs:simpleType>

③模式约束(小写字母或空格,最大长度15,类似于正则表达式)

<xs:simpleType name="model">
 	<xs:restriction base="xs:string">
  		<!-- 模式匹配及最大长度 -->
  		<xs:pattern value="([a-z ])*"></xs:pattern>
  		<xs:maxLength value="15"></xs:maxLength>
 	</xs:restriction>
</xs:simpleType>

属性

语法<xs:attribute name=“xxx” type=“yyy”/>
①属性的默认值和固定值 同简易元素
②可选和必选
缺省情况下,属性可选,使用use="required"规定为必选

复合元素

包含其他元素或属性的元素

此处比较重要的是simpleContent和complexContent区别
1)、simpleContent
①extension(base可为内置类型、simpleType引用)
可以为元素添加属性,也可直接为空,不添加属性,但无法使用Facets进行约束
②restriction(base属性必须是复杂类型数据引用)
可以使用Facets进行约束
2)、complexContent
①extension
配合指示器,在base基础上进行扩展
②restriction
修饰element或attribute,只能添加属性

实例
①复合空元素(只含属性)

<!-- 复合空元素(仅含属性) -->
<xs:complexType name="compEmpt">
 	<xs:attribute name="field" type="xs:integer"></xs:attribute>
</xs:complexType>

也可使用complexContent

②复合类型(只含元素)

<!-- 复合类型(仅含元素) -->
<xs:complexType name="compEle">
 	<xs:sequence>
  		<xs:element name="EleOne" type="xs:boolean"></xs:element>
  		<xs:element name="EleTwo" type="xs:string"></xs:element>
 	</xs:sequence>
</xs:complexType>

③仅含文本(可添加属性)

<!-- 仅含文本 -->
<xs:complexType name="onlyText">
 	<xs:simpleContent>
  		<xs:extension base="xs:integer">
   			<!-- 添加use标签使得属性必选 -->
   			<xs:attribute name="locate" type="xs:string" use="required"></xs:attribute>
  		</xs:extension>
	 </xs:simpleContent>
</xs:complexType>

④混合内容(可同时包括元素、文本、属性)

<xs:complexType name="fixContest" mixed="true">
 	<xs:sequence>
  		<xs:element name="fixOne" type="xs:string"></xs:element>
  		<xs:element name="fixTwo" type="xs:string"></xs:element>
 	</xs:sequence>
 	<xs:attribute name="att" type="xs:string"></xs:attribute>
</xs:complexType>

⑤对已有复杂类型进行扩展

<xs:element name="Comp">
 	<xs:complexType>
 		<xs:complexContent>
  			<xs:extension base="复杂类型">
    				<xs:sequence>
    				······
    				</xs:sequence>
   			</xs:extension>
  		</xs:complexContent>
 	</xs:complexType>
</xs:element>

复合类型指示器

1)、Order指示器(用于定义元素的顺序)
①ALL指示器
规定子元素按照任意顺序出现,每个子元素必须只出现一次
PS:可把minOccurs设为0或1,maxOccurs只能设为1
②Choice指示器
规定可出现某个子元素或可出现另外一个子元素(非此即彼)
③Sequence指示器
规定子元素必须按照特定的顺序出现

2)、Occurrence指示器(用于定义某个元素出现的频率)
PS:对于所有的“Order”和“Group”指示器,其中maxOccurs和minOccurs的默认值均为
①maxOccurs指示器
规定某个元素可出现的最大次数
如:

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

②minOccurs指示器
规定某个元素可出现的最小次数
Tips:若需使某个元素出现次数不受限制,使用maxOccurs=“unbounded”

3)、Group指示器
用于定义相关的数批元素
①元素组
<xs:group name=“组名称”>

</xs:group>
必须在 group 声明内部定义一个 all、choice 或者 sequence 元素
group 定义完毕以后,就可以在另一个定义中引用它了

<!-- 元素组 -->
<xs:group name="groupEle">
 	<xs:sequence>
  		<xs:element name="groupOne" type="xs:negativeInteger"></xs:element>
  		<xs:element name="groupTwo" type="xs:nonNegativeInteger"></xs:element>
 	</xs:sequence>
</xs:group>
<!-- 经过测试发现all指示器貌似无法用于元素组-->
<xs:complexType name="groupTest"> 
 	<xs:choice>
  		<xs:group ref="tns:groupEle"></xs:group>
  		<xs:element name="groupMain" type="xs:nonPositiveInteger"></xs:element>
 	</xs:choice>
</xs:complexType>

②属性组
<xs:attributeGroup name=“组名称”>

</xs:attributeGroup>

<!-- 属性组 -->
<xs:attributeGroup name="attGroup">
 	<xs:attribute name="oneAttr" type="xs:string"></xs:attribute>
 	<xs:attribute name="twoAttr" type="xs:normalizedString" default="shhh hhh"></xs:attribute>
</xs:attributeGroup>

<xs:complexType name="attGroupTest">
 	<xs:sequence>
  		<xs:element name="ele" type="xs:string"></xs:element>
 	</xs:sequence>
 		<xs:attributeGroup ref="tns:attGroup"></xs:attributeGroup>
 		<xs:attribute name="mainAttr" type="xs:token"></xs:attribute>
</xs:complexType>

元素替换(Element Substitution)

1)、元素替换(substitutionGroup属性)
先声明主元素,再声明次元素

<!-- 元素替换 -->
<xs:element name="aElement" type="xs:string"></xs:element>
<xs:element name="bElement" substitutionGroup="tns:aElement"></xs:element>

<xs:element name="mainEle">
 	<xs:complexType>
  		<xs:sequence>
   			<xs:element ref="tns:aElement"></xs:element>
  		</xs:sequence>
 	</xs:complexType>
</xs:element>

<xs:element name="secEle" substitutionGroup="tns:mainEle"></xs:element>

即数据可以为:
<mainEle> <aElement> abc <aElement> <mainEle>
或<secEle> <bElement> abc <bElement> <secEle>
或<secEle> <aElement> abc <aElement> <secEle>
或<mainEle> <bElement> abc <bElement> <mainEle>

PS:可替换元素的类型必须和主元素相同,或者从主元素衍生而来。假如可替换元素的类型与主元素的类型相同,就不必规定可替换元素的类型了。substitutionGroup 中的所有元素(主元素和可替换元素)必须被声明为全局元素。
Tips:全局元素: “schema” 元素的直接子元素!本地元素(Local elements)指嵌套在其他元素中的元素。

2)、阻止元素替换
使用block属性
例:
<xs:element name=“aElement” type=“xs:string” block=“substitution”></xs:element>

<any>和<anyAttribute>元素

1)、<any> 元素
使得可以通过未被 schema 规定的元素来拓展 XML 文档
例:

 <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
      <xs:any minOccurs="0"/>
 </xs:sequence>

可以编写一个Schema文档定义扩展元素,让一个XML文档遵守两个Schema
在头部指定:
xsi:SchemaLocation=“namespace1 filename1.xsd namespace2 filename2.xsd”>
2)、<anyAttribute> 元素
使得可以通过未被 schema 规定的属性来拓展 XML 文档!
例:

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

可以编写一个Schema文档定义扩展元素,让一个XML文档遵守两个Schema

PS:<any> 和 <anyAttribute> 均可用于制作可扩展的文档!
它们使文档有能力包含未在主 XML schema 中声明过的附加元素。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值