dtd是在开发中,对文件格式进行约束的文件。有一些公开的dtd,比如html开头会声明使用哪一个dtd规范。
一般在项目中,项目经理会提供dtd,要求开发人员按要求编写,所以需要能读懂dtd文件。
dtd=====文档类型定义
其实在之前html 的<!Doctype> 这个就是使用的dtd
dtd就是一个文档规范,可以作用于html xml xhtml等
它的主要用途是约束文件(xml\html\xhtml等)
约束技术主要有2种==》dtd和schema
<!DOCTYPE 根元素名 SYSTEM "写dtd的路径"/>
在默认情况下,浏览器不去检测,我们需要自己写代码测试(js)
创建xml文档解析器对象
var xmldoc=new Active XObject("Microsoft.XMLDOM");
开启xml校验
xmldoc.validateOnParse="true";
装载xml文档
xmldoc.load("book.xml");
获取错误信息,错误的原因。错误的行号
xmldoc.parseError.reason;
xmldoc.parseError.line
外部dtd <!DOCTYPE 班级 SYSTEM "01.dtd"> SYSTEM本地的文件路径 PUBLIC dtd的url公开的
内部dtd 内部的写法是<!DOCTYPE 班级 [外部dtd代码]>
通常 外部用的较多,内部偶尔用,内外部dtd用得少
语法<!ELEMENT NAME CONTENT>
关键字 元素名称 元素类型(大写)
#pcdata 代表的数据类型,有ANY EMPTY #PCDATA
EMPTY----该元素不能包含子元素和文本,但可以有属性(空元素)
ANY--------该元素可以包含任何在 dtd中定义的元素内容
#PCDATA-----可以包含任何字符数据,但是不能在其中包含子元素其他类型(组合)
dtd修饰符 用途 示例 示例说明
()-------用来给元素分组----------(古龙|金庸|梁羽生),(王朔|余杰),毛毛-----------分成3组
|-------在列出的对象中选择一个---(男人|女人)-----------------------------------表示女人或者男人,两者至少要选一个
+ ----该对象最少出现一次,可多次--(成员+)--------------------------------------表示成员最少有一个,可以是多个
*-----该对象出现0次到任意多次-----(爱好*)--------------------------------------爱好可以是0次到多次
?-----该对象可以出现0或1次--------(菜鸟?)-------------------------------------菜鸟可以出现或不出现,出现的话只能一次
,-----对象必须按指定的顺序出现----(西瓜、苹果、香蕉)---------------------------表示西瓜苹果香蕉必须出现,并且按这个顺序出现
元素属性列表说明
基本语法
<!ATTLIST 元素名字
属性名 类型 属性特点>
类型有:CDATA(表示属性值可以是字符或数字,中文) ID(表示属性值是唯一的,且以字母开头) IDRFF/IDRFFS(id 引用) ENUMERATED(枚举,属性值枚举类型) ENTITY/ENTITIES(实体)
属性特点:#REQUIRED 必须有
#IMPLIED 可有可无
#FIXED value 属性值是固定的
#Default value 如果不给值,默认值是什么
IDRFF/IDRFFS 这个表示他的值是从别的属性(文本中存在的,包括自己)引用过来的,IDRFF/IDRFFS的区别是一个是只能是单值,一个可以是引用多个值
ENTITY/ENTITIES(实体) 用于为一段内容创建一个别名,以后在xml中就可以使用别名应用这段内容了
感觉有点像程序中 $str="abcd"
在dtd中,一条<!ENTITY....>用于定义一个实体。实体分为2种类型,引用实体和参数实体。
在dtd中定义一个引用实体<!ENTITY 实体名 "内容"> ,在xml文件中使用引用实体 &实体名; 现在的浏览器大部分不支持引用实体
参数实体 <!ENTITY % 实体名 "内容"> 在dtd中定义,在dtd中引用 % 实体名;