XML Schema文档

XSD基础

XML Schema是以XML语言为基础,与DTD一样是负责定义和描述XML文档结构和内容模式。

DTD缺陷:

  • DTD是基于正则表达式的,描述能力有限
  • 它没有数据类型的支持,在大多数应用环境下能力不足
  • 约束能力不足,无法对XML实例文档做出更细致的语义描述
  • DTD的结构化不足,重用的代价较高
  • DTD并非使用XML作为描述手段,而它的构建和访问并没有标准的编程接口,无法使用标准的编程方式进行DTD维护
XSD正是对这些DTD缺陷而进行设计的,它的最重要的能力之一就是对数据类型的支持,例如int、float、boolean和date等

XML Schema的两种模式

1. Microsoft XMLSchema
Microsoft XMLSchema模式的Schema文件和其他的XML文件相似,后缀名为.xml,语法如下:
<Schema name="schema-name" xmlns="namespace">
	元素声明部分或属性声明部分
</Schema>
2.W3C XML Schema
W3C XML Schema模式的文档元素及属性等全部内容大多数以xsd:开头,也有的以xs:开头,文档后缀名为.xsd,并且根元素必须为xsd:schema,语法如下:
<xsd:schema xmlns:xsd="namespace">
	元素声明部分或属性声明部分
</xsd:schema>

XSD基本结构

一个完整的XSD文档可以由元素、注释、命名空间以及其他节点组成。
例如:
(1)首先创建XSD文件,命名为Node.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.example.com/name" xmlns="http://www.example.com/name"
	elementFormDefault="qualified">
	<xsd:element name="note">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="to" type="xsd:string" />
				<xsd:element name="from" type="xsd:string" />
				<xsd:element name="heading" type="xsd:string" />
				<xsd:element name="body" type="xsd:string" />
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>
(2)创建实例文档,命名为work.xml
<?xml version="1.0" encoding="UTF-8"?>
<note xmlns="http://www.example.com/name" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.example.com/name Node.xml">
	<to>Tove</to>
	<from>Jani</from>
	<heading>Reminder</heading>
	<body>Do not forget me this weekend!</body>
</note>

根元素 schema

可以通过三种形式中任一来声明一个schema
<xs xmlns="http://www.w3.org/2001/XMLSchema">
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

targetNamespace属性

XSD的主要目的是声明模式,这些模式由targetNamespace属性里指定的一个命名空间来表示,并不是所有的XML Schema模式都有一个targetNamespace属性。许多XSD定义的模式可以在另一个XSD中使用,或者把模式应用于不需要使用命名空间的文档里。使用方式如下:
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/name"
	xmlns:target="http://www.example.com/name">

指定元素限定方式的属性

Schema元素中利用elementFormDefault属性和attributeFormDefault属性指定元素的限定方式,因此可以修改元素的默认值。利用这两个属性,可以控制实例文档里元素和属性的默认限定值。在默认情况下,这两个属性的默认属性值是unqualified,它表示非限定的。

创建元素:element

语法如下:
<element name="" type="" ref="" form="" minOccurs="" maxOccurs="" default="" fixed="">
	</element>
  • name:元素的名称
  • type:元素值的类型,可以是内置的数据类型,也可以是其他类型
  • ref:对前一个属性定义的引用
  • form:利用这个属性可以覆盖元素限定属性的默认值
  • minOccurs:定义了element元素在父元素中出现的最少次数。默认值是1
  • maxOccurs:定义了element元素在父元素中出现的最多次数。默认值是1
  • default:初始默认值
  • fixed:不能修改和覆盖的属性固定值

声明simpleType元素

创建element元素之后需要添加内容,XSD中定义了一些描述元素内容和属性的数据类型,也可以自定义类型。声明简单类型元素时需要通过simpleType来实现,语法如下:
<simpleType name="" id="">
		<annotation | restriction | list | union >...
	</simpleType>
