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.
- 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.
Phát triển lược đồ XML (tương thích hướng lên)
Kịch bản này 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.
Ví dụ, bài viết này sử dụng thông tin khách hàng đơn giản sau đây. Lược đồ XML hiện có trong Liệt kê 1. Dữ liệu XML phù hợp với lược đồ XML trong Liệt kê 2.
Liệt kê 1. cust1.xsd (lược đồ XML)
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="customer">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="phone" type="xs:string"/>
<xs:element name="email" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
|
Liệt kê 2. cust1.xml
<?xml version="1.0"?>
<customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="cust1.xsd">
<name>cust1</name>
<address>address1</address>
<phone>11-2222-3333</phone>
<email>cust1@sample.com</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,
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 cust2.xsd
1 record(s) selected.
|
Giả sử phần tử phone (điện thoại) trong XML mẫu
có số điện thoại nhà của khách hàng. Bây giờ bạn thêm một số điện thoại di
động vào XML.
Bạn có thể định nghĩa một lược đồ XML mới tương thích hướng lên với lược đồ
XML hiện có. Để làm như vậy, các phần tử hiện có không thay đổi, nhưng bạn
thêm một phần tử mới cho số điện thoại di động (phần tử
cell-phone), và cấu hình phần tử được thêm vào
làm tùy chọn (minOccurs="0"). Xem Liệt kê 3.
Liệt kê 3. cust2.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="customer">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="phone" type="xs:string"/>
<xs:element name="cell-phone" minOccurs="0" 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>cust2@sample.com</email>
</customer>
|
Ban hành lệnh sau đây để chèn dữ liệu XML vào trong bảng T1 sau khi xác nhận hợp lệ nó với lược đồ XML bằng ID quan hệ SAMPLE2.CUST1. Nó sẽ thành công.
IMPORT FROM /work/cust2.del of del XML FROM /work XMLVALIDATE USING SCHEMA SAMPLE2.CUST1 INSERT INTO T1; |
Tệp cust2.del được sử dụng trong lệnh IMPORT ở trên có chứa thông tin sau đây. Đặt giá trị 2 trong cột ID này.
2, "<XDS FIL='cust2.xml'/>" |
Ban hành câu lệnh SQL sau đây một lần nữa để xem lược đồ XML nào xác nhận hợp lệ với mỗi tập 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 cust2.xsd
2 65020719620281344 SAMPLE2 CUST1 cust2.xsd
2 record(s) selected.
|
Dữ liệu XML có ID của nó là 2 được xác nhận hợp lệ với lược đồ XML mới. Như kết quả ở trên cho thấy, ID đối tượng không thay đổi ngay cả sau khi cập nhật lược đồ XML. Dữ liệu XML đã 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>
<cell-phone>090-5555-6666</cell-phone>
<email>cust2-2@sample.com</email>
</customer>'))
);
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL16196N XML document contains an element "customer" that is not correctly
specified. Reason code = "37" SQLSTATE=2200M
|
Nếu bạn loại bỏ một trong các lược đồ XML như hiển thị dưới đây, thì việc ban hành câu lệnh INSERT ở trên là thành công.
DROP XSROBJECT SAMPLE2.CUST2; |
Vì vậy, lược đồ XML mới cần được loại bỏ sau khi thay thế lược đồ XML hiện có bằng lược đồ XML mới. Với mục đích này, có thể sử dụng tùy chọn DROP NEW SCHEMA (loại bỏ lược đồ mới) bằng lệnh UPDATE XMLSCHEMA.
UPDATE XMLSCHEMA SAMPLE2.CUST1 WITH SAMPLE2.CUST2 DROP NEW SCHEMA; |
Lý do khác là vị trí lược đồ này cũng được thay thế bằng vị trí lược đồ mới. Kết quả là, vị trí lược đồ được chứa trong dữ liệu XML hiện có không phù hợp. Có thể giải quyết điều này bằng cách đăng ký lược đồ XML mới với vị trí lược đồ hiện có như được hiển thị dưới đây.
REGISTER XMLSCHEMA 'cust1.xsd' FROM '/work/cust2.xsd' AS SAMPLE2.CUST2; COMPLETE XMLSCHEMA SAMPLE2.CUST2; |
Sau đó cập nhật lại lược đồ XML với tùy chọn DROP NEW SCHEMA.
UPDATE XMLSCHEMA SAMPLE2.CUST1 WITH SAMPLE2.CUST2 DROP NEW SCHEMA; |
Nhờ làm như vậy, ngay cả sau khi thay thế lược đồ XML, vẫn có thể sử dụng vị trí lược đồ này khi xác nhận hợp lệ dữ liệu XML.
Nếu lược đồ XML được phát triển như là tương thích hướng lên với lược đồ
XML hiện có, thì có 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.
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>cust3@sample.com</email>
</customer>
|
Liệt kê 6. cust3.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="customer">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="phone" type="phoneType"/>
<xs:element name="email" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="phoneType">
<xs:sequence>
<xs:element name="home" type="xs:string"/>
<xs:element name="cell" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
|
Lược đồ XML và dữ liệu XML (trong các Liệt kê 5 và 6) được đăng ký và được nhập khẩu như được hiển thị dưới đây.
REGISTER XMLSCHEMA 'cust3.xsd' FROM '/work/cust3.xsd' AS SAMPLE2.CUST3; COMPLETE XMLSCHEMA SAMPLE2.CUST3; IMPORT FROM /work/cust3.del of del XML FROM /work XMLVALIDATE USING SCHEMA SAMPLE2.CUST3 INSERT INTO T1; |
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.
- Các phần tử
homevàcellcần được thêm vào dưới/customer/phone. - Giá trị của
/customer/phoneđược chuyển thành/customer/phone/home. - Nếu
/customer/cell-phoneđược định nghĩa, giá trị này được chuyển thành/customer/phone/cell, và xóa/customer/cell-phone. - Thay đổi giá trị của thuộc tính
xsi:noNamespaceSchemaLocationcho cust3.xsd. (Điều này là không cần thiết nếu sử dụng ID quan hệ khi xác nhận hợp lệ dữ liệu XML).
Ban hành câu lệnh SQL sau để áp dụng các thay đổi nói trên đối với dữ liệu XML, đã được xác nhận hợp lệ với lược đồ XML khi sử dụng ID quan hệ SAMPLE2.CUST1, và xác nhận hợp lệ dữ liệu XML đã thay đổi với lược đồ XML bằng cách sử dụng vị trí lược đồ cust3.xsd.
UPDATE T1
SET XMLDATA=XMLVALIDATE(XMLQUERY(
'declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance";
copy $new := $XMLDATA
modify (
do replace $new/customer/phone with
<phone>
<home>{$new/customer/phone/text()}</home>
<cell>{$new/customer/cell-phone/text()}</cell>
</phone>,
do replace value of $new/customer/@xsi:noNamespaceSchemaLocation with "cust3.xsd",
do delete $new/customer/cell-phone )
return $new'))
WHERE XMLXSROBJECTID(XMLDATA)=(SELECT OBJECTID FROM SYSCAT.XSROBJECTS WHERE
OBJECTSCHEMA='SAMPLE2' AND OBJECTNAME='CUST1')
|
Ban hành câu lệnh SQL sau một lần nữa để xem lược đồ XML nào xác nhận hợp lệ với mỗi dữ liệu XML. Kết quả này cho thấy tất cả các bản ghi được xác nhận hợp lệ với lược đồ XML bằng cách sử dụng vị trí lược đồ cust3.xsd.
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 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>
<cust:phone>
<cust:home>{$new/customer/phone/text()}</cust:home>
<cust:cell>{$new/customer/cell-phone/text()}</cust:cell>
</cust:phone>
<cust:email>{$new/customer/email/text()}</cust:email>
</cust:customer> )
return $new'))
WHERE XMLXSROBJECTID(XMLDATA)=(SELECT OBJECTID FROM SYSCAT.XSROBJECTS WHERE
OBJECTSCHEMA='SAMPLE2' AND OBJECTNAME='CUST1')
|
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
Kịch bản này phát triển lược đồ XML không tương thích với lược đồ XML hiện có. Dữ liệu XML hiện có không được chuyển đổi, và bạn quản lý nó bằng lược đồ XML hiện có. DB2 có thể chứa các kiểu dữ liệu XML khác nhau trong cùng một cột.
Kịch bản này cần một ứng dụng để xử lý từng tập dữ liệu XML với lược đồ XML của nó.
Tôi đã đề cập đến vấn đề về phát triển một lược đồ XML có tương thích hướng lên, ở nơi không thể kiểm tra được 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. Trong kịch bản này, có thể kiểm tra chúng. Và, nếu không thay đổi các phần tử và các thuộc tính hiện có, thì có thể sử dụng cùng một chương trình với các lược đồ XML khác nhau. (Nhưng bạn cần xử lý trường hợp không thể thu được các giá trị của các phần tử và các thuộc tính mới được thêm vào).
Trong ví dụ ở Figure 1, ứng dụng vẫn duy trì các cặp các ID đối tượng của lược đồ XML và các phiên bản của chúng. Các phiên bản là những gì mà bạn gán cho, và bạn biết cấu trúc XML (có nghĩa là lược đồ XML) từ phiên bản này. Bạn có thể sử dụng ID quan hệ hoặc vị trí lược đồ làm phiên bản. Khi nhận được dữ liệu XML, ứng dụng cũng nhận được ID đối tượng của lược đồ XML. Sau đó, ứng dụng xác định lược đồ XML từ phiên bản này kết hợp với ID đối tượng của lược đồ, và xử lý dữ liệu XML dựa trên phiên bản của nó.
Hình 1. 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
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 SET (N.XMLDATA) = XMLVALIDATE(N.XMLDATA ACCORDING TO XMLSCHEMA ID SAMPLE2.ORDER2008); END |
Liệt kê 8. Tri gơ để xác nhận hợp lệ dữ liệu XML có giá trị cột CREATION_DATE của nó nằm giữa 2002-01-01 và 2007-12-31
CREATE TRIGGER UPDATE_ORDER2002 NO CASCADE BEFORE UPDATE ON SAMPLE2.ORDER REFERENCING NEW AS N FOR EACH ROW WHEN (N.CREATION_DATE < '2008-01-01' AND N.CREATION_DATE >= '2002-01-01') BEGIN ATOMIC SET (N.XMLDATA) = XMLVALIDATE(N.XMLDATA ACCORDING TO XMLSCHEMA ID SAMPLE2.ORDER2002); END |
Khi phát triển dữ liệu XML tương thích hướng lên với lược đồ XML hiện có, bạn có 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. Ngay cả sau khi phát triển lược đồ XML, bạn có thể sử dụng hoặc các ID quan hệ hoặc các vị trí lược đồ để xác định lược đồ XML thường dùng để xác nhận hợp lệ dữ liệu XML. Nhưng khi sử dụng vị trí lược đồ, lược đồ XML mới phải bị loại bỏ sau khi thay thế lược đồ XML hiện có bằng một lược đồ mới. Ngoài ra, khi đăng ký lược đồ XML mới trước khi thay thế lược đồ XML hiện có, bạn cần đăng ký nó với vị trí lược đồ tương tự như lược đồ XML hiện có.
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.
Học tập
- Quản lý
lược đồ XML trong DB2, Phần 1: Quản lý các lược đồ XML và xác nhận hợp
lệ dữ liệu XML (Masahiro Ohkawa, developerWorks, 02.2010): Đọc bài
viết đầu tiên trong loạt bài này khi bạn 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.
- IBM DB2 9.7 cho Trung tâm Thông tin Linux, UNIX và Windows: Tìm
thêm nhiều thông tin về DB2 và pureXML.
- Thay đổi các đối tượng XSR đã đăng ký: Nhận thêm nhiều thông tin
trong Trung tâm Thông tin DB2 để đăng ký các đối tượng XSR.
- Phát triển một lược đồ XML: Đọc phần này trong trung tâm Thông
tin DB2 để tìm hiểu thêm.
- Lệnh REGISTER XMLSCHEMA: Xem tài liệu DB2 để biết thêm thông tin
về lệnh này.
- Lệnh UPDATE XMLSCHEMA: Tìm cú pháp lệnh của lệnh này trong Trung
tâm Thông tin DB2.
- Xem danh mục SYSCAT.XSROBJECTS: Tìm hiểu thêm trong Trung tâm
Thông tin DB2.
- Hàm vô hướng XMLXSROBJECTID: Đọc thêm về hàm này trong Trung tâm
Thông tin DB2.
- Hàm XMLVALIDATE: Xem tài liệu DB2 để biết thêm thông tin về hàm
này.
- Lệnh IMPORT: Xem tài liệu DB2 để biết thêm thông tin về lệnh
IMPORT.
- Khởi động xử lý dữ liệu XML: Xem phần này trong Trung tâm Thông
tin DB2 để biết thêm thông tin về việc sử dụng các tri-gơ để xử lý dữ liệu
XML.
- Hướng
dẫn DB2 9 pureXML: Tìm thông tin về lưu trữ dữ liệu pureXML, thiết
kế và quản trị cơ sở dữ liệu lai trong sách Đỏ của IBM này.
- Phát triển các lược đồ XML của bạn bằng cách sử dụng DB2 pureXML
(Khurram Faraaz, Ronny Bartsch, Susan Malaika, developerWorks, 03.2008):
Tìm hiểu cách xử lý các thay đổi để phát triển các lược đồ XML bằng cách
sử dụng các tính năng Đăng ký lược đồ DB2 pureXML (XSR - DB2 pureXML
Schema Registry.
- "Bảo quản các truy vấn XML trong quá trình phát triển lược đồ"
(Mirella Moura Moro, Susan Malaika, Lifyeow Lim, developerWorks, 06.2007):
Khám phá một hướng dẫn viết các truy vấn hoạt động tốt trên các thay đổi
lược đồ XML. Bài viết này mở rộng nguyên tắc phân loại các thay đổi có thể
áp dụng cho một lược đồ XML trong quá trình phát triển của nó. Sau đó nó
kiểm tra tác động của các thay đổi đó lên quá trình xác nhận hợp lệ của
lược đồ (cả hai xác nhận hợp lệ trước và sau) và đánh giá truy
vấn
- Cập nhật XML trong DB2 9.5, (Matthias Nicola, Uttam Jain,
developerWorks, 10.2007): Phương tiện cập nhật XQuery (XQuery Update
Facility) cho phép bạn chỉnh sửa, chèn, hoặc xóa các phần tử riêng và các
thuộc tính trong một tài liệu XML. Trong bài viết này, tìm thêm về chức
năng của Phương tiện cập nhật XQuery, ví dụ về các hoạt động cập nhật XML
điển hình, và cách tránh những cạm bẫy phổ biến.
- Bắt đầu với IBM DB2 Express-C: Truy cập vào trang chủ dành cho
DB2 Express-C.
- Vùng XML trên
developerWorks: Nhận được tài nguyên mà bạn cần để nâng cao kỹ
năng của bạn trong lĩnh vực XML.
- Chứng chỉ XML
của IBM: Tìm hiểu cách bạn có thể trở thành một nhà phát triển có
chứng chỉ của IBM về XML và các công nghệ liên quan.
- Thư
viện kỹ thuật XML: Xem Vùng XML của developerWorks với một vùng
rộng lớn các bài viết kỹ thuật và các lời khuyên, các hướng dẫn, các tiêu
chuẩn, và các sách Đỏ của IBM.
- Các sự kiện kỹ thuật và Webcast
của developerWorks: Theo sát với công nghệ trong các phiên
này.
- developerWorks podcasts: Nghe
các cuộc phỏng vấn và thảo luận thú vị dành cho các nhà phát triển phần
mềm.
Lấy sản phẩm và công nghệ
-
Các phiên bản đánh giá sản phẩm
IBM: Tải về hoặc khám phá các bản dùng thử trực
tuyến trong Sandbox SOA của IBM và nhận được các công cụ phát
triển ứng dụng thực hành của bạn và các sản phẩm phần mềm trung gian từ
DB2®, Lotus®, Rational®, Tivoli®, và
WebSphere®.
Thảo luận
- Tham gia diễn đàn thảo luận.
- Các
diễn đàn thảo luận vùng XML: Tham gia vào bất kỳ các cuộc thảo
luận liên quan đến XML nào.
- Các blog developerWorks: Đọc
các blog và dành thời gian cho chúng.