XML系列:(2)XML约束

前端之家收集整理的这篇文章主要介绍了XML系列:(2)XML约束前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_0@

1、什么是XML约束

@H_502_0@

在XML技术中,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。

@H_502_0@

2、XML语法和XML约束的区别

@H_502_0@

XML语法和XML约束的区别

作用 制定者
XML语法 规范XML文件的基本编写规则 由w3c组织制定的
XML约束 规范XML文件数据内容格式的编写规则 由开发者自行定义


@H_502_0@

3、常用的XML约束技术

@H_502_0@

DTD约束:语法相对简单,功能也相对简单。学习成本也低。

Schema约束:语法相对复杂,功能也相对强大。学习成本相对高!!!(名称空间)

@H_502_0@

4、XML约束DTD

@H_502_0@

DTD(Document Type Definition):文档类型定义

@H_502_0@

4.1、DTD与XML文件关联的三种方式

@H_502_0@

三种方式:内部DTD、引用本地DTD和引用公共DTD

@H_502_0@

4.1.1、内部DTD

@H_502_0@

语法:

<!DOCTYPE根元素[元素声明]>

实例:

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEnote[
<!ELEMENTnote(to,from,heading,body)>
<!ELEMENTto(#PCDATA)>
<!ELEMENTfrom(#PCDATA)>
<!ELEMENTheading(#PCDATA)>
<!ELEMENTbody(#PCDATA)>
]>
<note>
<to>美国</to>
<from>中国</from>
<heading>Hello</heading>
<body>主体</body>
</note>




@H_502_0@

4.1.2、引用本地DTD

@H_502_0@

语法:

<!DOCTYPE根元素SYSTEM"文件名">

实例:

文件note.dtd

<!ELEMENTnote(to,body)>
<!ELEMENTto(#PCDATA)>
<!ELEMENTfrom(#PCDATA)>
<!ELEMENTheading(#PCDATA)>
<!ELEMENTbody(#PCDATA)>

文件note.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEnoteSYSTEM"note.dtd">
<note>
<to>美国</to>
<from>中国</from>
<heading>Hello</heading>
<body>主体</body>
</note>




@H_502_0@

4.1.3、引用公共DTD

@H_502_0@

语法:

<!DOCTYPE根元素PUBLIC"DTD名称""DTD文件的URL">

实例:

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">



@H_502_0@

4.2、DTD语法

@H_502_0@


@H_502_0@

4.2.1、元素

@H_502_0@

元素声明使用下面的语法:

<!ELEMENT元素名称类别>

或者

<!ELEMENT元素名称(元素内容)>

类别:


元素的类别
类型 类型值 作用
标签 EMPTY 表示元素一定是空元素
普通字符串 (#PCDATA) 表示元素的内容一定是普通字符串(不能含有子标签
任何内容 ANY 表示元素的内容可以是任意内容包括标签

(元素内容)

顺序问题:<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)> 按顺序出现子标签

次数问题:

元素出现的次数
标签 含义 语法 示例
(空) 必须且只出现1次 <!ELEMENT 元素名称 (子元素名称)> <!ELEMENT note (message)>
+ 至少出现1次 <!ELEMENT 元素名称 (子元素名称+)> <!ELEMENT note (message+)>
* 0或n次 <!ELEMENT 元素名称 (子元素名称*)> <!ELEMENT note (message*)>
? 0 或1次 <!ELEMENT 元素名称 (子元素名称?)> <!ELEMENT note (message?)>



@H_502_0@

4.2.2、属性

@H_502_0@

语法:

<!ATTLIST元素名称属性名称属性类型默认值>

<!ATTLIST元素名称
属性名称属性类型默认值
属性名称属性类型默认值
...
>


默认值:

#required 属性值是必需的

#IMPLIED 属性不是必需的

#FIXED value 属性不是必须的,但属性值是固定的

属性类型:控制属性值的

CDATA :表示普通字符串

(en1|en2|..): 表示一定是任选其中的一个值,枚举值

ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头



@H_502_0@

4.2.3、实体

@H_502_0@

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。

在DTD定义中,通过定义一个实体,在 XML文件中就可以引用这个实体了。

语法:

<!ENTITY实体名称"实体的值">

实例:

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEPersons[
	<!ENTITYauthor"张三">
	<!ENTITYhome"中国北京">
]>
<Persons>
&author;住在&home;
</Persons>

展示:

wKiom1c0ztuyMDN-AAAI5q3ceQA951.png

注释: 一个实体由三部分构成: 一个和号 (&),一个实体名称,以及一个分号 (;)。

@H_502_0@

5、Schema

@H_502_0@

XML Schema 是基于 XML 的 DTD 替代者。

XML Schema 描述 XML 文档的结构。

XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。


@H_502_0@

5.1、XML Schema与DTD

@H_502_0@

XML Schema符合XML语法结构,本身就是XML文档

DTD文档的结构是平铺性,如果定义复杂的XML文档,很难把握各元素之间的嵌套关系, Schema相对文档结构较强

XML Schema比DTD支持更多的数据类型,并支持用户自定义数据类型

XML Schema定义约束的能力更强大

XML Schema 对命名空间进行支持


@H_502_0@

5.2、XML Schema快速入门

@H_502_0@

Schema本身就是一个XML文档,但扩展名为.xsd。

一个Schema文档通常称之为约束文档,遵循这个约束书写的XML文件称之为实例文档。

和XML文件一样,一个Schema文档必须有一个根节点,并且这个根节点的名称必须为schema。

编写一个Schema文档后,通常需要把这个文件中声明元素绑定到一个URI上, 在XML Schema技术中有一个专业术语来描述这个过程,即把XML Schema文档声明的元素绑定到一个名称空间上, 以后XML文件就可能通过这个URI(即名称空间)来告诉解析引擎,XML文档中编写的元素来自哪里,被谁约束。

5.3、实例


books.xsd(XML Schema文件)

<?xmlversion="1.0"encoding="UTF-8"?>
<schemaxmlns="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.rk.com/books"
	elementFormDefault="qualified">
	<!--targetNamespace表示当前XMLSchema文档中声明的元素定义在http://www.rk.com/books命名空间中-->
	<!--elementFormDefault="qualified"表示在此schema中声明过的元素必须被命名空间限定-->
	<elementname="books"><!--name属性表示当前元素的“标签名”-->
		<complexType><!--复杂元素,由complexType进行定义-->
			<sequence><!--子元素序列-->
				<elementname="book"maxOccurs="unbounded">
					<complexType>
						<sequence>
							<elementname="title"type="string"/><!--简单元素,由type属性进行定义-->
							<elementname="price"type="double"/>
							<any></any><!--后面可以任意写-->
						</sequence>
						<!--属性的声明一般写到sequence的后面-->
						<attributename="id"type="ID"use="required"/>
					</complexType>
				</element>
			</sequence>
		</complexType>
	</element>
</schema>


books.xml(XML实例文件)

<?xmlversion="1.0"encoding="UTF-8"?>
<rk:booksxmlns:rk="http://www.rk.com/books"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.rk.com/booksbooks.xsd">
	<!--xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"是固定写法,实例命名空间-->
	<!--xsi:schemaLocation此属性就有两个值:第一值是需要使用的命名空间;第二个值是该命名空间使用的XMLSchema的位置-->
<rk:bookid="b1">
<rk:title>往事并不如烟</rk:title>
<rk:price>49.9</rk:price>
</rk:book>
<rk:bookid="b02">
	<rk:title>XML学习</rk:title>
	<rk:price>23.2</rk:price>
</rk:book>
</rk:books>

booksWithDefaultNameSpace.xml(XML实例文件

<?xmlversion="1.0"encoding="UTF-8"?>
<booksxmlns="http://www.rk.com/books"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.rk.com/booksbooks.xsd">
	<!--使用默认命名空间格式:xmlns="http://www.rk.com/books"-->
	<!--一个XML实例文档只允许有一个默认命名空间-->
<bookid="b1">
<title>最后的贵族</title>
<price>49.9</price>
</book>
</books>

猜你在找的XML相关文章