Chức năng “Compare two OWL Ontology”

Một phần của tài liệu LUẬN VĂN: KIỂM TRA SỰ TINH CHẾ HAI MÔ HÌNH CÓ ÁP DỤNG MẪU THIẾT KẾ doc (Trang 39 - 58)

31

4.3.4. Thiết kế giao diện ngƣời dùng

Hình sau đây thể hiện giao diện chính của chương trình khi mới bắt đầu chạy, giao diện chính của chương trình đảm bảo cho phép người sử dụng dễ dàng nhập vào hai OWL Ontology cần kiểm tra. Bên cạnh đó giao diện còn thể hiện một số nút chức năng tiện ích cho người sử dụng như: Checking (Bắt đầu việc kiểm tra), Reset (hủy bỏ dữ liệu và kết quả kiểm tra cũ), Exit (kết thúc chương trình).

Hinh 23: Giao diện chính của chương trình khi bắt đầu chạy

Kết quả của quá trình kiểm tra được trình bầy trong một bảng trong đó thể hiện những đặc tình tương ứng giữa hai mô hình và kết quả so sánh giữa hai đặc tính đó. Trong bảng kết quả có thể hiện rõ mỗi quan hệ giữa các lớp, thuộc tính của lớp, phương thức của lớp, tham biến của phương thức…

32

Hinh 24: Giao diện của chương trình với kết quả của quá trình kiểm tra

4.4. Cài đặt và kiểm thử

4.4.1. Cài đặt

Trong phần này, chúng tôi xin trình về một số vấn đề chính liên quan đến việc cài đặt chương trình demo: Môi trường thực hiện, những phần mềm và thư viện liên quan. Đồng thời, trong phần này chúng tôi cũng xin trình bầy về cách truy vấn Owl Ontology bằng ngôn ngữ Java và một số luật điển hình được sử dụng để thực hiện việc kiểm tra hai mô hình biểu đồ lớp.

4.4.1.1. Môi trường thực hiện và những phần mềm, thư viện liên quan

Chương trình được phát triển trên môi trường JDK 1.5 với môi trường soạn thảy Eclipse 3.0. Ngoài ra để có thể chạy thành công chương trình còn cầm có sự hỗ trợ của phần mềm SWI-Prolog (ở đây tôi sử dụng phiên bản 5.6.55) và Protégé để thực hiện việc kiểm tra hai mô hình bằng những luật Prolog và tạo, truy các Owl Ontology.

33

Bên cạnh những thư viện cơ bản của JDK 1.5 chương trình còn cần có bộ thư viện có trong plugin edu.stanford.smi.protegex.owl mà chúng ta có thể dễ dàng tìm thấy trong thư mục plugin của thư mục cài đặt chương trình Protégé khi nó được cài đặt trên máy tính và những thư viện của chương trình Prolog để thực hiện việc truy vấn Owl Ontology và SWI-Prolog bằng ngôn ngữ Java.

4.4.1.2. Truy vấn Owl Ontology

Như đã trình bày ở trên, việc truy vấn OWL Ontology trong ngôn ngữ java mà chúng tôi sử dụng là Protégé-OWL API. Để trình bày cách thức mà Protégé-OWL API thực hiện truy vấn OWL Ontology, chúng ta hãy xét ví dụ sau đây:

Ví dụ 1: lấy toàn bộ những thể hiện của lớp Visibility_Kind với những thuộc tính của nó bằng cách sử dụng ngôn ngữ java với thư viện Protégé-Owl API:

import edu.stanford.smi.protegex.owl.ProtegeOWL;

import edu.stanford.smi.protegex.owl.model.*;

import edu.stanford.smi.protegex.owl.jena.*;

import java.util.*;

