什么是DTD?

/**
**@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創(chuàng)建一個ActiveXObject對象,才可以對其進行校驗。
接一下來我們詳細看看DTD是如何工作的:(請注意區(qū)分文件后綴)
從代碼開始Checkdtd.htm文件(檢測xml是否規(guī)范)代碼:

//開始
<html>
<head>
<title>測試dtd文檔</title>
<meta http-equiv="content-type" content="text/html;charset=gb2312" />
<script type="text/javascript">
//創(chuàng)建一個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>

定義規(guī)范的dtd文件(mydtd.dtd)

<!ELEMENT class (stu+)>
<!ELEMENT stu (name,sex,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT age (#PCDATA)>

從htm代碼開始說,這里第一句話的意思就是創(chuàng)建一個檢測xml文件的對象,并命名為xmldoc變量,然后開啟了檢驗的功能,再然后我們確定需要校驗的xml文件,如果不在同一個目錄下可以用相對路徑或者絕對路徑的方法找到xml文件。如果有錯誤那我們則把錯誤找出并現在在頁面上,很容易理解。

接著我們看看xml文件,其中有句話是加載dtd的文件:<!DOCTYPE class SYSTEM "mydtd.dtd">其中定義的格式規(guī)范為:
<!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,手機和電腦同時下載,非商業(yè)用途的話軟件免費,可以用安裝了此軟件的手機或電腦控制安裝此軟件的電腦(前提是電腦未關機且應用為開啟狀態(tài)),國外應該也是能用的,不能用別殺我。。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,649評論 18 399
  • 1. XML簡介 以下內容來自于http://www.w3school.com.cn/xml 基本知識 XML 和...
    WebSSO閱讀 2,092評論 1 7
  • 一. Java基礎部分.................................................
    wy_sure閱讀 4,011評論 0 11
  • callback: get value:
    mimikiy閱讀 190評論 0 0
  • 今天戴老師讓我們去操場撿樹葉,隋君卓和另外一個女生是撐垃圾袋的,楊尚峰負責掃學校門口的落葉,我們去撿落葉。戴老...
    M張皓軒M閱讀 399評論 0 0

友情鏈接更多精彩內容