<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE uridef[
  <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns">
  <!ENTITY daml "http://www.daml.org/2001/03/daml+oil">
  <!ENTITY xsd "http://www.w3.org/2000/10/XMLschema.xsd">
  <!ENTITY service "http://www.daml.org/services/daml-s/2001/10/Service.daml">
  <!ENTITY process "http://www.daml.org/services/daml-s/2001/10/Process.daml">
  <!ENTITY DEFAULT "http://www.daml.org/services/daml-s/2001/10/Profile.daml">
]>

<!--
This document uses entity types as a shorthand for URIs.
Download the source for a version with unexpanded entities.
  -->

<rdf:RDF
  xmlns:rdf=	"&rdf;#"
  xmlns:daml=	"&daml;#"
  xmlns:xsd=	 "&xsd;#"
  xmlns:service= "&service;#"
  xmlns:process= "&process;#"
  xmlns=	"&DEFAULT;#">

  <daml:Ontology>
    <daml:versionInfo>
      $Id: Profile.daml,v 1.5 2002/06/04 06:04:50 martin Exp $
    </daml:versionInfo> 
    <daml:comment>
      Process and Service Coalition
      First cut at DAML ontology for Advertisements (i.e. Profiles) based
      upon the Service Model.
      Version of Profile for DAML-S 0.6 Release
      Created by Terry Payne (terryp@cs.cmu.edu).
      Modified by Massimo Paolucci (paolucci@cs.cmu.edu)

    </daml:comment> 
<!--  
  -->
    <daml:imports rdf:resource="&rdf;" /> 
    <daml:imports rdf:resource="&daml;" />
    <daml:imports rdf:resource="&service;" /> 
    <daml:imports rdf:resource="&process;" /> 
  </daml:Ontology>

 
<!--  ############ ########### ############ ############ ########### --> 
<!--  ############ ########### ############ ############ ########### --> 
<!--  ############ ########### ############ ############ ########### --> 
  <!--
    The class Actor contains  details about the organisation or
    individual that either offers a service or requests the service.
  -->

  <daml:Class rdf:ID="Actor">
    <daml:label>Actor</daml:label> 
    <daml:subClassOf rdf:resource="&daml;#Thing" /> 
    <daml:comment>
      Actor represents a Requester or Provider who might request or offer a service.
    </daml:comment>
  </daml:Class>

  <daml:Class rdf:ID="ServiceRequester">
    <daml:label>ServiceRequester</daml:label> 
    <daml:subClassOf rdf:resource="#Actor" /> 
    <daml:comment>
      ServiceRequester provides general contract details such as address, fax etc.
    </daml:comment>
  </daml:Class>

  <daml:Class rdf:ID="ServiceProvider">
    <daml:label>ServiceProvider</daml:label> 
    <daml:subClassOf rdf:resource="#Actor" /> 
    <daml:comment>
      ServiceProvider provides general contract details such as address, fax etc.
    </daml:comment>
  </daml:Class>

<!--  ############ ########### ############ ############ ########### --> 

  <!-- Name, type of company etc of Service Provider -->
  <daml:DatatypeProperty rdf:ID="name">
    <daml:domain rdf:resource="#Actor"/>
    <daml:range rdf:resource="&xsd;#string"/>
  </daml:DatatypeProperty>

  <daml:Property rdf:ID="phone">
    <daml:domain rdf:resource="#Actor"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>

  <daml:Property rdf:ID="fax">
    <daml:domain rdf:resource="#Actor"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>

  <daml:Property rdf:ID="email">
    <daml:domain rdf:resource="#Actor"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>

  <daml:Property rdf:ID="physicalAddress">
    <daml:domain rdf:resource="#Actor"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>

  <!-- A URL to the companies web site -->
  <daml:Property rdf:ID="webURL">
    <daml:domain rdf:resource="#Actor"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>

