XML约束

前言;在xml技术里,能够编写一个文档来约束xml文档的书写规范,这称之为xml约束。为何咱们须要编写xml约束呢,由于xml是可扩展的标记语言,这致使xml的编写html

太过于自由了,这样的话再不少状况下是不行的url

1、DTD的定义

1.1DTD的定义

DTD是一种经常使用的约束技术,dtd文件的后缀名为.dtd,DTD文件有本身独立的语法规范。描述元素、属性和其余杂项在xml文档中的使用规则说明spa

1.2DTD的做用

验证xml文档是否是一个有效的xml文档。.net

有效:若是有个良构的xml文档知足的dtd的声明,那么这个文档是一个有效的xml文档hibernate

有效必定良构,可是良构不必定有效code

1.3DTD的分类

dtd分为三类,外部dtd和内部dtd还有混合的dtd。xml

1)内部的DTD:DTD和xml文档在一个文件中,例如:htm

<?xml version="1.0" encoding="UTF-8"?>
		<!DOCTYPE students[
			<!ELEMENT students (stu+)>
			<!ELEMENT stu (id,name,age)>
			<!ELEMENT id   (#PCDATA)>
			<!ELEMENT name (#PCDATA)>
			<!ELEMENT age  (#PCDATA)>
		]>
<students>
	<stu>
		<id>1</id>
		<name>tom</name>
		<age>20</age>
	</stu>
</students>

2)外部的DTD:DTD和xml文档不在同一个文件中。例如:对象

<?xml version="1.0" encoding="UTF-8"?>
		<!DOCTYPE students SYSTEM "../dtd/student.dtd">
		<students>
			<stu>
				<id>1</id>
				<name>tom</name>
				<age>20</age>
			</stu>
		</students>
		dtd/student.dtd文件:
		<!ELEMENT students (stu+)>
		<!ELEMENT stu (id,name,age)>
		<!ELEMENT id   (#PCDATA)>
		<!ELEMENT name (#PCDATA)>
		<!ELEMENT age  (#PCDATA)>

3)混合的DTD:既有外部DTD,又有内部DTD。例如:blog

<?xml version="1.0" encoding="UTF-8"?>
		<!DOCTYPE students SYSTEM "../dtd/student.dtd"[
			<!ELEMENT stu (id,name,age)>
			<!ELEMENT id   (#PCDATA)>
			<!ELEMENT name (#PCDATA)>
			<!ELEMENT age  (#PCDATA)>
		]>
		<students>
			<stu>
				<id>1</id>
				<name>tom</name>
				<age>20</age>
			</stu>
		</students>

		dtd/student.dtd文件:
		<!ELEMENT students (stu+)>

1.4外部DTD

引用外部dtd时分为两种;一种在本地和在一个公共的文件里

SYSTEM表示引用的dtd文件在本地,例如:

<!DOCTYPE students SYSTEM".../dtd/student.dtd">

public表示引用的dtd文件是一个公共的文件,

<!DOCTYPE 根元素 public" dtd文件的描述信息" "dtd文件的url">

例如:<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

2、DTD文件对xml文档中元素的约束

2.1元素约束

格式:<!ELEMENT 元素名(内容模式)>

内容模式:1)EMPTY:元素不能包含子元素和文本(空元素)

2)#PCDATA:能够包含任何字符数据,可是不能在其中包含任何子元素

3)ANY:元素内容为任意的,主要是使用在元素内容不肯定的状况下

4)修饰符:| + * ?,默认修饰符

|在列出的元素中选择一个

+该元素最少出现一次,能够出现不少次(1次或n次)

*表示该元素容许出现零次到任意屡次(0次到n次)

?该元素能够出现,但只能出现一次(0次到一次)

,对象必须按指定的顺序出现

默认修饰符:就是什么修饰符都没有加

例如:<!ELEMENT students(stu)>

<students>

  <!-- 这里只能出现stu元素一次-->

     <!--- stu元素不出现也验证不一样过-->

  <stu></stu>

<students>

2.2混合元素

子元素是任意类型,出现任意次数,而且没有出现顺序要求,元素中便可有文本数据也能够有子元素,例如

<!ELEMENT name(#PCDATE|a|b)*>

注:优先写#PCDATE,如(#PCDATE|a)*正确,(a|#PCDATE)错误。

3、属性约束

3.1格式要求

<!ATTLIST 元素名称

      属性名称   值类型  属性特色

      属性名称  值类型  属性特色

>

3.2属性类型

1)CDATA:属性值能够是任何字符(可包括数字和中文),例如:

dtd文件:
				<!ELEMENT students (stu*)>
				<!ELEMENT stu (#PCDATA)>
					<!ATTLIST stu 
						id   CDATA #REQUIRED
						name CDATA #REQUIRED
					>
				xml文件:
				<students>
					<stu id="1" name="tom"></stu>
				</students>

2)ID:属性值必须惟一,属性值必须知足xml命名规则

3)enumerated:(枚举值1|枚举值2|枚举值3....),属性值必须在枚举值中

3.3属性特色

1)#REQUIRED:元素的全部实例都必须有该属性

2)#IMPLIED:属性能够不出现

3)default-value:属性能够不出现,而且当它不出现的时候是有默认值的

4)#FIXED:属性能够不出现,可是若是出现的话就必定是指定的属性值

相关文章
相关标签/搜索