Ngôn ngữ truy vấn ontology COKB (COKB Ontology Query Language) – còn gọi là COQL, là ngôn ngữ truy vấn ontology được thiết kế để truy vấn các cơ sở tri thức theo mô hình COKB, được biểu diễn thông qua ngôn ngữ đặc tả COKB-ONT. COQL là ngôn ngữ truy vấn dễ sử dụng, được miêu tả theo ký pháp EBNF.
COQL hướng đến các tiêu chí sau:
(i) Cấu trúc truy vấn đơn giản, dễ hiểu, dễ dùng: câu truy vấn là để người dùng sử dụng nên càng dễ hiểu, dễ dùng càng tốt.
(ii) Cú pháp mềm dẻo, linh hoạt để đáp ứng được nhiều dạng câu hỏi. (iii) Tương thích tốt với nhiều lĩnh vực tri thức.
(iv) Truy vấn thông tin nhanh.
3.2. Quy ước về cú pháp câu truy vấn
- Nhằm phân biệt với cú pháp câu của COL, ngôn ngữ truy vấn COQL bắt đầu bằng dấu chấm hỏi (?) và kết thúc bằng dấu chấm phẩy (;).
- Ngay sau ? là từ khóa, không có khoảng trắng.
- Khai báo kiểu dữ liệu sau từ khóa WHERE và trước WITH, khai báo từng đối tượng phân cách với nhau bởi dấu phẩy và một khoảng trắng; không có khoảng trắng sau dấu hai chấm trong khi khai báo đối số.
Ví dụ 3.1: ?WHAT GOAL RELATED NGHICH_DAO(A*B) WHERE
A:MA_TRAN_VUONG, B:MA_TRAN_VUONG WITH {KHA_NGHICH(A),
KHA_NGHICH(B)};
- Viết chỉ số không có khoảng trắng.
Ví dụ 3.2: A[2,3]
- Có khoảng trắng giữa các đối số và phép toán, quan hệ.
Ví dụ 3.3: A = B, A GIAO_HOAN B.
3.3. Từ khóa truy vấn
D
ạ
ng 1 IS, WHERE, WITH
CONCEPTS, COBJECTS, HIERARCHIES, RELATIONS, FUNCTIONS, OPERATORS, RULES, KINDRULES
WHAT CONCEPT, WHAT RELATION, WHAT OPERATOR, WHAT ATTRIBUTE, WHAT CONSTRAINT, WHAT CRELATION, WHAT
HIERARCHY, WHAT FUNCTION, WHAT RULE, RELATED.
WHAT PROPERTY, WHAT PROPERTY RELATION, WHAT PROPERTY OPERATOR.
D
ạ
ng 2
3.4. Cú pháp
3.4.1. Truy vấn tính đúng sai của phát biểu
Dạng câu hỏi này nhằm xác định tính đúng hoặc sai của một phát biểu. Chẳng hạn như: ma trận A có phải là ma trận khả nghịch không? Cho biết ma trận A và ma trận B, hỏi ma trận A có bằng ma trận B không?... Phát biểu trong câu truy vấn là một sự kiện hay một biểu thức.
Cú pháp:
truefalse-qry ::= ?IS <bieu_thuc_kiem_tra> WHERE
<khai_bao_kieu_doi_tuong> WITH
{<bieu_thuc_dieu_kien>};
trong đó:
+ bieu_thuc_kiem_tra: là sự kiện hay biểu thức cần kiểm tra đúng sai. +khai_bao_kieu_doi_tuong:khai báo kiểu các đối tượng của câu (xem
cách khai báo trong 2.3.10).
+ bieu_thuc_dieu_kien: là các đối tượng, sự kiện hay điều kiện cho trước để kiểm tra bieu_thuc_kiem_tra.
Nếu bieu_thuc_kiem_tra hay bieu_thuc_dieu_kien có chứa các phép toán logic thì sẽ được biểu diễn: <logical-operator>(x1,x2,…, xn). Chẳng hạn: AND(x1, x2,…, xn)
bieu_thuc_kiem_tra,bieu_thuc_dieu_kien được định nghĩa: bieu_thuc_kiem_tra ::= dieu_kien
bieu_thuc_dieu_kien ::= dieu_kien
dieu_kien ::= qfact | qrel-expr | qlogic-expr
qfact ::= object-type |
relation |
function-call
relation ::= name rel-name name
function-call ::= function (sequence)
qrel-expr ::= rel-expr
qlogic-expr ::= logic-expr
- Câu truy vấn trả về kết quả TRUE hoặc FALSE sau khi kiểm tra
bieu_thuc_kiem_tra với những điều kiện được cho sau từ khóa WHERE và
WITH.
Ví dụ 3.4:
Cho ma trận A[2,2] có giá trị A.a[1,1]=2, A.a[1,2]=-1, A.a[2,1]=0, A.a[2,2]=- 2. Hãy cho biết ma trận A[2,2] có phải là ma trận đường chéo không?
?IS MA_TRAN_DUONG_CHEO(A) WHERE A:MA_TRAN_VUONG WITH
{A.a[1,1]=2, A.a[1,2]=-1, A.a[2,1]=0, A.a[2,2]=-2};
Phân tích:
Trong câu trên, MA_TRAN_DUONG_CHEO(A) là bieu_thuc_kiem_tra (sự kiện loại object-type)có nghĩa là ma trận A có phải là ma trận khả nghịch không với những điều kiện cho trước trong bieu_thuc_dieu_kien được biểu diễn sau từ khóa WITH gồm có {A.a[1,1]=2, A.a[1,2]=-1, A.a[2,1]=0, A.a[2,2]=-2}.
Ví dụ 3.5: Với mọi ma trận vuông A, B, tích AB có bằng BA không ?
?IS A*B = B*A WHERE A:MA_TRAN_VUONG, B: MA_TRAN_VUONG
WITH {};
Phân tích:
Trường hợp này, bieu_thuc_kiem_tra là: A*B = B*A là quan hệ so sánh với A và B là ma trận vuông là kiểu dữ liệu được đặt sau từ khóa WHERE, biểu thức điều kiện là rỗng được biểu diễn sau từ khóa WITH là {}.
- Nếu bieu_thuc_ kiem_tra là một sự kiện qfact thì câu truy vấn có nghĩa là: xác định xem sự kiện đó là đúng hay sai với các điều kiện cho trước được mô tả trong bieu_thuc_dieu_kien.
Ví dụ 3.6: Cho ma trận A[2,2] có giá trị A.a[1,1]=2, A.a[1,2]=-1, A.a[2,1]=0, A.a[2,2]=-2. Hãy cho biết ma trận A có phải là ma trận lũy linh không?
?IS LUY_LINH(A) WHERE A:MA_TRAN_VUONG WITH
{A.a[1,1]=2, A.a[1,2]=-1, A.a[2,1]=0, A.a[2,2]=-2};
Phân tích:
LUY_LINH(A)là sự kiện cần kiểm tra (sự kiện loại function-call). Câu truy vấn này có nghĩa là kiểm tra sự kiện ma trận A có phải là ma trận lũy linh không, với những điều kiện được mô tả trong biểu thức điều kiện {A.a[1,1]=2,
A.a[1,2]=-1, A.a[2,1]=0, A.a[2,2]=-2}.
Ví dụ 3.7: Nếu hai ma trận mở rộng của hai hệ PTTT AX=B, A’X=B’ tương đương nhau thì hai hệđó có tương đương không ?
?IS he1 TUONG_DUONG he2 WHERE he1:HE_PTTT, he2:
HE_PTTT WITH { MA_TRAN_MO_RONG(he1) TUONG_DUONG
MA_TRAN_MO_RONG(he2)};
Phân tích:
Sự kiện cần kiểm tra he1 TUONG_DUONG he2 là sự kiện loại relation. Câu truy vấn này nhằm kiểm tra xem hệ he1 có tương đương với hệ he2 hay không, với điều kiện cho trước là ma trận mở rộng của hai hệ trên tương
đương nhau MA_TRAN_MO_RONG(he1) TUONG_DUONG
MA_TRAN_MO_RONG(he2).
- Nếu bieu_thuc_ kiem_tra có dạng qfact ::= function-call thì function đó là các hàm trả về giá trị BOOLEAN.
Ví dụ 3.8: Cho ma trận A[2,2] có giá trị A.a[1,1]=2, A.a[1,2]=-1, A.a[2,1]=0, A.a[2,2]=-2. Ma trận A[2,2] là ma trận khả nghịch có đúng không?
?IS KHA_NGHICH(A) WHERE A:MA_TRAN_VUONG WITH
{A.a[1,1]=2, A.a[1,2]=-1, A.a[2,1]=0, A.a[2,2]=-2};
(1)
?IS KHA_NGHICH(A)=FALSE WHERE A:MA_TRAN_VUONG WITH
{A.a[1,1]=2, A.a[1,2]=-1, A.a[2,1]=0, A.a[2,2]=-2};
(2) Phân tích:
Đối với câu (1): bieu_thuc_ kiem_tra là một hàm KHA_NGHICH(A), trả về TRUE khi ma trận A khả nghịch, ngược lại trả về FALSE.
Trường hợp (2) bieu_thuc_ kiem_tra là một quan hệ: KHA_NGHICH(A)= FALSE, trả về TRUE khi ma trận A không khả nghịch, ngược lại trả về FALSE với điều kiện cho trước là {A.a[1,1]=2, A.a[1,2]=-1, A.a[2,1]=0, A.a[2,2]=-2}.
- Nếu bieu_thuc_ kiem_tra là một biểu thức quan hệ (qrel-expr) hay biểu thức logic (qlogic-expr) thì câu truy vấn có nghĩa là: xác định biểu thức trả về TRUE
hay FALSE tương ứng với các điều kiện cụ thể được mô tả trong bieu_thuc_dieu_kien.
Ví dụ 3.9: Cho A, B là ma trận vuông, cho biết A và B có giao hoán không?
?IS A GIAO_HOAN B WHERE A:MA_TRAN_VUONG,
B:MA_TRAN_VUONG WITH {};
Phân tích:
Trường hợp này quan hệ giao hoán A GIAO_HOAN B là biểu thức cần kiểm tra đúng hoặc sai với những điều kiện đặt sau từ khóa WITH.
Ví dụ 3.10: Xác định xem ma trận − = 3 4 4 5 B có phải là ma trận chuyển vị của − − = 3 4 4 5 A hay không ?
?IS B = A^T WHERE A:MA_TRAN_VUONG, B:MA_TRAN_VUONG WITH {A.a[1,1]=5, A.a[1,2]=4, A.a[2,1]=-4,
A.a[2,2]=-3, B.a[1,1]=5, B.a[1,2]=-4, B.a[2,1]=4, B.a[2,2]=3 };
Phân tích:
bieu_thuc_ kiem_tra là quan hệ “=”: B = A^T, nghĩa là xét xem ma trận chuyển vị của A có bằng ma trận B hay không ?
Các ví dụ khác:
Ví dụ 3.11: Nếu chuyển vị của A khả nghịch thì A có khả nghịch không?
?IS KHA_NGHICH(A) WHERE A:MA_TRAN_VUONG WITH
{KHA_NGHICH(A^T)}; Phân tích:
Trường hợp này biểu thức cần kiểm tra và biểu thức điều kiện đều là hàm KHA_NGHICH(A), KHA_NGHICH(A^T). Câu này có nghĩa là: KHA_NGHICH(A^T)là hàm cho biết ma trận chuyển vị của A khả nghịch, cần kiểm tra xem A có khả nghịch không thông qua biểu thức kiểm tra là hàm KHA_NGHICH(A).
Ví dụ 3.12: Nếu AX=B có nghiệm thì hạng của A có bằng hạng của ma trận mở rộng à không ?
?IS HANG(he.A)= HANG(MA_TRAN_MO_RONG(he)) WHERE he:HE_PTTT WITH {he.TAP_NGHIEM > 0};
Phân tích:
Ở ví dụ này, bieu_thuc_ kiem_tra là quan hệ “=”,bieu_thuc_ dieu_kien là biểu thức quan hệ với toán tử quan hệ “>”.
Ví dụ 3.13: Nếu A, B là ma trận khả nghịch thì AB có khả nghịch không ?
?IS KHA_NGHICH(A*B) WHERE A:MA_TRAN_VUONG,
B:MA_TRAN_VUONG WITH {KHA_NGHICH(A), KHA_NGHICH(B)};
Phân tích:
Trường hợp này biểu thức cần kiểm tra KHA_NGHICH(A*B)là hàm kiểm tra tính khả nghịch của tích hai ma trận, biểu thức điều kiện là
Ví dụ 3.14: AB có khả nghịch không nếu A không là ma trận khả nghịch?
?IS KHA_NGHICH(A*B) WHERE A:MA_TRAN_VUONG,
B:MA_TRAN_VUONG WITH { KHA_NGHICH(A)=FALSE };
Phân tích:
Tương tự ví dụ trên.
Ví dụ 3.15: Nếu hai ma trận bằng nhau, thì ma trận chuyển vị của chúng có bằng nhau không ?
?IS A^T = B^T WHERE A:MA_TRAN, B:MA_TRAN WITH { A = B
}; Phân tích:
Trường hợp này biểu thức cần kiểm tra và biểu thức điều kiện đều là biểu thức so sánh “=”.
3.4.2. Truy vấn các khái niệm trong ontology
3.4.2.1 Loại không chứa đối số
Loại truy vấn dạng này thuộc loại đơn giản có tính chất liệt kê tên các thành phần trong ontology.
Cú pháp:
list-qry ::= ?<tu_khoa>;
tu_khoa ::= CONCEPTS | COBJECTS | HIERARCHIES | RELATIONS | FUNCTIONS | OPERATORS | RULES
| KINDRULES
Kết quả truy vấn: là tên của tất cả các khái niệm có trong ontology (concepts) hoặc tên của tất cả C-Object (cobjetcs), các quan hệ phân cấp (hierarchies), các quan hệ (relations), các hàm (functions), các phép toán (operators) hoặc các luật (rules) hay tên của các loại luật (kindrules).
Ví dụ 3.16: liệt kê tất cả khái niệm có trong ontology:
Ví dụ 3.17: liệt kê tất cả khái niệm đối tượng tính toán C-Object:
?COBJECTS;
Ví dụ 3.18: liệt kê tất cả các quan hệ phân cấp:
?HIERARCHIES; Ví dụ 3.19: liệt kê tất cả quan hệ: ?RELATIONS; Ví dụ 3.20: liệt kê tất cả hàm: ?FUNCTIONS; Ví dụ 3.21: liệt kê tất cả phép toán: ?OPERATORS; Ví dụ 3.22: liệt kê tất cả luật: ?RULES;
Ví dụ 3.23: liệt kê các loại luật có trong cơ sở tri thức đại số tuyến tính:
?KINDRULES;
3.4.2.2 Loại chứa đối sốa/ Truy vấn định nghĩa khái niệm a/ Truy vấn định nghĩa khái niệm
Dạng truy vấn này có chứa một đối số, thực hiện truy vấn định nghĩa của một khái niệm đối tượng tính toán, hay định nghĩa một quan hệ, hoặc phép toán trong CSTT.
Cú pháp:
cobject-qry ::= ?WHAT CONCEPT <doi_tuong >; (1)
cobject-qry ::= ?WHAT RELATION <ten_qh>(kieu_doi_so); (2)
doi_tuong: là một đối tượng tính toán. Chẳng hạn: MA_TRAN, MA_TRAN_VUONG, HE_PTTT.
ten_qh: là tên của quan hệ trong cơ sở tri thức. ten_pt: là tên của phép toán trong cơ sở tri thức.
kieu_doi_so: là kiểu dữ liệu của đối số trong quan hệ/ phép toán. Ví dụ: REAL, INTEGER, MA_TRAN_VUONG, HE_PTTT.
WHAT CONCEPT: từ khóa để truy vấn định nghĩa khái niệm.
WHAT RELATION: từ khóa để truy vấn định nghĩa một quan hệ trong cở sở tri thức.
WHAT OPERATOR: từ khóa để truy vấn định nghĩa phép toán. Kết quả truy vấn:
(1) Trả về nội dung định nghĩa khái niệm đối tượng tính toán hay một khái niệm đối tượng khác.
(2) Trả về nội dung định nghĩa một quan hệ ten_qh. (3) Trả về nội dung định nghĩa một phép toán ten_pt. Ví dụ 3.24: Ma trận vuông là gì ?
Biểu diễn : ?WHAT CONCEPT MA_TRAN_VUONG;
Ý nghĩa : Câu truy vấn cho biết định nghĩa của khái niệm ma trận vuông.
Ví dụ 3.25: hệ phương trình tuyến tính là gì ?
Biểu diễn : ?WHAT CONCEPT HE_PTTT;
Ý nghĩa : Câu truy vấn cho biết định nghĩa của khái niệm hệ phương trình tuyến tính.
Ví dụ 3.26: cho biết giao hoán giữa hai ma trận.
Biểu diễn :?WHAT RELATION GIAO_HOAN(MA_TRAN_VUONG, MA_TRAN_VUONG);
Ví dụ 3.27: nêu định nghĩa phép chuyển vị
Biểu diễn :?WHAT OPERATOR “^T”(MA_TRAN);
Ý nghĩa : Câu truy vấn cho biết định nghĩa của phép toán chuyển vị.
b/ Truy vấn thuộc tính của đối tượng
Một đối tượng tính toán có nhiều thành phần như thuộc tính, ràng buộc, quan hệ tính toán…, câu truy vấn dạng này cho biết thành phần thuộc tính của đối tượng.
Cú pháp:
attribute-qry ::= ?WHAT ATTRIBUTE <doi_tuong_tinh_toan>;
doi_tuong_tinh_toan: là định danh của đối tượng tính toán.
Kết quả truy vấn: trả về tên các thuộc tính nội tại của đối tượng doi_tuong_tinh_toan.
Ví dụ 3.28: hãy cho biết thuộc tính của một tam giác là gì ?
Biểu diễn: ?WHAT ATTRIBUTE TAM_GIAC
Ý nghĩa : Câu truy vấn cho biết các thuộc tính của đối tượng tam giác.
c/ Truy vấn ràng buộc trên các thuộc tính của khái niệm
Các thuộc tính của khái niệm thường có mối liên hệ ràng buộc lẫn nhau, câu truy vấn dạng này cho biết thành phần ràng buộc các thuộc tính của đối tượng. constraint-qry ::= ?WHAT CONSTRAINT <doi_tuong_tinh_toan>
[RELATED <ten_thuoc_tinh>];
doi_tuong_tinh_toan: là định danh của đối tượng tính toán.
ten_thuoc_tinh: là tên các thuộc tính thuộc
doi_tuong_tinh_toan.
Kết quả truy vấn: trả về các điều kiện ràng buộc thuộc tính của khái niệm
COBJECT có liên quan đến thuộc tính ten_thuoc_tinh (nếu có).
Biểu diễn: ?WHAT CONSTRAINT MA_TRAN_VUONG;
Ý nghĩa : Câu truy vấn cho biết tất cả các ràng buộc thuộc tính của đối tượng ma trận vuông.
Ví dụ 3.30: xem ràng buộc các thuộc tính liên quan đến GOC của khái niệm TAM_GIAC.
Biểu diễn: ?WHAT CONSTRAINT TAM_GIAC RELATED GOC;
Ý nghĩa : Câu truy vấn cho biết các ràng buộc thuộc tính của đối tượng tam giác mà chỉ liên quan đến góc.
d/ Truy vấn quan hệ tính toán của khái niệm
Các thuộc tính của khái niệm thường có mối liên hệ với nhau bằng biểu thức hay phương trình, câu truy vấn dạng này truy vấn các mối liên hệ đó thông qua truy vấn thành phần quan hệ tính toán của đối tượng bằng từ khóa WHAT CRELATION.
Cú pháp:
crelation-qry ::= ?WHAT CRELATION < doi_tuong_tinh_toan > [RELATED <ten_thuoc_tinh>];
Kết quả truy vấn: trả về tên và định nghĩa quan hệ tính toán của
doi_tuong_tinh_toan và có liên quan đến thuộc tính ten_thuoc_tinh
(nếu có).
Ví dụ 3.31: cho biết các quan hệ tính toán của khái niệm ma trận.
Biểu diễn: ?WHAT CRELATION MA_TRAN;
Ý nghĩa : c_name là MA_TRAN, câu truy vấn này nhằm liệt kê các quan hệ tính toán của đối tượng ma trận.
Ví dụ 3.32: Xem các quan hệ tính toán liên quan đến các góc của TAM_GIAC
Ý nghĩa : c_name là TAM_GIAC, att_name là GOC, câu truy vấn này liệt kê các quan hệ tính toán của đối tượng tam giác có liên quan đến thuộc tính GOC.
e/ Truy vấn quan hệ phân cấp của khái niệm
Một loại quan hệ đặc biệt của đối tượng là quan hệ phân cấp, loại quan hệ này cho biết cấp của đối tượng so với đối tượng khác trong ontology. Loại câu truy vấn này dùng để tìm ra cấp cha của đối tượng tính toán c_name bằng từ khóa WHAT HIERARCHY.
Cú pháp:
hier-qry ::= ?WHAT HIERARCHY <ten_doi_tuong_tinh_toan>; Kết quả truy vấn: trả về cấp cha của đối tượng c_name.
Ví dụ 3.33: cho biết phân cấp của MA_TRAN_DUONG_CHEO
Biểu diễn: ?WHAT HIERARCHY MA_TRAN_DUONG_CHEO;
Ý nghĩa : c_name là MA_TRAN_DUONG_CHEO, câu truy vấn này cho biết cấp cha của MA_TRAN_DUONG_CHEO là MA_TRAN.
f/ Truy vấn định nghĩa hàm
Hàm là một thành phần của ontology COKB, nhằm thực hiện một công việc cụ thể liên quan đến các đối tượng tính toán. Dạng câu truy vấn này nhằm truy vấn thông tin xác định hàm qua thành phần định nghĩa hàm, dùng từ khóa WHAT FUNCTION.
Cú pháp:
proc-qry ::= ?WHAT FUNCTION <ten_ham>(kieu_doi_so);
ten_ham: tên của hàm cần truy vấn.
kieu_doi_so: kiểu của đối số của hàm.
Ví dụ 3.34: cho biết định nghĩa hàm kiểm tra một ma trận có khả nghịch không.
Biểu diễn: ?WHAT FUNCTION KHA_NGHICH(MA_TRAN_VUONG);
Ý nghĩa : f_name là hàm KHA_NGHICH(MA_TRAN_VUONG) kiểm tra xem ma trận có khả nghịch không, câu truy vấn này trả về các sự kiện định nghĩa hàm của hàm KHA_NGHICH(MA_TRAN_VUONG).
g/ Truy vấn nội dung của một luật
Luật là một thành phần của ontology COKB, gồm có hai vế là giả thiết và kết luận. Truy vấn nội dung của luật là truy vấn cả giả thiết và kết luận của luật, sử dụng từ khóa WHAT RULE.
Cú pháp:
rule-qry ::= ?WHAT RULE <r_name>;
r_name: là tên của luật được truy vấn.
Kết quả truy vấn là nội dung gồm giả thiết và kết luận của một luật.
Ví dụ 3.35: hãy cho biết nội dung của rule10?
Biểu diễn: ?WHAT RULE rule10;
Ý nghĩa : r_name là luật rule10, câu truy vấn này trả về giả thiết và kết luận của luật này.
3.4.3. Truy vấn tính chất của khái niệm
3.4.3.1 Liên quan đến một khái niệm
Trong mô hình COKB gồm có các thành phần: C, H, R, Ops, Funcs, Rules. Tính chất khái niệm xoay quanh tính chất của ba loại khái niệm: đối tượng, quan hệ và phép toán. Ta xét trường hợp đơn giản là truy vấn tính chất của một thành phần, sử dụng từ khóa WHAT PROPERTY
Cú pháp:
pro-qry2 ::= ?WHAT PROPERTY RELATION
<ten_qh>(kieu_doi_so); (2)
pro-qry3 ::= ?WHAT PROPERTY OPERATOR
<ten_pt>(kieu_doi_so); (3)
(1) Dùng để truy vấn các tính chất của đối tượng tính toán. (2) Dùng để truy vấn các tính chất của một quan hệ
(3) Dùng để truy vấn các tính chất của một phép toán
Kết quả câu truy vấn là các luật có liên quan đến khái niệm đối tượng tính toán