<!--   ############ ########### ############ ############ ########### --> 
<!--   ############ ########### ############ ############ ########### --> 
<!--   ############ ########### ############ ############ ########### --> 
<!-- 
        The class service description has been subclassed into
        "OfferedService" and "NeededService".  Service providers offer
        their services to the community, therefore they mark them as
        OfferedServices.  Service requesters need a service from the
        community, therefore they mark their services as
        NeededServices.  

	This description is neutral with respect to the registry
	mechanism used.  In case registries such as the Retsina
	Matchmaker or UDDI are used, then OfferedServices are
	advertised and NeededServices are requested.  On the opposite,
	in "Classified Ad" registries, in which providers request who
	needs their services, service requesters advertise their needs
	as NeededServices, while service provider look for requesters
	by using their OfferedServices.
  --> 
  <!-- 
	OfferedService is a subclass of the service profile and
	represents the class that is used to describe an offered
	service with other entities (such as middle agents).
  --> 

  <daml:Class rdf:ID="OfferedService">
    <daml:label>OfferedService</daml:label> 
    <daml:subClassOf rdf:resource="&service;#ServiceProfile"/>
  </daml:Class>

  <!-- 
	NeededService is a subclass of the service profile and
	represents the class that is used to describe a need of service.
  --> 

  <daml:Class rdf:ID="NeededService">
    <daml:label>NeededService</daml:label> 
    <daml:subClassOf rdf:resource="&service;#ServiceProfile"/>
  </daml:Class>

<!--  ############ ########### ############ ############ ########### --> 
<!--  ############ ########### ############ ############ ########### --> 
<!--  ############ ########### ############ ############ ########### --> 

  <!--
    Location provides semantic to the property
    GeographicRadius, which limits the scope or availability
    of a service to some area.  No additional semantics
    are provided at present; these could be provided through
	the use of subclass.   
    -->

  <daml:Class rdf:ID="Location">
    <daml:label>Location</daml:label> 
    <daml:subClassOf rdf:resource="&daml;#Thing" /> 
    <daml:comment>
	This class represents the scope or availability
	of a service to some area.
    </daml:comment>
  </daml:Class>

  
