跳至主要內容
Niquelao 西班牙文網頁無障礙與前端開發:深入解析 WCAG 標準、無障礙元件及 Firefox 擴充功能,並提供實際程式碼範例。

本網站部分連結為聯盟行銷連結:若您透過該連結購買,我們可能會獲得佣金,且不會增加您的額外費用。這絕不會影響我們的推薦建議。詳情請參閱我們的聯盟行銷聲明。 聯盟行銷聲明.

如何驗證xhtml?

如何驗證 XHTML 意味著檢查文件是否符合兩層規則:XML 語法及其聲明的 DTD 或模式。 XHTML 1.0 是 HTML 4.01 在 XML 中的重新表述,因此文件可以是格式良好但無效的,就像 XHTML 1.0 Strict 中出現 <a target="_blank"> 時一樣。

驗證 XHTML 是在檢查文件是否同時符合兩層規則:

  1. XML 語法規則:正確嵌套的標籤、引號中的屬性、所有元素的強制結束(包括像 <br /> 這樣的空元素)、單根元素、一致的聲明編碼等。
  2. DTD 規則或聲明的模式:存在哪些元素和屬性、它們可以出現在什麼上下文中以及允許哪些值。以下是 XHTML 1.0(嚴格、過渡、框架集)、XHTML 1.1、XHTML Basic 和 XHTML Modularization 的經典 DTD。

文件可以是格式良好的 XML,但仍然無效:例如,如果您在 XHTML 1.0 Strict 中使用 <a target="_blank">,語法是無可挑剔的,但該 DTD 中不存在 target 屬性。當有人看到錯誤但不明白原因時,「格式良好」和「有效」之間的這種區別是造成混亂的首要原因。

也可以方便地記住,XHTML 1.0 是由 W3C 定義的 XML 中 HTML 4.01 的重新表述。如今,它的實用價值是雙重的:它適用於仍然以“application/xhtml+xml”或“text/html”形式服務的遺留項目,並且它可以作為編寫乾淨標記的心理訓練。如果您想要有關如何驗證 XHTML 的完整規範上下文,W3C XHTML 1.0 規範 是主要來源。

值得使用的驗證器(以及何時使用哪一個)

不存在單一的「正確」驗證器。選擇取決於您是要驗證片段、生產頁面、整個網站還是已經是 XHTML5 的文件。

工具驗證內容理想之選主要限制
W3C 標記驗證服務 (validator.w3.org)XHTML 1.0/1.1、HTML4、HTML5透過 URL、檔案或直接貼上進行單次驗證現代的 “Nu Html Checker” 優先考慮 HTML5;舊版 DTD 需要手動選擇
Nu Html 檢查器 (vnu)HTML5 和 XHTML5新項目、本地驗證和 CI不驗證 XHTML 1.x 的經典 DTD
驗證程式語言環境(vnu.jar、tidy)關閉設定自動化、預先提交、管道需要安裝 Java 或二進位檔案;初始設定
xmllint格式良好的 XML 和相對於 DTD/XSD 的驗證檢查純 XML 層不了解 DTD 以外的 HTML 特定規則
navegador / IDE 擴充馬卡多·體內中間回饋描述Suelen usar motores desactualizados or incompletetos

W3C 標記驗證服務

對於那些想知道如何驗證 XHTML 的人來說,它仍然是一個起點。它支援三種模式:透過 URI 驗證、透過檔案上傳驗證和透過直接輸入驗證。對於經典的 XHTML,技巧在於「文件類型」下拉清單:如果您的文件透過「DOCTYPE」聲明了自己的 DTD,則驗證器會尊重它;如果沒有,你必須手動強制它。

相關: — IA 超級位置將在 48 小時內推動 WCAG.

許多人不知道的細節是:現代 W3C 驗證器依賴 Nu Html Checker,它理解 HTML5 和 XHTML5,但對舊 DTD 的優先順序較低。對於 XHTML 1.0 Strict,它仍然有效,但建議驗證結果是否反映了您期望的 DTD,而不是寬鬆的解釋。

Nu Html 檢查器 (vnu)

