XML约束
Posted yfstudy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML约束相关的知识,希望对你有一定的参考价值。
前言;在xml技术里,可以编写一个文档来约束xml文档的书写规范,这称之为xml约束。为什么我们需要编写xml约束呢,因为xml是可扩展的标记语言,这导致xml的编写
太过于自由了,这样的话再很多情况下是不行的
一、DTD的定义
1.1DTD的定义
DTD是一种常用的约束技术,dtd文件的后缀名为.dtd,DTD文件有自己独立的语法规范。描述元素、属性和其他杂项在xml文档中的使用规则说明
1.2DTD的作用
验证xml文档是不是一个有效的xml文档。
有效:如果有个良构的xml文档满足的dtd的声明,那么这个文档是一个有效的xml文档
有效一定良构,但是良构不一定有效
1.3DTD的分类
dtd分为三类,外部dtd和内部dtd还有混合的dtd。
1)内部的DTD:DTD和xml文档在一个文件中,例如:
<?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。例如:
<?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">
二、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.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:属性可以不出现,但是如果出现的话就一定是指定的属性值
以上是关于XML约束的主要内容,如果未能解决你的问题,请参考以下文章
在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途
xml Eclipse模板(代码片段)检查参数并最终抛出IllegalArgumentException