Tải bản đầy đủ (.pdf) (27 trang)

Các tùy chọn mới cho tính toàn vẹn và xác nhận hợp lệ dữ liệu XML trong DB2 V9.5 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (220.65 KB, 27 trang )

Các tùy chọn mới cho tính toàn vẹn và xác nhận hợp lệ dữ liệu XML trong
DB2 V9.5
Xác nhận hợp lệ thông qua ràng buộc kiểm tra (CHECK), hỗ trợ trigger
Manoj Sardana, Kỹ sư phần mềm, IBM
Madhavi Kaza, Kỹ sư phần mềm, IBM
Tóm tắt: DB2® của IBM® cho Linux®, UNIX® và Windows® đã đưa công
nghệ pureXML® vào trong phiên bản 9. Công nghệ này cho phép bạn lưu trữ dữ
liệu XML dưới dạng nguyên sinh của nó, như vậy duy trì được cấu trúc phân cấp
và cho phép bạn truy vấn nó bằng cách sử dụng SQL/XML và XQuery. Cũng như
với các dữ liệu quan hệ, khả năng để bảo đảm sự toàn vẹn của dữ liệu XML được
lưu trong DB2 là bắt buộc. Tuy nhiên, các phương thức và cơ chế để đảm bảo tính
toàn vẹn của dữ liệu XML khác một chút so với các phương thức đảm bảo tính
toàn vẹn dữ liệu quan hệ truyền thống. Trong bài viết này bạn sẽ tìm hiểu về tính
toàn vẹn của dữ liệu XML trong bối cảnh DB2 và khám phá các tùy chọn khác
nhau để đảm bảo tính toàn vẹn mà bạn có trong các kịch bản khác nhau.
Mục lục

 Tính toàn vẹn của XML
 Đăng ký lược đồ XML và xác nhận hợp lệ
 Xác nhận hợp lệ thông qua các ràng buộc kiểm tra trên các cột XML
 Bắt buộc xác nhận hợp lệ tự động thông qua các tri-gơ
 Sử dụng các vị từ IS VALIDATED và IS NOT VALIDATED trong các câu
lệnh SELECT
 Băm nhỏ các giá trị của XML vào các cột quan hệ
 Tóm tắt
Tính toàn vẹn của XML
Tính toàn vẹn của dữ liệu XML trong cơ sở dữ liệu của DB2 có thể được xem xét
bằng nhiều cách. Ở một mức độ rất cơ bản, trước khi chèn một giá trị XML vào
một bảng, có thể bạn muốn bảo đảm rằng các kiểu dữ liệu của các giá trị của các
phần tử khác nhau là đúng. Ở một mức độ sâu hơn, bạn có thể muốn có những
ràng buộc chẳng hạn như tính duy nhất của một giá trị của phần tử, số bội


(multiplicity) của một phần tử, hoặc hạn chế đối với các giá trị của một phần tử.
Khi dữ liệu XML được lưu giữ cùng với các dữ liệu quan hệ, bạn có thể muốn
đảm bảo rằng một số giá trị của phần tử trong XML cũng xuất hiện trong các cột
quan hệ. Lý do của điều này có thể là các cột này là một phần của khóa chính hoặc
khóa ngoài.
DB2 cung cấp một số giải pháp khác nhau cho các yêu cầu về tính toàn vẹn này.
Mặc dù bạn có một lựa chọn là kiểm tra hợp lệ các tài liệu XML đối với một lược
đồ trước khi chèn, các tri-gơ có thể được sử dụng để thực hiện việc xác nhận hợp
lệ này một cách tự động mà không cần để người sử dụng biết. Bạn có thể sử dụng
ràng buộc kiểm tra để buộc người sử dụng phải kiểm tra hợp lệ giá trị của XML
với một lược đồ đã đăng ký trước. Trước khi bạn sử dụng bất kỳ lựa chọn nào
trong các tùy chọn này, thì cần phải đăng ký một lược đồ XML với cơ sở dữ liệu.
Để lưu trữ một giá trị nút vào một cột quan hệ nhằm duy trì tính đơn nhất, bạn có
thể băm nhỏ các giá trị nút thích hợp thành một kiểu dữ liệu quan hệ bằng cách sử
dụng một hàm SQL/XML và chèn nó vào một cột quan hệ. Trong các phần sau,
chúng ta sẽ nói về tất cả các tùy chọn này một cách chi tiết với các mã ví dụ.


