Simple Service Status Ontology (SSSO)

Jakob Voß

2013-03-28 12:20:40 +0100

Table of Contents

1 Introduction

The Simple Service Status Ontology (SSSO) is an event-based RDF ontology for typical status in fulfillment of a service.

1.1 Status of this document

This HTML document and RDF serializations of the Simple Service Status Ontology (ssso.ttl in RDF/Turtle and ssss.owl in RDF/XML) are generated automatically from a source file written in Pandoc Markdown syntax. Sources and updates are available at http://github.com/gbv/ssso. The current version of this document was last modified at 2013-03-28 12:20:40 +0100 with revision f813e4c.

1.2 Terminology

The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

1.3 Namespaces and ontology

The URI namespace of this ontology is http://purl.org/ontology/ssso#. The namespace prefix ssso is recommeded. The URI of this ontology as a whole is http://purl.org/ontology/ssso.

@prefix ssso: <http://purl.org/ontology/ssso#> .
@base         <http://purl.org/ontology/ssso> .

The following namspace prefixes are used to refer to related ontologies:

@prefix crm:     <http://purl.org/NET/cidoc-crm/core#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix dctype:  <http://purl.org/dc/dcmitype/> .
@prefix dul:     <http://www.loa-cnr.it/ontologies/DUL.owl#> .
@prefix event:   <http://purl.org/ontology/c4dm/event.owl#> .
@prefix foaf:    <http://xmlns.com/foaf/0.1/> .
@prefix gr:      <http://purl.org/goodrelations/v1#> .
@prefix lode:    <http://linkedevents.org/ontology/> .
@prefix ncal:    <http://www.semanticdesktop.org/ontologies/2007/04/02/ncal#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix prov:    <http://www.w3.org/ns/prov#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema:  <http://schema.org/> .
@prefix tio:     <http://purl.org/tio/ns#> .
@prefix vann:    <http://purl.org/vocab/vann/> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .

The Simple Service Status Ontology (SSSO) is defined in RDF/Turtle as following:

<> a owl:Ontology ;
    rdfs:label "Simple Service Status Ontology" ;
    rdfs:label "SSSO" ;
    vann:preferredNamespacePrefix "ssso" .

2 Overview

A ServiceFulfillment according to SSSO is modeled as set of service events, each being an instance of ServiceEvent. Examples of a ServiceFulfillment include the purchase of a product in a shop, the attendance at a performance, and the lending of a book in a library. In contrast to related ontologies, each ServiceEvent and each ServiceFulfillment is a not a general offer but a particular activity in time. The activity typically takes place provided by at least one particular ServiceProvider (e.g. a shop, presenter, or library) and consumed by at least one ServiceConsumer (e.g. a customer, attendee, or patron). Multiple service event that belong to one service fulfillment should be connected in time with properties nextService and previousService.

The following diagram illustrates the classes and properties defined in this ontology:

                                   nextService / previousService
                                              ------
                                             |      |
                                             v      v
   +-----------------+   provides     +--------------------+   consumedBy   +-----------------+
   | ServiceProvider |--------------->|    ServiceEvent    |--------------->| ServiceConsumer |
   |                 |<---------------|                    |<---------------|                 |
   +-----------------+   providedBy   |   ReservedService  |   consumes     +-----------------+
                                      |   PreparedService  |
                                      |   ProvidedService  |
        +------------+   limits       |   ExecutedService  |   delay    
        | Limitation |--------------->|   RejectedService  |-------------> duration-or-time
        |            |<---------------|                    |-------------> xsd:nonNegativeInteger
        +------------+  limitedBy     | ServiceFulfillment |   queue
                                      +-----^--------------+
                                            |      ^
                                            |      |
                                             ------
                               dcterms:hasPart / dcterms:partOf

2.1 Service status

SSSO defines five typical service status as disjoint subclasses of ServiceEvent. Actual service fulfillments do not need to implement all of these service status.

2.2 Service limitations

SSSO also defines the class ServiceLimitation and the properties limits, limitedBy, delay, and queue to express limitations of services.

2.3 Service types and times

This ontology does not make any assumptions about types of services. To define service types, define a subclass of ServiceEvent. The class TimeTravel is included in SSSO as artifical example of a service type.

SSSO does neither define (yet another) set of properties to relate a service event to the time when it started and/or ended. To express such times, one should better use existing properties from related ontologies, such as:

The property values SHOULD be modeled as instance of xsd:dateTime or xsd:date. The starting time of a service event (if given) MUST be equal to or earlier than the ending time of the same service event (unless the service is an instance of TimeTravel and ExecutedService).

