: XÂY DỰNG HỆ THỐNG QUẢN TRỊ TRI THỨC DỰA TRÊN ONTOLOGY CHO DOANH NGHIỆP
I.17.1. Tổ chức các engine corese để làm việc với nhiều luật
Trong phần trên em đã trình bày về cách làm việc với một đối tương Corese để load ontology, các annotation và các luật để tìm kiếm thông tin trên đó.
Vấn đề về tích hợp sẽ không khó khăn nếu hệ thống chỉ sử dụng một đối tượng Corese duy nhất để truy vấn. Tuy nhiên, khi sử dụng duy nhất một đối tượng Corese ta sẽ gặp vấn đề khi áp dụng các luật cho biến Corese đó.
Mô hình hoạt động của Corese là sử dụng đồ thị quan niệm, trong đó Corese sẽ load Ontology, Annotation và tạo thành các mô hình đồ thị quan niệm trong nó. Khi áp dụng các luật, các mô hình mới sẽ được sinh ra. Đó chính là một ưu điểm của web ngữ nghĩa, hơn hẳn so với các thế hệ web trước.
Tuy nhiên các luật thường ảnh hưởng lẫn nhau, vì nó làm thay đổi đồ thị quan niệm trong biến corese do đó có thể làm hỏng dữ liệu bên trong đồ thị quan niệm, và trả ra các kết quả sai khi truy vấn. Việc xây dựng các luật phục vụ tốt cho chức năng mà không ảnh hưởng đến các luật khác là một công việc vô cùng khó và mất rất nhiều công sức.
Bản thân Corese mới chỉ thể nạp thêm được luật, chứ chưa loại bỏ được các mô hình sinh ra bởi luật đó; cũng như corese không thể clone được, vì vậy việc sử dụng nhiều đối tượng trong Corese trong hệ thống là tất yếu.
Trong quá trình tìm hiểu và làm việc với Corese, nhóm dự án đã gặp khá nhiều khó khăn vì tài liệu hướng dẫn của Corese là sơ sài. Và vấn đề gặp phải khi sử dụng nhiều biến Corese là biến dataloader của Corese (dùng để load các annotation và luật) có kiểu truy cập là static. Mất khá nhiều thời gian và công sức em mới tìm ra cách nạp dữ liệu và không sử dụng biến dataloader. Kỹ thuật để sử dụng nhiều đối tương Corese đã được giải quyết.
Để nạp các luật khác nhau cho các ứng dụng, em thiết kế mô hình các đối Corese như sau:
Hình 44: Tổ chức lớp cho các đối tượng QueryCorese
Trong đó lớp AbstractQueryCorese là một lớp trừu tượng để chứa các thuộc tính và khai báo các phương thức chung cho các biến QueryCorese khác. Các thuộc tính dùng chung là file ontology và thư mục đến các annotation.
Mỗi đối tượng QueryCorese được nạp các luật khác nhau và không ảnh hưởng lẫn nhau, phục vụ cho 1 hoặc một số chức năng sử dụng luật đó.
I.17.2. Tra cứu ontology
Như đã nói trong phần thiết kế, để hiển thị các lớp chúng ta cần một file xml là đầu ra của Model. File xml đó có phần đầu như sau:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE treeview SYSTEM "xslt/treeview.dtd"> <?xml-stylesheet type="text/xsl" href="xslt/treeview.xslt"?>
Để tạo ra file xml đó, Model sử dụng Corese API để load Ontology. Sau đó sẽ gửi truy vấn SPARQL để lấy tất cả các lớp trong Ontology:
Cuối cùng, Model sẽ sinh ra một file xml có cấu trúc như sau:
select * where {
?x rdf:type rdfs:Class };
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE treeview SYSTEM "xslt/treeview.dtd"> <?xml-stylesheet type="text/xsl" href="xslt/treeview.xslt"?> <treeview title="Class Hierachy">
<folder title = "Something" img="class.gif" id="Something" expanded="true"> <folder title = "Event" img="class.gif" id="Event" expanded="true">
<folder title = "EntertainmentEvent" img="class.gif" id="EntertainmentEvent" expanded="true">
<leaf title = "SportsEvent" img="class.gif" id="SportsEvent"> </leaf>
<leaf title = "PartyEvent" img="class.gif" id="PartyEvent"> </leaf>
</folder> </folder> </folder> </treeview>
File xml này sẽ được phân tích và chuyển đổi bởi file xslt/treeview.xslt và sinh ra giao diện các lớp dưới dạng cây như sau:
Ý nghĩa của các phần tử và thuộc tính trong file xml trên:
Element / Property Meaning
treeview root element
folder Mô tả 1 lớp có các lớp con.
leaf Mô tả 1 lớp không có lớp con nào cả.
id Tên của lớp trong file Ontology
title Nhãn của lớp, được hiển thị trong giao diện.
img Hình ảnh tượng trưng cho 1 lớp.
expanded True: lớp cha sẽ được mở ra, có thể thấy được các lớp
con cháu
False: lớp cha sẽ đóng lại.
Để tìm kiếm các lớp, chúng ta có thể tương tác đóng mở các nút trên cây. Tuy nhiên module này cũng đã cài đặt một textbox tự động gợi ý tên lớp cho người dùng. Công nghệ chính sử dụng trong giao tiếp này là ajax. Mỗi khi người dùng thay đổi nội
dung của textbox, một yêu cầu sẽ tự động được sinh ra bởi java script, và gửi lên Server. Server sẽ lấy nội dung của textbox (được gửi kèm trong yêu cầu) và gọi phương thức tương ứng trong Model để sinh ra truy vấn SPARQL, tìm các lớp có bắt đầu bằng các chữ cái trong textbox. Kết quả sẽ được trả về và được xử lý bởi java script, sinh ra danh sách các lớp thỏa mãn. Bằng việc chọn (chuột hay bàn phím) một trong các lớp trong danh sách thì liên kết sang phần hiển thị nội dung của lớp đó.
File java script sẽ có cấu trúc như sau:
// THIS FUNCTION CREATE XMLHTTP OBJECT TO CONNECT TO SERVER function GetXmlHttpObject()
{
xmlHttp = null; try
{
// Firefox, Opera 8.0+, Safari xmlHttp = new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; }
// THIS FUNCTION SEND REQUEST TO SERVER TO GET DATA FROM // ONTOLOGY FILE. function searchClass(className) { var keynum; xmlHttp=GetXmlHttpObject(); if (xmlHttp==null) {
alert ("Your browser does not support AJAX!"); return;
}
var url="jsp/OntologyManaging/searchClassName.jsp"; url=url+"?className="+ className;
xmlHttp.onreadystatechange=stateChanged; xmlHttp.open("GET",url,true);
xmlHttp.send(null); }
"select ?x where {
?x rdfs:domain <" + ClassPath + "> }"
Trong đó: ClassPath = URI + ClassName
Ví dụ, URI = http://mitani.co.jp/mitani#
ClassName = Person
ClassPath = http://mitani.co.jp/mitani#Person