Chuyển đến nội dung

Kiểm tra XML

Thẻ không khớp, entity chưa định nghĩa, namespace bị lỗi — được phát hiện và định vị chính xác bằng chính trình phân tích XML của trình duyệt. Không lưu trữ gì cả.

  • Không bao giờ lưu trữ
  • Không xếp hàng, không phải chờ
  • Không cần đăng ký, không watermark
Đã định dạng

Dán XML vào, nội dung sẽ được kiểm tra ngay khi bạn gõ.

Cách hoạt động

1

Dán XML

Hoặc thả file vào. Không có gì được gửi đi đâu cả.

2

Xem kết quả

Đúng cú pháp, kèm tóm tắt nội dung bên trong. Hoặc chính xác dòng và cột của lỗi đầu tiên.

3

Sửa và kiểm tra lại

Sửa ngay tại chỗ; kết quả cập nhật khi bạn gõ.

Hai mức yêu cầu khác nhau, và đây là mức nào

XML định nghĩa hai mức đúng đắn và người ta thường xuyên nhầm lẫn chúng. Đúng cú pháp (well-formed) nghĩa là tài liệu tuân theo cú pháp riêng của XML: một phần tử gốc, mọi thẻ đều được đóng, lồng nhau đúng, ký tự hợp lệ, dấu & và dấu ngoặc nhọn được thoát đúng cách, giá trị thuộc tính có dấu ngoặc kép, tên thuộc tính không trùng nhau trong một phần tử. Hợp lệ (valid) nghĩa là điều gì đó chặt chẽ hơn — tài liệu còn khớp với một schema cụ thể, với đúng các phần tử theo đúng thứ tự, mang đúng loại giá trị. Trang này kiểm tra mức thứ nhất. Mọi trình phân tích XML đều từ chối tài liệu không đạt mức này, nên đây là phép kiểm tra quyết định file có đọc được hay không.

Các lỗi đều dễ đoán. Dấu & chưa được thoát là phổ biến nhất, bỏ xa các lỗi khác — nó mở đầu một tham chiếu entity, nên một URL có query string dán thẳng vào một phần tử sẽ làm hỏng tài liệu. Dấu < đứng trần trong văn bản cũng vậy. Tiếp theo là thẻ không khớp hoặc không đóng, phần tử đóng sai thứ tự, hai phần tử gốc, và một ký tự điều khiển lạc chỗ mà XML hoàn toàn không cho phép dù nó nằm vô hình trong file.

DTD hay schema được cố ý không bao giờ tải về, và đó là một đặc tính bảo mật chứ không phải một tính năng còn thiếu. Một tài liệu XML có thể khai báo một entity bên ngoài, và trình phân tích nào phân giải nó sẽ đi lấy thứ mà nó trỏ tới — một file trên ổ đĩa, một địa chỉ trong mạng nội bộ. Đó là lỗ hổng XML External Entity, một trong những loại lỗi bị khai thác nhiều nhất, và cách phòng vệ trọn vẹn duy nhất là không phân giải chúng. Vì vậy ở đây không có gì kết nối ra bên ngoài, và cái giá phải trả là việc kiểm tra theo schema nằm ngoài phạm vi.

Thứ bạn nhận được là chính xác dòng và cột nơi việc phân tích dừng lại. Như với mọi trình phân tích, đó là nơi tài liệu không còn hợp lý nữa chứ không phải nơi có lỗi: một thẻ không đóng thường được báo ở thẻ đóng bất ngờ theo sau nó, có khi cách hàng trăm dòng. Vị trí được báo là chỗ để bắt đầu dò ngược lên trên, không phải chỗ để sửa.

Khi bạn cần công cụ khác

Để kiểm tra theo schema, xmllint là công cụ tham chiếu: xmllint --noout --schema schema.xsd file.xml cho XSD, --relaxng cho RELAX NG, và --noout --valid cho DTD. Nó báo mọi vi phạm thay vì dừng ở lỗi đầu tiên, đúng thứ bạn cần khi tài liệu thực sự sai chứ không chỉ bị hỏng cú pháp.

