如何驗證xhtml?
如何驗證 XHTML 意味著檢查文件是否符合兩層規則:XML 語法及其聲明的 DTD 或模式。 XHTML 1.0 是 HTML 4.01 在 XML 中的重新表述,因此文件可以是格式良好但無效的,就像 XHTML 1.0 Strict 中出現 <a target="_blank"> 時一樣。
驗證 XHTML 是在檢查文件是否同時符合兩層規則:
- XML 語法規則:正確嵌套的標籤、引號中的屬性、所有元素的強制結束(包括像
<br />這樣的空元素)、單根元素、一致的聲明編碼等。 - 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 管道
測試設備工業標準