2013-03-23 73 views
0

所以在閱讀我跨越代碼什麼是DOCTYPE前SYSTEM「ex.dtd」

<!DOCTYPE ex SYSTEM "ex.dtd" [ 
    <!ENTITY foo "foo"> 
    <!ENTITY bar "bar"> 
    <!ENTITY bar "bar2"> 
    <!ENTITY % baz "baz"> 
]> 
<ex/> 

,並同時我理解它爲什麼這麼壞堅持成HTML時以下位傳來DOM level 2 spec found,爲什麼它仍然顯示]>還解析出HTML中的結束標記<ex/>

+0

鏈接到[相關部分](http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-412266927)更有用。 =) – hjpotter92 2013-03-23 05:09:06

+0

@DreamEater fix'd!^_- – 2013-03-23 05:11:15

回答

2

它根本不是HTML。這是一個相當普通的XML。形式上,「ex.dtd」是指應包含文檔類型定義(DTD)的外部資源(如另一個文件)。

當您在瀏覽器中將通用XML作爲HTML(例如,Content-Type:HTTP標頭中指定的text/html)時,可能會發生有趣的事情。瀏覽器嘗試將其解析爲HTML。

特別是,瀏覽器不讀取DTD,並且它們不按正式規範解析文檔類型聲明(DOCTYPE聲明) - 它們只是識別一組有限的特定文檔類型字符串。它們不識別包含DTD的「內部子集」的XML(和SGML)構造,即通過附加聲明來擴充外部DTD的方法,例如此處的實體聲明。他們希望doctype字符串在第一個ENTITY聲明中看到「<」時結束,忽略這些聲明,然後將「]>」作爲字符數據處理。

+0

完美,謝謝:) – 2013-03-23 05:54:18