Đăng ký lược đồ XML và xác nhận hợp lệ
Lược đồ XML được sử dụng để định nghĩa cấu trúc của một tài liệu XML, các
phần tử của nó, các thuộc tính của nó và kiểu dữ liệu của các phần tử hoặc của các
thuộc tính. Hơn nữa, nó cho phép bạn định nghĩa các giá trị phần tử mặc định và
các hạn chế với các phần tử, chẳng hạn như số bội hay là tính đơn nhất. Một khi đã
được định nghĩa, nó có thể được sử dụng để xác nhận tính hợp lệ cho các tài liệu
XML đối với lược đồ XML đã xác định. Liệt kê 1 cho thấy ví dụ của lược đồ
"employee" (nhân viên). Chúng ta sẽ sử dụng lược đồ này trong các phần sau của
bài viết này.

Liệt kê 1. Lược đồ Employee


<xs:schema xmlns:xs="
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name = "employee">
<xs:complexType>
<xs:sequence>
<xs:element name = "name" type = "xs:string"/>
<xs:element name = "dept" type = "xs:string"/>
<xs:element name = "salary" type = "xs:double"/>
<xs:element name = "designation" type = "xs:string"/>
<xs:element name = "date-of-join" type = "xs:date"/>
<xs:element name = "address">
<xs:complexType>
<xs:sequence>
<xs:element name = "street" type = "xs:string"/>
<xs:element name = "city" type = "xs:string"/>
<xs:element name = "state" type = "xs:string"/>
<xs:element name = "country" type = "xs:string"/>
<xs:element name = "zipcode" type = "xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name = "id" type = "xs:string" use = "required"/>
</xs:complexType>
</xs:element>
</xs:schema>


Lược đồ XML phải được đăng ký tại cơ sở dữ liệu của DB2 trước khi sử dụng

lược đồ để xác nhận hợp lệ. Liệt kê 2 cho thấy các lệnh CLP để đăng ký lược đồ
employee, giả định rằng nó được cất giữ trong tệp tin employee.xsd trong thư mục
làm việc của bạn.

Liệt kê 2. Đăng ký lược đồ XML

REGISTER XMLSCHEMA FROM employee.xsd as
employee;
COMPLETE XMLSCHEMA employee;


Sau khi lược đồ được đăng ký thành công và được gán một tên quan hệ, bạn có thể
sử dụng nó để xác nhận hợp lệ.
Xác nhận hợp lệ là một quá trình kiểm tra xem các cá thể tài liệu có đáp ứng kiểu
cấu trúc, kiểu dữ liệu và các ràng buộc nội dung đã chỉ rõ trong lược đồ XML hay
không. Quá trình xác nhận hợp lệ loại bỏ dữ liệu không hợp lệ trước khi nó được
chèn vào cơ sở dữ liệu. Nó đảm bảo rằng các tài liệu XML tuân thủ các quy tắc
được lược đồ XML cung cấp và đúng khuôn dạng.
Trong DB2, việc kiểm tra hợp lệ các tài liệu XML theo các lược đồ XML là tùy
chọn. Ví dụ, nếu các tài liệu XML nhận được từ một nguồn đáng tin cậy, thì việc
xác nhận hợp lệ có thể không cần thiết. Ngược lại, nếu các tài liệu XML nhận
được từ một nguồn không biết rõ, hãy cẩn thận kiểm tra hợp lệ các tài liệu XML
đó để duy trì tính toàn vẹn dữ liệu.
Hàm XMLVALIDATE được sử dụng để xác nhận hợp lệ các tài liệu XML trước
khi chèn hoặc cập nhật các tài liệu XML vào một bảng. Như đã đề cập ở phần
trước, các lược đồ XML phải được đăng ký trước khi sử dụng chúng để xác nhận
hợp lệ.
Hàm XMLVALIDATE xác nhận hợp lệ tài liệu hoặc ngầm ẩn hoặc tường minh.
 Xác nhận hợp lệ ngầm: Tài liệu XML chỉ rõ vị trí của lược đồ và vùng tên
