178
Chương 5: XML
}
8.
8.
Xác nh n tính h p l c a m t tài li u XML d a trên m t
ậ
ợ ệ ủ ộ
ệ
ự
ộ
Xác nh n tính h p l c a m t tài li u XML d a trên m t
ậ
ợ ệ ủ ộ
ệ
ự
ộ
Schema
Schema
Bạn cần xác nhận tính hợp lệ của một tài liệu XML bằng cách bảo đảm nó tuân
theo một XML Schema.
Sử dụng lớp
System.Xml.XmlValidatingReader
. Tạo
một thể hiện của lớp này, nạp
Schema vào tập hợp
XmlValidatingReader.Schemas
, dịch chuyển qua từng nút
một bằng cách gọi
XmlValidatingReader.Read
, và bắt bất cứ ngoại lệ nào. Để tìm
tất cả các lỗi trong một tài liệu mà không phải bắt ngoại lệ, hãy thụ lý sự kiện
ValidationEventHandler
.
Một XML Schema (giản đồ XML) định nghĩa các quy tắc mà một kiểu tài liệu XML cho trước
phải tuân theo. Các quy tắc này định nghĩa:
•
Các phần tử và đặc tính có thể xuất hiện trong tài liệu.
•
Các kiểu dữ liệu cho phần tử và đặc tính.
•
Cấu trúc của tài liệu, bao gồm các phần tử nào là con của các phần tử khác.
•
Thứ tự và số lượng các phần tử con xuất hiện trong tài liệu.
•
Các phần tử nào là rỗng, có thể chứa text, hay đòi hỏi các giá trị cố định.
Bàn sâu về các tài liệu XML Schema vượt quá phạm vi của chương này, nhưng bạn có thể tìm
hiểu nó thông qua một ví dụ đơn giản. Mục này sẽ sử dụng tài liệu XML mô tả danh mục sản
phẩm đã được trình bày trong mục 5.1.
Ở mức cơ bản nhất, XML Schema Definition (XSD) được sử dụng để định nghĩa các phần tử
có thể xuất hiện trong tài liệu XML. Bản thân tài liệu XSD được viết theo dạng XML, và bạn sử
dụng một phần tử đã được định nghĩa trước (có tên là
<element>
) để chỉ định các phần tử sẽ
cần thiết trong tài liệu đích. Đặc tính
type
cho biết kiểu dữ liệu. Ví dụ dưới đây là tên sản
phẩm:
<xsd:element name="productName" type="xsd:string" />
Và ví dụ dưới đây là giá sản phẩm:
<xsd:element name="productPrice" type="xsd:decimal" />
Bạn có thể tìm hiểu các kiểu dữ liệu Schema tại
[
http://www.w3.org/TR/xmlschema-2]
. Chúng
ánh xạ đến các kiểu dữ liệu .NET và bao gồm
string
,
int
,
long
,
decimal
,
float
,
dateTime
,
boolean
,
base64Binary
...
Cả
productName
và
productPrice
đều là các kiểu đơn giản vì chúng chỉ chứa dữ liệu dạng ký
tự. Các phần tử có chứa các phần tử lồng bên trong được gọi là các kiểu phức tạp. Bạn có thể
lồng chúng vào nhau bằng thẻ
<sequence>
(nếu thứ tự là quan trọng) hay thẻ
<all>
(nếu thứ tự
là không quan trọng). Dưới đây là cách lắp phần tử
<product>
vào danh mục sản phẩm. Chú ý