這是 W3C 本身內部使用的驗證器。它以 Web 服務、JAR 可執行檔和 Docker 映像的形式存在。它的一大優勢是您可以在本地運行並持續整合,如果您維護大型站點,這一點至關重要。對於充當「application/xhtml+xml」的 XHTML,vnu 會偵測寬容的 HTML 驗證器會允許通過的巢狀和屬性錯誤。

xmllint

如果您關心的是純 XML 層(例如,因為您從 XSLT 模板產生 XHTML),那麼「xmllint」是不可替代的。使用“—noout —valid documento.xhtml”,它會根據引用的 DTD 檢查格式正確性和有效性。它速度快、可編寫腳本並且不依賴網路。

值得一看: — 免費使用計劃的小工具.

在編輯器中驗證

VS Code、IDE 外掛程式和命令列工具的擴充功能可提供即時回饋。它們很方便,但往往落後於標準。將它們用作第一道防線,而不是唯一的驗證。

如何一步一步驗證XHTML

1. 正確聲明 DOCTYPE 和編碼

DOCTYPE 確定它根據哪些規則進行驗證。對於嚴格 XHTML 1.0:

<!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="es" lang="es">
<頭>
  <meta http-equiv="內容類型"
        內容=“application/xhtml+xml;字元集=UTF-8”/>
  <title>Ejemplo válido</title>
</頭>

這裡有兩個經典錯誤:忘記「xmlns」屬性(XHTML 中必須的)以及在「meta」中聲明與實際檔案不一致的編碼。驗證器會偵測兩者,但第二個有時僅顯示為損壞的字元。

2. 在驗證有效性前先檢查格式良好性

在使用 DTD 之前,請確保 XML 格式良好。 xmllint --noout archivo.xhtml 會在幾秒鐘內告訴您。如果這裡失敗,沒有 DTD 驗證器會幫助您:先關閉標籤,修正嵌套和轉義實體(&、<、>)。

3. 驗證 DTD

有了格式良好的文檔,將其傳遞給 W3C 驗證器或 vnu。不僅要檢查「有多少」錯誤,還要檢查「是什麼類型」的錯誤。單一嵌套錯誤可能會產生一系列次要錯誤,這些錯誤在修正第一個錯誤後就會消失。

4. 驗證整個網站,而不僅僅是首頁

一個常見的錯誤是驗證主頁並假設其餘部分都很好。範本、元件和動態產生的頁面通常會引入無效標記。自動化:使用腳本遍歷主要 URL 並在每個回應上執行 vnu。

相關: — 獲得相關經驗的專業認證.

5. 將驗證整合到流程中

手動驗證無法擴充。在管道(預先提交掛鉤、建置任務或 CI 作業)中新增驗證步驟,如果出現新錯誤,則該驗證步驟將會失敗。這樣,無效的標記就永遠不會到達生產環境。

