[ Search the Archive | Handbook | Annotations ]

The Nabu Ontology

This section explains the most important parts of the ontology, i.e. the RDF schema Nabu uses for logging. It shows you how messages, accounts and presence changes are represented in RDF. This covers only the most important classes and properties, you can find a complete description including the RDF Schema in the reference section.


The most important class in the Nabu ontology is Message:

nabu:body is a literal containing the message text.

nabu:datetime is the time stamp added by Nabu when logging the message. The format is xsd:datetime (e.g. "2005-07-13T11:51:34.781+0200" for "July 13th 2005, 11:51:34.781 CET"). Note that this is the time when the message was logged by Nabu, and not necessarily the message was sent or received. If sender and receiver are on different servers and every server has Nabu installed, the time stamp will be different. So identical messages cannot be matched using the timestamp.

nabu:sender links to the account that sent the message.

nabu:receivers: The accounts that received the message. In an one-to-one chat, this is a single account, the chat partner. In multi-user-chat, these are all accounts that received the message, i.e. the accounts that were in the MUC room when the message was sent. Note that the temporary nick names users have in a MUC room are ignored; anonymous MUC rooms are not supported. Nick names are resolved to the corresponding accounts. Also note that resources are omitted in both one-to-one and MUC logs.

nabu:inRoom: The room the message was sent in. For details how rooms are defined see below.

nabu:previousMessageInRoom: Links to the previous message in the room. Useful for tracking conversations and for exploring logged conversations with a specific chat partner over time.


Account represents a user account. Every user account has a Jabber ID, like "alice@…". Nabu does not store more information like person<->account associations, for privacy reasons. If such a mapping is wanted, one can store such information externally, e.g. using FOAF.

Every account has a Jabber ID representing the account. Not every Jabber account represents an account though (see e.g. MUC rooms), so Jabber ID and account are not identical.


A room is a virtual place where two or more users meet and chat with each other. Every message has one room associated, and messages in a room are linked to make conversation tracking easier. Two types of rooms exist, depending on the chat type:

In one-to-one chats, the room is defined by the two persons chatting: If Alice chats with Bob, all messages sent by Alice to Bob and vice-versa are in "Alice-Bob-Room". The nabu:previousMessageInRoom property links all messages sent between Alice and Bob, making it easy for Alice to navigate through all logged messages she sent to or received from Bob. In the Nabu ontology, this kind of room is called P2PRoom (Point-to-Point-Room). In RDF, the "Alice-Bob-Room" might look like this:

<nabu:P2PRoom rdf:about="http://foo#instances/P2PRooms/">
    <nabu:members rdf:resource="http://foo#instances/Accounts/Jabber/"/>
    <nabu:members rdf:resource="http://foo#instances/Accounts/Jabber/"/>

In multi-user chat, the semantics of a room are slightly different: While the P2PRoom is an addition by Nabu and does not exist in Jabber, the MUC protocol as defined in JEP-0045 knows rooms: A room is e.g. support@…, a virtual place users can join. Unlike P2PRooms, these "MUCRooms" are not defined by their members, but by the room name and the room topic. A MUCRoom has a Jabber ID, just like accounts:

<nabu:MUCRoom rdf:about="http://foo#instances/MUCRooms/conference.kafka/foobar">
   <nabu:JabberID rdf:about="http://foo#instances/JabberIDs/conference.kafka/foobar">

Presence Change

If presence logging is enabled, every presence change, e.g. from "Offline" to "Online", or from "Online" to "Away", is stored in a PresenceChange instance:

nabu:status: the new presence status, one of online, offline, away, xa, dnd

nabu:statusMessage: The status message the user set

nabu:account: The account that changed its presence status

nabu:previousPresenceChange: The last logged presence change of the account nabu:account. All logged presences of a user are chronologically linked via the nabu:previousPresenceChange property.

[ Search the Archive | Handbook | Annotations ]

Last modified 16 years ago Last modified on 08/02/05 03:42:40

Attachments (1)

Download all attachments as: .zip