Bộ xác thực XSD

Một tài liệu XML được tạo đúng cấu trúc vẫn có thể chứa lỗi: thiếu một phần tử bắt buộc, sử dụng loại dữ liệu không phù hợp cho một thuộc tính, hoặc các phần tử sắp xếp sai thứ tự. XSD (Định nghĩa Sơ đồ XML) mô tả chính xác hình thức mà tài liệu cần có. Công cụ kiểm tra này sẽ so sánh tài liệu XML với định nghĩa XSD tương ứng, thực thi công cụ kiểm tra sơ đồ XML của W3C và liệt kê tất cả các lỗi bằng cách chỉ rõ dòng mã, phần tử cụ thể cùng ràng buộc đã bị vi phạm.

Cách xác thực XML theo tiêu chuẩn XSD

  1. 1

    Dán cả hai tệp

    Một bên là XML, bên kia là sơ đồ XSD; nhiều sơ đồ có thể được dán ghép với nhau.

  2. 2

    Thực hiện kiểm tra hiệu lực

    Bộ phân tích cú pháp so sánh các phần tử, thuộc tính và kiểu với các tuyên bố sơ đồ.

  3. 3

    Xem xét các lỗi

    Mỗi vi phạm đều hiển thị đường dẫn của phần tử, ràng buộc dự kiến và giá trị thực tế.

  4. 4

    Sửa và xác thực lại

    Chỉnh sửa ngay tại chỗ và chạy lại mà không cần tải lại.

Những điều mà XSD kiểm tra

  • Tên các phần tử và số lượng tối thiểu/tối đa: bắt buộc, tùy chọn; số lần xuất hiện tối thiểu/tối đa.
  • Thứ tự các phần tử: tuần tự, lựa chọn, tất cả.
  • Tình trạng và loại thuộc tính: bắt buộc so với tùy chọn; giá trị mặc định; giá trị cố định.
  • Loại dữ liệu: xs:string, xs:integer, xs:decimal, xs:dateTime, xs:boolean, xs:anyURI, tùy chỉnh.
  • Các giới hạn: độ dài tối thiểu/tối đa, danh sách các giá trị có thể chọn, mẫu văn bản định dạng regex, giá trị tối thiểu/tối đa.
  • Tính toàn vẹn tham chiếu: xs:key, xs:keyref, xs:unique dùng để xác định các ràng buộc giữa các phần tử.

Các lỗi điển hình

Lỗi Yêu cầu XSD
Thiếu thành phần cần thiết <email> minOccurs="1"
Số lượng phần tử <phone> quá nhiều Vượt quá maxOccurs="2"
Giá trị “abc” không phải là số nguyên hợp lệ type="xs:integer"
Giá trị “[email protected]” không khớp với mẫu xs:pattern trên xs:string
Các thành phần không đúng thứ tự xs:sequence
Thành phần chưa xác định <foo> Không được khai báo trong sơ đồ
Khóa trùng lặp Vi phạm xs:unique

Chọn giữa XSD và các phương án thay thế

  • XSD: Tiêu chuẩn của W3C, mô tả chi tiết, mạnh mẽ và được hỗ trợ rộng rãi; là lựa chọn hàng đầu cho XML trong môi trường doanh nghiệp.
  • RELAX NG: cú pháp đơn giản hơn nhưng vẫn mang tính biểu đạt ngang bằng; được sử dụng phổ biến trong các định dạng tài liệu (DocBook, TEI).
  • Schematron: dựa trên các quy tắc, thực hiện các điều kiện XPath trên tài liệu; rất phù hợp với các quy tắc kinh doanh vượt ra ngoài phạm vi cấu trúc.
  • DTD: là định dạng cũ hơn và kém biểu đạt hơn nhiều; vẫn được sử dụng nhằm đảm bảo tính tương thích lịch sử với HTML.

Nhiều dự án sử dụng XSD để xác định cấu trúc và Schematron để thiết lập các quy tắc phức tạp liên ngành.

Những lỗi phổ biến

  • Các không gian tên phải trùng khớp. Nếu XSD khai báo không gian tên targetNamespace="http://example.com" nhưng file XML không sử dụng không gian tên đó thì quá trình xác thực sẽ thất bại với thông báo “không tìm thấy khai báo”.
  • xs:anyType không phải là giải pháp thần kỳ nào cả. Nó có thể khớp với mọi dữ liệu, nhưng hoàn toàn không cung cấp bất kỳ xác thực nào.
  • Các giá trị mặc định chỉ được áp dụng khi thuộc tính không có giá trị. Một giá trị trống rõ ràng (attr="") sẽ không nhận được giá trị mặc định.
  • Cách xử lý khoảng trắng khác nhau tùy theo loại: xs:string giữ nguyên khoảng trắng; xs:token co lại khoảng trắng; xs:normalizedString thay thế các tab hoặc dòng mới bằng khoảng trắng.

Quy trình gỡ lỗi

  1. Xác thực trước bằng cách không sử dụng sơ đồ dữ liệu (kiểm tra tính hợp lệ của cấu trúc dữ liệu). Sửa các lỗi phân tích.
  2. Sau đó, xác thực theo sơ đồ dữ liệu.
  3. Tập trung vào lỗi đầu tiên. Các công cụ kiểm tra XSD đôi khi xuất hiện nhiều lỗi liên tiếp; trong số đó, lỗi đầu tiên thường là lỗi có thể xử lý được dễ dàng nhất.
  4. Sử dụng XPath để xác định phần tử gây lỗi trong các tài liệu lớn.

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

Không. Hãy dán chúng riêng biệt hoặc tham chiếu đến sơ đồ thông qua mã xsi:schemaLocation trong file XML. Hầu hết các công cụ đều hỗ trợ cả hai phương pháp này.

Đúng vậy. Khi các thành phần từ các không gian tên khác nhau xuất hiện, mỗi thành phần đều cần có sơ đồ riêng. Hãy dán tất cả chúng vào; bộ kiểm tra sẽ tự động tải toàn bộ.

XSD 1.0. Engine libxml được dùng bên dưới không triển khai XSD 1.1, nên các tính năng riêng của 1.1 như khẳng định (assertions), kiểu điều kiện và nội dung mở không được áp dụng.

Không. XML và sơ đồ của bạn chỉ được gửi tới máy chủ để chạy xác thực cho riêng yêu cầu đó; sau đó chúng không được lưu trữ hay ghi nhật ký.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác