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 pptx

13 466 0
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 pptx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Quản lý lược đồ XML DB2 Phần 2: Quá trình phát triển lược đồ XML quản lý liệu XML Giới thiệu Các viết loạt  Phần 1: Quản lý lược đồ XML xác nhận hợp lệ liệu XML: Khám phá hai vị trí lược đồ ID quan hệ để quản lý lược đồ XML xác nhận hợp lệ liệu XML Thật quan trọng để phân tích liên tục nghiệp vụ bạn, xem xét xem cần quản lý loại liệu cập nhật liệu cho phù hợp XML có ích linh hoạt, quan trọng để định nghĩa cấu trúc xử lý liệu XML dựa cấu trúc làm cho liệu tin cậy Sử dụng lược đồ XML để định nghĩa cấu trúc Một lược đồ XML cập nhật (được phát triển) kết phân tích nghiệp vụ Đối với việc phát triển lược đồ XML, kịch đ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 có Bằng cách đó, liệu XML có phù hợp với lược đồ XML mà không cần sửa đổi liệu XML Phát triển lược đồ XML (không tương thích) chuyển đổi liệu XML Phát triển lược đồ XML khơng tương thích với lược đồ XML có Dữ liệu XML có chuyển đổi cho phù hợp với lược đồ XML Phát triển lược đồ XML (khơng tương thích) quản lý liệu XML mà không cần chuyển đổi Phát triển lược đồ XML khơng tương thích với lược đồ XML có Dữ liệu XML khơng chuyển đổi, bạn quản lý với lược đồ XML có   Bài viết giải thích kịch Về đầu trang Phát triển lược đồ XML (tương thích hướng lên) Kịch phát triển lược đồ XML tương thích hướng lên với lược đồ XML có Bằng cách đó, liệu XML có phù hợp với lược đồ XML mà khơng cần sửa đổi liệu XML Ví dụ, viết sử dụng thông tin khách hàng đơn giản sau Lược đồ XML có Liệt kê Dữ liệu XML phù hợp với lược đồ XML Liệt kê Liệt kê cust1.xsd (lược đồ XML) Liệt kê cust1.xml cust1 address1 11-2222-3333 cust1@sample.com Lược đồ XML Liệt kê đăng ký với lệnh sau (Để đăng ký lược đồ XML nhập liệu XML, tham khảo viết loạt "Quản lý lược đồ XML DB2, Phần 1: Quản lý lược đồ XML xác nhận hợp lệ 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ị trí lược đồ phân biệt chữ hoa, chữ thường Liệu vị trí vật lý '/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® 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 nhập liệu XML Liệt kê 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 sử dụng lệnh IMPORT (nhập khẩu) chứa thông tin sau Đặt giá trị cột ID 1, "" Ban hành câu lệnh SQL sau để nhận ID đối tượng lược đồ XML, ID quan hệ, vị trí lược đồ thường dùng để xác nhận hợp lệ ghi bảng T1 Câu lệnh SQL sau sử dụng phép nối ngồi cho kết có chứa ghi chưa xác nhận hợp lệ ghi xác nhận hợp lệ với 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 record(s) selected Giả sử phần tử phone (điện thoại) XML mẫu có số điện thoại nhà khách hàng Bây bạn thêm số điện thoại di động vào XML Bạn định nghĩa lược đồ XML tương thích hướng lên với lược đồ XML có Để làm vậy, phần tử có khơng thay đổi, bạn thêm phần tử cho số điện thoại di động (phần tử cell-phone), cấu hình phần tử thêm vào làm tùy chọn (minOccurs="0") Xem Liệt kê Liệt kê cust2.xsd Đăng ký lược đồ XML Liệt kê với lệnh sau 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 cho thay cust1.xsd cust2.xsd Để làm vậy, ban hành lệnh UPDATE XMLSCHEMA UPDATE XMLSCHEMA SAMPLE2.CUST1 WITH SAMPLE2.CUST2; Lệnh thay cust1.xsd đăng ký cách sử dụng ID SAMPLE2.CUST1 quan hệ cust2.xsd Liệt kê liệu XML phù hợp với lược đồ XML Liệt kê cust2.xml cust2 address2 22-3333-4444 090-4444-5555 cust2@sample.com Ban hành lệnh sau để chèn liệu XML vào bảng T1 sau xác nhận hợp lệ với lược đồ XML ID quan hệ SAMPLE2.CUST1 Nó 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 sử dụng lệnh IMPORT có chứa thơng tin sau Đặt giá trị cột ID 2, "" Ban hành câu lệnh SQL sau lần để xem lược đồ XML xác nhận hợp lệ với tập 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 - -1 65020719620281344 65020719620281344 OBJECTSCHEMA -SAMPLE2 SAMPLE2 OBJECTNAME -CUST1 CUST1 SCHEMALOCATION -cust2.xsd cust2.xsd record(s) selected Dữ liệu XML có ID xác nhận hợp lệ với lược đồ XML Như kết cho thấy, ID đối tượng không thay đổi sau 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 ví dụ này) phù hợp với lược đồ XML ID quan hệ khơng thay đổi, vị trí lược đồ thay đổi theo vị trí lược đồ lược đồ XML Ban hành câu lệnh SQL sau để nhận ID quan hệ vị trí lược đồ 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 -65020719620281344 66857945295662336 OBJECTSCHEMA -SAMPLE2 SAMPLE2 OBJECTNAME -CUST1 CUST2 SCHEMALOCATION -cust2.xsd cust2.xsd record(s) selected Như kết cho thấy, hai ghi trỏ tới vị trí lược đồ Trong tình này, liệu XML chưa xác nhận hợp lệ sử dụng vị trí lược đồ Việc xác nhận hợp lệ liệu XML vị trí lược đồ cust2.xsd bị hỏng hiển thị khơng thể nói lược đồ XML với vị trí lược đồ cust2.xsd sử dụng db2 => INSERT INTO T1(ID, XMLDATA) VALUES (22, XMLVALIDATE(XMLPARSE(DOCUMENT ' cust2-2 address2-2 33-4444-5555 090-5555-6666 cust2-2@sample.com ')) ); 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ỏ lược đồ XML hiển thị đây, việc ban hành câu lệnh INSERT thành công DROP XSROBJECT SAMPLE2.CUST2; Vì vậy, lược đồ XML cần loại bỏ sau thay lược đồ XML có lược đồ XML Với mục đích này, sử dụng tùy chọn DROP NEW SCHEMA (loại bỏ lược đồ mới) lệnh UPDATE XMLSCHEMA UPDATE XMLSCHEMA SAMPLE2.CUST1 WITH SAMPLE2.CUST2 DROP NEW SCHEMA; Lý khác vị trí lược đồ thay vị trí lược đồ Kết là, vị trí lược đồ chứa liệu XML có khơng phù hợp Có thể giải điều cách đăng ký lược đồ XML với vị trí lược đồ có hiển thị 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 vậy, sau thay lược đồ XML, sử dụng vị trí lược đồ xác nhận hợp lệ liệu XML Nếu lược đồ XML phát triển tương thích hướng lên với lược đồ XML có, quản lý liệu XML có với lược đồ XML mà khơng cần thay đổi Mặt khác, phần tử thuộc tính thêm vào phải tùy chọn để trì tương thích hướng lên cho bạn xác nhận hợp lệ tồn chúng bạn muốn thông tin bổ sung bắt buộc (Trong ví dụ trên, phần tử cell-phone thêm vào Tuy nhiên, thêm vào làm tùy chọn liệu XML khơng có phần tử cell-phone xác nhận hợp lệ thành công) Đối với yêu cầu khác với tương thích hướng lên, tham khảo viết Trung tâm Thông tin DB2 developerWorks, "Phát triển lược đồ XML bạn DB2 pureXML" Xem Tài nguyên để biết liên kết Về đầu trang Phát triển lược đồ XML (khơng tương thích) chuyển đổi liệu XML Kịch phát triển lược đồ XML khơng tương thích với lược đồ XML có Dữ liệu XML có chuyển đổi cho phù hợp với lược đồ XML Liệt kê thêm phần tử home cell phần tử phone, phần tử quản lý số điện thoại nhà số điện thoại di động khách hàng cho phù hợp Lược đồ XML Liệt kê Liệt kê cust3.xml cust3 address3 44-5555-6666 090-6666-7777 cust3@sample.com Liệt kê cust3.xsd Lược đồ XML liệu XML (trong Liệt kê 6) đăng ký nhập hiển thị 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 sử dụng lệnh IMPORT có chứa thơng tin sau Đặt giá trị cột ID 3, "" Ban hành lại câu lệnh SQL sau để nhận lược đồ XML xác nhận hợp lệ với 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 - -1 65020719620281344 65020719620281344 22 65020719620281344 68398419340809216 OBJECTSCHEMA -SAMPLE2 SAMPLE2 SAMPLE2 SAMPLE2 OBJECTNAME -CUST1 CUST1 CUST1 CUST3 SCHEMALOCATION -cust1.xsd cust1.xsd cust1.xsd cust3.xsd record(s) selected Dữ liệu XML với ID 1, 2, 22 phù hợp với lược đồ XML cust2.xsd Liệt kê (Khi sử dụng ID SAMPLE2.CUST1 quan hệ, lược đồ XML thay cust2.xsd Liệt kê đăng ký làm vị trí lược đồ cust1.xsd) Các tập liệu XML cần thay đổi sau để phù hợp với cust3.xsd Các phần tử home cell cần thêm vào /customer/phone 2 Giá trị /customer/phone chuyển thành /customer/phone/home Nếu /customer/cell-phone định nghĩa, giá trị chuyển thành /customer/phone/cell, xóa /customer/cell-phone Thay đổi giá trị thuộc tính xsi:noNamespaceSchemaLocation cho cust3.xsd (Điều không cần thiết sử dụng ID quan hệ xác nhận hợp lệ liệu XML) Ban hành câu lệnh SQL sau để áp dụng thay đổi nói liệu XML, xác nhận hợp lệ với lược đồ XML sử dụng ID quan hệ SAMPLE2.CUST1, xác nhận hợp lệ liệu XML thay đổi với lược đồ XML 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 ( replace $new/customer/phone with {$new/customer/phone/text()} {$new/customer/cell-phone/text()} , replace value of $new/customer/@xsi:noNamespaceSchemaLocation with "cust3.xsd", 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 lần để xem lược đồ XML xác nhận hợp lệ với liệu XML Kết cho thấy tất ghi xác nhận hợp lệ với lược đồ XML 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 - -1 68398419340809216 68398419340809216 22 68398419340809216 68398419340809216 OBJECTSCHEMA -SAMPLE2 SAMPLE2 SAMPLE2 SAMPLE2 OBJECTNAME -CUST3 CUST3 CUST3 CUST3 record(s) selected Ban hành câu lệnh SQL sau để xem ID liệu XML bảng T1 SCHEMALOCATION -cust3.xsd cust3.xsd cust3.xsd cust3.xsd SELECT ID, XMLSERIALIZE(XMLDATA AS VARCHAR(500)) FROM T1; Bạn thêm thay đổi vùng tên cách sử dụng câu lệnh UPDATE, bạn cần ánh xạ tất phần tử Nếu cust3.xsd Liệt kê có vùng tên "http://www.sample.com/customer3", 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 ( replace $new/customer with {$new/customer/name/text()} {$new/customer/address/text()} {$new/customer/phone/text()} {$new/customer/cell-phone/text()} {$new/customer/email/text()} ) return $new')) WHERE XMLXSROBJECTID(XMLDATA)=(SELECT OBJECTID FROM SYSCAT.XSROBJECTS WHERE OBJECTSCHEMA='SAMPLE2' AND OBJECTNAME='CUST1') Về đầu trang Phát triển lược đồ XML (khơng tương thích) quản lý liệu XML mà không cần chuyển đổi Kịch phát triển lược đồ XML không tương thích với lược đồ XML có Dữ liệu XML có khơng chuyển đổi, bạn quản lý lược đồ XML có DB2 chứa kiểu liệu XML khác cột Kịch cần ứng dụng để xử lý tập liệu XML với lược đồ XML Tơi đề cập đến vấn đề phát triển lược đồ XML có tương thích hướng lên, nơi khơng thể kiểm tra tồn phần tử thuộc tính thêm vào Trong kịch này, kiểm tra chúng Và, không thay đổi phần tử thuộc tính có, sử dụng chương trình với lược đồ XML khác (Nhưng bạn cần xử lý trường hợp thu giá trị phần tử thuộc tính thêm vào) Trong ví dụ Figure 1, ứng dụng trì cặp ID đối tượng lược đồ XML phiên chúng Các phiên mà bạn gán cho, bạn biết cấu trúc XML (có nghĩa lược đồ XML) từ phiên Bạn sử dụng ID quan hệ vị trí lược đồ làm phiên Khi nhận liệu XML, ứng dụng nhận ID đối tượng lược đồ XML Sau đó, ứng dụng xác định lược đồ XML từ phiên kết hợp với ID đối tượng lược đồ, xử lý liệu XML dựa phiên Hình Xử lý liệu XML, nơi mà liệu XML xác nhận hợp lệ với lược đồ XML khác Trong ví dụ Figure 2, ứng dụng xác định lược đồ XML sử dụng cho liệu XML từ giá trị cột khác (trong ví dụ ngày tạo) Khi nhận liệu XML, ứng dụng nhận cột liệu để xác định lược đồ XML, xử lý liệu XML dựa vào Trong Figure 2, ứng dụng tổ chức bảng có ID quan hệ liên quan đến phạm vi ngày tạo Thay ID quan hệ, bạn sử dụng vị trí lược đồ số phiên để xác định lược đồ XML Hình Xử lý liệu XML, nơi mà liệu XML xác nhận hợp lệ với lược đồ XML khác Thay xác nhận hợp lệ liệu XML cách sử dụng hàm/tùy chọn XMLVALIDATE với câu lệnh INSERT/UPDATE lệnh IMPORT, bạn sử dụng tri-gơ Các câu lệnh "CREATE TRIGGER" sau dùng cho câu lệnh UPDATE để xác nhận hợp lệ liệu XML với lược đồ XML ID quan hệ SAMPLE2.ORDER2008 giá trị cột CREATION_DATE lớn 2008-01-01 (Liệt kê 7), để xác nhận hợp lệ liệu XML với lược đồ XML cách sử dụng ID quan hệ SAMPLE2.ORDER2002 giá trị cột CREATION_DATE nằm 2002-01-01 2007-12-31 (Liệt kê 8) Bạn làm điều tương tự với câu lệnh INSERT, bị ảnh hưởng tới lệnh IMPORT Có lệnh LOAD tương tự lệnh IMPORT Mặc dù lệnh LOAD khơng gọi tri-gơ, có tùy chọn XMLVALIDATE có cú pháp tương tự lệnh IMPORT Liệt kê Tri gơ để xác nhận hợp lệ liệu XML có giá trị cột CREATION_DATE lớ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ê Tri gơ để xác nhận hợp lệ liệu XML có giá trị cột CREATION_DATE nằm 2002-01-01 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 Về đầu trang Kết luận Các viết loạt  Phần 1: Quản lý lược đồ XML xác nhận hợp lệ liệu XML: Khám phá hai vị trí lược đồ ID quan hệ để quản lý lược đồ XML xác nhận hợp lệ liệu XML Khi phát triển liệu XML tương thích hướng lên với lược đồ XML có, bạn quản lý liệu XML có với lược đồ XML mà không cần thay đổi Ngay sau phát triển lược đồ XML, bạn sử dụng ID quan hệ vị trí lược đồ để xác định lược đồ XML thường dùng để xác nhận hợp lệ liệu XML Nhưng sử dụng vị trí lược đồ, lược đồ XML phải bị loại bỏ sau thay lược đồ XML có lược đồ Ngoài ra, đăng ký lược đồ XML trước thay lược đồ XML có, bạn cần đăng ký với vị trí lược đồ tương tự lược đồ XML 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 liệu XML xác nhận hợp lệ với tồn phần tử thuộc tính thêm vào Sự liên quan khác liệu XML có khả trơng tệ phản ánh yêu cầu mới, dẫn đến bị lỗi Để giải lo lắng đó, bạn cần phát triển lược đồ XML khơng tương thích với lược đồ XML có Có hai kịch cho rằng: Chuyển đổi liệu XML có để tương thích với lược đồ XML quản lý liệu XML biết lược đồ XML ... Lược đồ XML Liệt kê đăng ký với lệnh sau (Để đăng ký lược đồ XML nhập liệu XML, tham khảo viết loạt "Quản lý lược đồ XML DB2, Phần 1: Quản lý lược đồ XML xác nhận hợp lệ liệu XML" , xem phần. .. hai vị trí lược đồ ID quan hệ để quản lý lược đồ XML xác nhận hợp lệ liệu XML Khi phát triển liệu XML tương thích hướng lên với lược đồ XML có, bạn quản lý liệu XML có với lược đồ XML mà không... Kịch phát triển lược đồ XML khơng tương thích với lược đồ XML có Dữ liệu XML có khơng chuyển đổi, bạn quản lý lược đồ XML có DB2 chứa kiểu liệu XML khác cột Kịch cần ứng dụng để xử lý tập liệu XML

Ngày đăng: 09/03/2014, 04:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan