XML —— DTD介绍
一、DTD介绍Document Type Definition; DTD是一种XML的约束方式,除了此种约束方式外,还有XSchema,XSchema比DTD的约束能力还要强,因此DTD正在逐渐淘汰; DTD的目的就是约束XML标签的写法;比如在我们struts2开发当中,编写struts.xml时,需要遵循的规则,就是通过DTD进行约束的,因此我们在开发当中通过Eclipse导入DTD文件,便于开发提示,如果在开发中开发人员不遵循DTD的规范,则会出现错误提示; <struts> <package name="" namespace="" extends=""> <action> </action> </package> </struts> XML约束的重要性:在编写XML时,对于XML进行约束是非常重要的,因为如果对于XML不约束,则会让开发人员很难掌握; 而DTD通常是由框架设计人员定义的,一般的开发人员只需要在XML中遵循DTD规范编写XML即可; 二、导入DTD如果要导入DTD,可以通过两种方式: (1)在XML中直接编写; (2)在专门的DTD文件中编写,然后在XML中通过特定的语句导入DTD文件; 1、在XML中直接编写,语法如下:
此种方式需要考虑两个情况: (1)如果是本地文件,则:
此处的URL指的是比如 "F:1.dtd" (2)如果是共享文件,则:
三、DTD语法在DTD中可以定义XML标签的顺序、个数,属性的值,实体; 1.XML元素定义语法如下: <!ELEMENT 元素名称 元素类型>//定义元素的类型,但是只能是 ANY(表示任意类型)或EMPTY(空元素); <!ELEMENT 元素名称 (元素内容)>//定义元素的内容,一定要加上(); 对于元素内容, ----可以定义子元素的名称,比如: <!ELEMENT 元素名称 (子元素1,子元素2,子元素3)> 表示3个子元素只能出现一次,并且按照此顺序出现; <!ELEMENT 元素名称 (子元素1|子元素2|子元素3)> 表示3个子元素中只能出现一个; 我们还可以定义子元素的个数,比如: (1)+:1次或多次;比如 (name+)表示此name元素只能出现1次或多次。 (2)?:0次或1次;比如(name?)表示此name元素只能出现0次或1次。 (3)*:0次或多次;比如(name*)表示此name元素任意出现几次。 (4)无:只能一次;比如(name)表示此name元素只能出现1次。 对于元素内容, ----也可以定义子元素内容的类型,比如#PCDATA,表示字符串; 举例:
从以上可以看出,DTD不可以定义数字等类型,此为DTD的缺陷; 2.XML属性定义语法如下: <!ATTLIST 标签名 属性名1属性类型属性说明 属性名2属性类型属性说明 > 属性类型可以是 (1)CDATA:最普通的字符串; (2)枚举,即(值1|值2|值3),需要括号 (3)ID:属性值需要以字母或下划线开头; 属性说明可以是: (1)#REQUIRED:必须设置; (2)#IMPLED:可选值,即此属性可以设置,也可以不设置; (3)#FIXED:固定值,通常语法为:#FIXED "固定值" (4)默认值; 举例:
3、XML实体定义实体类似于一个可重用常量,或者说是ant中的classpath,可以被引用; 语法如下: <!ENTITY 实体名称 "实体内容"> 引用实体语法: 注意:引用实体必须在XML中引用;
举例:
小知识点:根据XML自动生成DTD因为一般我们写的XML基本都是没有DTD的,如果要自己写DTD,又很麻烦,因此我们可以通过工具来自动生成:trang 功能:能够完成如下转换: (1)XML ---> DTD (2)XML --->XSchema (3)DTD--->XSchema
使用方法: java -jar trang.jar -I xml -O dtd input.xml output.dtd 即可; -I xml 表示输入为xml; -O dtd表示输出为dtd文件; input.xml表示输入文件; output.dtd表示输出文件; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |