Thứ hai, sử dụng file lược đồ XSD. Lược đồ XSD tuy không đơn giản như DTD nhưng lại tổng quát và chính xác hơn. Chúng ta có thể dễ dàng chuyển từ lược đồ sang DTD và ngược lại. Hai khái niệm này có ý nghĩa tương đương nhau trong việc tạo ra một khuôn mẫu chuẩn cho các tài liệu XML của một ứng dụng. Ví dụ, lược đồ mô tả cấu trúc role theo XSL tương ứng với DTD trong Hình 3.4 được mơ tả trong Hình 3.5.
Như vậy, qua hai ví dụ trên cho thấy, đối mỗi role ta cần xác định ba thành phần thơng tin chính dưới đây:
Các thông tin cơ bản: Bao gồm các thông tin để nhận dạng một role cũng
cũng bao gồm các mô tả bậc cao (bằng ngôn ngữ tự nhiên) và các từ khóa để hiểu rõ chức năng chính của role và phục vụ cho việc tìm kiếm.
Các hành động được phép thực hiện: Mỗi một role sẽ được định nghĩa
các hành động mà agent đảm nhận role đó có thể thực hiện. Một hành động được mô tả bằng tên, mô tả bằng ngôn ngữ tự nhiên (như một dạng chú thích để người phát triển hiểu rõ hơn cách dùng role). Hơn nữa, phần này cũng phải xác định 2 thành phần quan trọng khác là đối tượng chịu tác động của hành động và nội dung hành động cũng như sự kiện do hành động sinh ra.
Các sự kiện có thể nhận biết: Đây là các sự kiện mà agent đảm nhận role
có thể chấp nhận từ agent ngồi và có khả năng xử lý. Cũng giống như hành động, một sự kiện được đặc tả bằng tên và mô tả bậc cao. Hai thành phần khác cũng phải xác định là đối tượng thực hiện hành động tạo ra sự kiện và nội dung sự kiện.
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="ROLE"> <xsd:complexType> <xsd:sequence> <xsd:element ref="ROLE_NAME"/>
<xsd:element ref="DESCRIPTION" minOccurs="0" maxOccurs="1"/> <xsd:element ref="KEYWORD" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="ACTIONS" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="EVENTS" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="ACTIONS"> <xsd:complexType> <xsd:sequence> <xsd:element ref="ACT_NAME"/> <xsd:element ref="DESCRIPTION"/> <xsd:element ref="RET_VALUE"/>
<xsd:element ref="PARA" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="EVENTS"> <xsd:complexType> <xsd:sequence> <xsd:element ref="EVE_NAME"/> <xsd:element ref="DESCRIPTION"/>
<xsd:element ref="PARA" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="PARA"> <xsd:complexType> <xsd:sequence> <xsd:element ref="PAR_NAME"/> <xsd:element ref="TYPE"/> </xsd:sequence> </xsd:complexType> </xsd:element>
<xsd:element name="DESCRIPTION" type="xsd:string"/> <xsd:element name="ACT_NAME" type="xsd:string"/> <xsd:element name="EVE_NAME" type="xsd:string"/> <xsd:element name="RET_VALUE" type="xsd:string"/> <xsd:element name="TYPE" type="xsd:string"/> <xsd:element name="PAR_NAME" type="xsd:string"/> <xsd:element name="NAME" type="xsd:string"/> <xsd:element name="KEYWORD" type="xsd:string"/> </xsd:schema>