<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE uridef[
  <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns">
  <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema">
  <!ENTITY daml "http://www.daml.org/2001/03/daml+oil">
  <!ENTITY service "http://www.daml.org/services/daml-s/2001/05/Service">
  <!ENTITY process "http://www.daml.org/services/daml-s/2001/05/Process">
  <!ENTITY DEFAULT "http://www.daml.org/services/daml-s/2001/05/Profile">
]>

<!--
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:rdfs=	"&rdfs;#"
  xmlns:daml=	"&daml;#"
  xmlns:service= "&service;#"
  xmlns:process= "&process;#"
  xmlns=	"&DEFAULT;#">

  <daml:Ontology about="">
    <daml:versionInfo>
      $Id: Profile.daml,v 1.1 2001/06/26 01:36:42 martin Exp $
    </daml:versionInfo> 
    <rdfs:comment>
      Process and Service Coalition
      First cut at DAML ontology for Advertisements (i.e. Profiles) based
      upon the Service Model.  Created by Terry Payne (terryp@cs.cmu.edu).

    </rdfs:comment> 
    <daml:imports rdf:resource="&rdf;" /> 
    <daml:imports rdf:resource="&rdfs;" /> 
    <daml:imports rdf:resource="&daml;" /> 
    <daml:imports rdf:resource="&service;" />
  </daml:Ontology>

  
<!--  ############ ########### ############ ############ ########### --> 
  
  <!--
  	The Service Name refers to the name of the service that is being
  	offered.
    -->
  <rdf:Property rdf:ID="serviceName">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Literal"/>
  </rdf:Property>

  <!-- 
	The IntendedPurpose is an RDF property.  It provides
	information on what constitutes successful accomplishment
	of a service execution.

    -->

  <rdf:Property rdf:ID="intendedPurpose">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>

  <!--
  	The TextDescription provides a brief description of the service.
  	This would typically appear within an advertisement to summarise
  	what the service offers, or within a request to describe what
  	is being requested.
    -->
  <rdf:Property rdf:ID="textDescription">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Literal"/>
  </rdf:Property>

  <!--
  	This property 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.
    -->
  <rdf:Property rdf:ID="role">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="#Actor"/>
  </rdf:Property>

  <!--
  	This property is similar to, but distinct from the property
  	role.  It links the service profile to an Actor who requests
  	the service.
    -->
  <rdf:Property rdf:ID="requestedBy">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="#ServiceRequester"/>
  </rdf:Property>

  <!--
  	This property is similar to, but distinct from the property
  	role.  It links the service profile to an Actor who provides
  	the service.
    -->
  <rdf:Property rdf:ID="providedBy">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="#ServiceProvider"/>
  </rdf:Property>

  <!-- 
	DomainResource(s) - not to be confused with RDF resources, or
	domain restrictions - are resources that are necessary for the
	task to be executed.

	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.
    -->

  <rdf:Property rdf:ID="domainResource">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>
  
  <!-- 
	An input represents the relevant and necessary inputs
	used by a service.  When the service profile is modeled
	as a request (i.e. generated by the service requester) then
	these profile inputs should include a superset of the process
	inputs that may be required by a service provider.

	Note that these inputs are separate definitions to those
	in the process model.
    -->

  <rdf:Property rdf:ID="input">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:subPropertyOf rdf:resource="&process;#parameter"/>
  </rdf:Property>
  
  <!-- 
	An output represents the relevant and necessary outputs
	generated by a service.  When the service profile is modeled
	as a request (i.e. generated by the service requester) then
	these profile outputs should include a subset of process
	outputs that may be generated by a service provider.

	Note that these outputs are separate definitions to those
	in the process model.
    -->

  <rdf:Property rdf:ID="output">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:subPropertyOf rdf:resource="&process;#parameter"/>
  </rdf:Property>
  
  <rdf:Property rdf:ID="conditionalOutput">
    <rdfs:subPropertyOf rdf:resource="#output" />
  </rdf:Property>
  
  <!-- 
	A precondition is an RDF properties of the Service Profile.

	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.
    -->

  <rdf:Property rdf:ID="precondition">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>
  
  <!-- 
	An accessCondition are is a property of the Service Profile.
	These are conditions or restrictions that have to be satisfied
	prior to engaging 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.
    -->

  <rdf:Property rdf:ID="accesscondition">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>
  
  <!-- 
	An effect is an event that is caused by the successful execution
	of a 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.

    -->

  <rdf:Property rdf:ID="effect">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>
  
  <rdf:Property rdf:ID="conditionalEffect">
    <rdfs:subPropertyOf rdf:resource="#effect" />
  </rdf:Property>
  
  <!--
  	The Geographic Radius 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).
    -->
  <rdf:Property rdf:ID="geographicRadius">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="#Location"/>
  </rdf:Property>

  <!-- 
	DegreeOfQuality properties of Service Profiles 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.
    -->

  <rdf:Property rdf:ID="degreeOfQuality">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>

  <!-- The following two properties are examples of this RDF property,
       and could be defined within some additional ontology.

	<rdf:Property rdf:ID="Cheapest">
	  <rdfs:subPropertyOf rdf:resource="#degreeOfQuality" />
	</rdf:Property>

	<rdf:Property rdf:ID="Fastest">
	  <rdfs:subPropertyOf rdf:resource="#degreeOfQuality" />
	</rdf:Property>

    -->
  
  <!-- 
	Service Parameters
    	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.
  
	Two service parameters are defined below; however this list
	can be expanded:

	<rdf:Property rdf:ID="maxResponseTime">
	  <rdfs:subPropertyOf rdf:resource="serviceParameters" />
	  <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
	  <rdfs:range rdf:resource="&daml;#Thing"/>
	</rdf:Property>

	<rdf:Property rdf:ID="averageResponseTime">
	  <rdfs:subPropertyOf rdf:resource="serviceParameters" />
	  <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
	  <rdfs:range rdf:resource="&daml;#Thing"/>
	</rdf:Property>

    -->

  <rdf:Property rdf:ID="serviceParameter">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf: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.
    -->

  <rdf:Property rdf:ID="communicationThru">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>

  <rdf:Property rdf:ID="communicationThrough">
    <daml:samePropertyAs rdf:resource="#CommunicationThru" />
  </rdf:Property>

  <!--
  	The Service Type 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.
  -->

  <rdf:Property rdf:ID="serviceType">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>

  <!--
	The Service Category 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.
    -->

  <rdf:Property rdf:ID="serviceCategory">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>

  <!--
	QualityGuarentees are guarentees that the service promises to
	deliver, such as guarenteeing 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.
  -->

  <rdf:Property rdf:ID="qualityGuarentees">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>

  <!--
	The quality rating 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
	  <rdf:Property rdf:ID="DAndBRating">
	    <rdfs:subPropertyOf rdf:resource="#qualityRating" />
	  </rdf:Property>

	Hotel Star Rating
	  <rdf:Property rdf:ID="StarRating">
	    <rdfs:subPropertyOf rdf:resource="#qualityRating" />
	  </rdf:Property>

  -->

  <rdf:Property rdf:ID="qualityRating">
    <rdfs:domain rdf:resource="&service;#ServiceProfile"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>