To express an estimated and additional time, SSSO defines the property delay which can also hold a relative duration. Applications SHOULD NOT use this property to relate a service event to its normal time, unless this time is an additional constraint.

3 Classes

3.1 ServiceEvent

A service event is an activity that takes places during a specific time. The event can be connected to one or more ServiceProvider with property providedBy and to one or more ServiceConsumer with property consumedBy.

Several related ontologies have been proposed to model events or activities with suprisingly low interconnections. SSSO is agnostic to these ontologies, so ServiceEvent is related to classes in all of them to make happy multiple communities. A ServiceEvent is further subclass of schema:IndividualProduct and gr:Individual, which imply schema:Product and gr:ProductOrService. Nevertheless, SSSO does not make any assumptions whether a ServiceEvent is actually sold or just provided for free.

ssso:ServiceEvent a owl:Class ;
    rdfs:label "ServiceEvent" ;
    rdfs:subClassOf 
        dctype:Event , 
        event:Event , 
        prov:Activity , 
        lode:Event , 
        dul:Event ,
        crm:E7_Activity ,
        ncal:Event ,
        schema:Event ,
        tio:Event ,
        schema:IndividualProduct ,
        gr:Individual ;
        rdfs:isDefinedBy <> .

3.2 ServiceFulfillment

A Service fulfillment is a ServiceEvent that consists of one or more parts. Each of these parts is also a ServiceEvent and connected to the service fulfillment by dcterms:partOf. Vice versa, each instance of ServiceEvent is also instance of ServiceFulfillment if connected to another ServiceEvent by dcterms:hasPart. The parts of a service fulfillment SHOULD be connected to each other by nextService and previousService.

ssso:ServiceFulfillment a owl:Class ;
    rdfs:label "ServiceFulfillment" ;
    rdfs:subClassOf ssso:ServiceEvent ;
    rdfs:isDefinedBy <> .

3.3 ReservedService

A reserved service is a ServiceEvent that has been accepted by a service provider for execution but not prepared yet. The reserved service has neither been prepared by a service provider but only queued for further processing. A typical example is a product order that has been placed but not payed yet or a payed ticket to a theater performance.

ssso:ReservedService a owl:Class ;
    rdfs:label "ReservedService" ;
    rdfs:subClassOf ssso:ServiceEvent ;
    owl:disjointWith 
      ssso:PreparedService, ssso:ProvidedService, 
      ssso:ExecutedService, ssso:RejectedService ;
    rdfs:isDefinedBy <> .

3.4 PreparedService

A prepared service is being prepared to be provided or executed. A typical example is a product that is being send to its consumer.

ssso:PreparedService a owl:Class ;
    rdfs:label "ReservedService" ;
    rdfs:subClassOf ssso:ServiceEvent ;
    owl:disjointWith
      ssso:ReservedService, ssso:ProvidedService, 
      ssso:ExecutedService, ssso:RejectedService ;
    rdfs:isDefinedBy <> .

3.5 ProvidedService

A provided service is being made available for immediate execution. A typical example is a product that is ready for being picked up by its consumer.

ssso:ReservedService a owl:Class ;
    rdfs:label "ReservedService" ;
    rdfs:subClassOf ssso:ServiceEvent ;
    owl:disjointWith
      ssso:ReservedService, ssso:PreparedService, 
      ssso:ExecutedService, ssso:RejectedService ;
    rdfs:isDefinedBy <> .

3.6 ExecutedService

An executed service represents the actual execution event of fulfillment of a service. A typical example is a theater performance that is being played.

ssso:ExecutedService a owl:Class ;
    rdfs:label "ExecutedService" ;
    rdfs:subClassOf ssso:ServiceEvent ;
    owl:disjointWith
      ssso:ReservedService, ssso:PreparedService, 
      ssso:ProvidedService, ssso:RejectedService ;
    rdfs:isDefinedBy <> .

3.7 RejectedService

A rejected service is a ServiceEvent that has been rejected by its provider or by its consumer. The rejection may be infinite or it may be followed by another service when the reason for rejection has been removed.

ssso:RejectedService a owl:Class ;
    rdfs:label "RejectedService" ;
    rdfs:subClassOf ssso:ServiceEvent ;
    owl:disjointWith
      ssso:ReservedService, ssso:PreparedService, 
      ssso:ProvidedService, ssso:ExecutedService ;
    rdfs:isDefinedBy <> .

3.8 ServiceProvider