限定类型 restriction
在一个restriction声明中,必须使用base属性定义约束类型。这个属性的值是对全局simpleType定义或者对XSD内置数据类型的引用。例如:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:element name="note">
		<xsd:simpleType name="MyInteger">
			<xsd:restriction base="xsd:integer">
				<xsd:minInclusive value="10000"/>
				<xsd:maxInclusive value="99999"/>
			</xsd:restriction>
		</xsd:simpleType>
	</xsd:element>
</xsd:schema>
列表类型 list
使用list元素进行声明时,可以使用itemType属性定义列表项的类型,这个属性的值是一个全局的simpleType定义或者XSD类型的引用,这个引用是一个命名空间限定的值,因此它需要前缀。另外,在list元素声明时,还可以建立一个局部的simpleType定义说明itemType的内容。
例如:创建一个名称是MyContactList的全局simpleType类型,表示手机通讯录中可以使用的内容
<xsd:simpleType name="MyContactList">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="username"/>
			<xsd:enumeration value="qq"/>
			<xsd:enumeration value="email"/>
			<xsd:enumeration value="address"/>
		</xsd:restriction>
	</xsd:simpleType>
上述代码只允许使用一个枚举类型的单个值,如果想要使用多个值,可以创建一个新的类型,然后通过list声明定义一个列表:
<xsd:simpleType name="MyContactListType">
		<xsd:list itemType="MyContactList"></xsd:list>
	</xsd:simpleType>

声明complexType元素

与simpleType元素定义相反的是complexType元素,它用于定义复杂类型,通常也会被称作复合类型。
sequence元素
sequence元素要求组中的元素以指定顺序出现在包含元素中。语法如下:
<sequence id="" maxOccurs="" minOccurs="">
  • id:规定元素的唯一ID
  • maxOccurs:规定元素在父元素中可以出现的最大次数,默认值是1.如果不想对最大次数设置任何限制,可以使用字符串“unbounded”
  • minOccurs:规定元素在福严肃中可以出现的最小次数,默认值是1。如果要指定该any组是可选的,需要将属性值设定为0
choice元素
choice元素仅仅允许包含在该声明中的元素之一出现在包含的元素中。例如:
<xsd:element name="person">
		<xsd:complexType>
			<xsd:choice>
				<xsd:element name="employee" type="employee"/>
				<xsd:element name="member" type="member"/>
			</xsd:choice>
		</xsd:complexType>
	</xsd:element>

声明属性元素:attribute

语法如下:
<attribute name="" default="" fixed="" form="" id="" ref="" type="" use="">
		(annotation?,(simpleType?))
	</attribute>
  • default:可选项,规定属性默认值,default和fixed不可同时出现
  • fixed:可选项,规定属性默认值
  • form:可选项,规定属性格式
  • id:可选项,规定元素的唯一ID
  • name:可选项,规定属性的名称
  • ref:可选项,规定对指定属性的引用
  • type:可选项,规定是内置的数据类型或简单类型,type属性只能在内容不包含simpleType元素时出现
  • use:可选项,规定如果使用该属性,有三个值:optional(默认值,属性是可选的并且可以具有任何值)、prohibited(不能够使用属性)、required(属性是必需的)
例如:声明属性code,并限定值是大写字母A到Z中的两个字母
<xsd:attribute name="code">
		<xsd:simpleType>
			<xsd:restriction base="xsd:string">
				<xsd:pattern value="[A-Z][A-Z]"/>
			</xsd:restriction>
		</xsd:simpleType>
	</xsd:attribute>
还可以在复杂类型中一个已有的属性中声明一个属性。
<xsd:complexType name="someComplexType">
		<xsd:attribute ref="code"/>
	</xsd:complexType>

将XML Schema文档引入XML中

如果在XSD中定义了命名空间,那么XML文件中需要使用一下代码关联这个XSD文档:
<note xmlns="http://www.example.com/name" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.example.com/name Node.xml">
</note>

如果XSD文档中没有定义目标命名空间,只是使用了标准命名空间,则:
<note xmlns="http://www.example.com/name" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="http://www.example.com/name Node.xml">
</note>



































  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值