<!--  ############ ########### ############ ############ ########### --> 
<!--  ############                                       ########### --> 
<!--  ############       SERVICE PROFILE PROPERTIES      ########### --> 
<!--  ############                                       ########### --> 
<!--  ############ ########### ############ ############ ########### --> 

  <!--
  	The Service Name refers to the name of the service that is being
  	offered.
    -->
  <daml:DatatypeProperty rdf:ID="serviceName">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="&xsd;#string"/>
  </daml:DatatypeProperty>

  <!--
  	The TextDescription provides a brief description of the service.
  	It summarisese what the service offers, or to describe what
	service is requested.
    -->
  <daml:DatatypeProperty rdf:ID="textDescription">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="&xsd;#string"/>
  </daml:DatatypeProperty>

  <!--
  	has_process represents the process that is associated with the
  	parameters.
    -->

  <daml:UniqueProperty rdf:ID="has_process">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="&process;#Process"/>
  </daml:UniqueProperty>

  <!--
  	serviceType refers to a high level classification
  	of the service, for example B2B, B2C etc

	No range restrictions are placed on this property at present.
	Specific service descriptions will specialise this by
	restricting the range appropriately using subPropertyOf.
  -->

  <daml:Property rdf:ID="serviceType">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>

  <!--
	serviceCategory refers to an ontology of services that
	may be on offer.  High level services could include:
		* Products
		* Problem Solving Capabilities
		* Commercial Services
		* Information
		etc

	No range restrictions are placed on this property at present.
	Specific service descriptions will specialise this by
	restricting the range appropriately using subPropertyOf.
    -->

  <daml:Property rdf:ID="serviceCategory">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>

  <!-- 
	The IntendedPurpose provides information on what
	constitutes successful accomplishment of a service execution.

    -->

  <daml:Property rdf:ID="intendedPurpose">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>

  <!--
  	role links the service profile to an Actor.
  	The Actor is the entity that provides the service or makes
  	the request.  See the description of #Actor below.

  	Different roles can be supropertied from the property role
  	to portray specific roles.
    -->
  <daml:ObjectProperty rdf:ID="role">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="#Actor"/>
  </daml:ObjectProperty>

  <!--
  	requestedBy is similar to, but distinct from the property
  	role.  It links the service profile to an Actor who requests
  	the service.
    -->
  <daml:ObjectProperty rdf:ID="requestedBy">
    <daml:subPropertyOf rdf:resource="#role" />
    <daml:range rdf:resource="#ServiceRequester"/>
  </daml:ObjectProperty>

  <!--
  	providedBy is similar to, but distinct from the property
  	role.  It links the service profile to an Actor who provides
  	the service.
    -->
  <daml:ObjectProperty rdf:ID="providedBy">
    <daml:subPropertyOf rdf:resource="#role" />
    <daml:range rdf:resource="#ServiceProvider"/>
  </daml:ObjectProperty>


  <!-- 
	DomainResource(s) - not to be confused with RDF resources, or
	domain restrictions - are resources that are necessary for the
	task to be executed.
    -->

  <daml:Property rdf:ID="domainResource">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>
  
  <!--
  	geographicRadius refers to the geographic scope of the
  	service.  This may be at the global or national scale (e.g. for
  	ecommerce) or at a local scale (eg pizza delivery).
    -->
  <daml:ObjectProperty rdf:ID="geographicRadius">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="#Location"/>
  </daml:ObjectProperty>

  <!-- 
	degreeOfQuality properties provide qualifications about the service.

	No range restrictions are placed on them at present (as with those
	used by the process model).  Specific service descriptions will
	specialise this property by restricting the range appropriately
	using subPropertyOf.
    -->

  <daml:Property rdf:ID="degreeOfQuality">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>
  
  <!-- 
	serviceParameters - An expandable list of RDF properties that
	may accompany a profile description.

	The range of each property is unconstrained, i.e. no range restrictions
	are placed on the service parameters at present. Specific service
	parameters will specialise this property by restricting the range
	appropriately and using subPropertyOf.
    -->

  <daml:Property rdf:ID="serviceParameter">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>

  <!-- 
	Two service parameter examples are defined below; however
	this list can be expanded:

	<daml:Property rdf:ID="maxResponseTime">
	  <daml:subPropertyOf rdf:resource="serviceParameters" />
	  <daml:domain rdf:resource="&service;#ServiceProfile"/>
	  <daml:range rdf:resource="#duration"/>
	</daml:Property>
	
	<daml:Property rdf:ID="averageResponseTime">
	  <daml:subPropertyOf rdf:resource="serviceParameters" />
	  <daml:domain rdf:resource="&service;#ServiceProfile"/>
	  <daml:range rdf:resource="#duration"/>
	</daml:Property>

    -->

  <!-- 
	CommunicationThru is a property of a Service Profile.
	This property provides high level information on how
	a service may communicate, such as the ACL (eg FIPA,
	KQML, SOAP etc).  This summarises the descriptions
	provided by the Service Grounding and are used when
	matching services; it is not intended to replace the
	detail provided by the Service Grounding.

	No range restrictions are placed on this property at present.
	Specific service descriptions will specialise this by
	restricting the range appropriately using subPropertyOf.
    -->

  <daml:Property rdf:ID="communicationThru">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>

  <!--
	qualityGuarantee is a guarantee that the service promises to
	deliver, such as guaranteeing to provide the lowest possible
	interest rate, or a response within 3 minutes, etc.

	No range restrictions are placed on this property at present.
	Specific service descriptions will specialise this by
	restricting the range appropriately using subPropertyOf.
  -->

  <daml:Property rdf:ID="qualityGuarantee">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>

  <!--
	qualityRating property represents an expandable list of
	rating RDF properties that may accompany a service profile.
	These ratings refer to industry accepted ratings, such as the
	Dun and Bradstreet Rating for businesses, or the Star rating
	for Hotels.  For example:

	Dun and Bradstreet Rating
	  <daml:Property rdf:ID="DAndBRating">
	    <daml:subPropertyOf rdf:resource="#qualityRating" />
	  </daml:Property>

	Hotel Star Rating
	  <daml:Property rdf:ID="StarRating">
	    <daml:subPropertyOf rdf:resource="#qualityRating" />
	  </daml:Property>

  -->

  <daml:Property rdf:ID="qualityRating">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="&daml;#Thing"/>
  </daml:Property>

  
  
<!--  ############ ########### ############ ############ ########### --> 
<!--  #######                                                 ###### --> 
<!--  #######    SERVICE PROFILE FUNCTIONALITY DESCRIPTION    ###### --> 
<!--  #######                                                 ###### --> 
<!--  ############ ########### ############ ############ ########### --> 