Với bất cứ thứ gì liên quan đến dữ liệu đầu vào không đáng tin, cấu hình trình phân tích quan trọng hơn công cụ kiểm tra. Hãy tắt rõ ràng việc phân giải entity bên ngoài và xử lý DTD trong ngôn ngữ bạn đang dùng — defusedxml trong Python, LIBXML_NONET trong PHP, chế độ xử lý an toàn (secure processing) trong Java — vì nhiều trình phân tích phổ biến vẫn phân giải entity theo mặc định, và mặc định chính là nơi lỗ hổng tồn tại.

Câu hỏi thường gặp

XML của tôi có bị lưu ở đâu không?

Không. Không có lệnh gọi máy chủ, không ghi log và không lưu trữ gì cả. Bạn có thể ngắt kết nối internet sau khi trang tải xong và nó vẫn hoạt động. Điều này quan trọng hơn bạn nghĩ: thứ người ta dán vào một công cụ định dạng online là phản hồi API, file cấu hình và nội dung lỗi, và chúng thường xuyên chứa token, dữ liệu khách hàng và tên máy chủ nội bộ.

“Đúng cú pháp” (well-formed) nghĩa là gì?

Nghĩa là tài liệu tuân theo các quy tắc riêng của XML: mọi thẻ đều được đóng, thẻ lồng nhau đúng thứ tự, có đúng một phần tử gốc, thuộc tính có dấu ngoặc kép, và mọi dấu & và < đều được thoát hoặc là một phần của entity hợp lệ. Đó là câu hỏi đầu tiên trong hai câu hỏi bạn có thể đặt ra với XML. Câu thứ hai — tài liệu có khớp với một schema cụ thể hay không — là chuyện riêng, và trang này không trả lời câu đó.

Công cụ có kiểm tra theo schema DTD hay XSD không?

Không. Công cụ này kiểm tra tài liệu có phải XML đúng cú pháp hay không, đó là lỗi mà phần lớn mọi người thực sự đang gặp. Kiểm tra theo schema cần file schema của bạn và một trình phân tích có chức năng kiểm tra, mà không trình duyệt nào có sẵn; nói rằng làm được việc đó ở đây đồng nghĩa với hoặc gửi tài liệu của bạn lên máy chủ, hoặc lặng lẽ không kiểm tra. Sự khác biệt này đáng để biết: một tài liệu có thể đúng cú pháp hoàn toàn mà vẫn sai so với schema của nó.

Những lỗi XML phổ biến nhất là gì?

Dấu & đứng trần là lỗi thường gặp nhất — & phải được viết thành &amp;, kể cả bên trong URL, nên một query string dán thẳng vào một phần tử sẽ làm hỏng tài liệu. Sau đó là: thẻ đóng sai thứ tự, hai phần tử gốc, một entity chưa được định nghĩa như &nbsp; (HTML có định nghĩa, XML thì không), và một tiền tố namespace được dùng mà chưa khai báo. Mỗi lỗi đều được gọi tên kèm vị trí.

HTML có phải là XML hợp lệ không?

Thường là không, và đó là chuyện bình thường chứ không phải lỗi. HTML cho phép thẻ không đóng như <br> và <li>, thuộc tính không có dấu ngoặc kép và dấu & đứng trần; XML không cho phép điều nào trong số đó. Nếu bạn cần HTML đồng thời là XML hợp lệ, đó là XHTML, và nó phải đóng mọi thẻ.

Có giới hạn dung lượng không?

Giới hạn là bộ nhớ khả dụng, chứ không phải mức trần do chúng tôi đặt ra. Tài liệu vài megabyte được định dạng tức thì; tài liệu rất lớn bị giới hạn bởi lượng dữ liệu có thể giữ cùng lúc, chứ không bởi bất cứ thứ gì từ phía chúng tôi.

Nên biết: Kiểm tra cú pháp, không kiểm tra theo schema. Công cụ kiểm tra thẻ đóng mở cân đối, lồng nhau đúng và ký tự hợp lệ, và bạn nhận được chính xác dòng và cột của lỗi đầu tiên. Kiểm tra theo DTD hay XSD đồng nghĩa với việc phải tải chúng về, tức là một yêu cầu mạng mà trang này cố ý không bao giờ thực hiện.

Đặt công cụ này lên website của bạn

Miễn phí cho mọi blog, trang lớp học hay bài viết hướng dẫn. Chỉ cần dán một đoạn mã là khách truy cập có thể dùng ngay trên trang của bạn.