Quản lý các lược đồ XML trong DB2 Phần 2: Quá trình phát triển lược đồ XML và quản lý dữ liệu XML - Pdf 11

Quản lý các lược đồ XML trong DB2
Phần 2: Quá trình phát triển lược đồ XML và quản lý
dữ liệu XML
Giới thiệu
Các bài viết trong loạt bài này
 Phần 1: Quản lý các lược đồ XML và xác nhận hợp lệ dữ liệu XML: Khám phá cả hai vị
trí lược đồ và một ID quan hệ để quản lý các lược đồ XML và xác nhận hợp lệ dữ liệu
XML
Thật quan trọng để phân tích liên tục nghiệp vụ của bạn, xem xét xem cần quản lý loại dữ liệu
nào và cập nhật dữ liệu sao cho phù hợp. XML có ích vì nó linh hoạt, nhưng nó cũng quan trọng
để định nghĩa cấu trúc và xử lý dữ liệu XML dựa trên cấu trúc làm cho dữ liệu tin cậy. Sử dụng
một lược đồ XML để định nghĩa cấu trúc.
Một lược đồ XML được cập nhật (được phát triển) như là một kết quả phân tích nghiệp vụ. Đối
với việc phát triển lược đồ XML, đây là những kịch bản điển hình.
Các từ viết tắt thông dụng
 SQL: Ngôn ngữ truy vấn có cấu trúc
 XML: Ngôn ngữ đánh dấu mở rộng
 XSD: Định nghĩa lược đồ XML
 Phát triển lược đồ XML (tương thích hướng lên).
Phát triển lược đồ XML, tương thích hướng lên với lược đồ XML hiện có. Bằng cách đó,
dữ liệu XML hiện có phù hợp với lược đồ XML mới mà không cần sửa đổi dữ liệu XML.
 Phát triển lược đồ XML (không tương thích) và chuyển đổi dữ liệu XML.
Phát triển lược đồ XML nhưng nó không tương thích với lược đồ XML hiện có. Dữ liệu
XML hiện có được chuyển đổi cho phù hợp với lược đồ XML mới.
 Phát triển lược đồ XML (không tương thích) và quản lý dữ liệu XML mà không cần
chuyển đổi.
Phát triển lược đồ XML nhưng nó không tương thích với lược đồ XML hiện có. Dữ liệu
XML hiện tại không được chuyển đổi, và bạn quản lý nó với lược đồ XML hiện có.
Bài viết này giải thích các kịch bản này.
Về đầu trang
Phát triển lược đồ XML (tương thích hướng lên)

<phone>11-2222-3333</phone>
<email>[email protected]</email>
</customer>

Lược đồ XML trong Liệt kê 1 được đăng ký với các lệnh sau đây. (Để đăng ký lược đồ XML và
nhập khẩu dữ liệu XML, hãy tham khảo bài viết đầu tiên trong loạt bài "Quản lý lược đồ XML
trong DB2, Phần 1: Quản lý lược đồ XML và xác nhận hợp lệ dữ liệu XML", xem phần Tài
nguyên để biết liên kết).
Lưu ý: Lệnh DB2 không phân biệt chữ hoa, chữ thường. Dữ liệu XML và các vị trí lược đồ phân
biệt chữ hoa, chữ thường. Liệu vị trí vật lý như '/work/customer1.xsd' có phân biệt chữ hoa, chữ
thường không còn tùy thuộc vào hệ điều hành. (Windows® không phân biệt chữ hoa, chữ
thường. Linux® và UNIX® phân biệt chữ hoa, chữ thường).
REGISTER XMLSCHEMA 'cust1.xsd' FROM '/work/cust1.xsd' AS SAMPLE2.CUST1;
COMPLETE XMLSCHEMA SAMPLE2.CUST1;

Lệnh sau tạo bảng T1 và nhập khẩu dữ liệu XML trong Liệt kê 2 vào bảng T1.
CREATE TABLE T1 (ID INT NOT NULL PRIMARY KEY, XMLDATA XML NOT NULL);
IMPORT FROM /work/cust1.del of del XML FROM /work
XMLVALIDATE USING SCHEMA SAMPLE2.CUST1 INSERT INTO T1;