<!-- 
  The specification of the functionalites of a service is based on the
  effects it produces in its environment.  Specifically, in order to
  process a service requires some preconditions to be satisfied, and as
  a result of the computation some effects emerge.  In addition, the
  service requires some inputs to compute on and produces some outputs
  as result of its computation.
  As an example, take a for-pay news service:  its precondition could be a
  valid credit card, its input could be the topic of the news requested,
  the output could be the news reported, and the effects is that the
  credit card is charged.
  Inputs, outputs, preconditions and effects play an essential role
  during service matching. The matching engine will have to make sure
  that the inputs, outputs, preconditions and effects expected by the
  requester match the inputs, outputs, preconditions and effects
  provided by the services selected.
  -->
 
  
<!--  ############ ########### ############ ############ ########### --> 
<!--  ############ ########### ############ ############ ########### --> 
<!--  ############ ########### ############ ############ ########### --> 

  <!-- Parameter description associates a name to the value of a parameter -->

  <daml:Class rdf:ID="ParameterDescription"/> 


  <!-- ParameterName is the name of the actual parameter, which could be just a literal,
       or perhaps the uri of the process parameter (a property)
    -->
  <daml:Property rdf:ID="parameterName">
    <daml:range rdf:resource="&daml;#Thing" /> 
  </daml:Property>


  <!-- restrictedTO points to the class that is the range of the parameter described -->

  <daml:ObjectProperty rdf:ID="restrictedTo">
    <daml:domain rdf:resource="#ParameterDescription"/>
    <daml:range  rdf:resource="&daml;#Class"/> 
  </daml:ObjectProperty>

  <!-- RefersTo points to the inputParameter in the Process Model -->

  <daml:ObjectProperty rdf:ID="refersTo">
    <daml:domain rdf:resource="#ParameterDescription"/>
    <daml:range  rdf:resource="&process;#parameter"/> 
  </daml:ObjectProperty>


  <!-- We might also need to specify the cardinality, but I haven't
       done that here. My tendency would be to make these (min, max,
       cardinality) additional properties of the ParemeterDescription,
       as oposed to making the restrictedTo point to a real
       Restriction, but I'm not adamant about it. - Mark Burstein -
    -->
 
  
<!--  ############ ########### ############ ############ ########### --> 


  <!--
    Profiles describe the services functional behavior through the use of
    parameters, which are subpropertied as inputs, outputs, preconditions
    and effects.
    -->
    
  <daml:ObjectProperty rdf:ID="parameter">
    <daml:domain rdf:resource="&service;#ServiceProfile"/>
    <daml:range rdf:resource="#ParameterDescription"/>
  </daml:ObjectProperty>

  <!--
	An input is a type of parameter and is a property of a profile. The
	top level ontology doesn't restrict them at all. An input can be
	any kind of daml object (Thing).  Specific processes will specialize
	this property by restricting the range appropriately; such as
	required inputs, derivable inputs, etc.
  -->

  <daml:ObjectProperty rdf:ID="input"> 
    <daml:subPropertyOf rdf:resource="#parameter" />
  </daml:ObjectProperty>

  <!-- 
	An output is a type of parameter and is a property of
	a profile. The top level ontology doesn't restrict them
	at all. An output can be any kind of daml object (Thing).
	Specific processes will specialize this property by
	restricting the range.
  -->

  <daml:ObjectProperty rdf:ID="output"> 
    <daml:subPropertyOf rdf:resource="#parameter" />
  </daml:ObjectProperty>

  <!--
	Precondition is a property of Profile. The top level ontology
	doesn't restrict them at all. A precondition can be any kind of daml
	object (Thing).  Specific processes will specialize this property by
	restricting the range appropriately using subPropertyOf; such as
	knowledge Preconditions (agent knows credit card number) or world
	Precondition (baud rate > 56Kb) 
  -->

  <daml:ObjectProperty rdf:ID="precondition">  
    <daml:subPropertyOf rdf:resource="#parameter" />
  </daml:ObjectProperty>

  <!--
	Effect is a property of a profile. The top level ontology
	doesn't restrict them at all. An effect can be any kind of daml
	object (Thing).  Specific processes will specialize this property by
	restricting the range appropriately.

	NOTE: A conditional effect can be specified by specifying the range of
	the Effect to be an IF-THEN-ELSE object
   -->

  <daml:ObjectProperty rdf:ID="effect"> 
    <daml:subPropertyOf rdf:resource="#parameter" />
  </daml:ObjectProperty>

</rdf:RDF>

