Tại sao loại XML an toàn?


30

Tại sao họ nói rằng XML cung cấp an toàn kiểu và nó được thể hiện như thế nào trong chính XML?

Làm thế nào nó khác với JSON (ví dụ) mà (theo tôi hiểu) không phải là loại an toàn?

Câu trả lời:


36

Do Định nghĩa Lược đồ XML (XSD).

Với XML, bạn có thể có một tệp bổ sung mô tả lược đồ. Ví dụ, nó chỉ ra rằng phần tử /a/blà một mảng và chứa từ 1 đến 10 phần tử hoặc phần tử đó /a/clà một số nguyên. Bạn có thể tìm thấy một ví dụ về XSD tại đây .

Xác thực một tệp XML đã cho thông qua XSD được hỗ trợ bởi nhiều ngôn ngữ . Ví dụ, một ứng dụng .NET có thể yêu cầu một tệp XML từ một nguồn không đáng tin cậy và kiểm tra xem nó có khớp với XSD không ; sau đó, nó có thể lưu nó vào cơ sở dữ liệu Microsoft SQL Server, có thể lần lượt chứa XSD và kiểm tra lại (để đảm bảo rằng bất kỳ máy khách nào có quyền truy cập vào cơ sở dữ liệu đều tuân thủ).

XSD không phải là ngôn ngữ duy nhất.

  • Nếu bạn đã thực hiện phát triển web, bạn chắc chắn đã nghe về ngôn ngữ đánh dấu trong Định nghĩa loại tài liệu (DTD), định nghĩa cấu trúc của XML và được sử dụng đặc biệt là để xác thực nội dung liên quan đến HTML. Mặc dù nó không thể thực hiện tất cả những gì XSD có thể, chẳng hạn như đảm bảo rằng một phần tử hoặc thuộc tính chứa số nguyên, nó vẫn có thể thực hiện một loạt các kiểm tra cấu trúc.

  • THƯ GIÃN NG có một lợi ích là tương đối đơn giản so với các ngôn ngữ khác và có thể được viết ở dạng gọn hơn so với XML.

  • Schematron là một ngôn ngữ xác thực dựa trên quy tắc khác của Wikipedia để đưa ra các xác nhận về sự hiện diện hoặc vắng mặt của các mẫu trong cây XML ( Wikipedia ) và trình bày một cách tiếp cận hơi khác, dựa trên các xác nhận XPath.

Những sáng kiến ​​tương tự cho JSON không phổ biến (đặc biệt, tôi tin rằng, trong thế giới doanh nghiệp tập trung vào Microsoft). Một trong những lý do là JSON được dành cho các tình huống trong đó cấu trúc dữ liệu khá cơ bản (ví dụ: có thể được biểu thị dưới dạng cây, không cần thuộc tính) và không nhất thiết phải được xác nhận. Một ví dụ tuyệt vời là API REST được sử dụng bởi ngôn ngữ được nhập động:

  • khách hàng rất dễ dàng và nhanh chóng để thực hiện,
  • API được tin cậy không thay đổi,
  • khách hàng có thể dễ dàng xử lý các lá cụ thể khi cần xác thực (ví dụ kiểm tra xem đó /something/percentagelà số thực tế và nằm trong phạm vi 0..100).

20

XML có thể là loại an toàn, vì các lược đồ XSD có thể khai báo kiểu dữ liệu của các phần tử. Một tài liệu được xác nhận hợp lệ đối với lược đồ XSD được đảm bảo phù hợp với các loại dự kiến. Nhưng định dạng XML không bắt buộc phải có lược đồ, do đó, một tài liệu không tự động gõ an toàn chỉ bằng cách là XML.

Thực tế cũng tồn tại một ngôn ngữ lược đồ cho JSON , vì vậy hãy nhập JSON an toàn. Nhưng nó hiếm khi được sử dụng, vì vậy, JSON không phải là loại an toàn.


2
Câu trả lời của bạn sẽ tốt hơn với tên hoặc liên kết cho JSON tương đương với XSD.
DougM

1
BTW: Lược đồ XML cho đến nay không phải là ngôn ngữ định nghĩa lược đồ duy nhất cho XML. Ngoài ra còn có Schematron, RelaxNG, và dĩ nhiên là DTD SGML tốt.
Jörg W Mittag

Ngoài ra, hãy nhớ rằng ngay cả với một lược đồ, XML có thể không an toàn về kiểu. Người ta có thể chỉ định một yếu tố để có loại nội dung "bất kỳ". Mặc dù người ta có thể lập luận rằng đó là một hình thức an toàn loại (tôi không quan tâm, bất cứ điều gì là hợp lệ) đồng thời không thể thực hiện xác nhận: đó thực chất là một loại "biến thể".

3

Trong khoa học máy tính, an toàn kiểu là mức độ mà ngôn ngữ lập trình không khuyến khích hoặc ngăn ngừa lỗi loại.

Loại an toàn không phải là một thuộc tính tuyệt đối. Nó không phải là boolean. Ngôn ngữ (và XML và JSON ngôn ngữ) cho phép và ngăn ngừa các loại lỗi và lỗi khác nhau. Ví dụ bạn có thể đặt tên sai cho các thành phần. Nhưng bạn không thể bỏ qua các yếu tố cú pháp cần thiết như đóng thẻ và dấu ngoặc nhọn.

Plain XML và JSON khá an toàn giống nhau (hoặc không an toàn kiểu). Một chuỗi XML / JSON hợp lệ có cấu trúc cú pháp và ngữ nghĩa nhất định nhưng điều này gần như không bao giờ là đủ để một ứng dụng hoạt động với nó. Các ứng dụng không chỉ là một cấu trúc mà là một cấu trúc cụ thể.

XML tỏa sáng với Định nghĩa lược đồ XML (XSD), đây là một cách linh hoạt và mạnh mẽ để xác thực một tài liệu XML nhất định đối với một lược đồ. Điều này cung cấp rất nhiều loại an toàn theo định nghĩa được đưa ra ở trên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.