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); }