Tệp cust1.del được sử dụng trong lệnh IMPORT (nhập khẩu) ở trên chứa thông tin sau. Đặt giá
trị 1 trong cột ID.
1, "<XDS FIL='cust1.xml'/>"

Ban hành câu lệnh SQL sau đây để nhận được ID đối tượng của lược đồ XML, ID quan hệ, và vị
trí lược đồ thường dùng để xác nhận hợp lệ mỗi bản ghi trong bảng T1. Câu lệnh SQL sau sử
dụng một phép nối ngoài sao cho kết quả này có chứa các bản ghi chưa được xác nhận hợp lệ và
các bản ghi được xác nhận hợp lệ với các lược đồ XML đã bị loại bỏ.
db2 => SELECT T1.ID,
XMLXSROBJECTID(T1.XMLDATA) OBJECTID,

type="xs:string"/>
<xs:element name="email" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Đăng ký lược đồ XML trong Liệt kê 3 với các lệnh sau đây.
REGISTER XMLSCHEMA 'cust2.xsd' FROM '/work/cust2.xsd' AS SAMPLE2.CUST2;
COMPLETE XMLSCHEMA SAMPLE2.CUST2;

Lược đồ XML cust2.xsd tương thích hướng lên với lược đồ XML cust1.xsd sao cho có thể thay
thế cust1.xsd bằng cust2.xsd.
Để làm như vậy, hãy ban hành lệnh UPDATE XMLSCHEMA.
UPDATE XMLSCHEMA SAMPLE2.CUST1 WITH SAMPLE2.CUST2;

Lệnh này thay thế cust1.xsd đã đăng ký bằng cách sử dụng ID SAMPLE2.CUST1 quan hệ bằng
cust2.xsd.
Liệt kê 4 là dữ liệu XML phù hợp với lược đồ XML mới.

Liệt kê 4. cust2.xml

<?xml version="1.0"?>
<customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="cust1.xsd">
<name>cust2</name>
<address>address2</address>
<phone>22-3333-4444</phone>
<cell-phone>090-4444-5555</cell-phone>
<email>[email protected]</email>

xác nhận hợp lệ trước đó (dữ liệu XML có ID của nó là 1 trong ví dụ này) cũng phù hợp với lược
đồ XML mới.
ID quan hệ cũng không thay đổi, nhưng vị trí lược đồ được thay đổi theo vị trí lược đồ của lược
đồ XML mới. Ban hành câu lệnh SQL sau để nhận được ID quan hệ và vị trí lược đồ của mỗi
lược đồ XML đã đăng ký.
db2 => SELECT OBJECTID,
substr(OBJECTSCHEMA,1,12) OBJECTSCHEMA,
substr(OBJECTNAME,1,12) OBJECTNAME,
substr(SCHEMALOCATION,1,16) SCHEMALOCATION
FROM SYSCAT.XSROBJECTS;

OBJECTID OBJECTSCHEMA OBJECTNAME SCHEMALOCATION

65020719620281344 SAMPLE2 CUST1 cust2.xsd
66857945295662336 SAMPLE2 CUST2 cust2.xsd

2 record(s) selected.

