美文网首页
什么是DTD?

什么是DTD?

作者: JetB丿 | 来源:发表于2017-09-19 01:45 被阅读0次

    /**
    **@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,手机和电脑同时下载,非商业用途的话软件免费,可以用安装了此软件的手机或电脑控制安装此软件的电脑(前提是电脑未关机且应用为开启状态),国外应该也是能用的,不能用别杀我。。。

    相关文章

      网友评论

          本文标题:什么是DTD?

          本文链接:https://www.haomeiwen.com/subject/ueiisxtx.html