<?xml version='1.0' encoding='ISO-8859-1'?>
<!--
  This document uses entities as abbreviations for URIs.
  For a version with entities references expanded, load the source into 
  Internet Explorer.
  -->

<!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 xsd "http://www.w3.org/2001/XMLSchema">
  <!ENTITY service "http://www.daml.org/services/daml-s/0.9/Service.daml">
  <!ENTITY process "http://www.daml.org/services/daml-s/0.9/Process.daml">
  <!ENTITY DEFAULT "http://www.daml.org/services/daml-s/0.9/Grounding.daml">
]>


<rdf:RDF
  xmlns:rdf=	"&rdf;#"
  xmlns:rdfs=	"&rdfs;#"
  xmlns:daml=	"&daml;#"
  xmlns:xsd=	 "&xsd;#"
  xmlns:service= "&service;#"
  xmlns:process= "&process;#"
  xmlns=	"&DEFAULT;#">

<daml:Ontology rdf:about="">
  <daml:versionInfo>
    $Id: Grounding.daml,v 1.22 2003/09/19 05:00:18 martin Exp $
  </daml:versionInfo>
  <rdfs:comment>
    Upper-level DAML ontology for Groundings that employ WSDL.
    Part of the DAML-S ontology; see http://www.daml.org/services/.

    Note that other approaches to grounding may be accommodated
    within the DAML-S framework.  This is the only approach produced
    to date by the DAML-S Coalition.

    This version does not cover all possible cases of mapping
    DAML-S atomic processes onto WSDL services.  For information
    about the limits of this version, please see documentation
    available on the WebSite mentioned above.

    For notes on version history, see 
        http://www.daml.org/services/daml-s/0.9/status.html.    
  </rdfs:comment>
  <daml:imports rdf:resource="http://www.daml.org/2001/03/daml+oil"/>
  <daml:imports rdf:resource="http://www.daml.org/services/daml-s/0.9/Process.daml"/>
</daml:Ontology>


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

<daml:Class rdf:ID="WsdlGrounding">
  <rdfs:comment>
    A WsdlGrounding is just a collection of WsdlAtomicProcessGrounding
    instances, one for each atomic process in the process model.
  </rdfs:comment>
  <rdfs:subClassOf rdf:resource="&service;#ServiceGrounding"/>
</daml:Class>

<daml:Property rdf:ID="hasAtomicProcessGrounding">
  <rdfs:domain rdf:resource="#WsdlGrounding"/>
  <rdfs:range rdf:resource="#WsdlAtomicProcessGrounding"/>
</daml:Property>



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

<daml:Class rdf:ID="WsdlAtomicProcessGrounding">
  <rdfs:comment>
    A class that relates elements of a DAML-S atomic process to a
    WSDL specification.
  </rdfs:comment>
  <rdfs:comment>
    A WsdlAtomicProcessGrounding must have a single instance of damlsProcess.
  </rdfs:comment>
  <rdfs:subClassOf>
    <daml:Restriction daml:cardinality="1">
      <daml:onProperty rdf:resource="#damlsProcess"/>
    </daml:Restriction>
  </rdfs:subClassOf>
</daml:Class>

<!-- damlsProcess -->

<daml:UniqueProperty rdf:ID="damlsProcess">
  <rdfs:comment>
    The atomic process to which this grounding applies.
  </rdfs:comment>
  <rdfs:domain rdf:resource="#WsdlAtomicProcessGrounding"/>
  <rdfs:range rdf:resource="&process;#AtomicProcessPowerSet"/>
</daml:UniqueProperty>

<!-- wsdlOperation -->
  
<daml:ObjectProperty rdf:ID="wsdlOperation">
  <rdfs:comment>
    A WSDL operation to which the atomic process
    (referenced by damlsProcess) corresponds.
  </rdfs:comment>
  <rdfs:domain rdf:resource="#WsdlAtomicProcessGrounding"/>
  <rdfs:range rdf:resource="#WsdlOperationRef"/>
</daml:ObjectProperty>

<!-- wsdlInputMessage -->

