Trình kiểm tra XML theo XSD
Kiểm tra một tài liệu XML theo một XSD và xem phần tử nào vi phạm quy tắc nào.
Công cụ này chạy trên máy chủ. Trình duyệt không thể xác thực theo XML Schema, nên tài liệu và lược đồ của bạn được gửi đến đây để kiểm tra, rồi bị loại bỏ. Chúng không được lưu trữ, không được ghi log và không bao giờ được đặt vào URL. Nếu tài liệu là bảo mật, hãy chạy xmllint trên máy của bạn — đó là cùng một bộ máy.
Dán một tài liệu và XSD mà nó phải tuân theo. Bạn nhận được kết luận và, với mỗi quy tắc bị vi phạm, phần tử, dòng và ràng buộc tương ứng; không chỉ mỗi chữ “không hợp lệ”.
Cách hoạt động
Có ba thứ có thể sai và chúng được báo riêng, vì chúng mang ý nghĩa khác nhau. Tài liệu có thể không phải XML hợp chuẩn (well-formed), khi đó chưa có gì được kiểm tra. Lược đồ có thể không phải XSD dùng được, khi đó cũng chưa có gì được kiểm tra. Hoặc cả hai đều đọc được và tài liệu đã vi phạm một quy tắc, đó là trường hợp duy nhất mà “không hợp lệ” cho bạn biết điều gì đó về dữ liệu của bạn.
Việc kiểm tra do libxml thực hiện, cùng bộ máy đứng sau gần như mọi công cụ XML, nên câu trả lời khớp với những gì bản build của bạn sẽ báo. Các thông báo chẩn đoán của nó được hiển thị nguyên văn, bằng tiếng Anh, vì chúng nêu tên phần tử và ràng buộc, và một lời diễn giải lại sẽ là phỏng đoán về ý của một thông báo mà chúng tôi không viết ra.
Công cụ này chạy trên máy chủ, và là công cụ duy nhất ở đây làm vậy. Không trình duyệt nào kiểm tra được theo XML Schema; không có API cho việc đó. Tài liệu và lược đồ của bạn được gửi đi, kiểm tra rồi loại bỏ: không bao giờ được ghi xuống đĩa, không bao giờ được ghi log và không bao giờ được đưa vào URL.
Có hai thứ bị từ chối thẳng. Tài liệu hoặc lược đồ khai báo DTD hoặc thực thể, vì DTD có thể yêu cầu trình phân tích đọc tệp trên máy chủ. Và lược đồ nhập hoặc bao gồm một tệp khác, vì ở đây không tải gì về: chỉ một phần của nó có thể được áp dụng, và một lần kiểm tra không đầy đủ được trình bày như đã đạt là câu trả lời tệ nhất mà một trình kiểm tra có thể đưa ra.
Ví dụ
| Trường hợp | Dữ liệu nhập | Kết quả |
|---|---|---|
| Giá trị sai kiểu | <price>cheap</price> | Element 'price': 'cheap' is not a valid value of the atomic type 'xs:decimal'. |
| Thiếu một thuộc tính bắt buộc | <book><title>V</title><price>1</price></book> | Element 'book': The attribute 'id' is required but missing. |
| Thiếu một phần tử con | <book id="b1"><title>V</title></book> | Element 'book': Missing child element(s). Expected is ( price ). |
Câu hỏi thường gặp
Tài liệu của tôi có rời khỏi trình duyệt không?
Có, và đây là công cụ duy nhất trên trang web mà điều đó đúng. Kiểm tra theo XML Schema không phải việc trình duyệt làm được, nên tài liệu và lược đồ được gửi đến đây, kiểm tra rồi loại bỏ. Chúng không được lưu trữ, không được ghi log và không được đưa vào URL nào. Nếu điều đó không chấp nhận được với tài liệu bạn có, hãy kiểm tra trên máy của bạn: xmllint làm đúng việc này với cùng bộ máy.
Tại sao lược đồ của tôi bị từ chối vì nhập một lược đồ khác?
Vì không có gì được tải về từ bất cứ đâu: không qua mạng, không từ hệ thống tệp. Một lược đồ chia thành nhiều tệp thì ở đây chỉ áp dụng được một nửa, và một trình kiểm tra kiểm tra nửa số quy tắc rồi nói “hợp lệ” đang đưa ra câu trả lời còn tệ hơn không trả lời. Hãy gộp các tệp lại, hoặc kiểm tra trên máy của bạn, nơi tệp kia tồn tại.
Tại sao DOCTYPE bị từ chối?
Vì DTD có thể khai báo một thực thể trỏ đến một tệp trên máy chủ, và đó là cách lâu đời nhất để biến một trình phân tích XML thành công cụ đọc tệp. Việc nạp thực thể cũng đã bị tắt ở đây, nên từ chối cấu trúc này là lớp khóa thứ hai chứ không phải duy nhất; nhưng dù sao đi nữa, một tài liệu được kiểm tra theo XSD không cần DTD.
Tại sao các thông báo lỗi lại bằng tiếng Anh?
Chúng đến từ libxml chứ không phải từ trang web này. Chúng trích dẫn tên các phần tử của bạn và ràng buộc bị vi phạm, đó là phần bạn cần, và dịch chúng nghĩa là diễn giải lại những chẩn đoán mà chúng tôi không viết ra; dịch sai một trong số đó còn tốn kém hơn đọc nó bằng tiếng Anh.
Phiên bản XML Schema nào?
XSD 1.0, phiên bản mà libxml triển khai. Các assertion và phép gán kiểu có điều kiện của XSD 1.1 không được hỗ trợ, nên một lược đồ 1.1 dùng chúng sẽ được báo là không đọc được thay vì bị kiểm tra âm thầm mà thiếu những quy tắc đó.
Lược đồ của tôi bắt đầu bằng encoding="utf-16" và bị từ chối. Tại sao?
Vì khai báo đó mô tả một tệp, còn những gì đến được trang này là những gì trình duyệt của bạn đã gửi, tức là UTF-8. libxml đã tin vào khai báo và từ chối đọc lược đồ. Giờ đây khai báo bảng mã bị bỏ qua mỗi khi nó không phải UTF-8, và kết quả có ghi rõ điều đó. Cùng tình huống với encoding="ISO-8859-1" trước đây còn tệ hơn, vì nó không báo lỗi: mọi ký tự có dấu bị làm hỏng âm thầm và tài liệu sau đó được kiểm tra theo một văn bản mà không ai viết ra.
Cần biết
- Chạy trên máy chủ. Tài liệu và lược đồ của bạn được gửi đi, kiểm tra rồi loại bỏ: không được lưu trữ, không được ghi log và không thể chia sẻ qua URL. Mọi công cụ khác trong danh mục này chạy trong trình duyệt của bạn; công cụ này thì không thể, vì không trình duyệt nào kiểm tra được XML Schema.
- Kết luận là của libxml, và câu chữ của mọi chẩn đoán cũng vậy. Chỉ XSD 1.0.
- Tối đa năm mươi vấn đề được liệt kê. Một tài liệu vi phạm một quy tắc cả nghìn lần thường là vì một lý do duy nhất.