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