5. Nội dung của đề tài, các vấn đề cần giải quyết:
2.2.1. Chuyển đổi các phần tử của RDFS và OWL thành các luật suy diễn
diễn
Ngữ nghĩa của cấu trúc RDFS và OWL cần phải được chuyển đổi thành các luật suy diễn theo dạng mà hệ thống có thể thực hiện truy vấn và suy diễn dựa trên những khái niệm trong cơ sở tri thức.
2.2.1.1. Chuyển đổi phần tử của RDFS
Theo F.B. Nardon [3], có thể chuyển đổi các phần tử của RDFS thành các luật
suy diễn như sau:
1. rdfs: subClassOf chuyển thành
Luật: stm(x, 'rdfs:subClassOf', y) :-
stm(x, 'rdfs:subClassOf', z), stm(z, 'rdfs:subClassOf', y).
Luật: stm(x, y, z) :- stm(x, y, w), stm(w, 'rdfs:subClassOf', z).
2. rdfs:subPropertyOf chuyển thành
Luật: stm(x, 'rdfs:subPropertyOf', y) :-
stm(x, 'rdfs:subPropertyOf', z), stm(z, 'rdfs:subPropertyOf', y).
Luật: stm(x, y, z) :- stm(x, w, z), stm(w, 'rdfs:subPropertyOf', y).
Luật: stm(x, 'rdfs:subClassOf', 'rdfs:Resource') :- stm(x, 'rdf:type', 'rdfs:Class').
Sự kiện: stm('rdfs:Resource', 'rdf:type', 'rdfs:Class').
4. rdfs:Literal chuyển thành
Sự kiện: stm('rdfs:Literal', 'rdf:type', 'rdfs:Class').
Sự kiện: stm('rdfs:Literal', 'rdfs:subClassOf', 'rdfs:Resource').
5. rdfs:Datatype chuyển thành luật
stm(x, 'rdfs:subClassOf', 'rdfs:Literal') :- stm(x, 'rdf:type', 'rdfs:Datatype').
6. rdf:XMLLiteral chuyển thành
Sự kiện: stm('rdf:XMLLiteral', 'rdfs:subClassOf', 'rdfs:Literal').
Sự kiện: stm('rdf:XMLLiteral', 'rdf:type', 'rdfs:Datatype').
7. rdfs:range chuyển thành luật ràng buộc toàn vẹn
rangeViolation(x, y, z) :-
stm(x, y, z), stm(y, 'rds:range', w), not stm(z, 'rdf:type', w).
Nếu phạm vi của thuộc tính y là w, và nếu có một khẳng định nói rằng một tài nguyên z không thuộc loại w, thì ràng buộc bị vi phạm.
8. rdfs:domain chuyển thành luật ràng buộc toàn vẹn
domainViolation(x, y, z) :-
stm(x, y, z), stm(y, 'rds:domain', w), not stm(x, 'rdf:type', w).
9. rdfs:Container chuyển thành
Sự kiện: stm('rdf:Bag', 'rdfs:subClassOf', 'rdfs:Container').
Sự kiện: stm('rdf:Seq', 'rdfs:subClassOf', 'rdfs:Container').
Sự kiện: stm('rdf:Alt', 'rdfs:subClassOf', 'rdfs:Container').
10. rdf:member chuyển thành
Sự kiện: stm('rdf:member', 'rdf:type', 'rdf:Property').
Luật: stm(x, 'rdfs:subPropertyOf', 'rdf:member') :-
11. rdf:Statement chuyển thành sự kiện
stm('rdf:Statement', 'rdf:type', 'rdfs:Class').
12. rdf:subject chuyển thành sự kiện
stm('rdf:subject', 'rdf:type', 'rdf:Property').
13. rdf:object chuyển thành sự kiện
stm('rdf:object', 'rdf:type', 'rdf:Property').
14. rdf:predicate chuyển thành sự kiện
stm('rdf:predicate', 'rdf:type', 'rdf:Property').
15. rdfs:seeAlso chuyển thành sự kiện
stm('rdfs:seeAlso', 'rdf:type', 'rdf:Property').
16. rdfs:isDefinedBy chuyển thành sự kiện
stm('rdfs:isDefinedBy', 'rdf:type', 'rdf:Property').
17. rdf:value chuyển thành sự kiện
stm('rdf:value', 'rdf:type', 'rdf:Property'). 2.2.1.2. Chuyển đổi phần tử của OWL
Chuyển đổi các phần tử của OWL là chuyển đổi các khái niệm được biểu diễn trong một logic mô tả thành các khái niệm được biểu diễn trong các
chương trình logic. Theo F.B. Nardon [3], có thể chuyển đổi các phần tử của
OWL thành các luật suy diễn như sau: 1. unionOf chuyển thành luật
stm(x, 'rdf:type', d) :- stm(x, 'rdf:type', f1) ; ... ; stm(x, 'rdf:type', fn).
Với x là một tài nguyên, d là lớp mà được định nghĩa bởi unionOf, và mỗi fi là một lớp mà tham gia vào phép hợp.
2. intersectionOf chuyển thành luật
stm(x,‘rdf:type', d) :- stm(x, 'rdf:type', f1) , ... , stm(x, 'rdf:type', fn).
Với x là một tài nguyên, d là lớp mà được định nghĩa bởi intersectionOf, và mỗi fi là một lớp mà tham gia vào phép giao.
3. complementOf chuyển thành luật
stm(x, 'rdf:type', d) :- stm(x, 'rdf:type', f1), not stm(x, 'rdf:type', f2).
Với f1, f2, d là các lớp mà f1 = d ∪ f 2 và d ∩ f2 ≠∅.
4. oneOf chuyển thành một tập hợp các sự kiện theo dạng tổng quát sau
stm(d, 'rdf:type', f).
Với d là một thể hiện của của f, và f là lớp tài nguyên. 5. TransitiveProperty chuyển thành luật
stm(x, y, z) :- stm(x, y, w),
stm(y, 'rdf:type', 'daml:TransitiveProperty'), stm(w, y, z).
6. UnambiguousProperty chuyển thành luật
stm(x, 'daml:sameIndividualAs', z) :- stm(x, y, w),
stm(y, 'rdf:type', 'daml:UnambiguosProperty'), stm(z, y, w).
7. sameClassAs chuyển thành luật
stm(x, w, y) :- stm(x, w, z), stm(z, 'daml:sameClassAs', y). stm(x, w, y) :- stm(z, w, y), stm(z, 'daml:sameClassAs', x). stm(x, 'daml:sameClassAs', z) :- stm(z, 'daml:sameClassAs', x).
8. subClassOf chuyển thành sự kiện
stm('daml:subClassOf', 'daml:sameClassAs', 'rdfs:subClassOf').
9. subPropertyOf chuyển thành sự kiện
stm('daml:subPropertyOf', 'daml:sameClassAs', 'rdfs:subPropertyOf').
10. samePropertyOf chuyển thành luật
stm(x, y, z) :- stm(x, w, z), stm(w, 'daml:samPropertyOf', y).
disjointWithViolation(x) :-
stm(x, 'rdf:type', y), stm(x, 'rdf:type', z), stm(y, 'daml:disjointWith', z).
12. sameIndividualAs chuyển thành luật
stm(x, y, z) :- stm(x, y, w), stm(z, 'daml:sameIndividualAs', w). stm(x, y, z) :- stm(w, y, z), stm(w, 'daml:sameIndividualAs', x). stm(x, 'daml:sameIndividualAs', y) :-
stm(y, 'daml:sameIndividualAs', x).
13. inverseOf chuyển thành luật
stm(x, y, z) :- stm(y, 'daml:inverseOf', w), stm(z, w, x).