Tải bản đầy đủ (.pdf) (58 trang)

Ultimate mashup – Các dịch vụ Web và Web ngữ nghĩa (semantic Web), Phần 2 pot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (472.71 KB, 58 trang )

Ultimate mashup – Các dịch vụ Web và Web ngữ nghĩa (semantic Web),
Phần 2: Quản lý bộ đệm dữ liệu mashup
Tóm tắt: Rất nhiều ứng dụng lớn mà bạn sử dụng hàng ngày để tìm kiếm, mua
sắm trực tuyến hoặc để tìm đường đi trong thị trấn cung cấp dữ liệu cho bạn sử
dụng theo một cách hoàn toàn mới. Những người phát triển ứng dụng tạo ra nhiều
ứng dụng mashup để đạt được mục đích cụ thể từ việc kết hợp các tập dữ liệu của
một vài ứng dụng. Phần 1 của loạt bài này đã đề cập một ứng dụng, đó là bắt đầu
rút dữ liệu từ một số dịch vụ và tổ hợp nó lại. Bây giờ chúng ta sẽ xem xét làm thế
nào để lưu các kết quả yêu cầu vào một cơ sở dữ liệu DB2 9, cộng với làm giảm
tải các dịch vụ mở rộng đó và cải tiến hiệu suất một cách đáng kể.
Trước khi bạn bắt đầu
Hướng dẫn này dành cho những người phát triển web muốn học cách sử dụng và
kết hợp các dịch vụ web từ quan điểm của XML và xuất dữ liệu XML tới web.
Điều đó có nghĩa là bạn đã biết về Java™, XML, SQL, việc phát triển web và các
khái niệm cơ bản của các dịch vụ web. Sự hiểu biết về JDBC sẽ rất có ích. Nếu
bạn cần nhớ lại các chủ đề đó thì hãy xem lại phần Các tài nguyên để có thêm
thông tin.
Giới thiệu về loạt bài này
Bạn không thể thay đổi hoàn toàn trang web mà không nhảy vào một trang web
mà ở đó cho phép bạn truy cập đến các dữ liệu của nó thông qua một API dựa trên
các dịch vụ Web, hoặc sử dụng dữ liệu từ một trang khác thu được thông qua API
dựa trên các dịch vụ web. Khi bạn xem xét ưu điểm của thông tin hiện có trong
các ứng dụng của riêng bạn, điều đó không chắc là có sự ngạc nhiên lớn nào. Điều
đó không chỉ là vấn đề thời gian trước khi ai đó bắt đầu kết hợp dữ liệu từ các hệ
thống khác nhau để tạo ra vài thông tin trọn vẹn. Các ứng dụng này được gọi là
các mashup. Các mashup là ứng dụng gần đây nhất trên web, từ các trang dựa trên
cộng đồng tới các trang tìm kiếm chuyên biệt.
Hầu hết các Mashup đều rất hữu ích, chúng có điểm chung là được phát triển với
tập các dịch vụ riêng biệt. Nếu một trong các dịch vụ thay đổi hoặc nếu sở thích
của bạn với các loại dịch vụ thay đổi thì bạn sẽ có nhiều việc phải làm.
Mục đích của các bước hướng dẫn này là tạo nhanh một ứng dụng mashup để


người dùng có thể thêm hoặc hủy các dịch vụ một cách tùy ý và hệ thống sẽ không
biết được người dùng đã làm gì với chúng. Loạt bài tiến hành như sau:
Trong phần 1, Nicholas Chase đã giới thiệu các khái niệm của mashup, đã chỉ ra
các mashup làm việc như thế nào và chỉ dẫn bạn quá trình xây dựng một phiên bản
đơn giản như thế nào (xem Các tài nguyên). Bạn cũng đã nhận thấy các vấn đề về
hiệu suất quan trọng khi thực hiện gọi hàng tá các trang web tiềm ẩn.
Trong phần 2, bạn giải quyết vài vấn đề đó bằng cách sử dụng khả năng
pureXML™ mới của IBM® DB2® để xây dựng một nơi lưu trữ XML, nơi này
lưu trữ các kết quả của các yêu cầu trước đó và cũng cho phép bạn lấy thông tin
đặc trưng.
Cuối cùng, bạn sẽ cần sử dụng các bản thể luận (ontology) hoặc các từ vựng mà
các khái niệm và mối quan hệ giữa chúng là xác định, do đó trong phần 3 bạn bắt
đầu quá trình đó bằng việc tìm hiểu về RDF và RDFS, hai thành phần khóa của
Web Ontology Language (OWL). Các vấn đề này ta sẽ thảo luận trong phần 4. Ở
phần 5, chúng tôi đưa ra các bản thể luận mà bạn đã tạo ra ở phần 4 và sử dụng
chúng để cho phép người dùng thay đổi các nguồn thông tin.
Trong phần 6, những điều thú vị sẽ tăng lên. Tại đó, bạn có một ứng dụng đang
thực thi và khung làm việc (framework) trong đó, do vậy hệ thống có thể sử dụng
tùy ý suy dẫn ngữ nghĩa để hiểu các dịch vụ. Trong phần này, bạn đưa ra kiểm
soát người dùng, cho phép họ ánh xạ các dịch vụ mới vào bản thể luận và nhấc
hoặc chọn dữ liệu được dùng với một mashup tùy ý.


