PDF:

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 ([email protected])
Kỹ sư phần mềm
IBM
06 11 2009
Madhavi Kaza ([email protected])
Kỹ sư phần mềm
EMC
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.
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
© Copyright IBM Corporation 2009
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
Nhẫn hiệu đăng ký
Trang 1 của 12
developerWorks®
ibm.com/developerWorks/vn/
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="http://www.w3.org/2001/XMLSchema"
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 http://posample.org 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ệ.
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
Trang 2 của 12
ibm.com/developerWorks/vn/
developerWorks®
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.
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
Trang 3 của 12
developerWorks®
ibm.com/developerWorks/vn/
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ụ
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
Trang 4 của 12
ibm.com/developerWorks/vn/
developerWorks®
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á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
Trang 5 của 12
developerWorks®
ibm.com/developerWorks/vn/
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.
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
Trang 6 của 12
ibm.com/developerWorks/vn/
developerWorks®
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.
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
Trang 7 của 12
developerWorks®
ibm.com/developerWorks/vn/
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
'http://posample1.org');
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 http://posample1.org
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
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
Trang 8 của 12
ibm.com/developerWorks/vn/
developerWorks®
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)
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
Trang 9 của 12
developerWorks®
ibm.com/developerWorks/vn/
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ể hoặc bị giới hạn hoặc được thực hiện bằng cách sử dụng
các thủ tục lưu sẵn tương tự (cập nhật trong cột quan hệ cũng cập nhật tài liệu XML). Liệt kê 19 cho
thấy một ví dụ về một thủ tục lưu sẵn, nó băm dữ dữ liệu và sau đó chèn các giá trị đúng vào cột.
Liệt kê 19. Thủ tục lưu sẵn INSERT
CREATE PROCEDURE INSERTEMPLOYEE (XML INFO)
P1: BEGIN
DECLARE P1 INTEGER;
SELECT ID INTO P1 FROM XMLTABLE('$INFO/employee' PASSING INFO AS "INFO"
COLUMNS ID INT PATH '@id') AS T;
INSERT INTO TEMP
VALUES (ID, INFO);
END P1
Tóm tắt
DB2 9 hỗ trợ dữ liệu XML trong định dạng nguyên sinh của nó và cung cấp các tùy chọn khác nhau
để truy vấn dữ liệu. Trong bài viết này chúng ta đã xem xét nhiều cách mới để đảm bảo rằng dữ liệu
XML vẫn còn nhất quán khi dữ liệu được truy vấn, chèn, cập nhật hoặc bị xóa. Sự hỗ trợ tri gơ cho
XML cho phép sử dụng hàm XMLVALIDATE để thực hiện xác nhận hợp lệ tự động. Bạn có thể sử
dụng bất kỳ tùy chọn nào trong các tùy chọn này để đảm bảo rằng dữ liệu vẫn nhất quán và đúng
đắn trong vòng đời của nó.
Lời cảm ơn
Các tác giả xin cảm ơn Susan Malaika và Iti Rawat đã hiệu đính bài viết này và cho chúng tôi các
gợi ý có giá trị.
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
Trang 10 của 12
ibm.com/developerWorks/vn/
developerWorks®
Tài nguyên
Học tập
• "Phát triển các lược đồ XML của bạn bằng cách sử dụng DB2 pureXML" Xử lý các thay đổi của
lược đồ XML của bạn bằng cách sử dụng đặc tính XSR DB2.
• "Tổng quan về các cải tiến pureXML mới của DB2, phiên bản 9.5" (developerWorks, Tháng 11
năm 2007): Tìm hiểu về các đặc tính và các cải tiến của pureXML DB2, phiên bản 9.5.
• "Chia nhỏ tài liệu XML bằng cách sử dụng DB2 pureXML" (developerWorks, tháng Giêng năm
2008): Tìm hiểu về hai phương thức phân rã XML trong DB2 cho Linux, UNIX và Windows.
• Duyệt qua hiệu sách công nghệ để tìm sách về chủ đề này và các chủ đề kỹ thuật khác.
Lấy sản phẩm và công nghệ
• Tải về DB2 Express-C, phiên bản miễn phí của máy chủ cơ sở dữ liệu DB2 Express cho cộng
đồng trong đó bao gồm pureXML.
• Tải về phiên bản dùng thử miễn phí của DB2 cho Linux, UNIX và Windows.
• Tải về phiên bản đánh giá sản phẩm của IBM và dùng thử các công cụ phát triển ứng dụng và
các sản phẩm phần giữa (middleware ) từ DB2, Lotus®, Rational®, Tivoli® và WebSphere®.
Thảo luận
• Xem trang developerWorks blogs và tham gia vào cộng đồng developerWorks.
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
Trang 11 của 12
developerWorks®
ibm.com/developerWorks/vn/
Đôi nét về các tác giả
Manoj Sardana
Manoj Sardana là kỹ sư phần mềm trong biên chế, làm việc tại phòng thí nghiệm phần
mềm của IBM tại Ấn Độ. Hiện tại ông làm việc cho nhóm phát triển pureQuery. Trước
đây ông đã phát triển các ứng dụng mẫu cho các đặc tính mới của DB2. Ông cũng
từng làm việc cho dự án kiểm thử kiểm tra chức năng hoạt động cho DB2. Ông là một
nhà phát triển ứng dụng được IBM chứng nhận và là nhà quản trị cơ sở dữ liệu tiên tiến
cho DB2 9. Ông cũng là nhà phát triển giải pháp được IBM chứng nhận, cho XML và
cho công nghệ liên quan.
Madhavi Kaza
Madhavi Kaza làm việc cho nhóm trình diễn công nghệ và các mẫu ID của DB2 tại
phòng thí nghiệm phần mềm tại Ấn Độ. Cô phát triển các ví dụ mẫu cho các đặc tính
XML. Cô đã phát triển nhiều ví dụ mẫu XML cho các đặc tính XML của DB2 9 và 9.5
và bây giờ đang phát triển các ứng dụng mẫu cho DB2 9.7.
© Copyright IBM Corporation 2009
(www.ibm.com/legal/copytrade.shtml)
Nhẫn hiệu đăng ký
(www.ibm.com/developerworks/vn/ibm/trademarks/)
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
Trang 12 của 12