Như kết quả ở trên cho thấy, hai bản ghi cùng trỏ tới cùng một vị trí lược đồ. Trong tình huống
này, dữ liệu XML chưa được xác nhận hợp lệ khi sử dụng vị trí lược đồ đó. Việc xác nhận hợp lệ
dữ liệu XML bằng vị trí lược đồ cust2.xsd bị hỏng như được hiển thị dưới đây vì không thể nói
các lược đồ XML nào với vị trí lược đồ cust2.xsd được sử dụng.
db2 => INSERT INTO T1(ID, XMLDATA) VALUES (22,
XMLVALIDATE(XMLPARSE(DOCUMENT
'<?xml version="1.0"?>
<customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="cust2.xsd">
<name>cust2-2</name>
<address>address2-2</address>
<phone>33-4444-5555</phone>

thể quản lý dữ liệu XML hiện có với lược đồ XML mới mà không cần bất kỳ thay đổi nào. Mặt
khác, các phần tử và các thuộc tính mới được thêm vào phải là tùy chọn để duy trì sự tương thích
hướng lên sao cho bạn không thể xác nhận hợp lệ sự tồn tại của chúng ngay cả khi bạn muốn
thông tin mới được bổ sung là bắt buộc. (Trong ví dụ trên, phần tử cell-phone được thêm vào.
Tuy nhiên, nó được thêm vào làm tùy chọn để cho dữ liệu XML không có phần tử cell-phone
cũng được xác nhận hợp lệ thành công). Đối với các yêu cầu khác với tương thích hướng lên,
hãy tham khảo bài viết của Trung tâm Thông tin DB2 và developerWorks, "Phát triển các lược
đồ XML của bạn bằng DB2 pureXML". Xem Tài nguyên để biết các liên kết.
Về đầu trang
Phát triển lược đồ XML (không tương thích) và chuyển đổi dữ liệu XML
Kịch bản này phát triển lược đồ XML là không tương thích với lược đồ XML hiện có. Dữ liệu
XML hiện có được chuyển đổi cho phù hợp với lược đồ XML mới
Liệt kê 5 thêm các phần tử home và cell dưới phần tử phone, và các phần tử đó quản lý số điện
thoại nhà và số điện thoại di động của một khách hàng sao cho phù hợp. Lược đồ XML của nó
trong Liệt kê 6.

Liệt kê 5. cust3.xml

<?xml version="1.0"?>
<customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="cust3.xsd">
<name>cust3</name>
<address>address3</address>
<phone>
<home>44-5555-6666</home>
<cell>090-6666-7777</cell>
</phone>
<email>[email protected]</email>
</customer>


Tệp cust3.del được sử dụng trong lệnh IMPORT ở trên có chứa thông tin sau. Đặt giá trị 3 trong
cột ID này.
3, "<XDS FIL='cust3.xml'/>"

Ban hành lại câu lệnh SQL sau đây để nhận được lược đồ XML nào xác nhận hợp lệ với mỗi dữ
liệu XML.
db2 => SELECT T1.ID,
XMLXSROBJECTID(T1.XMLDATA) OBJECTID,
substr(XSR.OBJECTSCHEMA,1,12) OBJECTSCHEMA,
substr(XSR.OBJECTNAME,1,12) OBJECTNAME,
substr(XSR.SCHEMALOCATION,1,16) SCHEMALOCATION
FROM T1 LEFT OUTER JOIN SYSCAT.XSROBJECTS XSR
ON XMLXSROBJECTID(T1.XMLDATA)=XSR.OBJECTID;

ID OBJECTID OBJECTSCHEMA OBJECTNAME SCHEMALOCATION

1 65020719620281344 SAMPLE2 CUST1 cust1.xsd
2 65020719620281344 SAMPLE2 CUST1 cust1.xsd
22 65020719620281344 SAMPLE2 CUST1 cust1.xsd
3 68398419340809216 SAMPLE2 CUST3 cust3.xsd

4 record(s) selected.

Dữ liệu XML với các ID là 1, 2, và 22 phù hợp với lược đồ XML cust2.xsd trong Liệt kê 3. (Khi
sử dụng ID SAMPLE2.CUST1 quan hệ, lược đồ XML này được thay thế bằng cust2.xsd trong
Liệt kê 3 được đăng ký làm vị trí lược đồ cust1.xsd). Các tập dữ liệu XML cần được thay đổi
như sau để phù hợp với cust3.xsd.
1. Các phần tử home và cell cần được thêm vào dưới /customer/phone.
2. Giá trị của /customer/phone được chuyển thành /customer/phone/home.
3. Nếu /customer/cell-phone được định nghĩa, giá trị này được chuyển thành

substr(XSR.SCHEMALOCATION,1,16) SCHEMALOCATION
FROM T1 LEFT OUTER JOIN SYSCAT.XSROBJECTS XSR
ON XMLXSROBJECTID(T1.XMLDATA)=XSR.OBJECTID;

ID OBJECTID OBJECTSCHEMA OBJECTNAME SCHEMALOCATION

1 68398419340809216 SAMPLE2 CUST3 cust3.xsd
2 68398419340809216 SAMPLE2 CUST3 cust3.xsd
22 68398419340809216 SAMPLE2 CUST3 cust3.xsd
3 68398419340809216 SAMPLE2 CUST3 cust3.xsd

4 record(s) selected.

Ban hành câu lệnh SQL sau để xem ID và dữ liệu XML trong bảng T1.
SELECT ID, XMLSERIALIZE(XMLDATA AS VARCHAR(500)) FROM T1;

Bạn có thể thêm hoặc thay đổi một vùng tên bằng cách sử dụng câu lệnh UPDATE, nhưng bạn
cần ánh xạ tất cả các phần tử. Nếu cust3.xsd trong Liệt kê 6 có vùng tên
"http://www.sample.com/customer3", thì câu lệnh UPDATE sau làm việc.
UPDATE T1
SET XMLDATA=XMLVALIDATE(XMLQUERY(
'declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance";
declare namespace cust="http://www.sample.com/customer3";
copy $new := $XMLDATA
modify (
do replace $new/customer with
<cust:customer xsi:schemaLocation="http://www.sample.com/customer3
cust3.xsd">
<cust:name>{$new/customer/name/text()}</cust:name>
<cust:address>{$new/customer/address/text()}</cust:address>


Trong ví dụ ở Figure 2, ứng dụng xác định lược đồ XML được sử dụng cho dữ liệu XML từ giá
trị cột khác (trong ví dụ này là ngày tạo). Khi nhận được dữ liệu XML, ứng dụng cũng nhận
được các cột dữ liệu để xác định lược đồ XML, và xử lý dữ liệu XML dựa vào nó. Trong Figure
2, ứng dụng sẽ tổ chức một bảng có ID quan hệ liên quan đến phạm vi ngày tạo. Thay vì ID quan
hệ, bạn có thể sử dụng vị trí lược đồ hoặc một cái gì đó như số phiên bản để xác định lược đồ
XML.

Hình 2. Xử lý dữ liệu XML, ở nơi mà mỗi dữ liệu XML được xác nhận hợp lệ với một trong
các lược đồ XML khác nhau

Thay vì xác nhận hợp lệ dữ liệu XML bằng cách sử dụng hàm/tùy chọn XMLVALIDATE với
các câu lệnh INSERT/UPDATE hoặc lệnh IMPORT, bạn có thể sử dụng các tri-gơ. Các câu lệnh
"CREATE TRIGGER" sau đây dùng cho câu lệnh UPDATE để xác nhận hợp lệ dữ liệu XML
với lược đồ XML của ID quan hệ SAMPLE2.ORDER2008 nếu giá trị cột CREATION_DATE
bằng hoặc lớn hơn 2008-01-01 (Liệt kê 7), để xác nhận hợp lệ dữ liệu XML với lược đồ XML
bằng cách sử dụng ID quan hệ SAMPLE2.ORDER2002 nếu giá trị cột CREATION_DATE nằm
giữa 2002-01-01 và 2007-12-31 (Liệt kê 8). Bạn có thể làm điều tương tự với câu lệnh INSERT,
cũng bị ảnh hưởng tới lệnh IMPORT. Có lệnh LOAD tương tự như lệnh IMPORT. Mặc dù lệnh
LOAD không gọi ra tri-gơ, nó có tùy chọn XMLVALIDATE có cú pháp của nó tương tự như
lệnh IMPORT.

Liệt kê 7. Tri gơ để xác nhận hợp lệ dữ liệu XML có giá trị cột CREATION_DATE của nó
bằng hoặc lớn hơn "2008-01-01"

CREATE TRIGGER UPDATE_ORDER2008 NO CASCADE BEFORE UPDATE ON SAMPLE2.ORDER
REFERENCING NEW AS N
FOR EACH ROW
WHEN (N.CREATION_DATE >= '2008-01-01')
BEGIN ATOMIC

Sự liên quan tới việc phát triển lược đồ XML với tương thích hướng lên là dữ liệu XML không
thể được xác nhận hợp lệ với sự tồn tại của các phần tử và các thuộc tính mới được thêm vào. Sự
liên quan khác là dữ liệu XML có khả năng trông rất tệ do phản ánh các yêu cầu mới, có thể dẫn
đến bị lỗi. Để giải quyết các lo lắng đó, bạn cần phát triển một lược đồ XML không tương thích
với lược đồ XML hiện có. Có hai kịch bản cho rằng: Chuyển đổi dữ liệu XML hiện có để tương
thích với lược đồ XML mới hoặc quản lý dữ liệu XML khi nó có thể biết lược đồ XML của
mình.


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status