Giới thiệu về bài viết này
Bài viết này là phần 2 trong một loạt bài gồm 6 bài viết về sử dụng và kết hợp các
dịch vụ web như thế nào từ quan điểm của XML và xuất dữ liệu lên web. Trong
phần 1, bạn đã học về việc lựa chọn XML từ các dịch vụ sử dụng REST, nhưng
các khái niệm về các dịch vụ SOAP là tương tự (xem Các tài nguyên). Bạn sẽ tiếp
tục loạt bài này với việc lưu trữ các dữ liệu XML đó vào một cơ sở dữ liệu, tạo ra
một bộ đệm lưu trữ các kết quả truy vấn. Hơn nữa bạn sẽ lấy được các dữ liệu đã

lưu trữ để sử dụng trong các ứng dụng Java của bạn.
Sau bài viết này, bạn sẽ học cách cài đặt một máy chủ cơ sở dữ liệu (database
server) như thế nào và sửa đổi nó để nhận dữ liệu cũng như là viết các câu truy
vấn như thế nào để gắn một dữ liệu XML vào một cột XML một cách rõ ràng.
Bạn sẽ học về:
 Cài đặt DB2 Enterprise Edition
 Tạo một cơ sở dữ liệu DB2 9 mới, cấu hình nó để gắn với XML
 Tạo một bảng cơ sở dữ liệu sử dụng kiểu cột XML
 Chọn thông tin đã lưu dưới dạng XML trong cơ sở dữ liệu quan hệ sử dụng
XPath
 Viết các câu truy vấn XML XQuery
 Viết các câu truy vấn SQL và XQuery lai ghép
Hướng dẫn này sử dụng Java, nhưng các khái niệm là giống nhau với bất kì ngôn
ngữ lập trình hoặc hệ điều hành nào.


Các điều kiện tiên quyết
Theo đoạn mã trong hướng dẫn này, bạn cần phải cài đặt và kiểm tra các phần
mềm sau đây:
 IBM® DB2® 9 (thường được gọi là "Viper"): Cơ sở dữ liệu quan hệ này
cũng chứa đựng những khả năng XML quan trọng, bạn sẽ cần chúng. Bạn
có thể tải về một phiên bản dùng thử của DB2 9 hoặc DB2 Enterprise 9
hoặc DB2 Express-C 9 một phiên bản miễn phí của máy chủ dữ liệu DB2
Express 9.
 Apache Tomcat hoặc một máy servlet khác: Bạn sẽ xây dựng các ứng dụng
web sử dụng các servlet, vì vậy bạn cần có một máy servlet chẳng hạn như
Apache Tomcat. Nếu bạn chọn xây dựng ứng dụng trên một môi trường
khác, hãy chắc chắn rằng bạn đã có nó trong tay. Tải về apache-tomcat-
5.5.17.zip và cài đặt vào một thư mục với tên thư mục không chứa dấu
cách.

 Java: Apache Tomcat 5.5 yêu cầu Java 1.5 hoặc cao hơn. Hãy tải về J2SE
SDK.
 Hãy làm cho mọi việc dễ dàng hơn, bạn có thể sử dụng một IDE chẳng hạn
như Eclipse hoặc IBM Rational Web Developer™. Bạn có thể tải về
Eclipse ở địa chỉ Eclipse.org, tải về một bản dùng thử Rational Web
Developer ở địa chỉ Rational Web Developer, hoặc bạn sử dụng một môi
trường phát triển mà bạn thích. Tuy nhiên bạn sẽ không làm những gì quá
sức với trình biên dịch và việc thực thi.

Đi một ngày đàng học một sàng khôn
Trước khi chúng ta bắt đầu việc tạo các nơi lưu trữ, hãy kiểm tra dữ liệu hiện có.
Bạn nên hiểu về bối cảnh của XML và các cơ sở dữ liệu.
Truyền DB2 9 vào ứng dụng
Các dịch vụ web là tiện ích cho việc xem thông tin một cách nhanh chóng. Ngày
nay, nhiều trang web cho người dùng truy cập trên giao diện hạn chế, đó là trình
duyệt. Bây giờ họ có thể truy cập chúng thông qua các dịch vụ web. Các dịch vụ
web được phổ biến và được sử dụng trong hầu hết các ứng dụng thứ cấp. Các ứng
dụng này gọi là mashup. Và các ứng dụng này nổi lên ở bất cứ đâu thông tin có thể
giúp giải quyết một vấn đề thích hợp.
Trong phần 1, bạn đã gặp mashup và đã bắt đầu lấy thông tin từ nhiều hơn một vị
trí nào đó, sửa đổi tập các dữ liệu vào các ứng dụng tùy ý của bạn (xem Các tài
nguyên). Bây giờ chúng ta muốn lưu tạm thời vào bộ đệm các tập dữ liệu để sử
dụng chúng một cách hợp lý. Tại sao phải lưu dữ liệu vào bộ đệm? Một lí do quan
trọng đó là các dịch vụ mà bạn kết nối có một lượng lớn các yêu cầu ở mọi thời
điểm. Bạn lấy các dữ liệu này miễn phí nên để lịch sự thì bạn giảm số lượng yêu
cầu mà bạn gửi đi trong suốt phiên làm việc của người dùng trên ứng dụng của
bạn. Bởi vì các ứng dụng không yêu cầu dữ liệu thời gian thực, bạn có thể làm
giảm tải băng thông một cách rõ ràng. Bạn cũng có thể lợi dụng kho dữ liệu cục
bộ, làm giảm thời gian cho truy vấn thực hiện (và trong hầu hết trường hợp là
nhiều truy vấn).

