Sự khác biệt giữa XML và XSD là gì?


111

Sự khác biệt giữa Ngôn ngữ đánh dấu mở rộng (XML) và Lược đồ XML (XSD) là gì?

Câu trả lời:


145

Trên thực tế, XSD chính là XML. Mục đích của nó là xác thực cấu trúc của một tài liệu XML khác. XSD không bắt buộc đối với bất kỳ XML nào, nhưng nó đảm bảo rằng XML có thể được sử dụng cho một số mục đích cụ thể. XML chỉ chứa dữ liệu ở định dạng và cấu trúc phù hợp.


Tôi hiểu rõ - nếu bên thứ 3 đã gửi cho tôi tài liệu .XSD có nội dung như: <xs: element name = "QuoteRequestID" type = "xs: unsignedLong" minOccurs = "0" /> được bao gồm - đây chỉ là một mô tả của các trường phải không. Đó có phải là điều hợp lý để yêu cầu họ cho một yêu cầu mẫu thực tế đó sẽ là XML thô với <QuoteResultID> vv vv
James Wilson

3
Chắc chắn, bạn có thể hỏi họ. Bạn cũng có thể sử dụng một số công cụ trực tuyến có thể thực hiện việc này cho bạn, chẳng hạn như công cụ này - xsd2xml . Chỉ cần dán xsd và nó sẽ tạo ra một tài liệu xml mẫu dựa trên nó.
lượt chia sẻ

@anthares, tôi đã thử liên kết với: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="QuoteRequestID" type="xs:unsignedLong" minOccurs="0" /> </xs:schema> nhưng cuối cùng vẫn gặp lỗi: Error!!! The 'minOccurs' attribute cannot be present.
heretoinfinity

Tại sao đó sẽ là một vấn đề?
heretoinfinity

111


Lấy một ví dụ

<root>
  <parent>
     <child_one>Y</child_one>
     <child_two>12</child_two>
  </parent>
</root>

và thiết kế một xsd cho điều đó:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parent">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="child_one" type="xs:string" />
              <xs:element name="child_two" type="xs:int" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


Điều gì không thể xảy ra với XSD: hãy viết nó trước vì danh sách rất nhỏ
1) Bạn không thể xác thực một nút / thuộc tính bằng cách sử dụng giá trị của một nút / thuộc tính khác.
2) Đây là một hạn chế: Một phần tử được xác định trong tệp XSD phải được xác định với chỉ một kiểu dữ liệu. [trong ví dụ trên, để <child_two>xuất hiện trong một <parent>nút khác , kiểu dữ liệu không thể được xác định ngoài int.
3) Bạn không thể bỏ qua việc xác thực các phần tử và thuộc tính, tức là, nếu một phần tử / thuộc tính xuất hiện trong XML, thì nó phải được xác định rõ trong XSD tương ứng. Mặc dù việc sử dụng <xsd:any>cho phép nó, nhưng nó có các quy tắc riêng. Việc tuân thủ dẫn đến lỗi xác thực. Tôi đã thử một cách tiếp cận tương tự và chắc chắn không thành công, đây là phần Hỏi & Đáp


những gì có thể với XSD:
1) Bạn có thể kiểm tra hệ thống phân cấp thích hợp của các nút XML. [xsd xác định con nào sẽ thuộc quyền của cha mẹ nào, v.v., tuân theo sẽ được tính là lỗi, trong ví dụ trên, child_two không thể là con ngay lập tức của root, nhưng nó là con của thẻ "cha", lần lượt là một con của nút "gốc", có một hệ thống phân cấp ..]
2) Bạn có thể xác định Kiểu dữ liệu của các giá trị của các nút. [trong ví dụ trên child_two không thể có bất kỳ dữ liệu nào khác ngoài số]
3) Bạn cũng có thể xác định các loại data_type tùy chỉnh, [ví dụ: đối với nút <month>, dữ liệu có thể là một trong 12 tháng .. vì vậy bạn cần xác định tất cả 12 tháng trong kiểu dữ liệu mới, viết tất cả các tên 12 tháng dưới dạng giá trị liệt kê ..
4) Bạn có thể hạn chế sự xuất hiện của các phần tử, sử dụng minOccurs và maxOccurs, các giá trị mặc định là 1 và 1.

.. và nhiều thứ khác nữa ...


1
@ InfantPro'Aravind 'Ý bạn là gì khi "Bạn không thể xác thực một nút / thuộc tính bằng cách sử dụng giá trị của một nút / thuộc tính khác.". Tại sao ai đó muốn làm điều đó?
Geek


"Bạn không thể xác thực một nút / thuộc tính bằng cách sử dụng giá trị của một nút / thuộc tính khác". Điều này có nghĩa là gì
GrowinMan

