XML – Cơ bản về XML Schema, XML Namespace

XML Schema là dạng tài liệu theo chuẩn XML được đề xuất bởi tổ chức W3C năm 2001. XML Schema được dùng để mô tả cấu trúc và các kiểu dữ liệu của một tài liệu XML thay thế cho chuẩn DTD (Document Type Definition) trước đây. Việc này giúp định nghĩa một tài liệu XML hợp lệ cũng như các metadata cần thiết để sử dụng trong nhiều loại ứng dụng và công nghệ hiện nay như XAML, ADO.NET, WebService,…

Bài viết này chỉ đem lại cho bạn một cái nhìn tổng quát về XML Schema, nếu muốn tìm hiểu thêm về chuẩn này, vui lòng xem tại trang sau (nguồn tham khảo):

http://www.w3schools.com/Schema/schema_intro.asp

XML Namespace là gì?

Các tài liệu XML có thể sử dụng cùng một tên thẻ để định nghĩa dữ liệu. Điều này có thể dẫn đến hậu quả là dữ liệu có thể được nhận dạng sai khi được sử dụng. Vì thể một định danh toàn cục là cần thiết để xác định tính duy nhất của một tài liệu XML, và định danh này được gọi là namespace.

Một XML namespace được đặt tên bằng một chuỗi URI (Uniform Resource Identifier). Ví dụ tên của một XML namespace mà bạn thường gặp: http://www.w3.org/2001/XMLSchema.

Để thêm một XML namespace vào tài liệu, bạn sử dụng attribute xmlns (viết tắt của XML Name Space). Attribute này thường được theo sau bởi dấu hai chấm “:” và sau đó là tên prefix được gán cho namespace. Ví dụ gán namespace “http://www.w3.org/2001/XMLSchema” cho prefix xs:
xmlns:xs="http://www.w3.org/2001/XMLSchema”
Tham khảo bài viết về XML Namespace trên w3schools sau:

http://www.w3schools.com/XML/xml_namespaces.asp

 Ví dụ về XML và XML Schema

Với tài liệu XML như sau:

<?xml version="1.0"?>
<Blog>
	<Title>Let me know what you think</Title>
	<Author>Yin Yang</Author>
</Blog>

Sẽ cho ta một XML Schema tương ứng:

<?xml version="1.0"?>
<xsd:schema  elementFormDefault="qualified"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Blog">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Title" type="xsd:string" />
        <xsd:element name="Author" type="xsd:string" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Các phần tử được định nghĩa trong XML Schema trên gồm có “Blog”, “Title” và “Author”. Trong đó “Blog” là một kiểu dữ liệu phức (complex type) do chứa các phần tử con bên trong. Các phần tử “Title” và “Author” được gọi là simple type.

Tham chiếu đến Schema trong tài liệu XML

Một tài liệu XML cần tham chiếu đến Schema tương ứng của nó. Để tham chiếu bạn sử dụng attribute trong phần tử gốc như sau:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=”https://yinyangit.wordpress.com/test.xsd&#8221;
Và tài liệu XML trong ví dụ đầu trở thành:

<?xml version="1.0"?>
<Blog xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://yinyangit.wordpress.com/test.xsd">
	<Title>Let me know what you think</Title>
	<Author>Yin Yang</Author>
</Blog>

Đặc điểm của tài liệu XML Schema

Tài liệu XML Schema được lưu trữ theo dạng plaint text với phần mở rộng xsd (XML Schema Definition).

Một tài liệu XML Schema tương tự như một tài liệu XML, dòng mở đầu của tài liệu là câu khai báo: <?xml version="1.0"?>, theo sau đó luôn là phần tử gốc <schema>. Ví dụ một tài liệu XML Schema thông thường sẽ có dạng sau:

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
...
</xs:schema>

Các phần tử trong tài liệu XML Schema đều sử dụng một prefix để khai báo. Prefix này được khai báo ngay từ phần tử gốc của tài liệu. Tên prefix có thể đặt bất kì những thông thường hai tên prefix thường được sử dụng là xsxsd.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

Cấu trúc của XML Schema

Phần tử gốc <schema>

Phần tử này thường chứa các attribute như bạn thấy. Trong đó bao gồm phần khai báo các prefix như phần trên. Ngoài ra còn các attribute như:

targetNamespace="http://www.w3schools.com"

Định nghĩa rằng các phần tử được định nghĩa trong schema hiện tại (ví dụ: Blog, Title, Author) đều thuộc namespace “http://www.w3schools.com”.

Và attribute dùng để định nghĩa namespace mặc định (không bao gồm prefix):

xmlns="http://www.w3schools.com"


Attribute sau:

elementFormDefault="qualified"


Được dùng để xác định rằng các phần tử con của phần tử gốc <schema> có cần phải được định nghĩa rõ ràng với namspace không. Theo cách hiểu đơn giản là các phần tử con cũng phải được dùng prefix để định nghĩa nếu như elementFormDefault là “qualified”, ngược lại bạn có thể đặt giá trị này là “unqualified”.

Simple Element

Simple element là các phần tử chỉ chứa kiểu dữ liệu đơn giản như: string, boolean, integer, date,…hoặc các kiểu tự định nghĩa.  Định nghĩa một Simple Element rất đơn giản:

<xs:element name="xxx" type="yyy"/>


Các kiểu dữ liệu thông dụng:

  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time

Ví dụ với các phần tử XML sau:

<lastname>YinYang</lastname>
<dateborn>1970-03-27</dateborn>


Ta sẽ có các Simple Element tương ứng:

<xs:element name="lastname" type="xs:string"/>
<xs:element name="dateborn" type="xs:date"/>


Attribute

Các Simple Element không thể chứa attribute. Định nghĩa một attribute:

<xs:attribute name="xxx" type="yyy"/>


Ví dụ một phần tử XML:

<lastname lang="EN">Smith</lastname>


Có định nghĩa attribute tương ứng:

<xs:attribute name=”lang” type=”xs:string”/>

Complex Element

 

Complex Element là các phần tử thuộc dạng sau:

–          Phần tử rỗng

–          Phần tử chỉ chứa các phần tử khác

–          Phần tử chỉ chứa văn bản

–          Phần tử chứa văn bản và cả các phần tử khác

Để định nghĩa một Complex Element bạn cần dùng các phần tử <complexType> và <sequence>, có thể dùng hai cách. Ví dụ với đoạn XML sau:

<employee>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</employee>

Cách 1: Định nghĩa phần tử trực tiếp với các phần tử con bên trong:

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

Cách 2: Tách riêng Complex Element:

<xs:element name="employee" type="personinfo"/>

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

Phần kết

Bài viết không trình bày tất cả kiến thức mà tôi tổng hợp được, nếu bạn quan tâm về vấn đề này, cách tốt hơn là tham khảo tại trang hướng dẫn mà tôi đã đề nghị ban đầu (http://www.w3schools.com/Schema/). Tuy nhiên tại thời điểm hiện tại, tôi chưa cần đi quá sâu vào vấn đề này. Tất nhiên có những công cụ cho phép bạn tạo ra schema tự động để bạn có thể sử dụng mà không cần biết chi tiết về XML Schema. Tôi sẽ giới thiệu một vài công cụ trong một bài viết khác.

https://yinyangit.wordpress.com

Advertisements

11 thoughts on “XML – Cơ bản về XML Schema, XML Namespace

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s