public class ProtegeOwlAPIExp{

public static void main(String[] args){

JenaOWLModel owlModel; try{ owlModel = ProtegeOWL.createJenaOWLModelFromURI( "file:///C:/metamodel1.owl"); OWLNamedClass namedClass = owlModel.getOWLNamedClass("Visibility_Kind"); Collection individualOfVisibilityKind = namedClass.getInstances(true); Visibility_Kind myVisibilityKind;

34 for(Iterator indiIterator = individualOfVisibilityKind.iterator(); indiIterator.hasNext();){ OWLIndividual individual = (OWLIndividual)indiIterator.next(); Collection propertiesColl = individual.getPossibleRDFProperties(); System.out.println(individual.getBrowserText()); For(Iterator proIterator = propertiesColl.iterator();proIterator.hasNext();) { RDFProperty pro = (RDFProperty)proIterator.next(); //String proType = //pro.getProtegeType().getBrowserText(); //if(proType.equals("owl:DatatypeProperty")){

String proName = pro.getName();

if(proName.equals("visibility_kind")){ String visibility_kind = "" + individual.getPropertyValue(pro); System.out.print(“\tVisibility_Kind:” + visibility_kind); } //} } }catch(Exception e){

35 e.printStackTrace();

}

}

}

Kết quả trả lại sau khi chay chương trình trên là:

public visibility_kind: public protected visibility_kind: protected private visibility_kind: private

Kết quả trên thể hiện toàn bộ những thể hiện của lớp Visibility_Kind trong Owl

Ontology metamodel1.owl với thuộc tính visibility_kind có kiểu dữ liệu là String

Xét cấu trúc của chương trình ProtegeOwlAPIExp.java trên:

Lệnh:

owlModel=ProtegeOWL.createJenaOWLModelFromURI("file:///C:/metamodel1 .owl”);

Thực hiện việc tải một OwlModel từ một địa chỉ URI (Uniform Resource Identifier. Trong trường hợp này URL dẫn đến một file owl trên máy cục bộ).

Sau khi OwlModel đã được tải vào trong chương trình của chúng ta, chúng ta có thể thực hiện những truy vấn mà mình muốn.

Lệnh:

OWLNamedClass namedClass =

owlModel.getOWLNamedClass("Visibility_Kind");

36 namedClass.getInstances(true);

Thực hiện việc truy vấn và lấy ra toàn bộ những thể hiện của lớp “Visibility_Kind” và đưa vào một biến có kiểu Collection (tập hợp) là individualOfVisibilityKind. Lệnh: OWLIndividual individual = (OWLIndividual)indiIterator.next(); Collection propertiesColl=individual.getPossibleRDFProperties();

Thực hiện việc lấy ra một thể hiện của lớp Visibility_Kind và toàn bộ những thuộc tính của thể hiện đó và được lưu vào trong một biến có kiểu Collection là propertiesColl.

Lệnh tiếp theo là:

RDFProperty pro = (RDFProperty)proIterator.next();

String proName = pro.getName();

Thực hiện việc lấy từng thuộc tính pro trong tập hợp những thuộc tính được chỉ

ra ở trên và tên của thuộc tính được lấy ra và lưu vào biến proName qua phương thức

getName.

Giá trị của thuộc tính pro trong một thể hiện individual được trả lại bằng

phương thức individual.getPropertyValue(pro); .Chúng ta có thể thấy rõ hơn

trong ví dụ trên với câu lệnh:

String visibility_kind = "" +

individual.getPropertyValue(pro);

Trên đây là một số những lớp và phương thức được sử dụng chính trong

37

có thể tham khảo chi tiết về thư viện Protégé-Owl API trên Website: http://protege.stanford.edu

4.4.1.3. Kiểm tra hai mô hình bằng các luật Prolog

Những khái niệm cơ bản về Prolog đã được chúng tôi trình bày trong chương trước, ở đây chúng tôi chỉ xin gới thiệu về một số luật điển hình được sử dụng để so sánh hai Owl Ontology.

Những luật sử dụng để kiểm tra sự tương đương của hai toán tử (operator):

o Luật sử đụng để kiểm tra một tham biến P có thuộc mô hình 1 hay không: Một

tham biến thuộc mô hình 1 nếu nó thuộc một toán tử nào đó trong mô hình 1

parameter_in_model1(P):-

operator(O), %Voi Toan tu O bat ky

operator_in_model1(O), %Toan tu O thuoc mo hinh 1

operator_has_seq_parameter(O, P),!. %Toan tu O chua

%tham so P

o Tương tự ta có luật kiểm tra một tham biến P có thuộc mô hình 2 hay không

parameter_in_model2(P):-

%parameter(P),

operator(O),

operator_in_model2(O),

operator_has_seq_parameter(O, P),!.

o Luật kiểm tra một tập hợp tham số của một toán tử O1 trong mô hình 1 không có

trong tập hợp tham số của toán tử O2 trong mô hình 2

Tập hợp các tham số T1 của toán tử O1 trong mô hình 1 không có trong tập hợp tham số T2 trong toán tử O2 nếu tồn tại một tham số P1 thuộc T1 và P2 thuộc mô hình 2 mà P2 tương đương với P1 nhưng P2 không thuộc T2

38

parameters_set_of_operator1_model1_not_in_opeartor2_model2(O1, O2):-

operator(O1), operator(O2), %O1, O2 la cac toan tu

operator_in_model1(O1), operator_has_isabstract(O1,

false), %O1 thuoc mo hinh 1, O1 la toan tu cu the

operator_in_model2(O2), operator_has_isabstract(O2,

false), %O2 thuoc mo hinh 2 va O2 la toan tu cu the

operator_has_seq_parameter(O1, P1), %O1 co tham so P1

%parameter(P2),

%parameter_in_model2(P2),%Tham so P2 thuoc mo hinh 2

equivalent_parameters(P1, P2),%P1 tuong duong P2

not(operator_has_seq_parameter(O2, P2)),!.

%P2 khong thuoc O2

o Tương tự ta có luật kiểm tra tập hợp tham số của một toán tử O2 trong mô hình 2

không có trong tập hợp tham số của toán tử O1 trong mô hình 1

parameters_set_of_operator2_model2_not_in_opeartor1_model1(O1, O2):- operator(O1), operator(O2), operator_in_model1(O1), operator_has_isabstract(O1, false), operator_in_model2(O2), operator_has_isabstract(O2, false), operator_has_seq_parameter(O2, P2), %parameter(P1), %parameter_in_model1(P1), equivalent_parameters(P1, P2), not(operator_has_seq_parameter(O1, P1)),!.

39

o Luật kiểm tra xem hai toán tử thuộc hai mô hình có cùng tập hơp tham số hay

không:

Hai toán tử O1 thuộc mô hình 1 và O2 thuộc mô hình 2 có cùng tập hợp tham số nếu tập tham số của O1 chứa trong tập tham số của O2 và ngược lại. Điều này tương đương với không xảy ra việc tập hợp các tham số của O1 không trong tập tham số của O2 và và tập tham số của O2 không có trong tập tham số của O1

operators_has_not_same_parameters(O1, O2):- operator(O1), operator(O2), parameters_set_of_operator1_model1_not_in_opeartor2_mod el2(O1, O2); operator(O1), operator(O2), parameters_set_of_operator2_model2_not_in_opeartor1_mod el1(O1, O2).

o Luật kiểm tra hai toán tử thuộc hai mô hình có cùng chung tập hợp những tham số

hay không: Luật này là phủ định của luật trên

operator_has_same_parameters(O1, O2):-

operator(O1), operator(O2),

operator_in_model1(O1), operator_in_model2(O2),

not(operators_has_not_same_parameters(O1, O2)).

o Luật kiểm tra sự tương đương của toán tử O1 thuộc mô hình 1 và O2 thuộc mô

hình 2:

Hai toán tử O1 và O2 tương đương nhau khi và chỉ khi chúng có cùng tên, kiểu (trừu tượng hay cụ thể), cùng được triển khai giống nhau trong các lớp chứa nó hay không, và có cùng tập hợp những tham số

40 operator(O1), %O1 la mot toan tu

operator_in_model1(O1), %O1 thuoc mo hinh 1

operator(O2), %O2 la mot toan tu

operator_in_model2(O2), %O2 thuoc mo hinh 2

operator_has_name(O1, X), %O1 co ten la X

operator_has_name(O2, Y), %O2 co ten Y

X == Y, %X bang Y (hai toan tu cung ten)

operator_has_isabstract(O1, E),

operator_has_isabstract(O2, F),

E == F, %hai toan tu co cung la truu tuong hoac cu the

operator_has_commonality(O1, G),

operator_has_commonality(O2, H),

G == H, %O1, O2 deu duoc trien khai giong nhau hoac

%khong giong nhau trong cac lop chua no

operator_has_same_parameters(O1, O2),!.

41

4.4.2. Một số trƣờng hợp kiểm thử

Trƣờng hợp 1

 Input là hai đặt tả của hai mô hình lớp sau dưới dạng OWL Ontology

Mô hình 1:

42

 Kết quả

Hình 4.9: Kết quả kiểm thử 1

Kết quả trả về của chương trình với hai mô hình trên là Đúng (True) – Hai mô hình là tương đương

Nhận xét: Kết quả trả về là hợp lý với thực tiễn, biểu diễn cấu trúc lớp một cách rõ ràng.

43

Trƣờng hợp 2

 Input là hai đặt tả của hai mô hình lớp sau dưới dạng OWL Ontology

Mô hình 1:

44

 Kết quả

Hình 4.10: Kết quả kiểm thử 2

Kết quả trả về của chương trình với hai mô hình trên là Sai (false) – Hai mô hình là không tương đương về cả mặt cấu trúc và tính đảm bảo các hành vi của các lớp

Nhận xét: Kết quả trả về là hợp lý với thực tiễn, biểu diễn cấu trúc lớp một cách rõ ràng. Những điểm giống và khác nhau được hiển thị giúp người sử dụng dễ dàng phát hiện ra.

45

Trƣờng hợp 3

 Input là hai đặt tả của hai mô hình lớp sau dưới dạng OWL Ontology

Mô hình 1:

46

 Kết quả

Hình 4.11: Kết quả kiểm thử 3

Kết quả trả về của chương trình với hai mô hình trên là Sai (false) – Hai mô hình là không tương đương về mặt cấu trúc nhưng vẫn đảm bảo về mặt hành vi của các lớp

47

CHƯƠNG 5: TỔNG KẾT

5.1. Tổng kết quá trình thực hiện và kết quả đặt được

Với yêu cầu đặt ra ban đầu của đề tài “Kiểm tra sự tinh chế hai mô hình có áp dụng mẫu thiết kế”, chúng tôi đã tiến hành khảo sát hiện trạng, lựa chọn phương án, phân tích thiết kế và cài đặt chương trình thử nghiệm. Kết quả đạt được như sau:

5.1.1. Về mặt khảo sát, lựa chọn phƣơng án và phân tích thiết kế

Chúng tôi đã khảo sát và phân tích thực trạng việc so sánh giữa hai OWL Ontology: Những chương trình hỗ trợ việc so sánh hai OWL Ontology đã tồn tại, những ưu điểm và những vấn đề cần khắc phục

Sau một thời gian nghiên cứu và tìm ra phương án để thực hiện đề tài, chúng tôi đã tìm ra một phương án khả quan để thực hiện việc so sánh hai OWL Ontology (biểu diễn hai biểu đồ lớp UML): Đó là việc tìm ra phương án để thực hiện truy vấn OWL Ontology và thực hiện so sánh hai mô hình bằng cách sử dụng các luật Prolog.

Chúng tôi đã cố gắng phân tích yêu cầu người dụng một cách đầy đủ nhất có thể, để thực hiện việc thiết kế một công cụ so sánh hai OWL Ontology đơn giản nhưng hiệu quả trên cơ sở phát huy những ưu điểm của những công cụ đã có và khắc phục những thiếu sót mà chúng gặp phải.

5.1.2. Về mặt cài đặt và kiểm thử

Sau một thời gian thực hiện cài đặt, công cụ đã được cài đặt một cách thành công. Công cụ đã đặt được những gì mày trong giai đoạn thiết kế đặt ra, đó là việc so sánh cụ thể những chi tiết sử dụng để đặc tả biểu đồ lớp trong hai OWL Ontology, việc hiển thị những chi tiết được so sánh theo đúng cấu trúc của một biểu đồ lớp từ đó giúp người dùng dễ phát hiện những sai sót, bên cạnh đó công cụ cũng đặt được mục đích quan trọng mà những công cụ trước chưa đặt được, đó là việc so sánh về mặt cấu trúc giữa hai OWL Ontology. Đó là điểm mấu chốt trong việc so sánh hai phiên bản của một biểu đồ lớp (trước và sau khi áp dụng mẫu thiết kế hợp nhất).

48

5.2. Hướng phát triển

Hiện tại Công cụ kiểm tra kiểm tra sự tinh chế hai mô hình có áp dụng mẫu thiết kế giữa hai mô hình UML mới chỉ dừng lại ở việc kiểm tra, và chỉ ra sự tương đương hay không giữa những thành phần của hai biểu đồ lớp trong UML cũng như việc thỏa mãn cấu trúc mẫu. Song với những gì cong cụ đã đạt được hiện tại, trong tương lai công cụ hoàn toàn có thể tiến xa hơn với việc so sánh hai mô hình bất kỳ trong UML, với một giao diện tốt hơn, hay thậm trí là một chương trình tinh chế tự động một biểu đồ trong UML.

49

TÀI LIỆU THAM KHẢO

[1] Bogumila Hnatkowska, Zbigniew Huzar, Lech Tuzinkiewicz. Refinement of UML Collaborations. Institute of Applied Informatics, Wrocław University of Technology [2] Cedric Bouhours, Herve Leblanc, Christian Percebois. Alternative Models for Structural Design Patterns. Universite PaulSabatier.

[3] Klaus Bergner, Andreas Rausch, Marc Sihling, Alexander Vilbig. Structuring and

Refinement of Class Diagrams. D-80290 Munchen, Germany, 1st June 1998

[4] Patrick Blackburn, Johan Bos and Kristina Striegnitz. Learn Prolog Now [5] Bruce Eckel. Thinking in Java

[6] Website: http://protege.stanford.edu/plugins/owl/api/guide.html

[7] Trần Tiến Dũng. Giáo trình lý thuyết và bài tập Java. Nxb Lao động Xã Hội [8] TS. Phan Huy Khánh. Lập trình logic trong Prolog

[9] Trần Đình Quế, Nguyễn Mạnh Sơn. Phân tích thiết kế hệ thống thông tin. Học viện bưu chính viễn thông.

Một phần của tài liệu LUẬN VĂN: KIỂM TRA SỰ TINH CHẾ HAI MÔ HÌNH CÓ ÁP DỤNG MẪU THIẾT KẾ doc (Trang 39 - 58)