@ GrowinMan, Xác thực có điều kiện (Không phải quan hệ cha-con) Ví dụ: Nếu đây là xml của bạn: <root> <A>A</A> <B/> <C/> </root>và nếu <A>là Node <A>B</A>, thì hãy thực hiện <B>bắt buộc, nếu <A>C</A>sau đó thực hiện <C>bắt buộc.
InfantPro'Aravind '

Yêu cầu trên là không thể đạt được chỉ với XSD
InfantPro'Aravind '

15

XSD:
XSD (Định nghĩa lược đồ XML) chỉ định cách mô tả chính thức các phần tử trong tài liệu Ngôn ngữ đánh dấu có thể mở rộng (XML).
Xml:
XML được thiết kế để mô tả dữ liệu . Nó độc lập với phần mềm cũng như phần cứng.
Nó tăng cường những điều sau đây.
-Chia sẻ dữ liệu.
-Nền tảng độc lập.
-Tăng tính khả dụng của Dữ liệu.

Sự khác biệt:

  1. XSD dựa trên XML.

  2. XSD định nghĩa các phần tử và cấu trúc có thể xuất hiện trong tài liệu, trong khi XML thì không.

  3. XSD đảm bảo rằng dữ liệu được diễn giải đúng cách, trong khi XML thì không.

  4. Tài liệu XSD được xác thực dưới dạng XML, nhưng điều ngược lại có thể không phải lúc nào cũng đúng.

  5. XSD có khả năng bắt lỗi tốt hơn XML.

XSD xác định các phần tử có thể được sử dụng trong tài liệu, liên quan đến dữ liệu thực tế mà nó sẽ được mã hóa.
ví dụ:
Ngày được biểu thị là 1/12/2010 có thể có nghĩa là ngày 12 tháng 1 hoặc ngày 1 tháng 12. Khai báo kiểu dữ liệu ngày tháng trong tài liệu XSD, đảm bảo rằng nó tuân theo định dạng do XSD quy định.


Tuyên bố đầu tiên đã mô tả mọi thứ.
Ojonugwa Jude Ochalifu


6

VÍ DỤ XML ĐƠN GIẢN:

<school>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</school>

XSD CỦA XML TRÊN (Giải thích):

<xs:element name="school">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Đây:

xs: element : Xác định một phần tử.

xs: sequence : Biểu thị các phần tử con chỉ xuất hiện theo thứ tự đã nêu.

xs: complexType : Biểu thị nó chứa các phần tử khác.

xs: simpleType : Biểu thị chúng không chứa các phần tử khác.

type: string, decimal, integer, boolean, date, time,

  • Nói cách đơn giản , xsd là một cách khác để biểu diễn và xác thực dữ liệu XML với kiểu cụ thể.
  • Với sự trợ giúp của các thuộc tính bổ sung, chúng ta có thể thực hiện nhiều thao tác.

  • Thực hiện bất kỳ tác vụ nào trên xsd đơn giản hơn xml.


Chào! Tôi sử dụng chương trình nào để tạo tệp XSD?
Judith

Chương trình @Judith? bạn có thể giải thích câu hỏi của bạn. như trình soạn thảo hoặc ngôn ngữ hoặc công cụ?
shubham1js

1

Về cơ bản, tệp XSD định nghĩa tệp XML sẽ trông như thế nào. Đó là một tệp Lược đồ xác định cấu trúc của tệp XML. Vì vậy, nó chỉ định những trường có thể có là gì và kích thước của chúng.

Tệp XML là một phiên bản của XSD vì nó sử dụng các quy tắc được xác định trong XSD.


0

XML có một ứng dụng rộng hơn nhiều so với f.ex. HTML. Nó không có "ứng dụng" nội tại hoặc mặc định. Vì vậy, mặc dù bạn có thể không thực sự quan tâm đến việc các trang web cũng bị chi phối bởi những gì được phép, nhưng từ phía tác giả, bạn có thể muốn xác định chính xác những gì một tài liệu XML có thể chứa và có thể không.

Nó giống như thiết kế một cơ sở dữ liệu.

Vấn đề về công nghệ XML là chúng có bản chất là văn bản. Với XSD, có nghĩa là bạn có một khung định nghĩa cấu trúc dữ liệu có thể được "cắm" vào các công cụ xử lý văn bản như PHP. Vì vậy, bạn không chỉ có thể thao tác với chính dữ liệu mà còn rất dễ dàng thay đổi và ghi lại cấu trúc, thậm chí tự động tạo giao diện người dùng.

Được xem như thế này, XSD là "chất kết dính" hay "phần mềm trung gian" giữa dữ liệu (XML) và các công cụ xử lý dữ liệu.

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.