Để đạt được các mục tiêu đó, bạn sẽ tận dụng máy chủ DB2 và các đặc tính mới
của XML mà IBM đã giới thiệu trong phiên bản 9 cũng như vài mẹo Java để quản
lý việc lưu trữ tạm thời của bạn.
Dữ liệu quan hệ với dữ liệu XML
Một trong những lợi ích lớn nhất của việc sử dụng cơ sở dữ liệu quan hệ đó là tốc
độ mà ở đó bạn có thể truy cập và thao tác dữ liệu. Các mô hình hệ thống quản lý
cơ sở dữ liệu quan hệ RDBMS có thể phân tích lượng lớn dữ liệu trong các bảng
qua vài cơ sở dữ liệu và trả về các truy vấn gần như ngay lập tức. Chẳng hạn bạn
muốn biết "có bao nhiêu nắp cống đã được đặt ở Minneapolis MN bởi các nhà
thầu khác nhau vào tháng chín trong vòng 5 năm?". Nếu bạn biết viết truy vấn và
bạn có các cơ sở dữ liệu bạn có thể có câu trả lời trong nháy mắt. Một trở ngại đó
là bạn cần bản thân dữ liệu và truy cập tới nó. Nhưng dữ liệu đã chờ sẵn trong cơ
sở dữ liệu và bạn sẽ phải hiểu đưa nó tới nơi bạn cần như thế nào và hiểu nó theo
cách của bạn như thế nào.
Lưu trữ dữ liệu dưới định dạng đọc được và có khả năng truyền từ nơi này đến nơi
khác là một chức năng của XML. Khi dữ liệu được lưu trữ trong một cơ sở dữ liệu
dưới dạng các bảng giống như bảng tính, nó thường được định dạng cho ứng dụng
cụ thể. XML cho phép bạn lưu trữ dữ liệu ở phần mở rộng, con người có thể đọc
được định dạng, điều đó chuẩn bị sẵn sàng cho sự trao đổi giữa các ứng dụng với
con người. Bạn có thể sắp đặt tất cả các cách để phân chia dữ liệu và mang nó vào
các ứng dụng. Ở đó bạn có thể bắt đầu thao tác lại dữ liệu. Đây chính là nền tảng
để xây dựng khối mashup của bạn, khả năng tổ hợp dữ liệu từ hai ứng dụng rất
khác nhau, cấu trúc lại nó và tạo các biến thể của riêng bạn.
Những thách thức mà bạn phải đối mặt là làm thế nào để kích hoạt tính năng XML
để có thể xử lý một số các phân tích phức tạp hơn và làm thế nào để tận dụng lợi
thế của máy chủ DB tốc độ cao?
Hầu hết các cơ sở dữ liệu quan hệ cố gắng xử lý dữ liệu XML từ đầu. Nhưng hầu
hết các lần, các kỹ thuật của chúng có một chút hỗn độn, bao gồm việc lưu trữ dữ
liệu văn bản hoặc phá vỡ nó vào nhiều bảng. Một phần của vấn đề liên quan đến
dữ liệu XML khứ hồi (round tripping), hoặc lấy lại dữ liệu từ cơ sở dữ liệu theo

cấu trúc giống với trước khi lưu trữ và phần khác liên quan đến việc bạn sử dụng
các truy vấn quan hệ để truy cập dữ liệu đã được cấu trúc XML.
Mặt khác, các cơ sở dữ liệu XML nguyên gốc thường lưu trữ XML trong cấu trúc
chính xác ở chỗ mà chúng nhận được. Các cơ sở dữ liệu XML cũng cung cấp truy
cập đến dữ liệu sử dụng ngôn ngữ truy vấn được thiết kế đặc biệt cho XML như
XPath, XQuery và XUpdate.
Vì bạn đang làm việc với dữ liệu XML như là một phần của ứng dụng, bạn thực sự
cần có khả năng về cơ sở dữ liệu XML nguyên thủy. May thay, bạn có pureXML.


Dữ liệu XML lưu trữ trong DB2
pureXML là tên thuộc tính cho các bảng DB2. Các bảng này được thiết kế để lưu
các tài liệu XML được tổ chức tốt trong các cột, cùng với các cột chứa dữ liệu
quan hệ. Giống như các kiểu khác nhau của dữ liệu quan hệ nhị phân, chẳng hạn
như LONG, VARCHAR, hoặc LOB, được lưu trữ tách biệt với các nội dung khác
của bảng, dữ liệu XML được lưu trữ trong các cột của bảng có kiểu XML ở các
đối tượng lưu trữ XML mở rộng. Để sử dụng sức mạnh của các máy truy vấn của
DB2 để quản lý dữ liệu, bạn tách riêng XML với dữ liệu quan hệ mà bạn dùng để
chỉ số hóa nó. Một khi bạn lưu trữ XML và dữ liệu chỉ số quan hệ của nó, bạn có
thể truy cập nó qua một ngôn ngữ truy vấn đặc biệt.
XQuery là ngôn ngữ riêng của XML mà nó có thể truy cập dữ liệu XML sử dụng
các biểu thức XPath thay vì SQL. Nó là thành quả của World Wide Web
Consortium, bên cạnh XPath 2.0, trong những năm vừa rồi và đã đạt đến điểm mà
các sản phẩm chủ đạo như DB2 bắt đầu hỗ trợ cho nó.
XQuery tổ hợp các thủ tục đơn giản (chẳng hạn như vòng lặp) với XPath một cách
linh hoạt và mạnh mẽ cho việc lựa chọn và vận chuyển dữ liệu mà bạn không thể
thực hiện được với chỉ XPath.


Bạn định hoàn thành cái gì

