/**
**@author:APan
**/
在接触html时,网页的前面几行都有这么一行<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
其实这个就是对dtd文件的应用,那dtd文件有什么用处呢?
dtd定义:文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。(来自百度)
说白了dtd就是定义你的xml文件中可以有哪些元素,不可以有哪些元素,这些元素可以的值是什么类型的。但是我们直接查看xml文件他并不会报错,需要禁用js创建一个ActiveXObject对象,才可以对其进行校验。
接一下来我们详细看看DTD是如何工作的:(请注意区分文件后缀)
从代码开始Checkdtd.htm文件(检测xml是否规范)代码:
//开始
<html>
<head>
<title>测试dtd文档</title>
<meta http-equiv="content-type" content="text/html;charset=gb2312" />
<script type="text/javascript">
//创建一个xml解析器
var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
//开启校验功能
xmldoc.validateOnParse=true;
//指定对那个xml文件校验
xmldoc.load("myblog.xml");
//显示错误的信息
document.write("错误信息="+xmldoc.parseError.reason+"<br />");
document.write("错误的行号"+xmldoc.parseError.line+"<br />");
</script>
</head>
<body>
</body>
</html>
需要检测的xml文件(myblog.xml)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE class SYSTEM "mydtd.dtd">
<class>
<stu>
<name>Jimmy</name>
<sex>man</sex>
<age>19</age>
</stu>
<stu>
<name>Tommy</name>
<sex>women</sex>
<age>20</age>
</stu>
<stu>
<name>Ketty</name>
<sex>women</sex>
<age>21
</stu>
</class>
定义规范的dtd文件(mydtd.dtd)
<!ELEMENT class (stu+)>
<!ELEMENT stu (name,sex,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT age (#PCDATA)>
从htm代码开始说,这里第一句话的意思就是创建一个检测xml文件的对象,并命名为xmldoc变量,然后开启了检验的功能,再然后我们确定需要校验的xml文件,如果不在同一个目录下可以用相对路径或者绝对路径的方法找到xml文件。如果有错误那我们则把错误找出并现在在页面上,很容易理解。
接着我们看看xml文件,其中有句话是加载dtd的文件:<!DOCTYPE class SYSTEM "mydtd.dtd">其中定义的格式规范为:
<!DCTYPE 根元素名 SYSTEM "写dtd的路径">
<!DCTYPE 根元素名 [dtd元素内容]>
因为我们这里的根元素是class 且mydtd.dtd和myblog是同一个目录所以最后路径为:<!DOCTYPE class SYSTEM "mydtd.dtd">
最后分析一下mydtd.dtd文件:
元素的定义格式为:
<!ELEMENT 元素名称 (元素内容)>
如果是空元素则可以这样定义:
<!ELEMENT 元素名称 EMPTY>
这里我们看到在根元素下面有很多的stu元素,所以<!ELEMENT class (stu+)>
其中+的意思stu这个元素的个数为1到n如果是*则stu的元素的个数为0到n
其他具体的修饰符这里就不列举了(有需要的话去官网查一下)。
接着我们看到stu元素下面有name、sex、age 3个元素所以我们定义<!ELEMENT stu (name,sex,age)>
如果你去掉其中一个stu下面的一个age则用Checkdtd.htm会提示错误。我就不测试了。
对了,最后一句的意思是<!ELEMENT name (#PCDATA)>定义name这个元素的的数据类型可以为字符串。
PS:向媳妇儿推荐一款远程控制软件,Teamviewer,手机和电脑同时下载,非商业用途的话软件免费,可以用安装了此软件的手机或电脑控制安装此软件的电脑(前提是电脑未关机且应用为开启状态),国外应该也是能用的,不能用别杀我。。。