<daml:DatatypeProperty rdf:ID="wsdlInputMessage">
  <rdfs:comment>
    A URI for the WSDL input message element corresponding
    to the inputs of the atomic process.
  </rdfs:comment>
  <rdf:type rdf:resource="&daml;#UniqueProperty"/>
  <rdfs:domain rdf:resource="#WsdlAtomicProcessGrounding"/>
  <rdfs:range rdf:resource="&xsd;#anyURI"/>
</daml:DatatypeProperty>

<!-- wsdlInputs -->

<daml:UniqueProperty rdf:ID="wsdlInputs">
  <rdfs:comment>
    A list of WsdlMessageMap instances, one for each
    message part of the WSDL input message.
  </rdfs:comment>
  <rdfs:domain rdf:resource="#WsdlAtomicProcessGrounding"/>
  <rdfs:range rdf:resource="#WsdlInputMessageMapList"/>
</daml:UniqueProperty>

<daml:UniqueProperty rdf:ID="wsdlInputMessageParts">
  <rdfs:comment>
    Deprecated as of DAML-S 0.9; wsdlInputs should now be used.
  </rdfs:comment>
  <daml:samePropertyAs rdf:resource="#wsdlInputs"/>
</daml:UniqueProperty>

<!-- wsdlOutputMessage -->

<daml:DatatypeProperty rdf:ID="wsdlOutputMessage">
  <rdfs:comment>
    A URI for the WSDL message element corresponding
    to the outputs of the atomic process.
  </rdfs:comment>
  <rdf:type rdf:resource="&daml;#UniqueProperty"/>
  <rdfs:domain rdf:resource="#WsdlAtomicProcessGrounding"/>
  <rdfs:range rdf:resource="&xsd;#anyURI"/>
</daml:DatatypeProperty>

<!-- wsdlOutputs -->

<daml:UniqueProperty rdf:ID="wsdlOutputs">
  <rdfs:comment>
    A list of WsdlMessageMap instances, one for each
    output of the atomic process.
  </rdfs:comment>
  <rdfs:domain rdf:resource="#WsdlAtomicProcessGrounding"/>
  <rdfs:range rdf:resource="#WsdlOutputMessageMapList"/>
</daml:UniqueProperty>

<daml:UniqueProperty rdf:ID="wsdlOutputMessageParts">
  <rdfs:comment>
    Deprecated as of DAML-S 0.9; wsdlOutputs should now be used.
  </rdfs:comment>
  <daml:samePropertyAs rdf:resource="#wsdlOutputs"/>
</daml:UniqueProperty>

<!-- wsdlVersion -->

<daml:DatatypeProperty rdf:ID="wsdlVersion">
  <rdfs:comment>
    A URI indicating the version of WSDL being used.
  </rdfs:comment>
  <rdf:type rdf:resource="&daml;#UniqueProperty"/>
  <rdfs:domain rdf:resource="#WsdlAtomicProcessGrounding"/>
  <rdfs:range rdf:resource="&xsd;#anyURI"/>
</daml:DatatypeProperty>

<daml:DatatypeProperty rdf:ID="wsdlReference">
  <rdfs:comment>
    Deprecated as of DAML-S 0.9; wsdlVersion should now be used.
  </rdfs:comment>
  <daml:samePropertyAs rdf:resource="#wsdlVersion"/>
</daml:DatatypeProperty>

<!-- otherReference -->

<daml:DatatypeProperty rdf:ID="otherReference">
  <rdfs:comment>
    A URI indicating a relevant standards document (other than that
    for WSDL).
    Deprecated as of DAML-S 0.9; no longer recommended or supported.
  </rdfs:comment>
  <rdfs:domain rdf:resource="#WsdlAtomicProcessGrounding"/>
  <rdfs:range rdf:resource="&xsd;#anyURI"/>
</daml:DatatypeProperty>

<!-- wsdlDocument -->

<daml:DatatypeProperty rdf:ID="wsdlDocument">
  <rdfs:comment>
    A URI indicating a WSDL document to
    which this grounding refers.  This isn't
    essential; primarily for convenience as documentation.
  </rdfs:comment>
  <rdfs:domain rdf:resource="#WsdlAtomicProcessGrounding"/>
  <rdfs:range rdf:resource="&xsd;#anyURI"/>