Trong phần 1, bạn đã tạo ra một ứng dụng gọi tới một số dịch vụ, thu nhận dữ liệu
từ chúng như một luồng XML và chuyển đổi dữ liệu đó sang dạng HTML để hiển
thị trên trình duyệt (xem Các tài nguyên). Bởi vì đó là một mashup nên bạn đang
xử lý các dịch vụ. Thực tế, trong trường hợp các dịch vụ con, bạn phải thực hiện
hàng tá hoặc hơn các truy vấn cho một trang. Nếu bạn chạy ví dụ ở phần 1, bạn có
thể khó chịu vì độ dài của các truy vấn đó như thế nào.
Trong bài viết này, bạn sẽ tạo ra một hệ thống để lưu tạm thời các kết quả trả về từ
các dịch vụ khác nhau mà bạn sử dụng. Dữ liệu sẽ chứa thông tin trên URL,
thường là yêu cầu dữ liệu, ngày tháng, thời gian yêu cầu được thực hiện cũng như
các dữ liệu thực tế trả ra cho yêu cầu.
Trong servlet, trước tiên bạn sẽ kiểm tra cơ sở dữ liệu này, và nếu dữ liệu không
tồn tại bạn sẽ yêu cầu một bản sao mới nhất và lưu nó vào cơ sở dữ liệu trong lần
tiếp theo.
Bằng cách làm này, bạn có khả năng chuyển một trang có thể chứa một tá hoặc
hơn các yêu cầu web (và làm trong một phút hoặc thậm chí hơn) thành các kết quả
nhanh chóng. Điều đó cũng dễ dàng hơn nhiều trên các dịch vụ tìm kiếm.

Cài đặt
Khi bạn thêm vào một máy chủ DB2 thành một hỗn hợp, bạn sẽ cài "deamon" trên
một máy chủ thuận tiện nhất. Bạn nên có Tomcat và Apache được cài đặt sẵn,
nhưng bạn cũng sẽ cần kết nối Tomcat với cơ sở dữ liệu sử dụng JDBC.
Cài đặt DB2
Tải về phiên bản dùng thử DB2 9 (xem Các điều kiện tiên quyết). Bạn có thể đăng
nhập vào developerWorks và truy cập đến phiên bản beta DB2 mới nhất miễn phí
với khả năng hỗ trợ pureXML để lưu trữ XML. Chúng ta sẽ sử dụng các đặc tính
mới này để lưu trữ các đối tượng dữ liệu từ các truy vấn của ứng dụng.
Một khi bạn đã tải về phần mềm, hãy giải nén tệp ZIP và đặt tệp Setup.exe vào
thư mục db2\ESE\image. Nhấn đúp chuột và bắt đầu quá trình cài đặt với thuật sỹ
cài đặt (setup wizard). Cửa số đầu tiên là DB2 Setup Launchpad (xem Hình 1).


Hình 1. Setup Launchpad

Danh sách bên trái ghi vài lựa chọn, chọn Installation Prerequisites và Install a
Product. Các lựa chọn còn lại chứa những chuyển đổi từ các sản phẩm khác sang
và đưa ra các chú thích cho phiên bản DB2 này. Nếu đây là cài đặt mới, thì sự
chuyển đổi không có tác dụng. Nhưng nếu muốn, bạn hãy tiếp tục và đọc các chú
thích đưa ra để có các thông tin cơ bản về phiên bản DB2 này.
Bắt đầu với Installation Prerequisites, đó là các cài đặt quyết định thành công của
DB2. Danh sách đó nằm ngoài phạm vi của bài viết này. Bạn hãy cài đặt các thủ
tục cập nhật và vá hệ thống. Chúng tôi khuyên bạn theo dõi các liên kết đã cung
cấp ở Setup Launchpad. Các liên kết sẽ chỉ dẫn cho bạn các thông tin trong phạm
vi của yêu cầu. Các giới hạn thực hiện ở đây chính là việc chắc chắn rằng bạn cập
nhật và hỗ trợ tối thiểu các yêu cầu phần cứng như không gian đĩa và RAM. Một
khi bạn đã xác nhận rằng máy chủ của bạn đáp ứng được hãy nhấn chọn Install a
Product và bắt đầu cài đặt

Hình 2. Cài đặt một Product

Khi bạn chọn Install a Product từ thực đơn bên trái, chương trình cài đặt đưa cho
bạn lựa chọn để tạo một cài đặt mới của máy chủ (server) hoặc máy khách (client).
Với các mục tiêu của bài viết này, bạn sẽ cài đặt cả hai, cho bạn chức năng máy
chủ và có khả năng quản trị máy chủ của bạn sau khi nó được cài đặt. Bắt đầu với
Enterprise Server. Khi cửa sổ cài đặt installation Wizard bắt đầu, bạn chỉ cần nhấn
Next cho đến khi có hợp đồng đăng ký (license agreement). Nếu hợp đồng phù
hợp với bạn hãy chấp nhận và nhấn Next lần nữa.
Tiếp theo bạn sẽ lựa chọn cài đặt đặc trưng (typical), rút gọn (compact) hoặc tùy ý
(custom). Chọn cài đặt typical và nhấn Next để di chuyển đến cửa sổ tiếp theo.
Hộp thoại tiếp theo hỏi bạn nếu muốn cài đặt, hãy lưu lại các cài đặt phản hồi từ
cửa sổ wizard vào một tệp để sử dụng sau. Việc này có lợi khi bạn cài đặt các
server tương tự hoặc nếu bạn định sử dụng các đặc tính môi trường cơ sở dữ liệu

