XML系列:(2)XML约束

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

1、什么是XML约束


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

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


XML语法和XML约束的区别

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


3、常用的XML约束技术


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

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

4、XML约束DTD


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

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


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

4.1.1、内部DTD


语法:

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




4.1.2、引用本地DTD


语法:

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




4.1.3、引用公共DTD


语法:

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

实例:

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



4.2、DTD语法



4.2.1、元素


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

<!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?)>



4.2.2、属性


语法:

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

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


默认值:

#required 属性值是必需的

#IMPLIED 属性不是必需的

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

属性类型:控制属性值的

CDATA :表示普通字符串

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

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



4.2.3、实体


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

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

语法:

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

实例:

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

展示:

wKiom1c0ztuyMDN-AAAI5q3ceQA951.png

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

5、Schema


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

XML Schema 描述 XML 文档的结构。

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


5.1、XML Schema与DTD


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

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

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

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

XML Schema 对命名空间进行支持


5.2、XML Schema快速入门


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>
原文链接:https://www.f2er.com/xml/295233.html

猜你在找的XML相关文章