@prefix nco: <http://www.semanticdesktop.org/ontologies/2007/03/22/nco#> .
@prefix nfo: <http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#> .
@prefix nie: <http://www.semanticdesktop.org/ontologies/2007/01/19/nie#> .
@prefix nmo: <http://www.semanticdesktop.org/ontologies/2007/03/22/nmo#> .
@prefix nrl: <http://www.semanticdesktop.org/ontologies/2007/08/15/nrl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tracker: <http://www.tracker-project.org/ontologies/tracker#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix nao: <http://www.semanticdesktop.org/ontologies/2007/08/15/nao#> .
@prefix nao: <http://www.semanticdesktop.org/ontologies/2007/08/15/nao#> .

nmo: a tracker:Namespace, tracker:Ontology ;
	tracker:prefix "nmo" ;
	nao:lastModified "2015-12-29T14:30:00Z" .

# FIXME Extension requested in Nepomuk
nmo:MimePart a rdfs:Class ;
	rdfs:subClassOf nfo:EmbeddedFileDataObject .

# FIXME Extension requested in Nepomuk
nmo:Multipart a rdfs:Class ;
	rdfs:subClassOf nfo:DataContainer .

# FIXME Extension requested in Nepomuk
nmo:partBoundary a rdf:Property ;
	rdfs:domain nmo:Multipart ;
	rdfs:range xsd:string .

nmo:Message a rdfs:Class ;
	rdfs:comment "A message. Could be an email, instant messanging message, SMS message etc." ;
	rdfs:subClassOf nfo:TextDocument ;
	tracker:domainIndex nie:contentCreated ;
	tracker:notify true .

# FIXME Extension requested in Nepomuk
nmo:Email a rdfs:Class;
	rdfs:label "Email envelope" ;
	rdfs:comment "Root node in a MIME Email" ;
	rdfs:subClassOf nmo:Message .

# FIXME Extension requested in Nepomuk
nmo:hasContent a rdf:Property ;
	rdfs:label "Has content" ;
	rdfs:comment "Link between the root node and the first MIME node in the Email tree" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Email ;
	rdfs:range nmo:MimePart .

# FIXME Extension requested in Nepomuk
nmo:Attachment a rdfs:Class ;
	rdfs:subClassOf nmo:MimePart ;
	rdfs:subClassOf nfo:Attachment .

nmo:MailAccount a rdfs:Class ;
	rdfs:subClassOf nie:InformationElement .

nmo:MailboxDataObject a rdfs:Class ;
	rdfs:subClassOf nie:DataObject .

nmo:MessageHeader a rdfs:Class ;
	rdfs:label "Message header" ;
	rdfs:comment "Pairs key=value to store arbitrary message header. Note that if a property exists already in the ontology for those headers it should be used. This is just a safe guard mechanism." ;
	rdfs:subClassOf rdfs:Resource .

nmo:IMMessage a rdfs:Class ;
	rdfs:subClassOf nmo:Message .

nmo:Conversation a rdfs:Class ;
	rdfs:comment "A conversation. An exchange of one or multiple messages within a time frame or about a specific topic." ;
	rdfs:subClassOf nie:InformationElement .

nmo:CommunicationChannel a rdfs:Class ;
	rdfs:comment "A communication channel. The container for all messages between participants of a specific group or in a persistent channel." ;
	rdfs:subClassOf nie:InformationElement .

nmo:PermanentChannel a rdfs:Class ;
	rdfs:comment "Well-known stable channel like an IRC room in a specific server. Predefined URL schema for the instances is recommended" ;
	rdfs:subClassOf nmo:CommunicationChannel .

nmo:TransientChannel a rdfs:Class ;
	rdfs:comment "Channel created ad-hoc for the communication like a multi chat in some systems" ;
	rdfs:subClassOf nmo:CommunicationChannel .

nmo:sentDate a rdf:Property ;
	rdfs:comment "Date when this message was sent." ;
	tracker:indexed true ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:dateTime .

nmo:Call a rdfs:Class ;
	rdfs:label "Call" ;
	rdfs:comment "Phone call. Voice communication with the user with somebody else." ;
	rdfs:subClassOf nmo:Message ;
	tracker:domainIndex nmo:sentDate ;
	tracker:notify true .

# required for backward compatibility
nmo:VOIPCall a rdfs:Class ;
	rdfs:subClassOf nmo:Call .

nmo:MailFolder a rdfs:Class ;
	rdfs:subClassOf nfo:Folder .