phân hoạch của DB2. Ngay bây giờ, bạn chọn Install DB2 Enterprise Server
Edition và nhấn Next.
Ở hộp thoại tiếp theo trong hình 3, hãy nhập vào đường dẫn nơi mà bạn muốn cài
đặt server và nhấn Next, nếu bị nhắc bạn hãy chọn một tên cho việc cài đặt cơ sở
dữ liệu. Trừ phi có lí do nào đó còn nếu không bạn có thể chấp nhận tên mặc định
là DB2_01 và thực hiện cài đặt mặc định này trên máy tính.

Hình 3. Đặt hộp thoại thông tin người dùng

Nếu bạn đang dùng Windows™ XP hoặc NT, bước cài đặt tiếp theo yêu cầu tên
miền (Domain) mà tài khoản người dùng của bạn sẽ là thành viên của tên miền đó.
Nhưng bạn có thể sử dụng một người dùng hiện có. Cài đặt này sẽ tạo ra một
người dùng phục vụ cho mục đích đó, tùy theo bất kỳ nhu cầu của bạn có nằm
ngoài phạm vi của bài viết này. Trong bài viết này sử dụng các lựa chọn mặc định.
Chúng ta đang cài đặt các công cụ phát triển ứng dụng trên cùng một máy, nên hãy
tiếp tục chọn None - user local user account cho Domain và hủy bỏ username
mặc định. Nhập và xác nhận lại mật khẩu và chắc chắn rằng hộp kiểm ở cuối đã
được kiểm tra. Nhấn Next.
Bạn sẽ được hỏi bạn muốn tạo ra máy chủ gì. Hãy sử dụng mặc định của DB2 và
nhấn Next.
Bạn có thể bỏ qua hộp các công cụ Prepare the DB2 tools catalog bằng cách
không chọn gì ở hộp thoại tiếp theo và nhấn Next.
Bạn không cần khai báo e-mail. Hãy xóa hộp kiểm Set up your DB2 server to
send notifications và nhấn Next.
Để bảo mật dịch vụ DB2 hơn, bạn có thể kích hoạt người dùng và các nhóm quản
trị như là những người nắm giữ hợp lệ duy nhất đối với dữ liệu DB2 đã lưu trữ và
phục vụ. Điều đó là không cần thiết trong bài học này nhưng nó sẽ không làm tổn
hại vì vậy hãy để nguyên và nhấn Next.
Cuối cùng bạn được xem hộp thoại với tất cả các lựa chọn bạn đã làm. Nhấn
Finish để hoàn tất việc cài đặt.



Cài đặt JDBC
Để truy cập DB2 qua JDBC, bạn cần thực hiện một số phân lớp, bao gồm DB2
JDBC driver để hoạt động với Tomcat servlet. Bạn có thể thực hiện việc đó theo
một số cách, bao gồm việc thêm vào nó một ứng dụng riêng của bạn. Cách khác là
làm cho nó có thể dùng được với tất cả các ứng dụng chạy trên Tomcat. Để làm
được điều đó hãy sao chép tệp <DB2_HOME>/sqllib/java/db2java.zip vào thư
mục Tomcat's common/lib. Mặc dù đó là tệp zip chứ không phải tệp JAR, máy
chủ sẽ tìm ra nó.

Lưu trữ XML
Bây giờ hãy xem cách DB2 lưu trữ thông tin XML trong cơ sở dữ liệu
Tạo cơ sở dữ liệu
Trước tiên bạn cần một cơ sở dữ liệu để lưu trữ các đối tượng XML đã trả về. Với
các ưu điểm của thuộc tính XML trên DB2, bạn nên cân nhắc kỹ lưỡng để định
hình một cơ sở dữ liệu mới. Vì vậy chúng ta sẽ thực hiện từng bước quá trình tạo
cơ sở dữ liệu này
Trên thanh taskbar của Windows, trong khay hệ thống có một biểu tượng của máy
chủ DB2 với tên là DB2.
Nhấn phải vào biểu tượng đó và chọn DB2 Control Center để mở DB2 Control
Center. Ở bên phải, bạn sẽ thấy một nhánh thực đơn với hai lựa chọn là All
Systems và All Databases. Nhấn phải chuột vào All Databases chọn Create
Database>Standard. Việc này sẽ mở ra cửa sổ thuật sỹ tạo cơ sở dữ liệu được
trình bày trong Hình 4.

Hình 4. Thuật sỹ (wizard) tạo cơ sở dữ liệu, bước 1

Tại đó, bạn được hỏi tên cơ sở dữ liệu là gì và bạn muốn lưu trữ nó ở đâu. Với bài
viết này, bạn dùng mashup_1 cho tên và định danh của cơ sở dữ liệu. Bạn có thể

thêm vào bất kỳ tên chú thích nào bạn muốn.
Tiếp theo hãy chọn nơi bạn sẽ lưu trữ các tệp cơ sở dữ liệu. Các cơ sở dữ liệu có
thể chứa một lượng rất lớn dữ liệu. Hãy chọn nơi mà có thể quản lý được khối
lượng dữ liệu đó của ứng dụng của bạn. Để phát triển ứng dụng này bạn chỉ lần
khoảng 10-20MB bộ nhớ, nhưng cũng có thể tăng thêm ở một môi trường lớn. Bây
giờ hãy chọn một nơi có không gian nhớ lớn hơn 10MB để có thể dùng được và
tạo một thư mục ở đó. Gõ vào đường dẫn thư mục ở trường Default path. Bạn có
thể nhấn vào Browse và chọn một thư mục theo cách đó.
Nhấn vào hộp kiểm Enable database for XML. Hộp này yêu cầu bạn cài đặt kiểu
mã là UTF-8. Đó là khóa cho các yêu cầu của bạn.
Hãy giữ các cài đặt mặc định còn lại và nhấn Next (Xem Hình 5).

