Now you can reply to a status message
We have decided to change the range of opo:customMessage property from a simple string, to a sioc:Item, thus making it an object property. This step was necessary for supporting different lifestreaming use-cases where users can comment on other people’s statuses (e.g., on Twitter). However, a difference exist between those custom messages, and others that do not support comments (e.g., statuses in the domain of Instant Messaging). For the first type we recommend using sioc:Post to describe the custom message, since it supports replies through sioc:has_reply property. Therefore, sioc:Post (and its subclasses e.g., sioct:MicroblogPost) are meant to be used whenever a custom message is actually a post that can be replied to (examples include Twitter posts and Facebook status messages). For other uses where commenting a custom message is not a practice you may use our specific form of sioc:Item defined in OPO, called StatusMessage.

In the following example we show a typical custom message declared on Twitter and another custom message that is posted as a reply to it. To enable replies we use sioc:Post as a type for our custom message. For the purposes of this example we imagine an enhanced version of Star Wars, where main characters use Twitter for communication.
@base <http://online-presence.net/opo/examples#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix opo: <http://online-presence.net/opo/ns#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix sioc: <http://rdfs.org/sioc/ns#>.
:datrhVaderTwitterAccount rdf:type sioc:UserAccount;
foaf:accountServiceHomepage <http://www.twitter.com/>;
foaf:accountName "darthVader".
:datrhVaderStatus rdf:type sioc:Post;
sioc:content "Luke, I am your father.".
:datrhVaderPresence rdf:type opo:OnlinePresence;
opo:customMessage :datrhVaderStatus;
opo:startTime "2008-03-01T18:51:19";
opo:declaredOn :datrhVaderTwitterAccount.
<http://starwars.net/darthVader> opo:declaresOnlinePresence :datrhVaderPresence.
:lukeTwitterAccount rdf:type sioc:UserAccount;
foaf:accountServiceHomepage <http://www.twitter.com/>;
foaf:accountName "luke".
:lukeStatus rdf:type sioc:Post;
sioc:content "No... No! That's not true! That's impossible!";
sioc:reply_of :darthVaderStatus.
:lukePresence rdf:type opo:OnlinePresence;
opo:customMessage :lukeStatus;
opo:startTime "2008-03-01T18:51:49";
opo:declaredOn :lukeTwitterAccount.
<http://starwars.net/luke> opo:declaresOnlinePresence :lukePresence.
The example also featuers the opo:declaredOn property used to connect the OnlinePresence being published with an account on an online service that was used to declare the presence (in this case a Twitter account) represented as sioc:UserAccount.
For expressing custom messages in systems that do not support replies, using the StatusMessage class instead of sioc:Post would be more suitable. The use of this practice can be found in further examples.
Current Location
Being inspired by travel-blogging, travel-twitting and the constantly increasing usage of mobile devices for engaging in online social interactions, we have decided to include the location data in the Online Presence Ontology. When people are on the move, permanent locations specified in their user profiles do not help much to position a user in the time of writing a post. On the other hand there are more and more GPS enabled devices that can automatically generate location metadata. Thus, we found it useful to extend the concept of Online Presence with location data and then connect posts to instances of Online Presence.
Other potential use would be in enabling complex contact restrictions in Instant Messaging, like "the user can be contacted by anyone from the same town". If we want to enable those restrictions (in the form of rules or policies) at some point in the future, it would be useful to define the user's current location.
For specifying location data we use the SpatialThing concept from the WGS84 Ontology. Here is an example Online Presnce with a current location:
@base <http://online-presence.net/opo/examples#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix opo: <http://online-presence.net/opo/ns#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix wgs84_pos: <http://www.w3.org/2003/01/geo/wgs84_pos#>.
@prefix sioc: <http://rdfs.org/sioc/ns#>.
:MyFlat rdf:type wgs84_pos:SpatialThing;
wgs84_pos:lat 48.858323471538;
wgs84_pos:long 2.29451715946198.
:MyCurrentPresence rdf:type opo:OnlinePresence;
opo:customMessage [ rdf:type opo:StatusMessage;
sioc:content "hating SNCF"];
opo:startTime "2008-03-01T18:51:19";
opo:currentLocation :MyFlat.
<http://ggg.milanstankovic.org/foaf.rdf#milstan> opo:declaresOnlinePresence :MyCurrentPresence.
Apart from specifying your location using (lat/long) coordinates, you can also reuse some geographic locations already defined in Geonames or elsewhere. This is especially useful in cases when you want to relate your presence to a specific geographical entity (e.g., Paris, Eiffel Tower) rather than just any coordinates. Since Geonames data is largely used this practice would also make query answering easier (comparing if two URIs are the same rather than doing some coordinates / distance matching to determine if two people are in the same city).
We demonstrate this approach in the following example where the location is specified using Geonames URI for Paris.
@base <http://online-presence.net/opo/examples#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix opo: <http://online-presence.net/opo/ns#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
:MyCurrentPresence rdf:type opo:OnlinePresence;
opo:customMessage [ rdf:type opo:StatusMessage;
sioc:content "hating SNCF"];
opo:startTime "2008-03-01T18:51:19";
opo:currentLocation <http://sws.geonames.org/2988507/>.
<http://ggg.milanstankovic.org/foaf.rdf#milstan> opo:declaresOnlinePresence :MyCurrentPresence.
User Actions
It became a common practice for users on IM platforms to disclose their current music track. We initially intended to enable representation of this practice, but we concluded that current music track is just one of numerous actions that can be performed by a user while he/she is online. A practice of disclosing details about other types of action could easily be established, so we decided to go with a general concept opo:Action and specialize it to describe listening, reading or working on a project. Suggestions for additional activities are welcome. For now, the idea is to separate the activities into an extension of the OPO, entitled opo-actions.
example action - opo:Listening
Listening is the Activity for describing current music listened by a user. For this purpose we use the mo:Track concept from the widely accepted Music Ontology. Here is an example where user declares that he is listening to a song already defined in DBTune datasets.
@base <http://online-presence.net/opo/examples#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix opo: <http://online-presence.net/opo/ns#>.
@prefix opo-actions: <http://online-presence.net/opo-actions/ns#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
opo-actions:listeningTo <http://dbtune.org/magnatune/track/513>.
:MyCurrentPresence rdf:type opo:OnlinePresence;
opo:startTime "2008-03-01T18:51:19";
opo:currentAction :ListeningNow.
Source Of Publishing
The opo:publishedFrom property serves to connect an instance of opo:OnlinePresence with the type of source where it is published. The idea of distinguishing different sources comes from services like Twitter and Facebook that take into account whether a custom message is published from the Web or from a mobile device. Different sources will be represented by different instances of opo:SourceOfPublishing. This part is still a work in progress as we are considering different implications of different solutions. We are open to your suggestions.
Sharing Space - Dedicating Presence Information to a Certain Audience
In our user studies we discovered the need to specify the intended audience of presence information (e.g. status messages, availability information, etc.). Users sometimes need to broadcast different status messages to different groups of friends (e.g. one message to closest personal friends and another to work colleagues). The same stands for availability for chat, whereas users would sometimes like to be available just for a particular group of friends (e.g. direct coworkers), and busy for all the others. The concept opo:SharingSpace provides a way to direct the presence information to its intended audience, through a property opo:intededFor.
On the following example we show a status message that the user wants to dedicate to his friends living in Paris, who might be interested to go on a concert together with him. Since the status message shares local event invitation, it might be seen as a noise for people from other places. Therefore, a way to direct it to its targeted audience could be highly useful.
@base <http://online-presence.net/opo/examples#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix opo: <http://online-presence.net/opo/ns#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
:myFriendsInParis rdf:type opo:SharingSpace.
:myCustomMessage rdf:type opo:StatusMessage;
sioc:content "I have two tickets for a concert tonight. Anybody interested?".
:MyCurrentPresence rdf:type opo:OnlinePresence;
opo:startTime "2008-03-01T18:51:19";
opo:customMessage :myCustomMessage;
opo:inendedFor :myFriendsInParis.
opo:SharingSpace is in fact a subclass of foaf:Group and its members can be conveniently defined using SPARQL queries. A SPARQL query defining the mebers of the opo:SharingSpace used in previous example is shown in the following block of code. It finds all the friends of a particular user who live in Paris, and creates a corresponding Sharing Space.
PREFIX opo: <http:// http://online-presence.net/opo/ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
CONSTRUCT
{
<http://example.org/ns#myFriendsInParis> rdf:type opo:SharingSpace;
foaf:member ?person.
}
WHERE
{
?person foaf:based_near < http://sws.geonames.org/2988507/>.
<http://ggg.milanstankovic.org/foaf.rdf#milstan> foaf:knows ?person.