</daml:DatatypeProperty>


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

<daml:Class rdf:ID="WsdlOperationRef">
 <rdfs:comment>
    This class provides a unique specification of a WSDL operation.
    WSDL 1.1, on which this version of the grounding is based, does 
    not have a way to uniquely identify an operation with a single URI.  
    Uniqueness is achieved using a pair (portType, operation).
  </rdfs:comment>
</daml:Class>

<daml:DatatypeProperty rdf:ID="portType">
  <rdfs:domain rdf:resource="#WsdlOperationRef" />
  <rdfs:range rdf:resource="&xsd;#anyURI" />
</daml:DatatypeProperty>

<daml:DatatypeProperty rdf:ID="operation">
  <rdfs:domain rdf:resource="#WsdlOperationRef"/>
  <rdfs:range rdf:resource="&xsd;#anyURI"/>
</daml:DatatypeProperty>

<!-- restrictions to guarantee uniqueness of references to operations -->

<daml:Class rdf:about="#WsdlOperationRef">
  <rdfs:comment>
    Restricting the cardinality of portType to one
  </rdfs:comment>
  <rdfs:subClassOf>
    <daml:Restriction daml:cardinality="1">
      <daml:onProperty rdf:resource="#portType"/>
    </daml:Restriction>
  </rdfs:subClassOf>
</daml:Class>

<daml:Class rdf:about="#WsdlOperationRef">
  <rdfs:comment>
    Restricting the cardinality of operation to one
  </rdfs:comment>
  <rdfs:subClassOf>
    <daml:Restriction daml:cardinality="1">
      <daml:onProperty rdf:resource="#operation"/>
    </daml:Restriction>
  </rdfs:subClassOf>
</daml:Class>


<!--######################################################
    WsdlMessageMap, WsdlInputMessageMap, WsdlOutputMessageMap
  ######################################################-->

<daml:Class rdf:ID="WsdlMessageMap">
  <rdfs:comment>
    Superclass for WsdlInputMessageMap and WsdlOutputMessageMap.
  </rdfs:comment>
</daml:Class>

<!-- damlsParameter -->

<daml:ObjectProperty rdf:ID="damlsParameter">
  <rdfs:comment>
    An input or output property of an atomic process.
  </rdfs:comment>
  <rdfs:domain rdf:resource="#WsdlMessageMap"/>
  <rdfs:range rdf:resource="&process;#ParameterPowerSet"/>
</daml:ObjectProperty>

<!-- wsdlMessagePart -->

<daml:DatatypeProperty rdf:ID="wsdlMessagePart">
  <rdfs:comment>
    A URI for a WSDL message part element.
  </rdfs:comment>
  <rdfs:domain rdf:resource="#WsdlMessageMap"/>
  <rdfs:range rdf:resource="&xsd;#anyURI"/>
</daml:DatatypeProperty>


<daml:Property rdf:ID="xsltTransformation">
  <rdfs:comment>
    XSLT Tranformation to transform DAML-S parameters (inputs and outputs) 
    to and from WSDL messages.  This property exists mainly for declaring
    a cardinality restriction, and should not be instantiated
    directly.  Instantiate xsltTransformationString or xsltTransformationURI.
    (Ranges are specified with the sub properties.)
  </rdfs:comment>
  <rdfs:domain rdf:resource="#WsdlMessageMap"/>
</daml:Property>

<daml:DatatypeProperty rdf:ID="xsltTransformationString">
  <rdfs:subPropertyOf rdf:resource="#xsltTransformation"/>
  <rdfs:comment>
    A string giving an XSLT Tranformation.
  </rdfs:comment>
  <rdfs:range rdf:resource="&xsd;#string"/>
</daml:DatatypeProperty>

<daml:DatatypeProperty rdf:ID="xsltTransformationURI">
  <rdfs:subPropertyOf rdf:resource="#xsltTransformation"/>
  <rdfs:comment>
    A URI for an XSLT Tranformation.
  </rdfs:comment>
  <rdfs:range rdf:resource="&xsd;#anyURI"/>