bằng cách sử dụng thuộc tính XSi: schemaLocation hoặc chỉ rõ riêng chỉ vị

trí lược đồ bằng cách sử dụng thuộc tính XSi:
noNamespaceSchemaLocation. DB2 sử dụng các giá trị đầu vào này và tìm
kiếm các bảng danh mục nhằm tìm ra lược đồ XML cần thiết để xác nhận
hợp lệ tài liệu XML. Ví dụ: Bạn có thể chèn tài liệu XML sau đây vào một
bảng hiện có có tên là EMPLOYEE, bảng này có hai cột, một cột có kiểu
dữ liệu integer và cột thứ hai có kiểu XML.


Liệt kê 3. Các nhận hợp lệ ngầm

INSERT INTO employee VALUES (101,
'<employee xmlns:xsi="http://www/w3.org/2001/XMLSchema"

xsi:noNamespaceSchemaLocation="employee.xsd" id =
"101">
<name>Sonal</name>
<dept>Sales</dept>
<salary>10000</salary>
<designation>Sales Executive</designation>
<date-of-join>2007-10-10</date-of-join>
<address>
<street>M.G. Road</street>
<city>Bangalore</city>
<state>Karnataka</state>
<country>India</country>
<zipcode>560001</zipcode>
</address>
</employee>')



 Xác nhận hợp lệ tường minh: Tài liệu XML xác định một cách tường minh
mã nhận dạng SQL hoặc thông tin vùng tên và vị trí của lược đồ XML bằng
cách sử dụng mệnh đề ACCODING TO XMLSCHEMA ID trong hàm
XMLVALIDATE. Dưới đây là một ví dụ về xác nhận hợp lệ tường minh.


Liệt kê 4. Xác nhận hợp lệ tường minh

INSERT INTO employee VALUES (101,
XMLVALIDATE(XMLPARSE(document
'<employee id="101">
<name>Sonal</name>
<dept>Sales</dept>
<salary>10000</salary>
<designation>Sales Executive</designation>
<date-of-join>2007-10-10</date-of-join>
<address>
<street>M.G. Road</street>
<city>Bangalore</city>
<state>Karnataka</state>
<country>India</country>
<zipcode>560001</zipcode>
</address>
</employee>') ACCORDING TO XMLSCHEMA ID employee))


Trong DB2, việc xác nhận hợp lệ tài liệu XML được thực hiện trên cơ sở cho từng
tài liệu, không phải ở cấp độ cả cột. Một bảng có một cột XML, không cần tất cả
các tài liệu của cột phải có liên quan đến chỉ một lược đồ XML. Nó có thể chứa
các tài liệu XML liên quan đến các lược đồ khác nhau. Bạn có thể kiểm tra xem

các tài liệu có được xác nhận hợp lệ hay không bằng cách sử dụng vị từ
VALIDATED.


Xác nhận hợp lệ thông qua các ràng buộc kiểm tra trên các cột XML
Hãy xem xét một kịch bản mà bạn muốn kết buộc một tập hợp các lược đồ XML
với một cột XML. Tuy nhiên, trách nhiệm xác nhận hợp lệ giá trị XML thuộc về
ứng dụng. Trong trường hợp này, quản trị viên cơ sở dữ liệu có thể đặt một ràng
buộc kiểm tra trên cột XML và đảm bảo rằng ứng dụng sử dụng một trong những
lược đồ được đăng ký trước để xác nhận hợp lệ. Thao tác này cũng sẽ bảo đảm
rằng tài liệu XML luôn luôn được xác nhận hợp lệ.
Các ràng buộc kiểm tra là các ràng buộc trên các cột bảng được sử dụng để hạn
chế người dùng phải theo một điều kiện kiểm tra cụ thể. Khi chèn hay cập nhật
trên một cột, thì bạn chỉ có thể thực hiện các thao tác này trên bảng nếu các điều
kiện kiểm tra được đánh giá là đúng.
Tạo một bảng với ràng buộc kiểm tra trên một cột XML
Các ràng buộc kiểm tra trên dữ liệu XML cung cấp cho bạn khả năng xác định các
ràng buộc trên một cột XML dưới dạng kiểm tra hợp lệ theo lược đồ XML, để
đảm bảo rằng chỉ các tài liệu XML đã được xác nhận hợp lệ đối với các lược đồ
thích hợp được lưu trữ trong cột. Điều này đảm bảo sự nhất quán của thông tin
được lưu trữ trong cột XML. Nó cũng mang lại khả năng định nghĩa các biểu thức
XML trên các giá trị XML khi chúng được xác nhận hợp lệ theo một tập hợp các
lược đồ định nghĩa trước. Các vị từ IS VALIDATED hoặc IS NOT VALIDATED
cùng với mệnh đề ACCORDING TO XMLSCHEMA có thể được sử dụng để
kiểm tra xem tài liệu được xác nhận hợp lệ hay chưa đối với các lược đồ đã chỉ
định.
Các ràng buộc kiểm tra cũng có thể liệt kê một tập hợp các lược đồ. Điều này có
nghĩa là tài liệu XML có thể được xác nhận hợp lệ đối với một trong các lược đồ
XML được chỉ định. Bằng cách cung cấp nhiều lược đồ trong ràng buộc kiểm tra,
bạn có được sự linh hoạt, sử dụng một trong các lược đồ cho việc xác nhận hợp lệ

để giúp đỡ trong việc liên kết nhiều lược đồ với một cột XML cụ thể. Ví dụ trong
liệt kê 5 cho thấy cách chỉ định rõ một lược đồ đơn lẻ trong một ràng buộc kiểm
tra như thế nào.

Liệt kê 5. Tạo ràng buộc kiểm tra trên một cột XML

CREATE TABLE customer (cust_id INTEGER NOT NULL,
info XML CONSTRAINT val_check
CHECK(info IS VALIDATED ACCORDING TO XMLSCHEMA ID
customer))


Ví dụ trên tạo ra một ràng buộc kiểm tra trên cột INFO, cột này có kiểu XML.
Ràng buộc kiểm tra đảm bảo rằng tài liệu được xác nhận hợp lệ đúng với lược đồ
customer (khách hàng) (giả định rằng lược đồ customer đã được đăng ký trong
DB2). Bạn lưu ý rằng ràng buộc kiểm tra đánh giá xem tài liệu XML có được xác
nhận hợp lệ hay không. Nó không thực hiện việc xác nhận hợp lệ thực tế.
Ví dụ trong liệt kê 6 cho thấy có thể liệt kê nhiều lược đồ khi tạo một ràng buộc
kiểm tra cụ thể.

Liệt kê 6. Tạo ràng buộc kiểm tra trên một cột XML với nhiều lược đồ

CREATE TABLE customer (cust_id INTEGER NOT NULL,
cust_info XML CONSTRAINT val_check
CHECK (cust_info IS VALIDATED ACCORDING TO XMLSCHEMA IN
(ID registered_customers, ID online_customers, ID regular_customers)))


Câu lệnh chèn trong ví dụ sau không thực hiện được bởi vì nó xác nhận hợp lệ tài
liệu XML theo một lược đồ không được quy định tại mệnh đề ràng buộc kiểm tra.


Liệt kê 7. Vi phạm ràng buộc kiểm tra

INSERT INTO customer
VALUES (1001, XMLVALIDATE(XMLPARSE(cust_info)
ACCORDING TO XMLSCHEMA ID cust))


Chèn các giá trị XML thông qua các khung nhìn
Các tài liệu XML cũng có thể được chèn thông qua các khung nhìn vào các bảng
cơ sở tương ứng của chúng. Khi một thao tác chèn được thực hiện trên một cột
XML thông qua khung nhìn, thì ràng buộc kiểm tra của bảng cơ sở được áp dụng
với tài liệu XML, và chỉ khi nó thỏa mãn ràng buộc kiểm tra thì tài liệu XML
được chèn vào bảng. Ví dụ dưới đây tạo ra một khung nhìn trên hai bảng có các tài
liệu XML.

Liệt kê 8. Chèn tài liệu XML thông qua các khung nhìn

CREATE TABLE distributor (dist_id INTEGER, dist_info XML
CONSTRAINT dist_check
CHECK(dist_info IS VALIDATED ACCORDING TO XMLSCHEMA
ID distributor))

CREATE VIEW cust_dist_view(id, details) AS
(SELECT id, info FROM customer
UNION ALL
SELECT dist_id, dist_info FROM distributor)

INSERT INTO cust_dist_view VALUES (id,
XMLVALIDATE(XMLPARSE(details)

ACCORDING TO XMLSCHEMA ID distributor))

INSERT INTO cust_dist_view VALUES (id,
XMLVALIDATE(XMLPARSE(details)
ACCORDING TO XMLSCHEMA ID registered_customers))


Câu lệnh CREATE VIEW tạo ra một khung nhìn của bảng khách hàng (customer)
và bảng nhà phân phối (distributor). Câu lệnh chèn đầu tiên chèn dữ liệu vào bảng
DISTRIBUTOR nếu dữ liệu XML được lưu giữ trong bảng DETAILS (Các chi
tiết) là hợp lệ đối với lược đồ XML DISTRIBUTOR. Câu lệnh chèn thứ hai này
chèn dữ liệu vào bảng CUSTOMER nếu dữ liệu XML được lưu giữ trong bảng
DETAILS là hợp lệ đối với lược đồ XML REGISTERED_CUSTOMERS.
Sự phụ thuộc của ràng buộc kiểm tra và khung nhìn vào lược đồ XML
Các ràng buộc kiểm tra và các khung nhìn được tạo ra ở bên trên một bảng với các
ràng buộc kiểm tra trên một cột XML sẽ phụ thuộc vào các lược đồ XML. Nếu
lược đồ bị hủy bỏ, thì các ràng buộc kiểm tra không thể kiểm tra xác nhận hợp lệ
đối với lược đồ đã bị hủy bỏ và vì thế hoạt động chèn thành công.

Liệt kê 9. Sự phụ thuộc của ràng buộc kiểm tra và khung nhìn vào lược đồ
XML

DROP XSROBJECT customer
DROP VIEW cust_dist_view
INSERT INTO customer VALUES(201, cust_info)
INSERT INTO cust_dist_view VALUES (202, details);



Các hoạt động chèn vào bảng CUSTOMER và khung nhìn CUST_DIST_VIEW sẽ

thành công mà không cần bất kỳ xác nhận hợp lệ nào.


Bắt buộc xác nhận hợp lệ tự động thông qua các tri-gơ
Trong tình huống mà một ứng dụng được phát triển theo một cách mà rất khó thay
đổi câu lệnh chèn để thực hiện một việc xác nhận hợp lệ tường minh, quản trị viên
cơ sở dữ liệu có thể viết một tri-gơ, câu lệnh này sẽ được kích hoạt trên mọi hoạt
động chèn hoặc cập nhật để thực hiện xác nhận hợp lệ một cách tự động.
DB2 9.5 đã đưa vào khái niệm xác nhận hợp lệ tự động ép buộc các văn bản XML
gửi đến bằng cách sử dụng tri-gơ BEFORE. Bất cứ khi nào một hoạt động chèn
hoặc cập nhật được thực hiện trên một bảng, thì việc xác nhận hợp lệ tự động đảm
bảo rằng các tài liệu XML được xác nhận hợp lệ đối với lược đồ XML được chỉ
định. Hoạt động xác nhận hợp lệ tự động này được thực hiện ở phần hành động
của câu lệnh tri-gơ bằng cách sử dụng hàm XMLVALIDATE.
Tạo ra câu lệnh tri-gơ BEFORE để ép buộc xác nhận hợp lệ tự động
Bất cứ khi nào một tài liệu XML được chèn hoặc được cập nhật trong một bảng thì
câu lệnh tri-gơ được thi hành. Phần hành động của câu lệnh tri-gơ bao gồm hàm
XMLVALIDATE để xác nhận hợp lệ các tài liệu XML với lược đồ XML được chỉ
định.
Lấy ví dụ: Bảng nhân viên (employee) có chứa ID của nhân viên và các thông tin
về nhân viên đó. Cột EMP_ID các ID nhân viên có kiểu dữ liệu integer, và cột
INFO các thông tin về nhân viên có kiểu XML. Cột INFO chứa thông tin của nhân
viên như tên, chức vụ, mức lương, ngày gia nhập công ty, bộ phận công tác và các
chi tiết liên hệ được mô tả trong một tài liệu XML. Việc xác nhận hợp lệ tự động
các tài liệu XML gửi đến có thể được áp đặt như sau.

Liệt kê 10. Xác nhận hợp lệ thông tin về nhân viên bằng cách sử dụng câu
lệnh tri gơ BEFORE

CREATE TABLE employee (emp_id INTEGER, info XML);



CREATE TRIGGER val_trig NO CASCADE BEFORE INSERT on employee
REFERENCING NEW AS n
FOR EACH ROW MODE DB2 SQL
BEGIN ATOMIC
set (n.info) = XMLVALIDATE (n.info ACCORDING TO XMLSCHEMA ID
employee);
END


Hàm XMLVALIDATE ở phần hành động của câu lệnh tri-gơ sẽ xác nhận hợp lệ
các thông tin về nhân viên đã chỉ rõ trong cột INFO. Mệnh đề ACCORDING TO
XMLSCHEMA được sử dụng để xác nhận hợp lệ cột INFO đối với lược đồ XML
employee. Khi một tài liệu XML được đưa vào bảng EMPLOYEE, thì câu lệnh
tri-gơ BEFORE INSERT được thực thi và tài liệu XML được xác nhận hợp lệ đối
với lược đồ employee. Chỉ khi xác nhận hợp lệ thành công thì bản ghi sẽ được
chèn vào bảng.
Lưu ý: Nếu câu lệnh tri-gơ thất bại khi xác nhận hợp lệ tài liệu XML, thì tài liệu
không được chèn vào. Nó cũng không trả lại bất kỳ thông báo lỗi nào.
Sử dụng vị từ IS {NOT} VALIDATED trong mệnh đề WHEN
Luôn có khả năng là ứng dụng đã xác nhận hợp lệ tài liệu XML trước khi chèn nó
nào. Tuy nhiên, cũng có thể đã có một câu lệnh tri-gơ xác định thực hiện xác nhận
hợp lệ tự động. Trong tình huống như vậy thì việc xác nhận hợp lệ lại tài liệu
XML một lần nữa chỉ mang lại thêm tải cho công việc.
Trong trường hợp này, câu lệnh tri-gơ có thể được triển khai để trước tiên xác
minh xem việc xác nhận hợp lệ đã được hoàn tất chưa. Nếu đã hoàn tất, nó bỏ qua
quá trình xác nhận hợp lệ bằng cách sử dụng mệnh đề WHEN ở bên trong thân câu
lệnh tri-gơ. Chỉ khi mệnh đề WHEN được đánh giá là true thì phần hành động của
câu lệnh tri-gơ sẽ được thực thi. Ví dụ sau minh họa việc sử dụng mệnh đề WHEN

trong câu lệnh tri-gơ.

Liệt kê 11. Sử dụng mệnh đề WHEN trong câu lệnh tri gơ BEFORE
UPDATE

CREATE TRIGGER val_trig NO CASCADE BEFORE UPDATE ON employee
REFERENCING NEW AS n
FOR EACH ROW MODE DB2 SQL
WHEN (n.info IS NOT VALIDATED ACCORDING TO XMLSCHEMA ID
employee)
BEGIN ATOMIC
set (n.info) = XMLVALIDATE(n.info ACCORDING TO XMLSCHEMA ID
employee);
END


Vị từ IS VALIDATED trả về kết quả là true nếu tài liệu đã được xác nhận hợp lệ
đối với lược đồ đã chỉ rõ và trả về kết quả là false nếu trái lại. Vị từ IS NOT
VALIDATED trả về kết quả là true nếu tài liệu XML không hợp lệ đối với lược
đồ đã xác định. Nếu tài liệu XML đã được xác nhận hợp lệ, nó trả về kết quả là
false. Do đó, nếu tài liệu đã được xác nhận hợp lệ, nó không kiểm tra lại nữa. Nếu
tài liệu chưa được xác nhận hợp lệ, thì nó thi hành phần hành động của câu lệnh
tri-gơ và kiểm tra tính hợp lệ của tài liệu XML theo lược đồ đã xác định.
Trong liệt kê mã 11, mệnh đề WHEN kiểm tra để xác định xem có phải tài liệu
XML INFO chưa được xác nhận hợp lệ đối với lược đồ EMPLOYEE hay không.
Nếu điều này là đúng, thì sau đó tài liệu INFO được xác nhận hợp lệ đối với lược
đồ EMPLOYEE trong câu lệnh tri-gơ. Nếu trái lại thì phần hành động của các câu
lệnh tri-gơ không được thực thi.
Xác nhận hợp lệ tài liệu XML đối với một lược đồ nằm trong một URI cụ thể
Chúng ta có thể xác nhận hợp lệ các tài liệu XML đối với lược đồ XML nằm trong

một URI cụ thể. Mệnh đề ACCORDING TO XMLSCHEMA được sử dụng để xác
nhận hợp lệ tài liệu XML INFO đối với một URI được chỉ định như là một phần
của hàm XMLVALIDATE. Liệt kê 12 là một ví dụ.

Liệt kê 12. Xác nhận hợp lệ thông tin về nhân viên đối với một URI đã xác
định

CREATE TRIGGER val_trig NO CASCADE BEFORE INSERT ON employee
REFERENCING NEW as n
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
set n.info = XMLVALIDATE(n.info ACCORDING TO XMLSCHEMA URI
'');
END


Hàm XMLVALIDATE xác nhận hợp lệ các thông tin của nhân viên đối với lược
đồ đã chỉ rõ là ở tại URI
Hạn chế các hàm XML trên các biến trung chuyển
Các câu lệnh tri-gơ BEFORE của DB2 9,5 có hạn chế đối với việc sử dụng các
hàm trên các biến trung chuyển. Nếu bạn sử dụng bất kỳ hàm XML khác nào trên
các biến trung chuyển khác với hàm XMLVALIDATE, thì việc tạo ra tri-gơ sẽ
thất bại. Ví dụ:

Liệt kê 13. Sử dụng hàm XMLELEMENT trên một biến trung chuyển

CREATE TRIGGER val_trig NO CASCADE BEFORE INSERT ON employee
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC

set (n.id) = 1000;
set (n.info) = XMLDOCUMENT(XMLELEMENT(name Russel, n.info));
END


Câu lệnh CREATE TRIGGER này sẽ thất bại vì phần hành động của câu lệnh tri-
gơ sử dụng hàm XMLELEMENT trên biến trung chuyển n.info.


Sử dụng các vị từ IS VALIDATED và IS NOT VALIDATED trong các câu lệnh
SELECT
Hoạt động xác nhận hợp lệ là tùy chọn trong DB2. Một bảng có thể lưu trữ kết hợp
cả các tài liệu XML được xác nhận hợp lệ lẫn không được xác nhận hợp lệ trong
cùng một cột XML duy nhất. Vị từ IS VALIDATED trả về kết quả true nếu tài
liệu XML hợp lệ đối với bất kỳ lược đồ cụ thể nào hoặc đối với bất kỳ lược đồ đã
được đăng ký nào, nếu không hợp lệ thì nó sẽ trả về kết quả là false. Vị từ IS NOT
VALIDATED trả về kết quả là true nếu tài liệu XML không hợp lệ đối với lược
đồ đã chỉ định hoặc bất kỳ lược đồ được đăng ký nào, nếu trái lại thì nó sẽ trả về
kết quả là false. Các vị từ cũng có thể được sử dụng trong mệnh đề WHERE của
câu lệnh SELECT.

Liệt kê 14. Sử dụng vị từ IS VALIDATED

SELECT cust_id, cust_info FROM customer
WHERE cust_info IS VALIDATED


Câu lệnh này sẽ chỉ lấy ra các tài liệu CUST_INFO từ bảng CUSTOMER được
xác nhận hợp lệ đối với bất kỳ lược đồ đã đăng ký nào. Bạn có thể sử dụng mệnh
đề ACCORDING TO để chỉ lấy các tài liệu XML được xác nhận hợp lệ đối với

một lược đồ đã định như trong liệt kê 15:

Liệt kê 15. Sử dụng vị từ IS VALIDATED với mệnh đề ACCORDING TO

SELECT cust_id, cust_info FROM customer
WHERE cust_info IS VALIDATED ACCORDING TO XMLSCHEMA ID
registered_customers


Câu lệnh sẽ chỉ lấy ra tài liệu XML CUST_INFO từ bảng CUSTOMER được xác
nhận hợp lệ đối với lược đồ REGISTERED_CUSTOMERS.

Liệt kê 16. Sử dụng vị từ IS NOT VALIDATED

SELECT cust_id, cust_info FROM customer
WHERE info IS NOT VALIDATED


Câu lệnh này sẽ lấy ra các tài liệu CUST_INFO từ bảng CUSTOMER không được
xác nhận hợp lệ đối với một lược đồ XML đã đăng ký. Chúng ta có thể sử dụng
mệnh đề ACCORDING TO với vị từ IS NOT VALIDATED như trong liệt kê 17:

Liệt kê 17. Sử dụng vị từ IS NOT VALIDATED với mệnh đề ACCORDING
TO

SELECT cust_id, cust_info FROM customer
WHERE info IS NOT VALIDATED ACCORDING TO XMLSCHEMA ID
registered_customers



Câu lệnh này lấy ra tất cả các tài liệu XML CUST_INFO từ bảng CUSTOMER
không được xác nhận hợp lệ đối với lược đồ XML
REGISTERED_CUSTOMERS.


Băm nhỏ các giá trị của XML vào các cột quan hệ
Các ràng buộc chẳng hạn như quan hệ khóa chính - khóa ngoài và tính duy nhất
giá trị không áp dụng được cho các giá trị cụ thể của một tài liệu XML. Tuy nhiên
nếu ứng dụng có yêu cầu như vậy cho một phần tử cụ thể trong một tài liệu XML,
thì ta có thể chia nhỏ tài liệu, đưa giá trị của phần tử này vào cột quan hệ, và sau
đó áp dụng các ràng buộc sao cho phù hợp. Mã trong liệt kê 18 chọn các giá trị từ
bảng EMPLOYEE và chèn nó vào một bảng tạm thời bằng cách băm nhỏ các giá
trị từ cột XML INFO của bảng EMPLOYEE.

Liệt kê 18. Băm giá trị của phần tử XML vào cột quan hệ bằng cách sử dụng
SQL/XML

INSERT INTO TEMP (SELECT id,info FROM
employee, xmltable('$INFO/employee' COLUMNS id INT PATH '@id') AS t)


Tuy nhiên, kiểu băm dữ liệu này tạo ra dữ liệu trùng lặp. Vì vậy bạn cần phải đảm
bảo rằng dữ liệu là nhất quán trên nhiều địa điểm. Ở đây, giá trị của ID trong cột
quan hệ được băm nhỏ luôn luôn phải khớp với giá trị trong cột XML. Tính nhất
quán về dữ liệu này có thể được duy trì bằng cách tạo ra một thủ tục lưu sẵn cho
các hoạt động INSERT và UPDATE tại cột này. Bất cứ khi nào người sử dụng
chèn một giá trị XML vào, có thể dùng hoạt động băm nhỏ để lấy dữ liệu từ giá trị
XML và lưu nó vào cột quan hệ tương ứng. Tương tự như vậy, hoạt động
UPDATE có thể cũng cập nhật giá trị quan hệ. Các hoạt động ngược lại có thể

×