XML(二)约束

前端之家收集整理的这篇文章主要介绍了XML(二)约束前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
<?xml version="1.0" encoding="gbk" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
	<书>
		<书名>JAVA</书名>
		<作者>XXXXXX</作者>
		<售价>23333</售价>
	</书>
	
	<书>
		<书名>ANDROID</书名>
		<作者>XXXXXX</作者>
		<售价>23333</售价>
	</书>
	
	<书>
		<书名>ANDROID</书名>
		<作者>XXXXXX</作者>
		<售价>23333</售价>
	</书>
</书架>


什么是xml约束?

在xml技术里,可以编写一个文档来约束一个xml文档的写法,这称之为xml约束

为什么要使用xml约束?

使用xml进行数据交换的双方需要相互遵守的一套规则,否则双方无法进行数据交换


xml约束的作用


约束xml文档的写法
对xml进行校验

常见xml约束技术

xml DTD
xml Schema

DTD的语法
1.如和在xml中引入dtd
1.内部引入

直接在xml文件中写dtd

<!DOCTYPE 根元素名称 [dtd约束] >

2.外部引入

可以将dtd的约束内容写在外置的dtd文件中,文件后缀为.dtd
文件保存时必须使用utf-8编码保存
再在xml文件中使用
<!DOCTYPE 根元素名称 SYSTEM 文件位置 >
如果写的是SYSTEM 表明当前引入的dtd是存在于硬盘中的
<!DOCYPE 文档根结点 PUBLIC “DTD名称” “DTD文件的URL”
如果写的是PUBLIC 表示当前引入的dtd在网络中


2.dtd语法

1.元素

对元素的约束
<!ELEMENT 元素名称 元素约束条件>

约束条件:
存放类型:ANY/EMPTY
元素约束:子元素的列表,将可以包含的子元素用小括号括起来
子元素之间可以使用,进行分隔,表明子元素必须按顺序出现
还可以使用|进行分隔,表明子元素出现其中之一(只有一个)
#PCDATA 表明包含标签

+ 表示一次或多次
* 表示0次或多次
? 表示0次或1次

也可以使用小括号进行组的操作
<!ELEMENT MYFILE ((TITLE*,AUTHOR?,EMAIL)* | COMMENT))

2.属性
<!ATTLIST 元素名
属性属性类型 属性约束
属性名2 属性类型 属性约束
。。。。
>

属性类型:
CDATA:表示属性的值为普通字符串
ENUMERATED:属性的值是一个枚举列表中的值 种类(科技类|文学类|工具类|xxx) #IMPLIED
ID:表明属性的值在整个文档中都是唯一的 该属性的值只能由 字母下划线开始
ENTITY:

属性约束:
#required --- 表明当前属性是一个必须存在的属性,如果这样的属性不存在则在校验时会报错
#IMPLIED --- 表明当前属性是一个可选的属性,可以有,可以没有
#FIXED ‘固定值’ --- 表明当前属性具有一个固定值,不需要进行赋值,值为固定值,如果指定了其他值,校验报错
'默认值' --- 表明当前属性具有默认值,可以改


ENTITY(实体)
<!ENTITY> 就是对一大段内容的引用,简化代码的服用

参数实体
在dtd中引用的实体叫做参数实体
声明方式:<!ENTITY % 实体名称 实体内容>
引用方式:%实体名称



引用实体
在xml中使用的实体叫做引用实体
声明方式:<!ENTITY 实体名称 "实体内容" >
引用方式:&实体名称

book.xml

<?xml version="1.0" encoding="gbk" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
	<书>
		<书名>JAVA</书名>
		<作者>XXXXXX</作者>
		<售价>23333</售价>
	</书>
	
	<书>
		<书名>ANDROID</书名>
		<作者>XXXXXX</作者>
		<售价>23333</售价>
	</书>
	
	<书>
		<书名>ANDROID</书名>
		<作者>XXXXXX</作者>
		<售价>23333</售价>
	</书>
</书架>


book.dtd

<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>


利用script打开浏览器dtd校验

<html>
	<head>
		
	</head>
	
	<body>
		行号:
		<div id="l"></div><br />
		原因:
		<div id="r"></div>
		
		</body>
</html>

<script>
	var xmldoc = new ActiveXObject ("Microsoft.XMLDOM");
	xmldoc.validateOnParse=true;
	xmldoc.load("book2.xml");
	var line = xmldoc.parseError.line;
	var reason = xmldoc.parseError.reason;
	document.getElementById("l").innerHTML=line;
	document.getElementById("r").innerHTML=reason;
	
</script>

猜你在找的XML相关文章