Giới thiệu
Các hệ thống tích hợp dữ liệu
Khi xã hội phát triển, con người ngày càng phải tiếp xúc với nhiều thông tin hơn Từ thời nguyên thuỷ khi thông tin còn ít con người chưa có nhu cầu về các phương tiện lưu trữ thông tin Tuy nhiên cùng với thời gian, khi mà lượng thông tin ngày càng nhiều lên, thì bắt đầu xuất hiện chữ viết cùng các phương tiện lưu giữ chúng như vỏ cây, da thú,… rồi đến các phương tiện tiên tiến hơn như giấy, sách vở,… Khi mà lượng sách vở quá nhiều lại xuất hiện nhu cầu tổ chức lưu trữ chúng để sử dụng, và quản lý hiệu quả hơn Con người tập hợp sách thành thư viện, sắp xếp, phân loại để dễ tìm kiến, trao đổi.
Hiện nay với sự ra đời và phát triển của công nghệ thông tin, thông tin được lưu trữ trên máy tính rất đơn giản dưới nhiều dạng khác nhau Điều đó dẫn tới sự bùng nổ về thông tin Tin tức không những quá nhiều mà còn được biểu diễn dưới rất nhiều dạng, nhiều nơi khác nhau Con người bị tràn ngập trong biển thông tin, và từ đó xuất hiện nhu cầu làm thế nào để khai thác thông tin một cách hiệu quả.
Bây giờ hãy xét một ứng dụng hiện tại làm việc cơ sở dữ liệu Con người nhiều khi phải làm việc với nhiều dạng tài liệu khác nhau từ một tài liệu văn bản thông thường, một bảng Exel, một trang Web, hay một cơ sở dữ liệu Ngay cả với cơ sở dữ liệu cũng tồn tại nhiều mô hình khác nhau như mô hình quan hệ, mô hình hướng đối tượng, mô hình mạng, … Các nguồn dữ liệu này không những khác nhau về mô hình mà với sự phát triển của các hệ thống mạng nó còn được lưu trữ phân tán khắp nơi Ngoài ra còn một thách thức nữa là các nguồn này luôn thay đổi, bổ xung, cập nhật một cách độc lập Vì vậy việc thu thập, tích hợp, và trích chọn thông tin là một yêu cầu cần thiết, nó sẽ giúp người sử dụng nắm bắt thông tin một cách hiệu quả và chính xác.
Tích hợp thông tin là một trong những vấn đề thách thức đối với việc khai thác thông tin và thu hút được nhiều sự quan tâm của các chuyên gia Hệ thống tích hợp dữ liệu là hệ thống cho phép đưa ra một khung nhìn thống nhất cho việc truy cập tới các nguồn dữ liệu tự trị không đồng nhất và một giao diện truy vấn trên nó.
Web và vấn đề khai thác thông tin từ Web
WWW cung cấp một nguồn thông tin vô tận Các thông tin này thường là bán cấu trúc, mặc dù bạn có thể tìm thấy cả văn bản có cấu trúc và không Thông tin này cũng là thông tin động, nó có chứa các siêu liên kết và có thể biểu diễn ở nhiều hình thức khác nhau và chia sẻ rộng rãi trên nhiều trang và nhiều hệ thống
Tuy nhiên Web cũng đặt ra những thách thức, và đã đưa những nỗ lực nghiên cứu về việc tách thông tin từ các văn bản cấu trúc và bán cấu trúc.
Một số định nghĩa tất cả các trang Web là bán cấu trúc vì họ cho rằng nó chứa thông tin cấu trúc liên quan đến cách thể hiện Tuy nhiên Hsu đã đưa ra một các phân loại các trang Web tốt hơn: Một trang Web cung cấp các mục thông tin là có cấu trúc nếu mỗi thuộc tính trong nhóm có thể tách chính xác dựa vào một vài luật cú pháp thống nhất, ví dụ các dấu phân cách hay thứ tự các thuộc tính Tuy nhiên các trang Web bán cấu trúc có thể chứa các nhóm tin thiếu một vài thuộc tính, thuộc tính với nhiều giá trị, hoán vị thuộc tính, hay các ngoại lệ Một trang Web là không có cấu trúc nếu nó yêu cầu các tri thức từ vựng để tách các thuộc tính đúng đắn Trong các phần sau chúng ta sẽ đề cập đến các trang Web cả có cấu trúc, bán cấu trúc hay không có cấu trúc tuỳ thuộc vào cách sắp xếp nội dung Tuy nhiên tính cấu trúc của trang Web luôn tuỳ thuộc vào thuộc tính mà người sử dụng muốn tách Thường các công cụ tạo Web tạo ra các trang có cấu trúc tốt, trong khi các trang tạo bằng tay thường ít cấu trúc.
Khi tách thông tin từ các trang Web, cùng một kỹ thuật được sử dụng vào các trang Web và các tài liệu bán cấu trúc: Kỹ thuật NLP truyền thống là không thích hợp, do nguồn thông tin thường không thể hiện các cấu trúc ngữ pháp đầy đủ như các kỹ thuật này được thiết kế để sử dụng Hơn nữa, các kỹ thuật NLP thường chậm, và có vấn đề khi số lượng tài liệu lớn và nội dung cần tách được tách trực tiếp
Phần lớn dữ liệu trên Web được cập nhật thường xuyên như một danh sách mục các thuộc tính, như các chỉ mục tìm kiếm Web Với các trang Web bán cấu trúc, sự xuất hiện thường xuyên của chúng có thể khai thác để tách dữ liệu thay vì sử dụng các tri thức về từ vựng.
Tổ chức và các siêu liên kết của tài liệu là một khía cạnh quan trọng khi trích thông tin từ trang Web vì nó không có trong các tài liệu văn bản Ví dụ, duyệt theo các siêu liên kết là cần thiết để nhận được các thông tin cần tìm Các luật tách sẽ phụ thuộc vào tổ chức tổng thể của trang Web và một vài luật sẽ có các giới hạn hạn chế việc sử dụng một số loại trang Web.
Các trang Web là kết quả của các truy vấn nguồn dữ liệu trực tuyến thường sinh ra một tập các trang liên kết Các trang Web bán cấu trúc được phân lớp như sau:
(i) Kết quả một mức một trang, trong đó một trang chứa tất cả các mục liên quan đến truy vấn nguồn, (ii) Kết quả một mức nhiều trang, trong đó phải theo nhiều siêu liên kết để nhận được danh sách đầy đủ của câu trả lời, và (iii) Các trang hai mức, trong đó phải theo liên kết của mỗi mục trong mức thứ nhất để duyệt một trang chứa tất cả thông tin liên quan đến các mục.
Internet đưa ra một số lượng lớn và ngày càng tăng các nguồn thông tin, chúng ta có thể tìm thấy bằng các trình duyệt hay bằng các bộ máy tìm kiếm Các nguồn thông tin này độc lập với nhau, không có kết nối với nguồn khác, và mỗi dịch vụ tồn tại độc lập Điều đó dẫn đến sự cần thiết phải trích thông tin từ Web, đó là việc tách và tập hợp thông tin từ các nguồn độc lập.
Các dữ liệu cấu trúc và phi cấu trúc trên Web có xu hướng tăng lên, và còn có sự tăng lên của các trang web ẩn Đó là các trang web sinh ra từ vài cơ sở dữ liệu, dựa vào yêu cầu người dùng Người ta nói rằng có đến 80% các trang web là web ẩn Các trang này không thể lấy được bằng các web crawler hay tìm kiếm qua bộ tìm kiếm Điều đó có nghĩa là cần phải có một công cụ đặc biệt để trích thông tin từ các trang web như vậy.
Tách thông tin từ các Web site thường được thực hiện bởi các wrapper
Một wrapper có thể coi như một thủ tục được thiết kế để trích nội dung của một nguồn thông tin Trong cộng đồng cơ sở dữ liệu, một wrapper là một thành phần phần mềm chuyển dữ liệu từ một truy vấn từ một mô hình này tới một mô hình khác Trong môi trường web, mục đích của nó là chuyển thông tin không cụ thể được lưu trữ trên các tài liệu HTML thành thông tin cụ thể lưu trữ theo một cấu trúc để tiếp tục xử lý.
Một wrapper cho một nguồn web chấp nhận một truy vấn thông tin tới nguồn này, lấy các trang thích hợp từ nguồn về, trích các thông tin yêu cầu và trả lại kết quả Nó bao gồm một tập các luật tách và mã lệnh yêu cầu áp dụng các luật này vào một nguồn cụ thể Để trích thông tin từ vài nguồn độc lập cần phải có một thư viện wrapper Wrapper cần phải thực hiện nhanh chóng, bởi vì chúng thường được sử dụng trực tuyến để đáp ứng nhu cầu người sử dụng Wrapper cần phải có khả năng đối mặt với sự thay đổi và cấu trúc không tự nhiên của web, giống như sự cố mạng, tài liệu không hợp khuôn dạng, thay đổi bố trí, …
Có hai lợi ích chính đối với việc xây dựng wrapper cho nguồn web: Khả năng nhận được thông tin thích hợp từ các nguồn riêng lẻ để tiếp tục tăng cường, và tất cả các nguồn được xây dựng wrapper có thể truy vấn sử dụng chung một ngôn ngữ truy vấn chung Sau đó có thể có được các truy cập tích hợp vào các nguồn, và các nguồn web có thể truy vấn theo kiểu cơ sở dữ liệu sử dụng ngôn ngữ truy vấn chung.
Yêu cầu trích và tích hợp dữ liệu từ nhiều nguồn web đã dẫn đến sự phát triển bộ sinh wrapper (WG – Wrapper Generation) Lĩnh vực này xuất hiện độc lập với cộng đồng IE truyền thống, và một ứng dụng WG trích dữ liệu từ các trang web được sinh trực tuyến, dựa trên truy vấn của người sử dụng, dùng các mẫu HTML định nghĩa trước Trong cộng đồng WG, tập hợp các nguồn thông tin như vậy gọi là các nguồn dữ liệu bán cấu trúc Để kết hợp dữ liệu từ các nguồn đó, dữ liệu thích hợp cần phải trích từ các mẫu HTML Do đó, wrapper đơn giản là một ứng dụng IE cho nguồn một dữ liệu.
Hệ thống IE truyền thống dùng các mẫu tách dựa trên sự kết hợp các ràng buộc ký pháp và ngữ nghĩa Tuy nhiên, như được đề cập trước đây, với các tài liệu bán cấu trúc như các ứng dụng WG đó, các mẫu tách từ vựng thường không thể áp dụng được Để đối mặt với kiểu miền ứng dụng mới, các nhà nghiên cứu giới thiệu một tập các mẫu tacchs, và một hệ thống WG sinh ra các mẫu tách dựa trên phân cách chứ không sử dụng các rằng buộc từ vựng Với kiểu các trang web này, tất cả tàI liệu được sinh ra bằng cách điền vào cùng một mẫu.
Một số dự án xây dựng wrapper trên Web
Một số nhóm nghiên cứu tập trung vào vấn đề trích dữ liệu có cấu trúc từ tài liệu HTML Nhiều nghiên cứu thuộc lĩnh vực cơ sở dữ liệu, và tập trung vào wrapper chuyển truy vấn cơ sở dữ liệu tới các yêu cầu Web và phân tích trang web kết quả….
WysiWyg Web Wrapper Factory (W4F) là công cụ sinh wrapper cho web.
Nó có một ngôn ngữ để xác định và duyệt Web site và ngôn ngữ mô tả để trích dữ liệu từ các trang web Nó cũng cung cấp cơ chế ánh xạ dữ liệu tách vào cấu trúc đích Như tên đã chỉ ra, W4F cung cấp một giao diện người sử dụng cho việc sinh các luật.
Ngôn ngữ WebL của Compaq là ngôn ngữ thủ tục để viết wrapper cho web.
Nó cung cấp một ngôn ngữ trích dữ liệu rất mạnh(tương tự biểu thức đường dẫn đệ quy kết hợp với biểu thức chính quy), ngôn ngữ không đưa ra XML và đầu vào thiếu sức mạnh của XSLT và XPath.
Hệ thống Ariadne, Galic, TSIMMIS là các mediator hỗ trợ truy vấn nhiều nguồn dữ liệu không đồng nhất Trong khi Garlic và TSIMMIS hỗ trợ nhiều nguồn bao gồm nguồn Web, cơ sở dữ liệu, và hệ thống tệp Ariadne tập trung vào nguồn Web Trong mỗi hệ thống, một quá trình mô hình hoá hình thành một khung nhìn tích hợp về dữ liệu chứa trong nguồn và một qúa trình truy vấn trên khung nhìn tích hợp đó.
Trong Garlic và TSIMMIS, wrapper được viết bằng một ngôn ngữ thủ tục và dịch ra một mã có thể thực thi được trong khi Ariadne sử dụng mộ cơ chế sinh wrappẻ dự trên sự giới thiệu Nó dùng biểu thức chính quy và các bảng ánh xạ để giải quyết vấn đề khác biệt về từ vựng giữa các nguồn dữ liệu Web, nhưng thiếu biểu thức đường dẫn Chúng ta chú ý rằng biểu thức đường dẫn là rất quan trọng trong việc tách dữ liệu từ cây HTML bởi vì duyệt cấu trúc các phần tử HTML là luôn cần thiết.
XWRAP là bộ sinh wrapper bán tự động xây dựng ngữ nghĩa cho các thẻHTML đặc biệt (như tiêu đề, bảng) và cách sắp xếp dữ liệu Các heuristics được dùng để xác định mối quan hệ cha con giữa các phần tử dữ liệu, như tên bảng, tên trường, và các giá trị Wrapper sinh ra phụ thuộc vào sự lồng nhau của các bảng và các phần tử, nó làm việc tốt với các trang web dạng bảng nhưng không làm việc với các trang ít có cấu trúc.
Kiến trúc hệ thống BKDATIS
1.4.1 Giới thiệu hệ thống BKDATIS
BKDATIS là hệ thống tích hợp các nguồn dữ liệu không đồng nhất Các nguồn dữ liệu gồm các nguồn có cấu trúc (cơ sở dữ liệu) và bán cấu trúc (HTML, Text)
Hệ thống BKDATIS sử dụng XML là mô hình dữ liệu trung gian trao đổi giữa các mô đun Đây là một định dạng thường được sử dụng để biểu diễn mô hình dữ liệu bán cấu trúc Hiện nay XML đang trở thành một chuẩn để trao đổi dữ liệu giữa các chương trình Nó có tính cấu trúc cao, linh hoạt và tự mô tả nội dung. Trong hệ thống XML được sử dụng để trao dữ liệu giữa các wrapper và tầng tích hợp và trả lại kết quả cho người sử dụng Hệ thống chọn XML làm đầu ra bởi vì từ nó rất dễ chuyển sang một định dạng khác mà người dùng mong muốn Bên cạnh XML hệ thống còn sử dụng DTD (định nghĩa dữ liệu ) để biểu diễn mô hình dữ liệu của các nguồn cục bộ Mô đụn xây dựng ánh xạ sẽ dùng DTD cục bộ để đưa ra lược đồ tổng thể.
Hình 1 Hệ thống tích hợp dữ liệu
Hiện tại các nguồn dữ liệu tích hợp của hệ thống là hệ cơ sở dữ liệu quan hệ và HTML Cơ sơ dữ liệu quan hệ là nguồn có cấu trúc và hỗ trợ các truy vấn còn HTML là nguồn dữ liệu bán cấu trúc Wrapper cho các nguồn cơ sở dữ liệu quan hệ sẽ chuyển các truy vấn tới wrapper (Xquery) thành truy vấn của nguồn (SQL) sau đó kết quả trả về được chuyển sang dạng XML với một lược đồ DTD. Wrapper cho HTML sử dụng một cơ chế tách thông tin và lưu nó theo mô hình XML sau đó sử dụng một mô đun truy vấn trực tiếp trên XML và lấy đó làm kết quả đưa ra
Mô đun MetaData lấy DTD từ các nguồn cục bộ rồi xây dựng lược đồ tổng thể.
Các DTD cục bộ trước hết được chuyển thành lược đồ khái niệm Ontology
Tầng trên cùng, tần phân tách truy vấn được xây dựng theo mô hình LAV. Một lợi thế của mô hình LAV so với mô hình GAV là cho phép thêm bớt các nguồn một cách dễ dàng
1.4.2 Kiến trúc hệ thống BKDATIS
Hình 2 Trường hợp sử dụng
Hệ thống có hai tác nhân là kỹ sư tri thức, và người sử dụng cuối:
- Kỹ sư tri thức: Tham gia vào bước tích hợp lược đồ Kỹ sư tri thức sẽ cung các thông tin cần thiết, hiệu trỉnh lược đồ.
- Người sử dụng cuối: Đưa vào các truy vấn và nhận các kết quả.
Hệ tích hợp có 3 tầng chính:
1 Wrapper: Đây là tầng trung gian giữa hệ tích hợp và các nguồn dữ liệu. Chức năng của wrapper
- Cung cấp lược đồ cục bộ (DTD) cho mô đun tích hợp lược đồ.
- Nhận truy vấn và trả về dữ liệu (XML)
2 Tích hợp lược đồ: a Chức năng o Chuyển DTD cụ bộ sang lược đồ khái niệm cục bộ o Tích hợp lược đồ khái niệm cục bộ thành lược đồ khái niệm chung. b Tích hợp dữ liệu: Chức năng o Tách truy vấn của người sử dụng thành các truy vấn cụ bộ. o Tích hợp kết quả truy vấn từ các nguồn cục bộ.
1.4.2.3 Tầng giao tiếp người sử dụng
Hình 3 Mô hình hệ thống
Giải thích mô hình : Ứng dụng có thể được cài đặt trên một máy server, nhận yêu cầu của người sử dụng thông qua các giao diện web browser và gửi trả lại kết quả cũng qua giao diện đó Các nguồn dữ liệu dùng cho tích hợp có thể được chuyển đổi thành các tài liệu XML và DTD thông qua các Wrapper DTD được sử dụng cho tích hợp lược đồ, XML tài liệu dùng cho việc truy vấn
Dữ liệu trao đổi qua mạng biểu diễn theo chuẩn XML.
Hình 4 Mô hình giao tiếp trong hệ thống
Cơ sở lý thuyết
Các hệ thống tích hợp dữ liệu
2.1.1 Dữ liệu bán cấu trúc biểu diễn bởi XML
2.1.1.1 Dữ liệu bán cấu trúc
XML là ngôn ngữ được định nghĩa bởi tổ chức mạng toàn cầu(World Wide Web Consortium) XML là một ngôn ngữ tổng quát dùng định nghĩa dữ liệu thông qua các thẻ Trong đó mọi thẻ đều có thể tự định nghĩa Do đó, XML là tập cha của ngôn ngữ HTML Trong HTML các thẻ được định nghĩa và qui định trước trong khi XML thì không Tuy nhiên XML và HTML có quan hệ gần gũi với nhau, cả hai đều dựa trên chuẩn ngôn ngữ định dạng tổng quát SGML (Standard Generalized Markup Language) Hiện nay XML được sử dụng rất rộng rãi do tính tiện lợi của nó a) Dễ dàng chuyển đổi dữ liệu
Trong máy tính có nhiều định dạng tệp khác nhau, mỗi chương trình hầu như đều có một định dạng tệp riêng Chuyển đổi dữ liệu giữa chúng là một vấn đề nan giải.Ví dụ như các tệp doc(Word), xls(Exel), dbf(Foxpro), mdb(Access), txt(Text), rtf(Rich Text) hay mới nhất là html, htm Khi chương trình của bạn phải in ra báo cáo chẳng hạn, bạn phải dự trù chuyển đổi và xuất báo cáo ra các dạng này Một công việc rất phức tạp Nếu dữ liệu của tệp chỉ được lưu theo dạng Text thì vấn đề trở lên đơn giản Hầu như mọi chương trình đều có thể đọc được tệp Text Mặc dù vậy tệp Text khó có thể bố trí dữ liệu theo cấu trúc.
Trong XML, dữ liệu và định dạng được lưu trữ ở dạng text và bạn có thể dễ dàng cấu hình cũng như thay đổi bằng các trình soạn thảo thông thường XML.Hơn nữa bạn dễ dàng cỏ định cấu trúc cho tệp XML theo các thẻ tự định nghĩa một cách rất linh hoạt Với các chương trình sử dụng một bộ công cụ XML có thể dễ dàng đọc cũng như sửa đổi tệp XML Như vậy XML cung cấp một cách lưu dữ liệu rất hiệu quả. b) Dữ liệu tự mô tả
Dữ liệu trong tài liệu XML tự mô tả nội dung và ý nghĩa của nó Chỉ dựa vào tên ta có thể hình dung ra nội dung và cách dữ liệu muốn thể hiện c) Dữ liệu có cấu trúc
Một khía cạnh mạnh mẽ khác của XML là không chỉ cho phép lưu dữ liệu và tệp XML dựa trên thẻ mà còn tổ chức dữ liệu theo cấu trúc dữ liệu phân cấp hoàn chỉnh Đây là điều rất quan trọng khi cần khả năng định nghĩa dữ liệu có cấu trúc Ngoài ra với một định nghĩa kiểu dữ liệu (DTD) ta có thể kiểm tra xem các cấu trúc trong tài liệu có đúng hay không.
2.1.1.2 Tài liệu XML Để biểu diễn dữ liệu, một tài liệu XMLsẽ nhóm dữ liệu trong các phần tử- element, các phần tử này được giới hạn bới các thẻ -tag Các thẻ gắn với nhau theo từng cặp thẻ đầu-start tag, thẻ cuối-end tag Một cặp thẻ trong XML sẽ gắn một nhãn hay tên cho một mẫu dữ liệu để định danh nó.
Việc định danh dữ liệu là hoàn toàn theo chủ đích của người sử dụng Các thẻ này có thể được lồng nhau, một cặp thẻ nếu được lồng trong cặp thẻ khác thì nó phải nằm chọn trong tag đầu và tag cuối của cặp thẻ đó Đây cũng là nguyên tắc để xây dựng một cấu trúc tài liệu XML.
Nhờ có sự lồng nhau giữa các thẻ, ta có thể diễn tả cấu trúc bất kỳ của một đối tượng dữ liệu một trong tài liệu XML Xét một ví dụ về một bản ghi được mô tả trong XML theo luật lồng như sau:
you@youraddress.com
me@myaddress.com
Quick In troduction XML
Xml is text-based Language
Người ta cũng có thể biểu diễn một danh sách nhờ việc sử dụng lặp lại các thẻ giống nhau như ví dụ sau:
Trong trường hợp đặc biệt khi phần thông tin trong hai thẻ đầu và cuối là rỗng thì thẻ đó được gọi là thẻ rỗng - Empty tag- và được viết rút gọn như sau:
Các thẻ lồng trong một thẻ khác và được gán giá trị trực tiếp, giá trị này không thường xuyên bị thay đổi thì có thể được biểu diễn qua các thuộc tính –
Attribute- là các cặp (tên thuộc tính _ giá trị thuộc tính ) nằm trong ngay thẻ mức trên của nó.
Xml is text-based Language
Như ta đã thấy, XML là ngôn ngữ bán cấu trúc nó thường được dùng như một ngôn ngữ trung gian để chuyển đổi dữ liệu Ngày nay hầu như mọi chương trình đều có xu hướng hỗ trợ XML, cho phép đọc tệp XML hay kết xuất dữ liệu ra theo dạng XML Trong hệ thống của chúng tôi XML được chọn làm kiểu dữ liệu trung gian trao đổi dữ liệu giữa wrapper và tầng tích hợp
Công cụ truy vấn XML: XQuery
XQuery 1.0 là ngôn ngữ truy vấn XML Nó được đưa ra bởi nhóm XML Query Working Group cũng như nhóm XSL Working Group Ngôn ngữ này sinh ra từ một ngôn ngữ truy vấn XML khác là Quilt, và chứa XPath 2.0 như một tập con của nó.
Sức mạnh của XML là tính linh hoạt của trong biểu diễn nhiều loại thông tin khác nhau từ các nhiều nguồn XML Query phục vụ cho mục đích này Nó được thiết kế theo một cú pháp truy vấn dễ đọc và có khả năng lấy thông tin từ nhiều nguồn , các tài liệu cấu trúc và bán cấu trúc, cơ sở dữ liệu quan hệ, và các kho chứa đối tượng XML là tổng quát của dữ liệu quan hệ:
Hình 5 Mô hnhf dữ liệu XML
2.2.2 Cú pháp biểu thức truy vấn
XQuery là ngôn ngữ chức năng trong đó truy vấn được biểu diễn dưới dạng biểu thức XQuery hỗ trợ một số loại biểu thức, cấu trúc Một số loại biểu thức XQuery có thể lồng nhau Nó làm tăng tính linh hoạt. Đầu vào và đầu ra của một truy vấn là một mẫu mô hình dữ liệu dùng bởi cả XQuery 1.0 và XPath 2.0 XQuery không phải là một ngôn ngữ XML – một phiên bản bằng cú pháp XML gọi là XQueryX Các dạng chính của biểu thức XQuery như sau:
1 Biểu thức đường dẫn ví dụ: /a//b[c=5]
2 Hàm tạo biểu thức ví dụ:
3 Biểu thức FLWR ví dụ $x, 5
4 Biểu thức chứa các hàm và các toán tử ví dụ x + y, -z , foo(x, y)
5 Biểu thức điều kiện ví dụ IF THEN ELSE
6 Biểu thức hạn chế ví dụ: EVERY var IN expr SATISFIES expr
7 biểu thức kiểm tra hay thay đổi kiểu dữ liệu ví dụ: INSERT, REPLACE, DELETE
Cơ chế chính của XQuery là biểu thức FLWR:
FOR – LET – WHERE – RETURN tổng quát của
SELECT – FROM – HAVING – WHERE trong SQL
FOR $p IN document("book.xml")//publisher
LET $b := document("book.xml)//book[publisher = $p]
FOR sinh ra một danh sánh có thứ tự các liên kết tên nhà xuất bản với $p
LET gắn từng liên kết trên với một liên kết phụ gắn các phần tử sách của nhà xuất bản đó với viến $b, lúc này, chúng ta có danh sách cặp liên kết ($p, $b)
WHERE lọc danh sách này để nhận được các cặp mong muốn
RETURN xây dựng cho từng cặp một giá trị kết quả
Kết quả kết hợp trong trường hợp này là danh sách nhà xuất bản đã xuất bản hơn
Chúng ta có thể chỉ muốn mỗi nhà xuất bản xuất hiện một lần, vì vậy dùng toán tử distinct để loại bỏ sự trùng lặp trong danh sách:
FOR $p IN distinct(document("bib.xml")//publisher)
LET $b := document("bib.xml)//book[publisher = $p]
Sự khác nhau giữa FOR và LET
FOR $x IN /library/book – sinh danh sách liên kết $x tới mỗi phần tử sách trong thư viện, nhưng
LET $x := /library/book – sinh ra một liên kết đơn $x tới danh sách các phần tử sách trong thư viện
Nó đủ để thực hiện kết nối các tài liệu:
FOR $p IN document("www.irs.gov/taxpayers.xml")//person
FOR $n IN document("neighbors.xml")//neighbor[ssn = $p/ssn]
2.2.2.2 Biểu thức gắn với các toán tử và hàm
XQuery cung cấp hầu hết các toán tử và các hàm có thể tìm thấy trong hầu hết các ngôn ngữ máy tính., bao gồm các phép toán số học, phép toán so sánh, và các phép toán danh sách Các hàm được xây dựng sẵn bao gồm AVG, SUM, COUNT, MAX và MIN, ngoài ra còn có các hàm liên quan đến tài liệu và các nút như DOCUMENT, EMPTY và DISTINCT.
Ví dụ : Tìm giá thấp nhất của mỗi quyển sách, trả lại trong phần tử
LET $doc := document("prices.xml")
FOR $t IN distinct($doc/book/title)
LET $p := $doc/book[title = $t]/price
Ngoài các hàm xây dựng sẵn , XQuery còn cung cấp cơ chế để người dùng tự định nghĩa các hàm.
XQuery cũng cho phép sử dụng biểu thức IF-THEN-ELSE
SOME và EVERY gọi là các biểu thức hạn chế Thông qua biểu thức SOME có thể xác định xem liệu ít nhất một nút trong tập thoả mãn một vị từ Biểu thức EVERY dùng để kiểm tra xem tất cả các nút của tập thoả mãn một vị từ
Ví dụ sau liệt kê danh sách của các người dùng
FOR $u IN document("users.xml")//user_tuple
EVERY $item IN document("items.xml")//item_tuple SATISFIES
SOME $b IN document("bids.xml")//bid_tuple SATISFIES
($item/itemno = $b/itemno AND $u/userid = $b/userid)
Một trong các dạng của biểu thức XQuery là biểu thức đường dẫn, dựa trên cú pháp XPath 1.0 XPath là khái niệm về đường dẫn trong tài liệu XML, và được dùng trong một vài ứng dụng liên quan đến XML bao gồm XSLT và Xpointer.
Biểu thức đường dẫn bao gồm một dãy các bước Mỗi bước biểu diễn một dịch chuyển trên tài liệu dọc theo một trục, và mỗi bước có thể áp dụng một hay nhiều vị từ để loại bớt các nút không thoả mãn điều kiện Kết quả của mỗi bước là một dẫy các nút làm điểm bắt đầu cho bước tiếp theo Trục mặc định là trục thường là “child”, bước đầu tiên trong đường dẫn trả về các nút là con trực tiếp của nút trong ngữ cảnh.
Kết quả của biểu thức đường dẫn là dãy các nút hay các giá trị cơ sở Các nút trong kết quả biểu thức đường dẫn sắp xếp theo vị trí ban đầu của nó trong tài liệu gốc Nếu kết quả của biểu thức đường dẫn bao gồm các nút bắt nguồn từ nhiều tài liệu khác nhau, thứ tự các nút phụ thuộc vào thực thi Kết quả cũng có thể chứa các giá trị trùng nhau Nhưng nó sẽ không chứa hai nút trùng nhau.
Ví dụ sau dùng biểu thức đường dẫn chứa 3 bước ở bước thứ nhất xác định nút gốc trong tài liệu Bước thứ hai xác định chương thứ hai của tài liệu Bước thứ ba tìm phần tử hình ảnh xuất hiện ở bất kỳ đâu trong trương này, nhưng chỉ giữ lại các phần tử có nhãn có giá trị “Tree Frogs”
(Q1) Trong chương hai của tài liệu tên “zoo.xml”, tìm các hình có nhãn “Tree Frogs” document("zoo.xml")//chapter[2]//figure[caption = "Tree Frogs"]
XPath cho phép một nút được chọn từ một dãy các nút bằng cách xác định thứ tự của nó trong dãy( như trong bước chapter[2] trong Q1) XQuery cho phép biểu thức điều kiện chọn chứa một dãy các số nguyên xác định thứ tự các nút được chọn Dãy này có thể xác định bởi các số ( như 1,3,5,7) hay một biểu thức sinh ra một dãy số nguyên liên tiếp ( như 1 to 10 ) Nút đầu tiên trong dãy coi như có số thứ tự là 1.
(Q2) Tìm tất cả các hình trong chương từ 2 tới 5 của tài liệu “zoo.xml” document("zoo.xml")//chapter[2 TO 5]//figure
Ngoài các biểu thức thông thường của XPath, XQuery giới thiệu một toán tử gọi là toán tử dereference (“=>”) Toán hạng bên trái của toán tử dereference phải là một nút có kiểu IDREF hay IDREFS Toán tử dereference trả lại các toán tử tham chiếu bởi thuộc tính Một toán tử dereference theo sau bởi tên của phần tử đích. Phần tử đích không khớp với tên đã cho sẽ không được trả lại Tên phần tử đích là
“*” cho phép phần tử đích có bất kỳ tên nào.
Một toán tử dereference có thể sử dụng chỉ với tài liệu có lược dồ hay DTD, do toán tử cần phải tìm các nút có kiểu ID, IDREF, và IDREFS, các nút đó chỉ có thể có bằng các tham chiếu tới lược đồ hay DTD.
Toán tử dereference có thể sử dụng trong các bước của biểu thức chính quy Ví dụ, truy vấn sau đây dùng toán tử dereference để tìm nhãn của phần tử “fig” tham chiếu bởi thuộc tính “refid” của phần tử “figref”.
(Q3) Tìm nhãn của các hình tham chiếu bởi phần tử trong trường của
“zoo.xml” có nhãn là “Frogs”. document("zoo.xml")//chapter[title = "Frogs"] //figref/@refid=>fig/caption
Về mục đích toán tử dereference tương tự với hàm id trong XPath.
Trong XPath, mỗi bước chọn một tập các nút liên quan đến một nút ngữ cảnh Mỗi nút trong tập này sẽ được dùng như nút ngữ cảnh trong bước tiếp theo Tập các nút được chọn theo cách này được kết hợp, như bởi toán tử UNION, để nhận được kết quả cho bước tiếp theo XQuery mở rộng XPath 1.0 bằng cách cho phép mỗi bước trong một biểu thức đường dẫn chứa bất kỳ biểu thức XQuery nào, được chứa trong hai dấu đóng, mở ngoặc kép để tránh nhầm lẫn Ví dụ sau đưa ra một ví dụ chứa toán tử ONION (định nghĩa bởi toán tử “|”) có thể được dùng trong một bước của biểu thức đường dẫn.
(Q4) Tìm tất cả nhãn của các hình và bảng trong các chương của tài liệu
“zoo.xml” có nhãn “Monkeys”. document("zoo.xml")//chapter[title = "Monkeys"]
DEL - Ngôn ngữ trích chọn dữ liệu
Wrapper mà chúng tôi xây dựng dùng ngôn ngữ DEL làm ngôn ngữ biểu diễn kịch bản trích chọn thông tin DEL là được tổ chức W3C công bố Nó đã được sử dụng trong dự án Republica Một ưu điểm của DEL là có thể dùng để trích chọn dữ liệu cả tài liệu HTML hay một tài liệu văn bản thông thường Cũng chính vì thế mà nó không tận dụng được hết các cấu trúc của HTML Tuy nhiên do được biểu diễn đưới dạng XML nên dễ dàng phân tích và xây dựng Để áp dụng vào việc xây dựng wrapper chúng tôi đã bỏ bớt một số phần của DEL (hỗ trợ để tách văn bản) cũng như thêm một số phần tử để việc tách hiệu quả hơn.
2.3.1 Các ngôn ngữ kịch bản tách dữ liệu trong wrapper
Nhiều wrapper cung cấp một ngôn ngữ để mô tả các luật tách để tách dữ liệu từ các tài liệu HTML Các ngôn ngữ này dùng để thể hiện các truy vấn trong quá trình tách Nó có cac thuộc tính đặc biệt sau: (a) tách các cấu trúc cú pháp từ tài liệu HTML; (b) xác định cấu trúc đó dựa vào nội dung của nó (ngữ nghĩa); (c) duyệt theo cấu trúc dựa theo biểu thức đường dẫn; và (d) ánh xạ các cấu trúc đó tới cấu trúc đối tượng tương ứng của kết quả
HEL (HTML Extraction Language) là ngôn ngữ tách dữ liệu sử dụng trong dự án W4F HEL là ngôn ngữ dạng DOM trong đó tài liệu HTML được biểu diễn dưới dạng đồ thị các thẻ
Ví dụ một luật tách của HEL: caption = html.body.table[0].tr[*].txt
HEL mô hình tài liệu HTML theo mô hình DOM và xác định thông tin tách dựa vào cấu trúc phân lớp của cây Dữ liệu tách ra theo các luật lưu vào các trường có trong lược đồ ban đầu dạng danh sách Thông tin sau đó được lưu theo NSL (nested string lists) Cuối cùng cấu trúc NSL được ánh xạ theo cấu trúc trong wrapper W4F cung cấp các hàm để các chương trình sử dụng thông tin tách trong trình
Dự án AraneusWTK sử dụng ngôn ngữ NF để biểu diễn các luật tách Các luật tách trong AraneusWTK biểu diễn theo cú pháp BNF
(
$TmpConfName.cutAll(); // and $TmpConfName documents $ConfName.put(" "); // separated by a space
$ConfName.paste(); // to form $ConfName
Trong quá trình đối sánh các luật NF dữ liệu có thể được tách ra theo một trong các cấu trúc khai báo trong các $TPi (i là số nguyên) $TPi khai báo một cấu trúc đơn giản bao gồm tên các trường dữ liệu ra và kiểu dữ liệu Ngoài ra NF còn cung cấp một cơ chế bắt lỗi
Nói chung nhiều dự án xây dựng wrapper đều sử dụng một ngôn ngữ nào đó Dự án Jedi dùng ngôn ngữ Jedi, Lapis dùng các ràng buộc văn bản (text contrain) và nhiều dự án dùng biểu thức chính quy làm ngôn ngữ kịch bản.
Trong các ngôn ngữ trên dữ liệu ra có cấu trúc khá đơn giản (Araneus dùng cấu trúc danh sách, còn HEL dựa vào cấu trúc NSL để chương trình sử dụng chúng định dạng lại) Nó không thể đưa ra được một kết quả có cấu trúc phức tạp.
Trong dự án này chúng tôi đã chọn ngôn ngữ DEL làm ngôn ngữ kịch bản. Cấu trúc dữ liệu ra rất linh hoạt nó được biểu diễn ngay trong quá tình tách thông tin Một lý do nữa mà chúng tôi chọn DEL đó là DEL là một ngôn ngữ có định dạng XML Do đó không phải mất công xây dựng một chương trình phân tích cú pháp phức tạp mà có thể sử dụng ngay các công cụ phân tích XML để phân tích chúng
DEL là tài liệu dạng XML mô tả quá trình chuyển từ một định dạng dữ liệu khác sang dạng XML Một kịch bản DEL cho biết cách xác định vị trí và tách các đoạn dữ liệu từ một dữ liệu vào và chèn chúng vào một tài liệu XML kết quả Một bộ xử lý tài liệu DEL có thể dùng để trích thông tin rồi tạo một tàI liệu XML mới hay thay đổi tàI liệu XML hiện tại bằng cách thêm các phần tử mới và các thuộc tích ở một phần tử xác định bằng biểu thức XPath Định vị các đoạn dữ liệu trên dữ liệu vào có thể thực hiện bằng cách tìm kiếm theo mẫu và đối sánh theo biểu thức chính quy Các đoạn dữ liệu trích được trước hết được lưu vào các thanh ghi (hay ngăn xếp) để có thể lọc lại trước khi đưa ra Dữ liệu sau đó được từ các thanh ghi( hay ngăn xếp) và đặt vào vị trí chính xác trong cây DOM của tàI liệu XML sinh ra Để đặt dữ liệu vào XML, một con trỏ vị trí được dùng để lưu vị trí hiện hành Con trỏ vị trí có thể thay đổi bằng biểu thức XPath.
2.3.3 Định nghĩa ngôn ngữ trích dữ liệu
Phần sau đây sẽ mô tả các phần tử của ngôn ngữ trích chọn dữ liệu, các thuộc tính cũng như giá trị của nó.
Chú ý: Giá trị của các thuộc tính “stack” và “regX”(trong đó X là tên thanh ghi do người dùng định nghĩa có ít nhất một ký tự) sẽ được phân tích thành giá trị trước khi sử dụng Sau đó giá trị thực sự chủa chúng sẽ được lấy từ bộ nhớ (stack hay register) Trong các trường hợp khác giá trị thực sự được cho trong giá trị của thuộc tính.
Chức năng: phần tử wrapper là phần tử chứa ( phần tử gốc) cho các luật kịch bản DEL Khi tạo một tàI liệu ra mới, phần tử map đầu tiên có thuộc tính maptype là “createDocument”.
Chứa: đầu tiên là các phần tử template và map sau đó có thể có một trong các phần tử sau đây: repeat, map, extract, test, set hay runtemplate.
Chức năng: Dùng để lưu địa chỉ trang Web cần tách thông tin
Thuộc tính: fetch (bắt buộc) cách lấy trang web về, để tăng hiệu năng chúng tôi cung cấp một số cơ chế để khác nhau để thực hiện điều này timeout: thời gian giới hạn để lấy trang web.
- sequence: lấy trang web theo một trong hai cơ chế khác nhau S ? T nếu cớ chế thứ nhất lỗi thì lấy theo cớ chế thứ hai
- execution: lấy trang web theo trong hai cơ chế đồng thời S | T có một cớ chế thành công thì sẽ kết thúc chú ý: có hai cơ chế là POST và GET được dùng để tải một trang web
Chức năng: Liên kết đến trang web tiếp theo trong quá trình tách dữ liệu Giá trị của nó là một siêu liên kết Rất nhiều các web site lưu thông tin trên nhiều trang mà để lấy đầy đủ thông tin đòi hỏi phải duyệt hết các trang
Chức năng: phần tử template được dùng để như phần tử chứa các dãy các phần tử hay dùng Phần tử runtemplate sẽ được dùng để gọi nộii dung các phần tử template Chứa: Có thể chứa một trong các phần tử sau đây: repeat, map, extract, test, set hay runtemplate.
Thuộc tính: name(bắt buộc)
Chức năng: phần tử repeat lập lại nội dung của nó, tức là nội dung các phần tử dưới nó.
Chứa: Có thể chứa một trong các phần tử sau đây: repeat, map, extract, test, set hay runtemplate.
Thuộc tính: times(bắt buộc)
Khi thuộc tính times là “*”, nó lặp lại nội dung của nó cho tới khi một trong các phần tử extract thiết lập trạng tháI “dataStreamError”.
Mô hình truy xuất dữ liệu Web
Phần này trình bày về mô hình biểu diễn trang web khi truy xuất trong quá trình tách thông tin Một cách đơn giản sau khi lấy trang web về và làm sạch (thêm các thẻ còn thiếu, …) trang web có định dạng XHTML ta có thể dùng mô hình đối tượng DOM để truy xuất trang web Trong dự án WebL khi xây dựng ngôn ngữ thao tác với trang web đã đưa ra một mô hình truy xuất hiệu quả hơn trong việc tạo wrapper Trong chương trình của chúng tôi đã sử dụng mô hình này trong quá trình trích thông tin theo kịch bản DEL
2.4.1 Lấy nội dung trang web về
Việc lấy trang web về là công tác đơn giản nhất trong 3 công tác của wrapper Trong công việc này, wrapper sẽ thực hiện lấy trang web về theo một địa chỉ cho trước, phân tích cú pháp của trang web lấy về được và chuyển cho modul tiếp theo.
Vấn đề chủ yếu của việc lấy nội dung trang web về là vấn đề xử lí lỗi.Trong phạm vi phân tán rộng lớn như WWW và một cơ sở hạ tầng về mạng như hiện nay, việc mắc lỗi trong quá trình lấy nội dung một site về rất dễ xảy ra Khi lỗi đã xảy ra thì hệ thống sẽ không làm việc được vì modul lấy web về là cửa ngõ của hệ thống, cung cấp dữ liệu cho hệ thống.
Ngôn ngữ WebL đã đề ra một cơ chế xử lí lỗi nhằm cải thiện, tăng cường tính tin cây trong công tác này Cơ chế này mang tên Service Combinator (bộ tổ hợp dịch vụ) Trong cơ chế này chúng ta sẽ bàn về các dịch vụ (service) – các phép tính toán phụ thuộc vào các web server ở xa.
Vậy thì Service Combinator là gì?
Service Combinator là một cơ chế cho phép một vài dịch vụ phối hợp với nhau theo một cách nào đó để sao cho các tính toán tin cậy hơn và trong một số trường hợp, có thể cải thiện được tốc độ Các cách phối hợp với nhau đó là:
Thực hiện tuần tự Thực hiện cạnh tranh Time-out
Lặp Thực hiện không kết thúc Để minh hoạ cơ chế cùng với cách phối hợp của chúng, chúng tôi giả sử có hai dịch vụ thực hiện kéo trang web về
GetURL(url, [ param1=val1, param2=val2, ])
PostURL(url, [ param1=val1, param2=val2, ]) Hàm (dịch vụ) GetURL sẽ kéo trang web có địa chỉ url theo phương thức GET của giao thức HTTP Hàm sẽ thất bại hay nói cách khác dịch vụ sẽ thất bại nếu việc kéo trang web về có lỗi Tham số thứ hai của hàm sẽ cung cấp cho web server các tham số truy vấn
PostURL cũng hoàn toàn tương tự GetURL Nó là phương thức POST của giao thức HTTP, được sử dụng để điền vào form dữ liệu vào dựa trên web.
// chương trình này sẽ thử lấy một trang về page = GetURL("http://www.digital.com") // Chương trình này sẽ tìm từ “java” trên máy tìm kiếm AltaVista page = GetURL(
"http://www.altavista.digital.com/cgibin/query", [ pg="q", what="web", q="java" ])
Toán tử phối hợp “?” cho phép dịch vụ thứ hai được thực hiện trong trường hợp dịch vụ thứ nhất bị lỗi vì một lí do nào đó Như vậy, dịch vụ S ? T đóng vai trò như dịch vụ S ngoại trừ S có lỗi thì nó sẽ thực hiện dịch vụ T.
//Đoạn chương trình này sec thử connect vào máy AltaVista ở //California, và trong trường hợp có lỗi, nó sẽ thử connect vào //một site tương tự ở Australia. page = GetURL("http://www.altavista.digital.com") ? GetURL("http://www.altavista.yellowpages.com.au")
Toán tử cạnh tranh “|” cho phép hai dịch vụ đồng thời thực hiện Dịch vụ ( S | T ) sẽ khởi động cả hai dịch vụ S và T cùng một lúc và trả lại kết quả của bất cứ dịch vụ nào kết thúc thành công trước Nếu cả hai dịch vụ con bị lỗi thì dịch vụ phối hợp của chúng cũng bị lỗi trường hợp một dịch vụ thực hiện xong sớm hơn thì dịch vụ thực hiện chậm hơn phải kết thúc
//Chương trình này sẽ cố gắng kéo một trang từ một trong //hai site tuỳ chọn Cả hai site được kéo về một cách đồng thời //và kết quả trả về là bất kì một trang nào được lấy về sớm hơn page = GetURL("http://www.altavista.digital.com") |
GetURL("http://www.altavista.yellowpages.com.au")
Thực hiện trong vòng thờI gian giớI hạn timeout(t,S)
Bộ phốI hợp giới hạn thời gian này cho phép áp đặt một thờI gian hữu hạn t lên dịch vụ S Dịch vụ timeout(t,S) sẽ đóng vai trò như dịch vụ S nhưng có điều dịch vụ sẽ kết thúc nếu trong khoảng thờI gian t S chưa hoàn thành.
// Chương trình này sẽ đồng thời truy cập đến hai site
//có nội dung tương tự nhau Nhưng phảI kết thúc trước
//10 giây nếu không muốn bị tự động ngắt. page = Timeout(10000,
GetURL("http://www.altavista.digital.com") |
GetURL("http://www.altavista.yellowpages.com.au "))
Bộ phối hợp lặp Retry cung cấp một cách kích hoạt một dịch cho đến khi nó thực hiện thành công Dịch vụ Retry(S) đóng vai trò như dịch vụ S, trừ trường hợp
S bị lỗi thì nó sẽ tự động khởi động lại S Một vấn đề dễ thấy rằng nếu S luôn lỗi thì dịch vụ lặp sẽ không dừng Do đó để kết thúc dịch vụ lặp ta có thể sử dụng bộ phối hợp giới hạn thời gian Timeout(t,Retry(S)).
//Chương trình này sẽ thực hiện lạI lần lượt
//hai dịch vụ con nếu cả hai dịch vụ này đều //bị lỗi. page = Retry(
GetURL("http://www.x.com") ? GetURL("http://www.y.com"))
Bộ phối hợp Stall sẽ không bao giờ kết thúc hay lỗi.
//Chương trình sau đây sẽ cố gắng lấy site digital.com //sau mỗI lần lấy không được thì sẽ dừng nghỉ 10 giây //và lạI lặp lạI cho đến khi lấy về được. page = Retry(getpage("http://www.digital.com") ? Timeout(10000, Stall())
Cài đặt mô đun wrapper trên hệ thống tích hợp dữ liệu
Mô hình logic
Wrapper chay trong hai pha: pha thứ nhất khi người kỹ sư tri thức định nghĩa nguồn dữ liệu trong trang Pha thứ hai thực hiện khi có yêu cầu truy vấn cho nguồn dữ liệu
- Pha 1: Môđun Xác định lược đồ hiện thị trang web trợ giúp người kỹ sư tri thức xác định nguồn dữ liệu và đưa ra tập tin DEL kịch bản tách dữ liệu và đưa ra DTD cho nguồn.
- Pha 2 : Thực hiện truy vấn o Mô đun phân tích truy vấn: Mô đun này nhận một câu truy vấn và phân tích nó dưới dạng XqueryX Mục đích của mô đun này là xác định các thông tin cụ thể về dữ liệu cần lấy(các trường, ràng buộc) để giới hạn các dữ liệu tách trong quá trình tách thông tin từ Web. o Mô đun trích thông tin: Đây là một compiler, đầu vào là một kịch bản DEL, đầu ra là các tệp XML Trong khi thực hiện mô đun sẽ lấy các trang web cần thiết và tiến hành tách dữ liệu theo kịch bản xác định trước. o Mô đun thực hiện truy vấn: Đầu vào là một tệp truy vấn, và các tệp dữ liệu truy vấn, đầu ra là kết quả truy vấn. o Mô đun đóng gói kết quả: Đóng gói kết quả truy vấn và trả lại cho tầng trên.
Cài đặt
Môi trường phát triển cho ứng dụng là Window Hệ thống được xây dựng bằng ngôn ngữ lập trình Java trong quá trình xây dưng hệ thống ngoài các thư viện chuẩn của Java chương trình có sử dụng một số bộ thư viên như Xerces, WebL, XDK
3.1.1 Mô đun phân tích truy vấn
Mô đun đặt trong gói xquery Gói này có hai lớp XQueryContext và PreparedXQuery, XQueryResultSet
Lớp XSueryContext : Cung cấp một ngữ cảnh để thực hiện truy vấn
Lớp PreparedXQuery : Lớp chứa truy vấn, thực hiện truy vấn Có thể lấy XqueryX của câu truy vấn bằng phương pháp getXQXStr() ;
Lớp XQueryResultSet : Lớp này chứa kết quả truy vấn, cung cấp các phương pháp để quản lý kết quả.
3.2.2 Mô đun tách dữ liệu
Phân tích nội dung kịch bản DEL : DEL lưu trữ theo định dạng XML nên đã phân tích theo mô hình DOM (Document Object Model) bằng thư viện xerces. Theo mô hình này, tài liệu DEL là một cây bao gồm tập hợp các nút (node). Những nút này nội dung có thể chứa phần tử (element), dữ liệu (text), thuộc tính (attribute), và các nút con khác
Một đặc điểm của tài liệu DEL là xử lý tài liệu từ đầu đến cuối theo thứ tự duyệt dọc theo tài liệu do đó dhúng tôi duyệt cây DOM của kịch bản DEL theo rồi xử lý tài liệu theo các nút public void travel(Node node) { if (node == null) { return;
} int type = node.getNodeType(); switch (type) { case Node.DOCUMENT_NODE:
Document document = (Document)node; travel(document.getDocumentElement()); // gọi đệ quy hàm duyệt break; case Node.ELEMENT_NODE:
Node child = node.getFirstChild(); // chọn nút con đầu tiên
// xử lý lần lượt các nút con while (child != null) { process(child); // xử lý theo nút travel(child); child = child.getNextSibling(); // chọn nút tiếp theo
} Định dạng tài liệu ra của kịch bản DEL cũng có dạng XML và thứ tự xây dựng chúng đã xác định rõ trong tài liệu Trong quá trình trích thông tin chúng tôi cũng sử dụng thư viện xerces để tạo tệp XML kết quả.
Tạo tài liệu doc = new DocumentImpl();
Tạo phần tử doc.createElement(“Tên phần tử”)
Tạo thuộc tính node.setAttribute(“Tên thuộc tính”, “Giá trị thuộc tính”);
3.2.3 Truy suất tài liệu Web
- Lấy một trang Web sử dụng thư viện Net
Lớp Page chứa thông tin của trang Web page = Net.GetURL("http://yahoo.com ", null, null, null);
- Xác định một nhãn theo tên
Lớp PieceSet chứa thông tin về tập các nhãn pieceSet = page.getElem(); // lấy tập tất cả các nhãn của trang.
Các nhãn liên kết với nhau bằng một danh sách thực thi bằng lớp Cell public Piece pce; // nhãn public Cell prev, next; // con trỏ trước sau
Lớp Piece chứa thông tin về một nhãnChọn một nhãn theo tên
Cell c = PieceSet.OpElem(pieceSet, tagName, startCell); piece = c.pce;
// Chọn một nhãn trong một danh sách nhãn pieceSet với tên tagName, bắt đầu từ cell startCell.
Chọn tập các nhãn theo tên pieceSet = OpElem(PieceSet x, String name)
3.2.4 Mô đun giao diện người sử dụng
Hiển thị thông tin trang web lấy về dạng theo trình duyệt và dạng text để kỹ sư tri thức viết kịch bản DEL
Mỗi một wrapper chương trình sẽ hiển thị thành một cây với các nút con là DEL script , các trang web đầu vào, và kết quả.
Hình 8 Hiển thị DEL script
Hình 9: Hiển thị trang Web dưới dạng text
Hình 10 Kết quả thực hiện
Chương IV : Đánh giá và Kết luận
Wrapper là một vấn đề quen thuộc và có rất nhiều dự án xây dựng Cách xây dựng wrapper cũng rất đa dạng Mỗi wrapper đã xây dựng đều có những ưu nhược điểm riêng Để hoàn thiện wrapper trong dự án này đòi hỏi phải tập trung nhiều công sức hơn nữa Wrapper mà chúng tôi xây dựng Tuy nhiên nó sẽ giúp chúng ta hiểu ra hơn về cách xây dựng cũng như các kỹ thuật Hơn nữa chúng ta có thể cài đặt các wrapper với chức năng phù hợp với hệ thống tích hợp dữ liệu này Trong đồ án này phương pháp xây dựng được lựa chọn là bán tự động Lý do chọn phương pháp này ví nó giảm bớt được công việc xây dưng wrapper hơn so với phương pháp thủ công, và cũng linh hoạt hơn phương pháp tự động vốn không có sự tham gia của con người Có nhiều dự án cũng đã chọn cách xây dựng theo phương pháp này như W4F, AranusWPR, XWrap, … Ngôn ngữ lựa chọn để biểu diễn định nghĩa thông tin trích chọn là kịch bản DEL Có nhiều dự án đã đưa ra các ngôn ngữ trích chọn riêng như W4F có HEL (HTML Extraction Language), AranusWPR có NF, Jedi có ngôn ngữ Jedi Ngôn ngữ DEL là ngôn ngữ tách thông tin Đối tượng của nó không chỉ là các tài liệu Web mà cả các tài liệu văn bản thông thường Đã có một số sử dụng ngôn ngữ này để xây dựng wrapper DEL có một số ưu điểm so với các ngôn ngữ khác.
- Biểu diễn dưới dạng XML - Một chuẩn biểu diễn thông tin có thể xử lý dễ dàng.
- Cấu trúc dữ liệu tách có thể phức tạp được định nghĩa ngay trong DEL. HEL chỉ lưu thông tin vào một danh sách sau đó phải dùng một cơ chế ánh xạ để đưa ra cấu trúc thông tin khác.
Do có hạn chế về mặt thời gian, vấn đề xây dựng wrapper là khá phức tạp, nên phần cài đặt chỉ mang tính chất thử nghiệm Để hoàn thiện thành một sản phẩm ứng dụng cần phải tinh chỉnh nhiều
Hướng phát triển của hệ thống
- Xây dựng một giao diện thân thiện hơn cho phép tự động sinh mã DEL
- Tận dụng thông tin về truy vấn để giảm bớt khối lượng thông tin trích chọn.
Các tài liệu tham khảo
1 The TSIMMIS Approach to Mediation: Data Models and Languages Hector Garcia Molina, Yannis Papakonstantinou, Dallan Quass, Anand Rajaraman,
Yehoshua Sagiv, Jeffrey Ullman, Vasilis Vassalos, Jennifer Widom Stanford University, Stanford CA 94350 USA
2 Template-Based Wrappers in the tsimmis System
Joachim Hammer, Hector Garcia-Molina, Svetlozar Nestorov, Ramana Yerneni, Marcus Breunig, Vasilis Vassalos.Department of Computer Science Stanford University, Stanford CA 94350 USA
3 Information Extraction from World Wide Web – Asurvey Line Eikvil
4 Extraction of Web information using W4F wrapper factory and XML-QL Query language Deepali Bhandari, Philadelphia, Pennsylvania (August, 1999)
5 Effective Web Data Extraction with Standard XML Technologies Jussi Myllymaki IBM Almaden Research Center 650 Harry Road.San Jose, CA 95120, USA
6 Don’t Scrap It, Wrap It! A Wrapper Architecture for Legacy Data Sources. Mary Tork Roth, Peter Schwarz, , IBM Almaden Research Center.
7 Wrapper Generation forWeb Accessible Data Sources Jean-Robert Gruser, Louiqa Raschid, Mar´ýa Esther Vidal, Laura Bright University of Maryland
8 Semi-automaticWrapper Generation for Internet Information Sources Naveen Ashish and Craig Knoblock Information Sciences Institute and Department of Computer Science University of Southern California 4676 AdmiraltyWay, Marina del Rey, CA 90292
10 Semi-Automatic Wrapper Generation for Commercial
Web Sources Alberto Pan1, Juan Raposo2, Manuel Álvarez2, Justo Hidalgo1 and Angel Viủa2 1Denodo Technologies 2Communications and Information Technology Department-University of A Coruủa
11 Rapper: A Wrapper Generator with Linguistic Knowledge David Mattox, Len Seligman, Ken smith The MITRE Corporation 1820 Dolley Maidson.
12 NoDoSE-A tool for Semi-Automatically Extracting Structured andSemistructured Data from Text Documents Brad Adelberg
13 A Flexible MetaWrapper Interface for Autonomous Distributed Information Sources Louiqa Raschid, Maria Esther Vidal, Jean-Robert Gruser University of Maryland College Park.
14 A Wrapper Generator for Integrated Information Retrieval Min-Huang Ho, Yue-Shan Chang, Wen-Chen Sun, Shyan-Ming Yuan Department of Computer and Information Science, National Chiao Tung University Department of Electronic Engineering, Ming-Hsin Institute of Technology Embedded System Lab, Institute for Information Industry
15 Automatic Wrapper Generation for Web Search Engines Boris Chidlovskii, Jon Ragetlli, and Maarten de Rijke Xerox Research Centre Europe, Chemin de Maupertuis, 38240 Meylan, France.
16 Semi – Automatic wrapper generation and adaption Living with heterogeneity in a market environment Michael Christoffel, Bethina Schmitt, Jürgen Schneider Institute for Program Structures and Data Organization, Universitọt Karlsruhe, Karlsruhe, Germany.
17 Extracting Semistructured Information from the Web J Hammer, H Garcia- Molina, J Cho, R Aranha, and A Crespo Department of Computer Science. Stanford University Stanford, CA 94305-9040
18 The ARANEUS wrapper toolkit: A tutorial Valter crescenzi, Giansalvatore Mecca Universita di Roma Tre.
20 WyiWyg Web Wrapper Factory (W4F) Arnaud Sahuguet Department of Computer and Information Science University of Pennsylvania.
21 WebL - A Programming Language for theWeb Hannes Marais Compaq Systems Research Center (SRC)
22 XML Syntax for XQuery 1.0 (XQueryX) W3C Working Draft 07 June 2001
23 DEL - Data Extraction Language W3C Note 31 October 2001.
1.1 Các hệ thống tích hợp dữ liệu 2
1.2 Web và vấn đề khai thác thông tin từ Web 3
1.3 Một số dự án xây dựng wrapper trên Web 8
1.4 Kiến trúc hệ thống BKDATIS 9
1.4.1 Giới thiệu hệ thống BKDATIS 9
1.4.2 Kiến trúc hệ thống BKDATIS 11
Chơng II Cơ sở lý thuyết 14
2.1 Các hệ thống tích hợp dữ liệu 14
2.1.1 Dữ liệu bán cấu trúc biểu diễn bởi XML 14
2.2 Công cụ truy vấn XML: XQuery 17
2.2.2 Cú pháp biểu thức truy vấn 18
2.2.3 Hớng tiếp cận theo trờng hợp sử dụng 24
2.2.4 XqueryX: Cú pháp XML cho Xquery 27
2.3 DEL - Ngôn ngữ trích chọn dữ liệu 32
2.3.1 Các ngôn ngữ kích bản tách dữ liệu trong wrapper 32
2.3.3 Định nghĩa ngôn ngữ trích dữ liệu 35
2.3.4 Ví dụ về ngôn ngữ trích chọn dữ liệu 45
2.4 Mô hình truy xuất dữ liệu Web 51
2.4.1 LÊy néi dung trang web vÒ 51
Chơng III Cài đặt mô đun wrapper trên hệ thống tích hợp dữ liệu 60
3.1.1 Mô đun phân tích truy vấn 61
3.2.2 Mô đun tách dữ liệu 62
3.2.3 Truy suất tài liệu web 63
3.2.4 Mô đun giao diện ngời sử dụng 64