A service provider is an entity that is responsible for providing a ServiceEvent. Typical providers, such as organizations and people, are also instances of foaf:Agent and gr:BusinessEntity but SSSO does not put any constraints on the nature of providers.

ssso:ServiceProvider a owl:Class ;
    rdfs:label "ServiceProvider" ;
    rdfs:isDefinedBy <> .

3.9 ServiceConsumer

A service consumer is an entity that is requesting or consuming a ServiceEvent. Typical consumers, such as organizations and people, are instances of foaf:Agent and gr:BusinessEntity but SSSO does not put any constraints on the nature of consumers.

ssso:ServiceConsumer a owl:Class ;
    rdfs:label "ServiceConsumer" ;
    rdfs:isDefinedBy <> .

3.10 ServiceLimitation

A service limitation is some obstacle that may limit the use of a ServiceEvent. For instance the purchase of guns and drugs is limited to consumers with special permission. Another example is providing a different product or activity than originally requested. Services and limitations are connected to each other with properties limits and limitedBy.

ssso:ServiceLimitation a owl:Class ;
    rdfs:label "ServiceLimitation" ;
    rdfs:isDefinedBy <> .

3.11 TimeTravel

An event which ends before it has been started. Details have been implemented in the future.

ssso:TimeTravel a owl:Class ;
    rdfs:label "TimeTravel" ;
    rdfs:isDefinedBy <> .

4 Properties

4.1 provides

Relates a ServiceProvider instance to a ServiceEvent instance .

ssso:provides a owl:ObjectProperty ;
    rdfs:label "provides" ;
    rdfs:domain ssso:ServiceProvider ;
    rdfs:range ssso:ServiceEvent ;
    owl:inverseOf ssso:providedBy ;
    rdfs:isDefinedBy <> .

4.2 providedBy

Relates a ServiceEvent instance to a ServiceProvider instance.

ssso:providedBy a owl:ObjectProperty ;
    rdfs:label "providedBy" ;
    rdfs:domain ssso:ServiceEvent ;
    rdfs:range ssso:ServiceProvider ;
    owl:inverseOf ssso:provides ;
    rdfs:isDefinedBy <> .

4.3 consumes

Relates a ServiceConsumer instance to a ServiceEvent instance.

ssso:consumes a owl:ObjectProperty ;
    rdfs:label "consumes" ;
    rdfs:domain ssso:ServiceConsumer ;
    rdfs:range ssso:ServiceEvent ;
    owl:inverseOf ssso:consumedBy ;
    rdfs:isDefinedBy <> .

4.4 consumedBy

Relates a ServiceEvent instance to a ServiceConsumer instance.

ssso:consumedBy a owl:ObjectProperty ;
    rdfs:label "consumedBy" ;
    rdfs:domain ssso:ServiceEvent ;
    rdfs:range ssso:ServiceConsumer ;
    owl:inverseOf ssso:consumes ;
    rdfs:isDefinedBy <> .

4.5 limits

Relates a ServiceLimitation instance to a ServiceEvent instance.

ssso:limits a owl:ObjectProperty ;
    rdfs:label "limits" ;
    rdfs:domain ssso:ServiceLimitation ;
    rdfs:range ssso:ServiceEvent ;
    owl:inverseOf ssso:limitedBy ;
    rdfs:isDefinedBy <> .

4.6 limitedBy

Relates a ServiceEvent instance to a ServiceLimitation instance.

ssso:limitedBy a owl:ObjectProperty ;
    rdfs:label "limitedBy" ;
    rdfs:domain ssso:ServiceEvent ;
    rdfs:range ssso:ServiceLimitation ;
    owl:inverseOf ssso:limits ;
    rdfs:isDefinedBy <> .

4.7 delay

This property can be used to specify an estimated period of time or a date when a ServiceEvent is expected to take place. Applications SHOULD use values in the range of xsd:duration, xsd:dateTime, xsd:date or the special value "unknown" (to indicate a delay of unknown duration). The range may later be extended to a subset of Extended Date/Time Format (EDTF).

ssso:queue a owl:DatatypeProperty ;
    rdfs:label "delay" ;
    rdfs:domain ssso:ServiceEvent ;
    rdfs:isDefinedBy <> .

4.8 queue

This property can be used to indicate the size of a waiting queue for some ServiceEvent. Its value must be a non-negative integer (0,1,2...).

ssso:queue a owl:DatatypeProperty ;
    rdfs:label "queue" ;
    rdfs:domain ssso:ServiceEvent ;
    rdfs:range xsd:nonNegativeInteger ;
    rdfs:isDefinedBy <> .

