Search…

XML Schema

23/09/20203 min read
Giới thiệu XML Schema, các kiểu dữ liệu trong schema và các dạng khai báo element

Để mô tả dữ liệu trong một tài liệu XML, DTD được sử dụng rất phổ biến vì tính đơn giản của nó. Tuy nhiên đối với các tài liệu XML lớn và phức tạp, DTD bắt đầu bộc lộ nhiều hạn chế như: không hỗ trợ nhiều kiểu dữ liệu, không quy định được khoảng giá trị… Để khắc phục những hạn chế đó của DTD, XML schema được tạo ra.

XML Schema

XML Schema là gì?

Cùng một mục đích với DTD là kiểm tra cấu trúc và tính đúng đắn của một tài liệu XML. Tuy nhiên được ra đời sau, XML Schema được kế thừa những thành công của DTD và mở rộng thêm một số tính năng để khắc phục những hạn chế của DTD.

XML Schema được phát triển trên nền tảng của DTD và nổi trội hơn ở một số đặc điểm:

  • Schema cũng là một dạng tài liệu theo chuẩn XML, do đó để mô tả cấu trúc của dữ liệu người dùng schema không cần phải làm quen với cấu trúc mới (DTD).
  • Schema có thể mở rộng, người dùng có thể định nghĩa thêm các kiểu dữ liệu riêng từ các kiểu dữ liệu chuẩn.
  • Schema hỗ trợ namespace.
  • Schema hỗ trợ nhiều kiểu dữ liệu, định phạm vi giá trị dữ liệu, do đó có thể dễ dàng khai báo, tìm kiếm và kiểm tra tính đúng đắn của dữ liệu.

Các kiểu dữ liệu trong schema

Trong schema dữ liệu được chia làm hai loại:

  • Loại có sẵn.
  • Loại do người dùng tự định nghĩa.
Schema Data Types

Các dữ liệu có sẵn (built-in) bao gồm các loại: string, bool, numeric, date Time, binary, anyURI, integer, decimal, time.

Ngoài các kiểu dữ liệu có sẵn, trong trường hợp cần thiết, người dùng có thể tự định nghĩa kiểu dữ liệu riêng.

Các dạng khai báo element trong schema

Simple Element

Cú pháp để khai báo 1 element đơn giản.

<xs:element name="element-name" type="element-type"/>
Các element đơn giản
Nội dung XML
<fullname>Hòa Đinh</fullname>
<age>21</age>
<dateborn>04-11-1993</dateborn>
Schema tương ứng
<xs:element name="fullname" type="xs:string"/>
<xs:element name="age" type="xs:integer" />
<xs:element name="dateborn" type="xs:date" />
Các attribute trong element
Nội dung XML
<xs:attribute name="attribute_name" type="attribute_type"/>

Với 1 element có chứa attribute.

<article author="Hòa Đinh">XML</article>
Schema tương ứng
<xs:attribute name="author" type="xs:string"/>

Complex Element

Cú pháp để khai báo một complex element:

<xs:element name="element-name">
	<xs:complexType>
		content
	</xs:complexType>
</xs:element>
Element rỗng
Nội dung XML
<student id="110005" />
Schema tương ứng
<xs:element name="student">
	<xs:complexType>
		<xs:attribute name="id" type="xs:Integer"/>
	</xs:complexType>
</xs:element>
Element chỉ chứa các element con
Nội dung XML
<article>
	<author>Hòa Đinh</author>
	<editor>Larige Thai</editor>
</article>
Schema tương ứng
<xs:element name="person">
	<xs:complexType>
		<xs:sequence>
			<xs:element name="author" type="xs:string"/>
			<xs:element name="editor" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
</xs:element>
Element chỉ chứa text
Nội dung XML
<product size="6">lumia 1320</product>
Schema tương ứng
<xs:element name="product">
	<xs:complexType>
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="size" type="xs:integer" />
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
</xs:element>
Element chứa text và các element con
Nội dung XML
<article>
	Number <number>103</number>
	Author <name>Kevin La</name>.
	Title <title>So Sánh null Và Rỗng</title>
</article>
Schema tương ứng
<xs:element name="article">
	<xs:complexType mixed="true">
		<xs:sequence>
			<xs:element name="number" type="xs:integer"/>
			<xs:element name="name" type="xs:string"/>
			<xs:element name="title" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
</xs:element>

Schema Indicator

Để nâng cao khả năng đặc tả cấu trúc tài liệu XML, schema cung cấp thêm khái niệm "indicator". XML Schema cung cấp một số indicators:

  • All: các element con xuất hiện tối thiểu 1 lần, với thứ tự bất kì. 
  • Choice: chỉ một trong số các element con được xuất hiện.
  • Sequence: các element con phải xuất hiện đúng theo thứ tự.
  • maxOccurs: số lần xuất hiện tối đa của một element.
  • minOccurs: số lần xuất hiện tối thiểu của một element.

Một số ví dụ để minh họa indicator:

Schema mô tả các element phải xuất hiện đúng thứ tự.

<xs:element name="email">
	<xs:complexType>
		<xs:sequence>
			<xs:element name="EmailFrom" type="xs:string"/>
			<xs:element name="EmailTo" type="xs:string"/>
			<xs:element name="Subject" type="xs:string"/>
			<xs:element name="Body" type="xs:string"/>
			<xs:element name="SMTPServer" type="xs:string"/>
			<xs:element name="SMTPClient" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
</xs:element>

Schema mô tả số lần xuất hiện tối đa và tối thiểu của các element.

<xs:element name="staff">
	<xs:complexType>
		<xs:sequence>
			<xs:element name="department" type="xs:string"/>
			<xs:element name="full_name" type="xs:string"/>
			<xs:element name="child_name" type="xs:string"
							maxOccurs="2" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
</xs:element>
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024