</daml:DatatypeProperty>

<daml:Class rdf:ID="WsdlInputMessageMap">
  <rdfs:subClassOf rdf:resource="#WsdlMessageMap"/>
  <rdfs:comment>
    A class that shows how to derive a WSDL message part from 
    (one or more) inputs of an atomic process.
    A WsdlInputMessageMap must have 1 wsdlMessagePart, and 
    EITHER 1 damlsParameter or 1 xsltTransformation.  (The
    cardinality restrictions don't capture the disjunction.)
    If there is a direct correspondence between a particular
    DAML-S input and the wsdlMessagePart, use damlsParameter
    to show that.  Otherwise, use xsltTransformation to give
    a transformation from the DAML-S input(s) to the
    wsdlMessagePart.
  </rdfs:comment>
  <rdfs:subClassOf>
    <daml:Restriction daml:cardinality="1">
      <daml:onProperty rdf:resource="#wsdlMessagePart"/>
    </daml:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
    <daml:Restriction daml:maxCardinality="1">
      <daml:onProperty rdf:resource="#damlsParameter"/>
    </daml:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
    <daml:Restriction daml:maxCardinality="1">
      <daml:onProperty rdf:resource="#xsltTransformation"/>
    </daml:Restriction>
  </rdfs:subClassOf>
</daml:Class>

<daml:Class rdf:ID="WsdlInputMessageMapList">
<rdfs:comment> A list of WsdlInputMessageMap instances </rdfs:comment>
  <rdfs:subClassOf rdf:resource="&daml;#List"/>
  <rdfs:subClassOf>
   <daml:Restriction>
     <daml:onProperty rdf:resource="&daml;#first"/>
     <daml:toClass rdf:resource="#WsdlInputMessageMap"/>
   </daml:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
   <daml:Restriction>
     <daml:onProperty rdf:resource="&daml;#rest"/>
     <daml:toClass rdf:resource="#WsdlInputMessageMapList"/>
   </daml:Restriction>
  </rdfs:subClassOf>
</daml:Class>

<daml:Class rdf:ID="WsdlOutputMessageMap">
  <rdfs:subClassOf rdf:resource="#WsdlMessageMap"/>
  <rdfs:comment>
    A class that shows how to derive an atomic process output from 
    the input message parts of a WSDL operation.
    A WsdlOutputMessageMap must have 1 damlsParameter, and 
    EITHER 1 wsdlMessagePart or 1 xsltTransformation.  (The
    cardinality restrictions don't capture the disjunction.)
    If there is a direct correspondence between a particular
    WSDL message part and the DAML-S output, use wsdlMessagePart
    to show that.  Otherwise, use xsltTransformation to give
    a transformation from the message parts to the DAML-S output.
  </rdfs:comment>
  <rdfs:subClassOf>
    <daml:Restriction daml:cardinality="1">
      <daml:onProperty rdf:resource="#damlsParameter"/>
    </daml:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
    <daml:Restriction daml:maxCardinality="1">
      <daml:onProperty rdf:resource="#wsdlMessagePart"/>
    </daml:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
    <daml:Restriction daml:maxCardinality="1">
      <daml:onProperty rdf:resource="#xsltTransformation"/>
    </daml:Restriction>
  </rdfs:subClassOf>
</daml:Class>

<daml:Class rdf:ID="WsdlOutputMessageMapList">
<rdfs:comment> A list of WsdlOutputMessageMap instances </rdfs:comment>
  <rdfs:subClassOf rdf:resource="&daml;#List"/>
  <rdfs:subClassOf>
   <daml:Restriction>
     <daml:onProperty rdf:resource="&daml;#first"/>
     <daml:toClass rdf:resource="#WsdlOutputMessageMap"/>
   </daml:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
   <daml:Restriction>
     <daml:onProperty rdf:resource="&daml;#rest"/>
     <daml:toClass rdf:resource="#WsdlOutputMessageMapList"/>
   </daml:Restriction>
  </rdfs:subClassOf>
</daml:Class>

</rdf:RDF>