<!--  ############ ########### ############ ############ ########### --> 

  <!--
	The class service description has been subclassed into
	"advertisement" and "request" corresponding to whether
	a description is being registered with a middle agent,
	or if a description is being used to search for an
	advertisement.
  -->

  <!-- 
	Advertisement
	This class is a subclass of the service profile and
	represents the class that is used to advertise the
	service with other entities (such as middle agents).
    -->

  <rdfs:Class rdf:ID="Advertisement">
    <rdfs:label>Advertisement</rdfs:label> 
    <rdfs:subClassOf rdf:resource="&service;#ServiceProfile" /> 
  </rdfs:Class>

  <!-- 
	Request
	This class is a subclass of the service profile and
	represents the class that is used to describe service
	requests.
    -->

  <rdfs:Class rdf:ID="Request">
    <rdfs:label>Request</rdfs:label> 
    <rdfs:subClassOf rdf:resource="&service;#ServiceProfile" /> 
  </rdfs:Class>


<!--  ############ ########### ############ ############ ########### --> 

  <!--
	The class location provides some 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.                                                                 
  -->

  <rdfs:Class rdf:ID="Location">
    <rdfs:label>Location</rdfs:label> 
    <rdfs:subClassOf rdf:resource="&daml;#Thing" /> 
    <rdfs:comment>
	This class represents the scope or availability
	of a service to some area.
    </rdfs:comment>
  </rdfs:Class>

<!--  ############ ########### ############ ############ ########### --> 
  <!--
	The class vendor contains some details about a commercial
	organisation or individual that either offers a service
	or that might request a service.
  -->

  <rdfs:Class rdf:ID="Actor">
    <rdfs:label>Actor</rdfs:label> 
    <rdfs:subClassOf rdf:resource="&daml;#Thing" /> 
    <rdfs:comment>
      This class represents a Requester or Provider
      who might request or offer a service.
    </rdfs:comment>
  </rdfs:Class>

  <rdfs:Class rdf:ID="ServiceRequester">
    <rdfs:label>ServiceRequester</rdfs:label> 
    <rdfs:subClassOf rdf:resource="#Actor" /> 
    <rdfs:comment>
      This class represents a Service Requester, and provides
      general contract details such as address, fax etc.
    </rdfs:comment>
  </rdfs:Class>

  <rdfs:Class rdf:ID="ServiceProvider">
    <rdfs:label>ServiceProvider</rdfs:label> 
    <rdfs:subClassOf rdf:resource="#Actor" /> 
    <rdfs:comment>
      This class represents a Service Provider, and provides
      general contract details such as address, fax etc.
    </rdfs:comment>
  </rdfs:Class>

  <!-- Name, type of company etc of Service Provider -->
  <rdf:Property rdf:ID="name">
    <rdfs:domain rdf:resource="#Actor"/>
    <rdfs:range rdf:resource="&daml;#Literal"/>
  </rdf:Property>

  <rdf:Property rdf:ID="phone">
    <rdfs:domain rdf:resource="#Actor"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>

  <rdf:Property rdf:ID="fax">
    <rdfs:domain rdf:resource="#Actor"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>

  <rdf:Property rdf:ID="email">
    <rdfs:domain rdf:resource="#Actor"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>

  <rdf:Property rdf:ID="physicalAddress">
    <rdfs:domain rdf:resource="#Actor"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>

  <!-- A URL to the companies web site -->
  <rdf:Property rdf:ID="webURL">
    <rdfs:domain rdf:resource="#Actor"/>
    <rdfs:range rdf:resource="&daml;#Thing"/>
  </rdf:Property>

</rdf:RDF>