nmo:recipient a rdf:Property ;
	rdfs:domain nmo:Message ;
	rdfs:range nco:Contact .

nmo:from a rdf:Property ;
	rdfs:comment "The sender of the message." ;
	tracker:indexed true ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range nco:Contact .

nmo:headerName a rdf:Property ;
	rdfs:comment "Key of the message header key-value pair" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MessageHeader ;
	rdfs:range xsd:string ;
	tracker:weight 3 .

nmo:headerValue a rdf:Property ;
	rdfs:comment "Value of the message header key-value pair" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MessageHeader ;
	rdfs:range xsd:string ;
	tracker:weight 4 .

nmo:isAnswered a rdf:Property ;
	rdfs:comment "True when the user has sent a replay to this message" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:boolean .

nmo:isFlagged a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Email ;
	rdfs:range xsd:boolean .

nmo:isDeleted a rdf:Property ;
	rdfs:comment "True when the user has removed the Email in the UI but still exists in the DB. Usually a purge or confirmation from the user will actually remove the data." ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:boolean .

nmo:isDraft a rdf:Property ;
	rdfs:comment "The user hasn't finished editing the message and might want to continue later" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:boolean .

nmo:isRecent a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Email ;
	rdfs:range xsd:boolean .

nmo:isRead a rdf:Property ;
	rdfs:comment "The messsage has been readed. The user has opened the message or has marked it directly as readed" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:boolean .

nmo:isSent a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:boolean .

nmo:isEmergency a rdf:Property ;
	rdfs:comment "Special message from the network, probably coming via Cell broadcasting with emergency information" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:boolean .

nmo:htmlMessageContent a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:string .

nmo:references a rdf:Property ;
	rdfs:domain nmo:Message ;
	rdfs:range nmo:Message .

nmo:inReplyTo a rdf:Property ;
	rdfs:subPropertyOf nmo:references ;
	rdfs:domain nmo:Message ;
	rdfs:range nmo:Message .

nmo:charSet a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MimePart ;
	rdfs:range xsd:string .


nmo:contentId a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MimePart ;
	rdfs:range xsd:string .

nmo:contentTransferEncoding a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MimePart ;
	rdfs:range xsd:string .

nmo:contentDescription a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MimePart ;
	rdfs:range xsd:string .

nmo:contentDisposition a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MimePart ;
	rdfs:range xsd:string .

# FIXME Extension requested in Nepomuk
nmo:mimeHeader a rdf:Property ;
	rdfs:domain nmo:MimePart ;
	rdfs:range rdfs:Resource .

nmo:messageHeader a rdf:Property ;
	rdfs:domain nmo:Message ;
	rdfs:range nmo:MessageHeader .

nmo:messageId a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:string .

nmo:messageSubject a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:string ;
	tracker:fulltextIndexed true ;
	tracker:weight 5 .

nmo:receivedDate a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	tracker:indexed true ;
	rdfs:range xsd:dateTime .

nmo:replyTo a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range nco:Contact .

nmo:sender a rdf:Property ;
	tracker:indexed true ;
	rdfs:subPropertyOf nmo:recipient ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range nco:Contact .

nmo:to a rdf:Property ;
	rdfs:domain nmo:Message ;
	tracker:indexed true ;
	rdfs:range nco:Contact .

nmo:bcc a rdf:Property ;
	rdfs:domain nmo:Message ;
	rdfs:range nco:Contact .

nmo:cc a rdf:Property ;
	rdfs:domain nmo:Message ;
	rdfs:range nco:Contact .

nmo:conversation a rdf:Property ;
	rdfs:comment "Connects this message to a conversation. Every message must only be part of a single conversation." ;
	tracker:indexed true ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range nmo:Conversation .

nmo:communicationChannel a rdf:Property ;
	rdfs:comment "Connects this message to a communication channel. Every message must only be in a single channel." ;
	rdfs:domain nmo:Message ;
	rdfs:range nmo:CommunicationChannel .

nmo:lastMessageDate a rdf:Property ;
	rdfs:comment "nmo:sentDate of the most recent message in this channel." ;
	tracker:indexed true ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:CommunicationChannel ;
	rdfs:range xsd:dateTime .

nmo:lastSuccessfulMessageDate a rdf:Property ;
	rdfs:comment "nmo:sentDate of the most recent successful message in this channel." ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:CommunicationChannel ;
	rdfs:range xsd:dateTime .

