interface Message {
extent messages;
keys author,date,time;
attribute string author;
attribute string date;
attribute string time;
attribute string subject;
attribute string recipients;
attribute string cc_recipients;
attribute string organization;
attribute string body;
relationship Folder in_folder
inverse Folder::has_messages;
relationship List<Message> has_replies
inverse Message::is_reply_for
{order_by Message::day,Message::time,Message::author};
relationship Message is_reply_for
inverse Message::has_replies;
put(in Folder) raises(folder_not_exist);
del(in Message) raises(message_not_exist);
}
interface Folder {
extent folders;
keys name;
attribute string name;
relationship List<Folder> is_parent_of
inverse Folder::is_child_of
{order_by Folder::name};
relationship Folder is_child_of
inverse Folder::is_parent_of;
relationship List<Message> has_messages
inverse Message::in_folder
{order_by Message::author,Message::day,Message::time};
add(in Folder) raises(folder_not_exist);
del(in Folder) raises(folder_not_exist);
}