Hình 5. Thuật sỹ tạo cơ sở dữ liệu, bước 2

Trình cài đặt sẽ hỏi bạn nơi lưu trữ dữ liệu cho DB một lần nữa. Giữ nguyên hộp
kiểm Use the database path as a storage path và nhấn Next (Xem Hình 6).

Hình 6. Thuật sỹ tạo cơ sở dữ liệu, bước 3

Bạn gặp một chọn lựa quan trọng cho cơ sở dữ liệu mới, đó là sự địa phương hóa
(locale settings). Để các bản XML hoạt động, chúng yêu cầu bảng mã UTF-8. Bạn
có thể chọn bất kỳ mã quốc gia nào nhưng bạn phải chọn UTF-8 ở danh sách đổ
xuống Code set. Để nguyên mục Collating Sequence với các giá trị mặc định của
nó và nhấn Next (Xem Hình 7).

Hình 7. Thuật sỹ tạo cơ sở dữ liệu, bước 4

Cuối cùng bạn sẽ hoàn tất được việc cài đặt với màn hình tổng hợp. Hãy nhấn nút
Finish và đợi trong giây lát để hệ thống tạo ra các tệp khởi tạo và bắt đầu các tiến
trình với cơ sở dữ liệu mới của bạn. Khi cơ sở dữ liệu được hoàn thành, bạn sẽ tìm

thấy nó ở cây All Databases. Bạn có thể mở rộng mashup_1 và nhìn thấy các
thành phần.
Bây giờ bạn đã có một nơi cho XML, bạn cần định dạng nó để chứa dữ liệu.


Tạo bảng
Ở phần 1, bạn đã kết nối với hai dịch vụ web Yahoo! News, Technorati và
YouTube, để tập hợp dữ liệu XML và sửa đổi nó đưa vào cơ sở dữ liệu của bạn
(xem Các tài nguyên). Hai dịch vụ này cung cấp các định dạng dữ liệu rất khác
nhau nhưng bạn sẽ lưu tất cả chúng vào cùng bảng cơ sở dữ liệu. Chọn
Tools>Command Editor trên ứng dụng Control Center. Theo thường lệ, cách
nhanh nhất là sử dụng dòng lệnh và thực hiện các lệnh trên đó. Trong Command
Editor, chèn đoạn mã trong Ví dụ 1 vào.

Ví dụ 1. Tạo bảng queryResults

connect to MASHUP_1;

create table queryresults (id INT generated always as identity,
requestdate TIMESTAMP,
query XML)


Sau khi bạn nhập đoạn mã vào cửa sổ Command Editor, nhấn Execute và chờ
thông báo "The SQL command completed successfully" thể hiện câu lệnh SQL đã
hoàn thành.
Cột id là khóa chính và cột requestdate là cột quan hệ đặc thù biểu diễn ngày giờ
của truy vấn gốc. Mặt khác, cột query là một giá trị XML. Cấu trúc của nó biến
đổi dựa trên dữ liệu được trả về cho truy vấn. Ví dụ, bạn có thể có hai dòng cơ sở
dữ liệu khác nhau như trong Ví dụ 2.


Ví dụ 2. Các dòng cơ sở dữ liệu mẫu

1, 2006-07-25-13.26.46,

<?xml version="1.0" encoding="ISO-8859-1"?>
<tv source-info-url="
source-info-name="TMS Data Direct Service"
generator-info-name="XMLTV"
generator-info-url="

<programme start="20060714043000 -0400"
stop="20060714050000 -0400"
channel="I21883.labs.zap2it.com">
<title lang="en">Flintstones</title>
<sub-title lang="en">The Gravelberry Pie King</sub-title>
<desc lang="en">Fred gets fired and enters the
pie-baking business.</desc>
<credits>
<actor>Alan Reed</actor>
<actor>Jean Vander Pyl</actor>
<actor>Mel Blanc</actor>
<actor>Gerry Johnson</actor>
<actor>Don Messick</actor>
</credits>
<date>19651112</date>
<category lang="en">Children</category>
<category lang="en">Animated</category>
<category lang="en">Series</category>
<episode-num system="dd_progid">EP001648.0149</episode-num>

<episode-num system="onscreen">65149</episode-num>
<subtitles type="teletext" />
<rating system="VCHIP">
<value>TV-G</value>
</rating>
</programme>
<programme start="20060714050000 -0400"
stop="20060714053000 -0400"
channel="I21883.labs.zap2it.com">
<title lang="en">Dastardly & Muttley</title>
<sub-title lang="en">Muttley On the Bounty</sub-title>
<category lang="en">Children</category>
<category lang="en">Animated</category>
<category lang="en">Series</category>
<episode-num system="dd_progid">EP001168.0006</episode-num>
<episode-num system="onscreen">6901</episode-num>
<rating system="VCHIP">
<value>TV-G</value>
</rating>
</programme>
</tv>

2, 2006-07-25-13.38.46,
<tapi version="1.0">
<document>
<result>
<url></url>
<inboundblogs></inboundblogs>
<inboundlinks>25</inboundlinks>
<rankingstart>0</rankingstart></result>

