DTD主要用来约束xml文件,也可去约束html,xhtml...
可以根据别人提供的dtd文件,写出相对应的xml文件
内部DTD:
<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<!DOCTYPE NET[ --文档类型定义声明的开始,根元素
<!ELEMENT NET (视频网站,社交网站)> --定义"NET"根元素下面的直接子元素
<!ELEMENT 视频网站 (优酷网,土豆网,爱奇艺)> --代表"视频网站"这个元素下具有那些子元素
<!ELEMENT 优酷网 (开发者,网址)>
<!ELEMENT 土豆网 (开发者,网址)>
<!ELEMENT 爱奇艺 (开发者,网址)>
<!ELEMENT 社交网站 (INSTAGRAM,FACEBOOK,TWITTER)>
<!ELEMENT INSTAGRAM (DEVELOPER,URL)>
<!ELEMENT FACEBOOK (DEVELOPER,URL)>
<!ELEMENT TWITTER (DEVELOPER,URL)>
<!ELEMENT DEVELOPER (#PCDATA)>
<!ELEMENT URL (#PCDATA)>
--代表是的是开发者这个元素下面已经没有子元素了,而且定义了此元素的内容是什么类型,(#PCDATA:文本类型)
]>
<NET>
<视频网站>
<优酷网>
<开发者>A Team</开发者>
<网址>http://www.youku.com</网址>
</优酷网>
<土豆网>
<开发者>B Team</开发者>
<网址>http://www.tudou.com</网址>
</土豆网>
<爱奇艺>
<开发者>C Team</开发者>
<网址>http://www.iqiyi.com</网址>
</爱奇艺>
</视频网站>
<社交网站>
<INSTAGRAM>
<DEVELOPER>AA Team</DEVELOPER>
<URL>http://www.instagram.com</URL>
</INSTAGRAM>
<FACEBOOK>
<DEVELOPER>BB Team</DEVELOPER>
<URL>http://www.facebook.com</URL>
</FACEBOOK>
<TWITTER>
<DEVELOPER>CC Team</DEVELOPER>
<URL>http://www.twitter.com</URL>
</TWITTER>
</社交网站>
</NET>
外部DTD方式:
1. XML文件:
<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<!DOCTYPE 网站 SYSTEM "net.dtd">
<NET>
<视频网站>
<优酷网>
<开发者>A Team</开发者>
<网址>http://www.youku.com</网址>
</优酷网>
<土豆网>
<开发者>B Team</开发者>
<网址>http://www.tudou.com</网址>
</土豆网>
<爱奇艺>
<开发者>C Team</开发者>
<网址>http://www.iqiyi.com</网址>
</爱奇艺>
</视频网站>
<社交网站>
<INSTAGRAM>
<DEVELOPER>AA Team</DEVELOPER>
<URL>http://www.instagram.com</URL>
</INSTAGRAM>
<FACEBOOK>
<DEVELOPER>BB Team</DEVELOPER>
<URL>http://www.facebook.com</URL>
</FACEBOOK>
<TWITTER>
<DEVELOPER>CC Team</DEVELOPER>
<URL>http://www.twitter.com</URL>
</TWITTER>
</社交网站>
</NET>
2. DTD文件:文件名为:net.dtd
<?xml version="1.0" encoding="gb2312"?>
<!ELEMENT NET (视频网站,社交网站)> --定义"NET"根元素下面的直接子元素
<!ELEMENT 视频网站 (优酷网,土豆网,爱奇艺)> --代表"视频网站"这个元素下具有那些子元素
<!ELEMENT 优酷网 (开发者,网址)>
<!ELEMENT 土豆网 (开发者,网址)>
<!ELEMENT 爱奇艺 (开发者,网址)>
<!ELEMENT 社交网站 (INSTAGRAM,FACEBOOK,TWITTER)>
<!ELEMENT INSTAGRAM (DEVELOPER,URL)>
<!ELEMENT FACEBOOK (DEVELOPER,URL)>
<!ELEMENT TWITTER (DEVELOPER,URL)>
<!ELEMENT DEVELOPER (#PCDATA)>
<!ELEMENT URL (#PCDATA)>
--代表是的是开发者这个元素下面已经没有子元素了,而且定义了此元素的内容是什么类型,(#PCDATA:文本类型)
#PCDATA(元素的类型):代表此元素下是纯文本,不能再有子元素的出现
+:代表此元素在xml文档中至少出现一次
*:代表此元素在xml文档中可以不出现,也可以出现多次
?:代表此元素在xml文档中可以不出现,也可以出现,但是出现的时候,只能出现一次
|:代表此元素在xml文档中是可选的 比如:男|女
用JS来验证XML:
<script>
function check(){
//创建xml文档解析器对象
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
//开启xml的校验
xmldoc.validateOnParse = "true";
//加载要载入的xml文档
xmldoc.load("zuoye.xml");
//获取错误的信息
alert(xmldoc.parseError.reason);
//获取错误信息出现的位置
alert(xmldoc.parseError.line);
}
</script>
元素属性基本语法
<!ATTLIST 元素名字
属性名 属性类型 属性的特点
属性名 属性类型 属性的特点
>
属性类型有:
CDATA [表示属性值可以是字符或者数字]
ID [属性值是唯一的,字母开头 ]
IDREF/IDREFS [id引用]
Enumerated [枚举]
ENTITY/ENTITIES [实体]
属性的特点
#REQUIRED 【该属性必须有】
#IMPLIED 【该属性可以有可以没有】
#FIXED value [该属性的值是固定值]
DEFAULT value [默认值]
如:
<!ATTLIST 学生
住址 CDATA#IMPLIED
学号 ID#REQUIRED
大佬 IDREFS#REQUIRED
>
注意:例中的定义关键字一定要大写,如DOCTYPE、ELEMENT、#PCDATA,且元素名称与数据类型之间也要有空格。