P erson(?person)∧RentalCompany(?rental)∧hasAgeCriteriẳrental,?ageCriteria)
∧hasAge(?person,?age)∧swrlb:greaterT han(?age,?ageCriteria)
∧CreditCard(?cc)∧hasCreditCard(?person,?cc)∧swrlb:equal(?cc,”V isa, M astercard”)
∧License(?license)∧ownsLicense(?person,?license)
∧hasLicenseStatus(?license,?licensestatus)∧swrlb:equal(?licensestatus,”valid”)
∧DrivingRecord(?drivingRecord)∧ownsDrivingRecord(?person,?drivingRecord)
∧hasRecordStatus(?drivingRecord,?recordstatus)∧swrlb:equal(?recordstatus,”clean”)
→EligibleF orRental(?person,?rental)
Trong Protege, ở mục Rules, để đơn giản hoá các luật đã định nghĩa ở trên, chúng ta có thể tối giản như hình 11. Trong đó, Person, CreditCard, DriverLicense, Eligible- ForRentallà cácclass atom,hasAge làdata valued property atom,hasCreditCard, hasDriverLicense là các individual property atomvà equal là các built-in atoms thuộc tập swrlb.
Hình 11: Thể hiện các luật SWRL của hợp đồng mẫu trong Protege
4.3 Hiện thực bộ duyệt ngữ pháp LL1
Mỗi ontology hay luật ngữ nghĩa xác định ở bước trên sẽ được thể hiện dưới dạng ngữ pháp phi ngữ cảnh (context-free grammar). Như có thể thấy, mỗi luật SWRL là một kết hợp giữa các phép kiểm tra khác nhau. Phép kiểm tra đầu tiên là bước kiểm tra điều điện lớp-đối tượng, ví dụ Class(?object), theo sau là một chuỗi các luật có thể phân loại thành các phép kiểm tra ràng buộc về thuộc tính, ví dụ mệnh đề hasP roperty(?object,?property). Ngoài ra còn có các cú pháp toán tử có sẵn như swrlb:equal(?attribute,”value”). Đoạn mã dưới thể hiện ngữ pháp của các chuỗi luật khi trình bày dưới dạng LL(1) [26].
4.3 Hiện thực bộ duyệt ngữ pháp LL1 31
< rule−seq > ::=< rule >|< rule > ∧< rule−seq >
< rule > ::=< class >∧< class−propertycheck >
< class−propertycheck > ::=has < class−property >(?class,?< class−property >)∧
< class−constraint >
< class−constraint > ::=swrlb:< operator >(?< class−property >,?< value >)
< class−property−>::=P roperty1 |P roperty2 |...|P ropertyn
< operator > ::=equal|greaterT han |lessT han
< value > ::=int|string
Quy ước các ký hiệu:
• RS (rule sequence): chuỗi các luật
• R (rule): luật
• C (class): định nghĩa các lớp
• CPC (class property check): biểu thức kiểm tra thuộc tính của một lớp
• CPCS (class property check sequence): chuỗi các biểu thức kiểm tra thuộc tính
• CP (class property): thuộc tính lớp
• CI (class individual): đối tượng của lớp
• CC (class constraint): ràng buộc của lớp
• O (operator): các built-in hỗ trợ bởi tập swrlb
• V (value): các giá trị
Khi đó, có thể viết lại ngữ pháp trên như sau:
RS ::= R|R∧RS R::= C∧CP CS C ::= string(?string) CP CS ::= CP C |CP C∧CP CS
CP C ::= hasCP(?CI,?CP)∧CC CC ::= swrlb:O(?CP, V)
CI ::= string CP ::= string
O ::= greaterT han|lessT han|equal V ::= int|string
4.3 Hiện thực bộ duyệt ngữ pháp LL1 32
Tuy nhiên, như có thể thấy, trong ngữ pháp LL(1) trên vi phạm tiêu chuẩn left- recursion đã trình bày ở phần 3.3, ví dụ:
RS ::=R |R∧RS
CP CS ::=CP C |CP C∧CP CS
Do đó, phải triệt tiêu các vi phạm này bằng cách thêm vào các non-terminal bổ trợ RS’, CPCS’. Ngữ pháp mới sau khi triệt tiêu vi phạm left-recursion trở thành:
RS ::=R∧RS0 RS0 ::=R∧RS0 RS0 ::=
R ::=C∧CP CS C ::=string(?string) CP CS ::=CP C∧CP CS0 CP CS0 ::=CP C∧CP CS0 CP CS0 ::=
CP C ::=hasCP(?CI,?CP)∧CC CC ::=swrlb:O(?CP, V)
CI ::=string CP ::=string
O ::=greaterT han O ::=lessT han O ::=equal V ::=int V ::=string
Trong đó, là ký tự kết thúc (terminal).
Hình 12: Các thành phần của bộ duyệt ngữ pháp LL1
Hình 12 mô tả các thành phần của bộ duyệt ngữ pháp LL1 ở trên. Xét ví dụ là chuỗi luật ở phần 4.2. Qua bộ phân tích từ vựng (lexical analyzer), chúng ta sẽ có tập các LexToken thuộc các kiểu sau:
• IDENT: Kiểu đại diện cho các lớp, các thuộc tính, tên riêng, ...
4.3 Hiện thực bộ duyệt ngữ pháp LL1 33
• INT: Giá trị integer.
• CIRCUMFLEX_ACCENT, QUESTION_MARK, LEFT_PARENTHESIS, RIGHT_PARENTHESIS,
COMMA, COLON: Lần lượt là các ký tự ’∧’, ’ ?’, ’(’, ’)’, ’,’ và ’:’.
• HAS, SWRLB, GREATER_THAN, LESS_THAN, EQUAL: Lần lượt là các từ khoá định
sẵn ’has’, ’swrlb’, ’greaterThan’, ’lessThan’ và ’equal’.
• ILLEGAL, EOF, WS: Các ký tự đặc biệt như không phù hợp, kết thúc chuỗi,
khoảng trắng.
Sau khi chuỗi ban đầu được phân tách thành các LexToken, sẽ qua bộ phân tích cú pháp để cho ra tập hợp các bộ Token có cấu trúc như sau - lấy ví dụ cho chuỗi:
P erson(?person)∧hasAge(?person,?age)∧swrlb:greaterT han(?age,18)
Kết quả:
1 T o k e n s: [ ]T o k e n{
2 {L e x T o k e n: I D E N T, L i t e r a l: " P e r s o n ", Kind: S t r i n g},
3 {L e x T o k e n: L E F T _ P A R E N T H E S I S, L i t e r a l: "(", Kind: L e f t P a r e n t h e s i s},
4 {L e x T o k e n: Q U E S T I O N _ M A R K, L i t e r a l: "?", Kind: Q u e s t i o n M a r k},
5 {L e x T o k e n: I D E N T, L i t e r a l: " p e r s o n ", Kind: S t r i n g},
6 {L e x T o k e n: R I G H T _ P A R E N T H E S I S, L i t e r a l: ") ", Kind: R i g h t P a r e n t h e s i s},
7 {L e x T o k e n: HAS, L i t e r a l: " has ", Kind: Has},
8 {L e x T o k e n: I D E N T, L i t e r a l: " Age ", Kind: S t r i n g},
9 {L e x T o k e n: L E F T _ P A R E N T H E S I S, L i t e r a l: "(", Kind: L e f t P a r e n t h e s i s},
10 {L e x T o k e n: Q U E S T I O N _ M A R K, L i t e r a l: "?", Kind: Q u e s t i o n M a r k},
11 {L e x T o k e n: I D E N T, L i t e r a l: " p e r s o n ", Kind: S t r i n g},
12 {L e x T o k e n: C O M M A, L i t e r a l: ",", Kind: C o m m a},
13 {L e x T o k e n: Q U E S T I O N _ M A R K, L i t e r a l: "?", Kind: Q u e s t i o n M a r k},
14 {L e x T o k e n: I D E N T, L i t e r a l: " age ", Kind: S t r i n g},
15 {L e x T o k e n: R I G H T _ P A R E N T H E S I S, L i t e r a l: ") ", Kind: R i g h t P a r e n t h e s i s},
16 {L e x T o k e n: S W R L B, L i t e r a l: " s w r l b ", Kind: S w r l b},
17 {L e x T o k e n: C O L O N, L i t e r a l: ":", Kind: C o l o n},
18 {L e x T o k e n: G R E A T E R _ T H A N, L i t e r a l: " g r e a t e r T h a n ", Kind: G r e a t e r T h a n},
19 {L e x T o k e n: L E F T _ P A R E N T H E S I S, L i t e r a l: "(", Kind: L e f t P a r e n t h e s i s},
20 {L e x T o k e n: Q U E S T I O N _ M A R K, L i t e r a l: "?", Kind: Q u e s t i o n M a r k},