<item>
<weblog>
<name>Gary Said ( The blog of Gary LaPointe )</name>
<url></url>
<rssurl>
<atomurl></atomurl>
<inboundblogs>60</inboundblogs>
<inboundlinks>2161</inboundlinks>
<rank></rank>
<lastupdate>2006-07-24 20:26:25 GMT</lastupdate>
</weblog>
<nearestpermalink></nearestpermalink>
<excerpt>Doug Dave (goodness) Angela (fluid) Tonya Martha
Racheline Heather (dooce) ZuDfunck Ryan (fait) Eleanor alisa Kristin
Elizabeth Sherri Meg Jacqueline Melissa (geek) James (american)
Nicholas Lorna Evie Rachael Kachina Jeff (geekable) Tim Samantha
SarahB Melissa (stars) David Kates Christine (pink) Kristine
Psychbloke KelliDiane Clancy Molly.com Ryan (rant) Todd
Nikita</excerpt>
<linkcreated>2006-07-14 19:59:03 GMT</linkcreated>
<linkurl>
</item>
</document>
</tapi>

Cho dù các dòng đều có cấu trúc cơ sở dữ liệu như nhau, không có hạn chế nào áp
đặt cho cấu trúc XML được chứa trong các cột truy vấn.
Nhưng đôi khi đó không phải là những gì bạn muốn.



Dữ liệu hợp lệ
Các chuyên gia cơ sở dữ liệu đôi khi lo lắng về chất lượng dữ liệu khi dùng XML
vì tính tự nhiên linh hoạt của nó. Do chúng ta có thể lưu trữ bất kỳ tài liệu XML
nào vào bất kỳ cột nào được xác định bởi một kiểu dữ liệu XML mới trong DB2,
nên bạn có thể dễ dàng rơi vào hậu quả là các cấu trúc dữ liệu XML bị thay đổi
hoặc mâu thuẫn với sự logic ứng dụng của bạn. Nhà cung cấp dữ liệu có thể thay
đổi cấu trúc của XML đầu ra mà không hề thông báo cho bạn. Mashup của bạn
dùng ba nguồn dữ liệu khác nhau với ba cấu trúc tệp khác nhau và ngay lập tức sự
thay đổi thể hiện trên bản thân nó. Trong khi bạn đang cân nhắc tạo ra một kết quả
trong một cột XML chứa các dữ liệu khác nhau, DB2 cho phép bạn có thể liên kết
một lược đồ với một cột cơ sở dữ liệu và cho phép chèn hoặc cập nhật dữ liệu một
cách hợp lệ trước khi thêm nó vào cơ sở dữ liệu.
Trước khi bạn có thể làm cho dữ liệu trong bảng XML thành hợp lệ, bạn cần định
nghĩa một lược đồ XML mà chỉ ra các thành phần XML, thứ tự của chúng và kiểu
dữ liệu, có thể chấp nhận được. Bạn có thể tạo một lược đồ XML theo nhiều
cách, và các nhà cung cấp dữ liệu đôi khi sẽ cung cấp một liên kết tới một lược đồ
XML trong tài liệu XML của họ. Các đặc tả của một lược đồ XML nằm ngoài
phạm vi của bài viết này, vì vậy hãy chuyển đến bước tiếp theo và đăng kí lược đồ
XML hợp lệ của bạn (Xem Ví dụ 3).

Ví dụ 3. Đăng kí một lược đồ XML

connect to another database;
register xmlschema '' from 'C:/XMLFILES/bigxmlfile.XSD'
as user1.mysample complete;

Trong Command Editor, kết nối đến cơ sở dữ liệu và đưa ra lệnh để đăng kí cho
bigxmlfile.xsd như là một lược đồ với tên user1.mysample. Thao tác này được lưu
lại kho bên trong của DB2 dưới lược đồ SQL có tên user1 và lược đồ XML có tên
mysample. Mệnh đề complete cho biết DB2 hoàn thành việc đăng kí và thực hiện

lược đồ với dữ liệu hợp lệ đã được chèn vào bảng user1.
Sự hợp lệ không tự động mà sẽ yêu cầu bạn chỉ rõ cơ sở dữ liệu hợp lệ với các
lược đồ của bạn khi bạn dùng câu lệnh INSERT. Khi chèn tệp XML vào một
trường XML bạn sẽ cần dùng hàm XMLVALIDATE(). Hàm này chỉ ra lược đồ đã
đăng kí trước đó hợp lệ với cái gì. Nếu tệp không phù hợp với lược đồ, cơ sở dữ
liệu trả về một lỗi thay vì thêm một dòng vào cơ sở dữ liệu.
Vì bạn có thể chọn một lược đồ ở thời điểm chèn, bạn có thể dùng hàm này để hợp
lệ dữ liệu với mỗi dịch vụ khác. Nhưng chúng ta sẽ để nó như là một bài tập cho
người đọc.


Chèn XML sử dụng SQL
Giờ bạn đã có cấu trúc mẫu cho dữ liệu của mình để tập trung vào nó. Bạn có thể
thực hiện câu lệnh INSERT trước tiên để đặt dữ liệu vào. Bạn sẽ dùng SQL để
chèn dữ liệu vào bảng, từ đó bạn sẽ không thực thi bất kì thao tác nào trên đó cho
đến khi nó đã đúng vị trí. Để làm điều này bạn dùng lại Command Editor và gửi
một truy vấn SQL tới máy chủ có chứa các tệp XML của mình và đặt nó vào bảng.

Ví dụ 4. Chèn câu trả lời Yahoo!

connect to MASHUP_1;
connect to MASHUP_1;

