2010-10-27 60 views
2

我有一個doctype聲明,如前兩行所示。這個html聲明是重複的

在第三行中,html標籤也有一些xmlns聲明和xml:lang和lang。是否有任何這些xmlns,xml:lang或lang重複?他們是否從文檔類型中複製任何內容?我想保留文檔類型並在第三行刪除所有聲明,如果它們是重複的。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

</html> 

回答

1

他們不重複。 XHTML的XML名稱空間和doctype聲明不一樣。 xml:langlang屬性都沒有。 XHTML 1.0 specification要求包括所有這些。

如由XHTML 1.0 Strict DTD描述的<html>元件的屬性列表如下:

<!ATTLIST html 
    %i18n; 
    id   ID    #IMPLIED 
    xmlns  %URI;   #FIXED 'http://www.w3.org/1999/xhtml' 
    > 

(其中%i18n是代表xml:langlangdir國際屬性內部實體,見下文)

注意第四行。它說xmlns是給定URI值的屬性,並且修復了該名稱空間URL的。這意味着,如果您省略該屬性或給它一個不同的名稱空間,那麼您的文檔就是無效嚴格的XHTML。

%i18n實體對應於這些屬性:

<!-- internationalization attributes 
    lang  language code (backwards compatible) 
    xml:lang language code (as per XML 1.0 spec) 
    dir   direction for weak/neutral text 
--> 
<!ENTITY % i18n 
"lang  %LanguageCode; #IMPLIED 
    xml:lang %LanguageCode; #IMPLIED 
    dir   (ltr|rtl)  #IMPLIED" 
    > 

lang屬性是爲了向後兼容(即HTML≤4.01),並xml:lang由XML 1.0(因此命名空間xml這裏看到)中所述。我不太確定xml:lang應該在lang之前的確切原因,但是鑑於XHTML僅僅是HTML「重寫」成XML語法(可以這麼說),所以它是有意義的。

如果未指定,dir屬性默認爲ltr(從左到右的文本),因此它不是必需的屬性。

1

要符合嚴格的XHTML標準爲您的DOCTYPE指示,你必須指定xmlns屬性。

文檔的根元素必須 指定使用 xmlns屬性[XMLNAMES] XHTML命名空間。用於XHTML的 名稱空間指示符是 「http://www.w3.org/1999/xhtml」。

參考點#3從http://www.w3.org/TR/xhtml11/conformance.html

+0

事實上,點#4 – developmentalinsanity 2010-10-27 10:11:40

+1

XHTML 1.0規範的鏈接是http://www.w3.org/TR/xhtml1/#docconf – BoltClock 2010-10-27 10:13:15

1

不,doctype和xml文檔的命名空間是不同的東西。

0

不,沒有像重複。

我們可以提到langxml:lang屬性。 xml:lang屬性的值優先於

xmlns如果Doctype處於嚴格模式,則該值必須存在。

1

如果您使用的是XHTML,那麼(根據這裏的其他評論),您需要指定所有這些東西。所有頁面都必須符合規範(如果XHTML頁面不符合規範,則XHTML頁面將失敗)。

但是你的問題表明你想簡化你的代碼。就目前來看,使用XHTML,你不能。但是,如果你切換到HTML5規範,那麼你可以大大簡化事情。

HTML5不需要複雜的文檔類型,也不需要任何XML名稱空間聲明。一個HTML5文檔應該是這樣的:

<!DOCTYPE html> 
<html> 
.... 
</html> 

我相信你會同意,這是更簡單,更易於閱讀。

好消息是,你可以做到這一點,而不會改變任何東西或失去任何功能。所有當前的瀏覽器都可以使用這些代碼,即使它們不明確與HTML5兼容。