DTD主要用来约束xml文件,也可去约束html,xhtml...
内部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>
<?xml version="1.0" encoding="gb2312"?> <!ELEMENT NET (视频网站,社交网站)> --定义"NET"根元素下面的直接子元素 <!ELEMENT 视频网站 (优酷网,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 [实体]
属性的特点
#IMPLIED 【该属性可以有可以没有】
#FIXED value [该属性的值是固定值]
DEFAULT value [默认值]
如:
<!ATTLIST 学生
住址 CDATA#IMPLIED
学号 ID#required
大佬 IDREFS#required
>
注意:例中的定义关键字一定要大写,如DOCTYPE、ELEMENT、#PCDATA,且元素名称与数据类型之间也要有空格。