INSERT INTO queryResults (requestdate, query) VALUES(CURRENT
TIMESTAMP,XMLPARSE(document
cast('<queryData><queryType>REST</queryType>
<queryUrl>
V1/newsSearch?appid=mashupid&type=all&query=New+York
</queryUrl> <result> <Title>Star Wars force
falls for Hasbro</Title><Summary>Falling sales of lightsabers

and other Star Wars merchandise has dented US toymaker Hasbro's
revenues.</Summary><Url>

/1/hi/business/5212750.stm</Url><ClickUrl>
/go/rss/
-/1/hi/business/5212750.stm</ClickUrl><NewsSource>BBC
News</NewsSource><NewsSourceUrl>

</NewsSourceUrl><Language>en</Language><PublishDate>

1153835696</PublishDate><ModificationDate>1153835698
</ModificationDate></result></queryData>'
as clob) preserve whitespace))


Nhìn bề ngoài, đây là một truy vấn SQL chuẩn, chỉ rõ các cột và các giá trị. Giá trị
thứ nhất, giá trị TIMESTAMP là ngày giờ hiện tại. Giá trị thứ hai, query, là một
giá trị XML. Để chèn vào, bạn cần có một đối tượng XML, cái mà bạn nhận được
khi gọi hàm XMLPARSE với tham số kiểu đối tượng (document) và đối tượng để
phân tích. Để làm cho văn bản có giá trị, đoạn mã sử dụng nó như một CLOB
hoặc đối tượng lớn kí tự.
Đây là một câu lệnh chèn (insert) chuẩn của SQL nếu bỏ qua phần chuyển đổi
trên.
Sau khi nhập đoạn mã đó và cửa sổ Command Editor, nhấn Execute và chờ thông
điệp "The SQL command completed successfully" nói rằng câu lệnh SQL đã được
hoàn thành.
Hãy vào Control Center và mở Database. Mở rộng các bảng và cuốn qua các bảng
mặc định. Khi bạn tìm thấy bảng queryResults hãy chọn nó. Ở phía dưới panel,
chọn actions open để xem bảng hộp thoại Open table dialogue. Trước tiên, chọn
dòng duy nhất mà bạn đã thêm SQL và nhấn Fetch XML. Bạn nhấn vào nút có

nhãn để mở hộp thoại chứa lược đồ XML và cấu trúc nút mà bạn đã vừa mới
thêm.
Chúc mừng! Bạn vừa mới cài đặt xong một máy chủ cơ sở dữ liệu, đã tạo ra một
cơ sở dữ liệu và cuối cùng đưa dữ liệu XML vào cơ sở dữ liệu. Bây giờ hãy xem
làm thế nào để đưa dữ liệu lại cho ứng dụng sử dụng.

Tạo các truy vấn
Bây giờ bạn đã có dữ liệu trong cơ sở dữ liệu, hãy xem lại chúng.
SQL hay XQuery?
Như chúng tôi đã đề cập trước đó, DB2 cung cấp công cụ hỗ trợ cho ngôn ngữ
truy vấn của W3C được gọi là XQuery. Bạn có thể thực hiện các truy vấn phức tạp
đối với dữ liệu XML đã lưu trữ, tận dụng sức mạnh của các biểu thức. Các biểu
thức trong một XQuery được biểu diễn là các mệnh đề hoặc các mệnh đề lồng
nhau. Mệnh đề đầu tiên trong số các mệnh đề đó là mệnh đề tương tự như kiểu câu
lệnh SQL "SELECT FROM WHERE", được gọi là một biểu thức FLWOR. Một
biểu thức XPath giống như một đường dẫn dữ liệu ở một tệp tin hệ thống, các
bước qua các nút con của lược đồ XML cho đến khi một điểm dữ liệu được tìm
thấy. Với một bộ làm mới trên XPath, xem phần 1 của loạt bài này (xem Các tài
nguyên). Trong khi bạn vẫn có thể sử dụng SQL để truy cập vào dữ liệu XML
trong DB2, XQuery cho các đặc trưng bổ sung riêng cho XML. Bạn có thể sử
dụng các ưu điểm đó trong mashup của mình.
FLWOR
FLWOR là những chữ cái đầu giành riêng cho biểu thức trong ngôn ngữ XQuery:
 FOR: Lặp qua một chuỗi đầu vào, liên kết một biến với lần lượt mỗi mục
đầu vào
 LET: Khai báo một biến và gán cho nó một giá trị, giá trị có thể là một
danh sách các mục
 WHERE: Xác định rõ phạm vi lọc các kết quả truy vấn
 ORDER BY: Xác định rõ trật tự sắp xếp các kết quả
 RETURN: Xác định kết quả được trả về

Xem Ví dụ 5 để thấy FLWOR

Ví dụ 5. Ví dụ truy vấn FLWOR

for $statement in
document(
let $comment := $statement/comment
where $statement/postedby = 'userBob'
return
<quoteBob>{$comment}</quoteBob>

Đoạn mã trong ví dụ 5 gán tất cả các phần tử post trong một tài liệu XML được
tìm thấy ở vào một biến được gọi là $statement sử
dụng câu lệnh FOR. Câu lệnh LET cho thêm một biến $comment lưu lần lượt mỗi
thành phần <comment> của phần tử post, nhưng chỉ trong điều kiện của WHERE
giá trị các phần tử <postedby> là userBob. Sau đó chúng ta trả về thông tin trên
XML, lặp đi lặp lại qua các kết quả, và tạo nên đầu ra qua mệnh đề RETURN. Các
kết quả giống như Ví dụ 6 sau đây.

Ví dụ 6. mẫu đầu ra từ một truy vấn FLWOR

<quoteBob<Man, this is insightful.</quoteBob<
<quoteBob>Riveting. Absolutely riveting.</quoteBob<
<quoteBob>My eyes! My eyes!!!</quoteBob<

×