4.9 nextService

Relates a service instances to another service instance which is following in time. The starting time of the following service instance MUST be equal or later then the ending time of the previous service (unless one of the services is an instance of TimeTravel and ExecutedService).

ssso:nextService a owl:ObjectProperty ;
    rdfs:label "nextService" ;
    rdfs:domain ssso:ServiceEvent ;
    rdfs:range  ssso:ServiceEvent ;
    owl:inverseOf ssso:previousService ;
    rdfs:isDefinedBy <> .

4.10 previousService

Relates a service instances to another service instance which is preceding in time. The ending time of the previousg service instance MUST be equal or earlier then the starting time of the next service (unless one of the services is an instance of TimeTravel and ExecutedService).

ssso:previousService a owl:ObjectProperty ;
    rdfs:label "previousService" ;
    rdfs:domain ssso:ServiceEvent ;
    rdfs:range  ssso:ServiceEvent ;
    owl:inverseOf ssso:nextService ;
    rdfs:isDefinedBy <> .

5 Rules

The following inference rules apply:

# domains and ranges
{ $p ssso:provides $s }        => { $p a ssso:ServiceProvider . $s a ssso:ServiceEvent } .
{ $s ssso:providedBy $p }      => { $p a ssso:ServiceProvider . $s a ssso:ServiceEvent } .
{ $l ssso:limits $s }          => { $l a ssso:ServiceLimitation . $s a ssso:ServiceEvent } .
{ $s ssso:limitedBy $l }       => { $l a ssso:ServiceLimitation . $s a ssso:ServiceEvent } .

{ $c ssso:consumes $s }        => { $c a ssso:ServiceConsumer . $s a ssso:ServiceEvent } .
{ $s ssso:consumedBy $c }      => { $c a ssso:ServiceConsumer . $s a ssso:ServiceEvent } .
{ $a ssso:nextService $b }     => { $a a ssso:ServiceEvent . $b a ssso:ServiceEvent } .
{ $a ssso:previousService $b } => { $a a ssso:ServiceEvent . $b a ssso:ServiceEvent } .

# inverse properties
{ $a dcterms:hasPart $b }      <=> { $b dcterms:partOf $a } .
{ $p ssso:provides $s }        <=> { $s ssso:providedBy $p } .
{ $c ssso:consumes $s }        <=> { $s ssso:consumedBy $p } .
{ $l ssso:limits $s }          <=> { $s ssso:limitedBy $l } .
{ $a ssso:previousService $b } <=> { $b ssso:nextService $a } .

# subclasses
{ $s a ssso:ServiceFulfillment } => { $s a ssso:ServiceEvent } .
{ $s a ssso:ReservedService }    => { $s a ssso:ServiceEvent } .
{ $s a ssso:PreparedService }    => { $s a ssso:ServiceEvent } .
{ $s a ssso:ProvidedService }    => { $s a ssso:ServiceEvent } .
{ $s a ssso:ExecutedService }    => { $s a ssso:ServiceEvent } .
{ $s a ssso:RejectedService }    => { $s a ssso:ServiceEvent } .

# service fulfillment
{ $a a ssso:ServiceEvent . $b a ssso:ServiceEvent . $a dcterms:hasPart $b } => { $a a ssso:ServiceFulfillment } .

6 Related ontologies

The core class ServiceEvent is subclass of event and activity classes from several related ontologies. The large number of similar classes may result from an inability of ontology engineers to agree on semantics or the dislike to refer to ontologies that have been designed by someone else. The related classes and ontologies include:

SSSO further makes use of the Dublin Core Metadata Terms dcterms:hasPart and dcterms:partOf.

The relation between SSSO, Schema.org, and GoodRelations can best be described by some examples (taken from GoodRelations, licensed under CC-BY-SA 3.0):

In short, a gr:Offering refers to a potential ServiceEvent (and possibly ServiceFulfillment), which is typically also an instance of gr:Individual, gr:ProductOrService, and schema:Product.

7 References

7.1 Normative References

7.2 Informative References

SSSO is loosely connected to the following ontologies: it is compatible with them but their use is optional. Feel free to rely on or ignore additional parts Offering these ontologies when using SSSO.

SSSO was motivated by the design of an ontology for the Patrons Account Information API (PAIA, http://purl.org/ontology/paia). It includes concepts formerly included in the specification of Document Availability Information API (DAIA, http://github.com/gbv/daiaspec).