CHƯƠNG 5. KIỂM CHỨNG SỰ PHÙ HỢP CHỨC NĂNG TRONG MÔ HÌNH
5.2 Ví dụ minh họa
Để minh họa cho hướng tiếp cận của luận văn, chúng ta hãy xem xét một hệ thống đơn giản về dịch vụ web tính tiền phí thay đổi loại vé máy bay mà khách hàng đã mua. Tức là, khi khách hàng đăng ký mua vé máy bay, khác hàng phải chọn loại vé (FareTypes) của mình là: Business, Eco, Saver hay Super_Saver. Sau đó vì các lý do cá nhân, khách hàng có thể thay đổi lại loại vé của mình. Tất nhiên, khách hàng sẽ phải chịu một khoản phí thay đổi (ChangeFee), nó được tính theo qui định của hãng hàng không mà khách hàng chọn. Ứng dụng được phát triển theo hướng xử lý dữ liệu dựa trên các nguồn tài nguyên trên Internet, dịch vụ tính tiền phí thay đổi loại vé máy bay sẽ dùng thẻ tín dụng để thanh toán.
Dịch vụ web này được mô tả như dưới đây. Việc gọi ứng dụng phải cung cấp một kiểu hợp lệ cũng như số lượng các vé muốn thay đổi (seat). Kết quả trả lại là tổng số tiền (TotalChangeFee) khách hàng phải trả dựa trên các quy tắc tính phí của hãng hàng không. Bảng dưới đây đưa ra mô tả chức năng của nhà cung cấp dịch vụ web Change Fee Calculation:
Context: Change Fee Calculation;
Types: FareTypes={Business, Eco, Saver, Super_Saver};
Money=real;
Input: FareType: FareTypes;
seat:interger;
Output: TotalChangeFee:Money;
Precondition: seat>0;
Effect: TotalChangeFee = ChangeFeeOf(FareType)*seat;
TextDescription: Calculating total change fee for booked tickets.
Như đã trình bày trong Chương 4, các dịch vụ web ngữ nghĩa được mô tả bằng OWL-S là một OWL ontology với 3 ontology con tương đương nhau là:
ServiceProfile, ServiceModel và ServiceGrounding. Tóm lại, ServiceProfile được dùng để cho biết “dịch vụ làm cái gì”, với mục đích là quảng bá, xây dựng các yêu cầu dịch vụ và làm cầu nối; ServiceModel mô tả “cách nó làm việc”,
cho phép yêu cầu, ban hành, tổng hợp, kiểm tra và phục hồi; và ServiceGrounding ánh xạ các thành phần của ServiceModel theo các đặc tả chi tiết của khuôn dạng thông điệp, giao thức, … (thường được chỉ ra trong WSDL).
Do sự mô tả tương đương trong OWL-S giữa nhà cung cấp và người yêu cầu dịch vụ web, chúng ta chỉ xem xét mô tả của Change Fee Calculation đối với nhà cung cấp dịch vụ. Luận văn trình bày đầu vào, đầu ra, tiền điều kiện và hiệu quả của trong OWL-S Profile và sau đó được tham chiếu tới OWL-S Process như sau:
<process:AtomicProcess rdf:ID=" ChangeFeeCalculation ">
<process:hasInput>
<process:Input rdf:ID=" FareType"/>
</process:hasInput>
<process:hasInput>
<process:Input rdf:ID="seat"/>
</process:hasInput>
<process:hasOutput>
<process:Output rdf:ID="TotalChangeFee"/>
</process:hasOutput>
<process:hasPrecondition>
<expr:KIF-Condition>
<expr:expressionBody>
(and (member ? FareType ? FareTypes) (and (member ? seat ?Integer)
(> (?seat 0))))
</expr:expressionBody>
</expr:KIF-Condition>
</process:hasPrecondition>
<process:hasEffect>
<expr:KIF-Condition>
<expr:expressionBody>
(= ?TotalChangeFee
( * (value ? ChangeFeeOf ? FareType)
? seat))
</expr:expressionBody>
</expr:KIF-Condition>
</process:hasEffect>
..
</process:AtomicProcess>
Trong mô tả trên, tiền điều kiện và hiệu quả của dịch vụ web được mô tả bằng KIF (Knowledge Interchange Format – Khuôn dạng trao đổi tri thức).
FareTypes là một tập chứa tên của các loại vé mà khách hàng muốn thay đổi, ChangeFeeOf là một hàm ánh xạ từ tập FareTypes tới tập Money với mục đích là từ tên của loại vé, chúng ta sẽ tính được tổng số tiền phí mà khách hàng phải trả cho việc thay đổi loại vé của mình theo quy định của hãng hàng không (chẳng hạn đổi từ loại vé Business sang loại Eco, khách hàng phải trả một khoản phí là 2%). Chúng được mô tả trong OWL-S như sau:
<owl:Class rdf:ID="FareTypes">
...
<FareTypes rdf:ID="Business" />
<FareTypes rdf:ID="Eco" />
<FareTypes rdf:ID="Saver" />
<FareTypes rdf:ID="Super_Saver" />
</owl:Class>
<owl:ObjectProperty rdf:ID="ChangeFeeOf">
<rdfs:domain rdf:resource="#FareTypes" />
<rdfs:range rdf:resource="#Money" />
</owl:ObjectProperty>