nmo:hasParticipant a rdf:Property ;
	tracker:indexed true ;
	rdfs:domain nmo:CommunicationChannel ;
	rdfs:range nco:Contact .

nmo:duration a rdf:Property ;
        rdfs:comment "Duration of the call in seconds" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Call ;
	rdfs:range xsd:integer .

# FIXME Extension to nepomuk
nmo:accountName a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MailAccount ;
	rdfs:range xsd:string ;
	tracker:weight 3 .

# FIXME Extension to nepomuk
nmo:accountDisplayName a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MailAccount ;
	rdfs:range xsd:string ;
	tracker:weight 3 .

# FIXME Extension to nepomuk
nmo:fromAddress a rdf:Property ;
	rdfs:comment "From address of an account" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MailAccount ;
	rdfs:range nco:EmailAddress .

# FIXME Extension to nepomuk
nmo:signature a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MailAccount ;
	rdfs:range xsd:string ;
	tracker:weight 2 .

# FIXME Extension to nepomuk
nmo:folderName a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MailFolder ;
	rdfs:range xsd:string ;
	tracker:weight 4 .

# FIXME Extension to nepomuk
nmo:status a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Email ;
	rdfs:range xsd:string .

# FIXME Extension to nepomuk
nmo:responseType a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Email ;
	rdfs:range xsd:string .

# FIXME Extension to nepomuk
nmo:serverCount a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MailFolder ;
	rdfs:range xsd:integer .

# FIXME Extension to nepomik
nmo:serverUnreadCount a rdf:Property ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MailFolder ;
	rdfs:range xsd:integer .

# Don't use this!! Only for compat with original Nepomuk NMO
nmo:hasAttachment a rdf:Property ;
	rdfs:domain nmo:Message ;
	rdfs:range nfo:Attachment .

# Don't use this!! Only for compat with original Nepomuk NMO
nmo:contentMimeType a rdf:Property ;
	rdfs:domain nmo:Email ;
	rdfs:range xsd:string ;
	rdfs:subPropertyOf nie:mimeType .


#
# SMS support
#
nmo:PhoneMessage a rdfs:Class ;
	rdfs:label "Phone messages (sms and mms)";
	rdfs:comment "Superclass with shared properties between SMS and MMS.";
	rdfs:subClassOf nmo:Message .


nmo:SMSMessage a rdfs:Class ;
	rdfs:label "SMS Message";
	rdfs:comment "Plain SMS Message" ;
	rdfs:subClassOf nmo:PhoneMessage.

nmo:toVCard a rdf:Property ;
	rdfs:label "fromVCard" ;
	rdfs:comment "Reference to a VCard in the filesystem, containing the Contact information of 'to' recipients" ;
	rdfs:domain nmo:PhoneMessage ;
	rdfs:range nfo:FileDataObject .
	
nmo:fromVCard a rdf:Property ;
	rdfs:label "fromVCard" ;
	rdfs:comment "Reference to a VCard in the filesystem, containing the Contact information of the 'from' recipient";
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:PhoneMessage ;
	rdfs:range nfo:FileDataObject .

#FIXME unify encoding representation... this is the third encoding property in nepomuk
nmo:encoding a rdf:Property ;
	rdfs:label "enconding";
	rdfs:comment "Encoding of the message" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:PhoneMessage ;
	rdfs:range xsd:string .


nmo:phoneMessageId a rdf:Property ;
	rdfs:label "Phone message Id";
	rdfs:comment "Id assigned in the system when the phone message is received" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:PhoneMessage;
	rdfs:range xsd:integer.

nmo:PhoneMessageFolder a rdfs:Class ;
	rdfs:label "Phone message Folder";
	rdfs:comment "Folder for phone message (SMS and MMS). Not a subclass of nfo:Folder because it would confuse filesystem folders" ;
	rdfs:subClassOf nie:InformationElement .

nmo:phoneMessageFolderId a rdf:Property ;
	rdfs:label "folder id";
	rdfs:comment "Id assigned to the folder for sync purpouses" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:PhoneMessageFolder ;
	rdfs:range xsd:string ;
	rdfs:subPropertyOf nie:identifier .

nmo:validityPeriod a rdf:Property ;
	rdfs:label "Validity period" ;
	rdfs:comment "Validity period of an SMS in seconds. It is a value coming from the network" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:PhoneMessage ;
	rdfs:range xsd:integer .

