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 hay quan hệ, phép toán.
Ví dụ 3.36: tìm các tính chất liên quan đến ma trận:
Biểu diễn: ?WHAT PROPERTY MA_TRAN;
Ý nghĩa : name là khái niệm MA_TRAN là một đối tượng tính toán, câu truy vấn này trả về các luật có chứa MA_TRAN.
Ví dụ 3.37: tìm các tính chất liên quan đến hệ phương trình tuyến tính:
Biểu diễn: ?WHAT PROPERTY HE_PTTT;
Ý nghĩa : name là khái niệm HE_PTTT, câu truy vấn này trả về các luật có chứa khái niệm hệ phương trình tuyến tính.
Ví dụ 3.38: cho biết các tính chất của hai ma trận tương đương dòng.
Biểu diễn: ?WHAT PROPERTY RELATION TUONG_DUONG_DONG(MA_TRAN, MA_TRAN);
Ý nghĩa : câu truy vấn trả về các luật có liên quan đến quan hệ tương đương dòng.
Ví dụ 3.39: cho biết các tính chất có liên quan đến phép toán nhân hai ma trận.
Biểu diễn: ?WHAT PROPERTY OPERATOR *(MA_TRAN, MA_TRAN);
3.4.3.2 Liên quan đến một số thuộc tính của đối tượng, đối tượng khác hay liên quan đến các khái niệm khác như quan hệ, tượng khác hay liên quan đến các khái niệm khác như quan hệ, phép toán.
Loại truy vấn này không chỉ liên quan đối tượng tính toán mà còn liên quan đến các thuộc tính của đối tượng, hoặc liên quan giữa đối tượng tính toán với các quan hệ hay phép toán là những khái niệm khác trong ontology.
Cú pháp:
pro-qry2 ::= ?WHAT PROPERTY <ten_doi_tuong> RELATED
<thuoc_tinh>[<, thuoc_tinh >];
pro-qry2 ::= ?WHAT PROPERTY <ten_doi_tuong> RELATED
<doi_tuong>[<, doi_tuong>];
pro-qry2 ::= ?WHAT PROPERTY <ten_doi_tuong> RELATED
<ten_qh>(kieu_doi_so);
pro-qry2 ::= ?WHAT PROPERTY <ten_doi_tuong> RELATED
<ten_pt>(kieu_doi_so);
pro-qry2 ::= ?WHAT PROPERTY <ten_doi_tuong> RELATED
<ten_ham>(kieu_doi_so);
Kết quả câu truy vấn là trả về các luật có liên quan đến thành phần đặt sau từ