錯誤解釋:你將反覆看到的錯誤

  • 「X 的結束標記被省略,但不允許省略結束標記」:典型的<li>、<p> 或<td> 不閉合。在 XHTML 中,一切都必須封閉。
  • 「沒有屬性 X」:該屬性在您的 DTD 中不存在。常見情況:某些元素中的「target」、「name」、XHTML 1.0 中的「data-*」屬性(不在經典 DTD 中)。
  • 「元素 X 未定義」:使用 DTD 未考慮的元素,通常是將 HTML5 標記複製到 XHTML 1.0 文件中。
  • 「此處不允許使用字元資料」:DTD 只需要元素的文字內容,或不轉義的 &。
  • 「對無法產生系統識別碼的實體 X 的引用」:未在 XML 中定義的命名 HTML 實體(例如,未聲明的「」)。在純 XHTML 中使用  ` 或宣告實體。

如何驗證 xhtml 的黃金法則:從上到下正確。第一個錯誤通常是原因;以下是其後果。

XHTML5:改變規則的細微差別

如果您提供 XHTML5(根據 HTML5 語法序列化的 XHTML),則規則會變更。不再有 DTD:一致性在 WHATWG HTML 規範和 W3C HTML 規範 中定義。正確的驗證器是Nu Html Checker,而不是經典的 DTD 驗證器。

值得一看: — 測試設備工業標準.

關於如何驗證 xhtml 需要注意的實際差異:

  • data-* 屬性在 XHTML5 中有效,但在 XHTML 1.0 中無效。
  • DOCTYPE 被簡化為 <!DOCTYPE html>。
  • 驗證是針對 HTML5 的「一致性檢查器」進行的,這在某些方面更允許,而在其他方面更嚴格(例如,在使用某些過時的元素時)。

在 XHTML 1.0 和 XHTML5 之間進行選擇不僅僅是技術問題:如果您的專案是新的,那麼具有 vnu 驗證的 XHTML5 是明智的選擇。如果您使用 DTD 維護遺留系統,請保留 XHTML 1.0 並根據其 DTD 進行驗證。

驗證與可訪問性:兩個不同的層面

一個常見的錯誤是認為有效的文件可以自動存取。它不是。驗證檢查語法和模式一致性;可訪問性根據 WCAG del W3C 進行評估,其中涵蓋感知、可操作性以及與輔助技術的兼容性。

也就是說,確實存在重疊:無效的標記通常意味著結構有缺陷(標題嵌套不良、列表不完整、沒有正確標籤的表單),這確實會影響可訪問性。如何驗證 XHTML 和其他文件的明智策略是首先驗證(消除結構噪聲),然後使用 axe、Lighthouse 或手動審查等工具可訪問性**。驗證是必要條件,但不是充分條件。

驗證 XHTML 時常出現的錯誤

在學習如何驗證 XHTML 時,請避免以下常見錯誤:

  • **僅驗證主頁。 ** 有問題的標記通常位於內部範本上。
  • **忽略編碼。 ** 宣告不當的「字元集」會產生幽靈錯誤。
  • **混淆格式正確與有效。 **它們是不同的層;按順序解決它們。
  • **使用錯誤的驗證器。 ** vnu 用於 XHTML5,DTD 用於 XHTML 1.x。
  • **在不閱讀第一個錯誤的情況下修復級聯錯誤。 ** 您浪費時間並修復症狀。
  • **沒有自動化。 ** 手動驗證無法在第二次衝刺中倖存下來。
  • **假設有效=可訪問。 **它們是具有不同目的的不同標準。

要點

  • 驗證 XHTML 涉及兩層:格式良好的 XML 和 與聲明的 DTD 或模式的一致性。
  • W3C 標記驗證服務 和 Nu Html Checker (vnu) 是如何驗證 xhtml 的參考工具; xmllint 涵蓋純 XML 層。
  • 對於 XHTML 1.0/1.1,使用針對 DTD 的驗證;對於XHTML5,使用 vnu 並忘記經典的 DTD。
  • 從上到下糾正錯誤:第一個錯誤通常會導致以下錯誤。
  • 自動化管道中的驗證;手動審核無法擴展。
  • 有效並不等於可訪問:它們是補充標準,而不是等同標準。

資料來源與進一步閱讀

  • XHTML — 維基百科:可擴展超文本標記語言 (XHTML) 是 XML 標記語言家族的一部分,它鏡像或擴展了廣泛使用的超文本標記的版本…
  • XHTML Basic — 維基百科:XHTML Basic 是一種基於 XML 的標記語言,專為計算能力有限的簡單用戶代理而設計,例如早期的移動電話、PDA、尋呼機和機頂盒…

常見問題

格式良好的 XHTML 與有效的 XHTML 有何不同?

格式良好的文件遵循 XML 的語法規則:閉合標籤、正確的巢狀以及引號中的屬性。此外,有效的文件遵循其聲明的 DTD 或模式:僅使用其上下文中允許的元素和屬性。您可能有一個格式良好但無效的文檔,例如,如果您使用 XHTML 1.0 Strict 中不存在的屬性。

2024 年驗證 XHTML 還有意義嗎?

是的,有兩個原因。首先,許多遺留項目繼續提供 XHTML 服務,並且需要保持有效,以免破壞 XML 模式。其次,驗證是一門檢測影響可訪問性和維護的結構錯誤的學科。如果您的專案是新的,它可能使用 HTML5 或 XHTML5,但驗證的習慣仍然很有價值。

我應該為 XHTML5 使用哪個驗證器?

Nu Html Checker (vnu),以 Web 服務、可執行 JAR 和 Docker 映像檔提供。現代 W3C 標記驗證服務使用並瞭解 HTML5 語法及其 XHTML 序列化是同一引擎。不要對 XHTML5 使用經典的 DTD 驗證器:它們無法識別「data-*」屬性或其他 HTML5 功能。

為什麼 W3C 驗證器會給我我不明白的錯誤?

因為許多錯誤都是由前一個錯誤造成的。不正確的嵌套可能會產生數十條輔助訊息。正確的策略是糾正第一個錯誤,再次驗證並重複。驗證器也可能應用 DOCTYPE 中聲明的 DTD;如果該 DTD 不是您所期望的,則錯誤將看起來是任意的。

我可以從命令列驗證 XHTML 嗎?

是的。如果您想知道如何通过 CLI 验证 XHTML,“xmllint —noout —valid archivo.xhtml”会根据 DTD 检查格式正确性和有效性。对于 HTML5/XHTML5,“vnu.jar archivo.xhtml”执行相同的操作。这两个选项都非常适合集成到构建脚本、预提交挂钩或持续集成作业中,其中手动验证无法扩展。

有效的 XHTML 網站會自動具備無障礙可用性嗎?

不會。驗證檢查語法和模式的一致性;無障礙可用性根據 WCAG 進行評估,涵蓋對比度、鍵盤導覽、替代文字或語義結構等方面。文件可能完全有效,但仍然不具備無障礙可用性。先進行驗證,再審核無障礙可用性:兩者是互補的層級。

常見問題

XHTML 的形式和 XHTML 的有效性有何不同?

格式良好的文件遵循 XML 的語法規則:閉合標籤、正確的巢狀以及引號中的屬性。此外,有效的文件遵循其聲明的 DTD 或模式:僅使用其上下文中允許的元素和屬性。您可能有一個格式良好但無效的文檔,例如,如果您使用 XHTML 1.0 Strict 中不存在的屬性。

¿ 2024 年 XHTML 是否有效?

是的,有兩個原因。首先,許多遺留項目繼續提供 XHTML 服務,並且需要保持有效,以免破壞 XML 模式。其次,驗證是一門檢測影響可訪問性和維護的結構錯誤的學科。如果您的專案是新的,它可能使用 HTML5 或 XHTML5,但驗證的習慣仍然很有價值。

¿ Qué validador debo usar para XHTML5?

Nu Html Checker (vnu),以 Web 服務、可執行 JAR 和 Docker 映像檔提供。現代 W3C 標記驗證服務使用並瞭解 HTML5 語法及其 XHTML 序列化是同一引擎。不要對 XHTML5 使用經典的 DTD 驗證器:它們無法識別資料屬性或其他 HTML5 功能。

¿ W3C 的驗證者是否發生錯誤?

因為許多錯誤都是由前一個錯誤造成的。不正確的嵌套可能會產生數十條輔助訊息。正確的策略是糾正第一個錯誤,再次驗證並重複。驗證器也可能應用 DOCTYPE 中聲明的 DTD;如果該 DTD 不是您所期望的,則錯誤將看起來是任意的。

¿ Puedo validar XHTML desde la linea de comandos?

是的。如果您想知道如何透過 CLI 驗證 XHTML,請使用 xmllint --noout --valid archivo.xhtml 檢查 DTD 的格式良好性和有效性。對於 HTML5/XHTML5,vnu.jar archivo.xhtml 執行相同的操作。這兩個選項都非常適合整合到建置腳本、預先提交掛鉤或持續整合作業中,其中手動驗證無法擴展。

XHTML 是否可以自動存取?

不會。驗證檢查語法和模式的一致性;可訪問性根據 WCAG 進行評估,涵蓋對比、鍵盤導航、替代文字或語義結構等方面。文件可能完全有效,但仍然無法存取。首先驗證,然後審核可訪問性:它們是互補的層。


Testea WCAG desde tu 管道

測試設備工業標準