nmo:containsPhoneMessageFolder a rdf:Property ;
	rdfs:label "contains Phone Message Folder";
	rdfs:comment "To link and reconstruct a hierarchy of folders" ;
	rdfs:domain nmo:PhoneMessageFolder;
	rdfs:range nmo:PhoneMessageFolder .

nmo:containsPhoneMessage a rdf:Property ;
	rdfs:label "Contains Phone Message";
	rdfs:comment "Link between an Phone Message and a Folder" ;
	rdfs:domain nmo:PhoneMessageFolder;
	rdfs:range nmo:PhoneMessage .


nmo:predefined-phone-msg-folder-inbox a nmo:PhoneMessageFolder ;
	nie:title "Inbox" ;
	nmo:phoneMessageFolderId "0x1002" .

nmo:predefined-phone-msg-folder-outbox a nmo:PhoneMessageFolder ;
	nie:title "Outbox" ;
	nmo:phoneMessageFolderId "0x1003" .

nmo:predefined-phone-msg-folder-draft a nmo:PhoneMessageFolder ;
	nie:title "Draft" ;
	nmo:phoneMessageFolderId "0x1004" .

nmo:predefined-phone-msg-folder-sent a nmo:PhoneMessageFolder ;
	nie:title "Sent" ;
	nmo:phoneMessageFolderId "0x1005" .


nmo:predefined-phone-msg-folder-myfolder a nmo:PhoneMessageFolder ;
	nie:title "MyFolder" ;
	nmo:phoneMessageFolderId "0x1008" .

nmo:DeliveryStatus a rdfs:Class ;
	rdfs:label "Delivery statuses" ;
	rdfs:comment "Predefined set of delivery status instances" ;
	rdfs:subClassOf rdfs:Resource .

nmo:deliveryStatus a rdf:Property ;
	rdfs:label "deliveryStatus" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range nmo:DeliveryStatus .

nmo:delivery-status-sent a nmo:DeliveryStatus .
nmo:delivery-status-delivered a nmo:DeliveryStatus .
nmo:delivery-status-temporarily-failed a nmo:DeliveryStatus .
nmo:delivery-status-temporarily-failed-offline a nmo:DeliveryStatus .
nmo:delivery-status-permanently-failed a nmo:DeliveryStatus .


nmo:reportDelivery a rdf:Property ;
	rdfs:label "Report delivery" ;
	rdfs:comment "Report delivery has been requested for the message" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:boolean .

# Read report property
nmo:sentWithReportRead a rdf:Property ;
	rdfs:label "Report read" ;
	rdfs:comment "The message has been send with a flag indicating that we want to receive a confirmation when the recipient reads it" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:boolean .

nmo:ReportReadStatus a rdfs:Class ;
	rdfs:label "Read statuses" ;
	rdfs:comment "Predefined set of read status instances" ;
	rdfs:subClassOf rdfs:Resource .

nmo:reportReadStatus a rdf:Property ;
	rdfs:label "reportReadStatus" ;
	rdfs:comment "If the message was sent with report read enable, this property stores the status of that message: if the recipient has read it, delete it, or we are still waiting for an answer" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range nmo:ReportReadStatus .

nmo:read-status-read a nmo:ReportReadStatus .
nmo:read-status-deleted a nmo:ReportReadStatus .
nmo:read-status-unknown a nmo:ReportReadStatus .

nmo:mustAnswerReportRead a rdf:Property ;
	rdfs:label "Report read requested" ;
	rdfs:comment "The message came with the report-read flag enabled, and somebody must be send the answer back. Once the report is sent, this property goes to False.";
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:boolean .

# MMS support
nmo:MMSMessage a rdfs:Class;
	rdfs:label "MMS Message" ;
	rdfs:comment "An MMS message is basically a Email with different envelop. It inherits also from SMS the folders and delivery status" ;
	rdfs:subClassOf nmo:PhoneMessage .

nmo:mmsHasContent a rdf:Property ;
	rdfs:label "MMS has content" ;
	rdfs:comment "Link to the mimeparts with the multimedia content (miming nmo:hasContent)" ;
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:MMSMessage ;
	 rdfs:range nmo:MimePart .

nmo:mmsId a rdf:Property ;
	rdfs:label "mms id";
	rdfs:comment "Unique identifier of an MMS message. It comes from the server";
	nrl:maxCardinality 1 ;
	rdfs:domain nmo:Message ;
	rdfs:range xsd:string .

