<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
     <!ENTITY rdf  "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
     <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
     <!ENTITY xsd  "http://www.w3.org/2001/XMLSchema#" >
     <!ENTITY owl  "http://www.w3.org/2002/07/owl#" >
     <!ENTITY search   "http://inference-web.org/2007/10/service/search.owl#" >
     <!ENTITY archive   "http://inference-web.org/2007/10/service/archive.owl#" >
   ]>


<rdf:RDF
  xml:base      = "&search;"
  xmlns:search = "&search;"
  xmlns:archive = "&archive;"
  xmlns:rdf  = "&rdf;"
  xmlns:rdfs  = "&rdfs;"
  xmlns:owl  = "&owl;"
>

<owl:Ontology rdf:about="">
  <rdfs:label xml:lang="en-US">Search Service Ontology</rdfs:label>
  <rdfs:comment xml:lang="en-US">This ontology defines some common terms for representing information tranferred between a client and a search engine. This ontology is create by Li Ding (http://www.cs.rpi.edu/~dingl/).
  </rdfs:comment>    
  <owl:versionInfo xml:lang="en-US">
  revised $Date: 9:15 AM 10/23/2007$    
  </owl:versionInfo>
</owl:Ontology>


<!-- *********************************************************************** -->
<!-- search service: extend your own services if your search engine support multiple search services -->
<!-- *********************************************************************** -->
<owl:Class rdf:ID="SearchService">
    <rdfs:label>Search Service</rdfs:label> 
    <rdfs:comment>One of the search service provided by a search engine. Search engine will choose different search-index and search-result-form for each type of search service. Usage: define an instance of SearchService for each type of search service.</rdfs:comment>     
</owl:Class>


<!-- *********************************************************************** -->
<!-- search request -->
<!-- *********************************************************************** -->
<owl:Class rdf:ID="SearchRequest">
    <rdfs:label>Search Request</rdfs:label> 
    <rdfs:comment>The data passed to a search engine as a request.</rdfs:comment>     
</owl:Class>

<owl:ObjectProperty rdf:ID="usesSearchService">
    <rdfs:label>search service</rdfs:label> 
    <rdfs:comment>which search service to be used. A search engine may host multiple search services.</rdfs:comment>
    <rdfs:domain rdf:resource="#SearchRequest"/>
    <rdfs:range rdf:resource="#SearchService" />    
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="usesSearchResultSyntax">
    <rdfs:label>result syntax</rdfs:label> 
    <rdfs:comment>which syntax to return search result.</rdfs:comment>
    <rdfs:domain rdf:resource="#SearchRequest"/>
    <rdfs:range rdf:parseType="Resource">
	<owl:oneOf rdf:parseType="Collection">
	    <rdf:Description rdf:about="&archive;RDFXML" />
	    <rdf:Description rdf:about="&archive;N3" />
	    <rdf:Description rdf:about="&archive;NT" />
	    <rdf:Description rdf:about="&archive;HTML" />
	</owl:oneOf>
    </rdfs:range>	    
</owl:ObjectProperty>

<owl:DatatypeProperty rdf:ID="hasSearchString">
    <rdfs:label>search string</rdfs:label> 
    <rdfs:comment>The search string. Allowed query syntax is described in http://lucene.apache.org/java/docs/queryparsersyntax.html</rdfs:comment>
    <rdfs:domain rdf:resource="#SearchRequest"/>
    <rdfs:range rdf:resource="&xsd;string" />    
</owl:DatatypeProperty>

<owl:DatatypeProperty rdf:ID="hasSearchStart">
    <rdfs:label>start</rdfs:label> 
    <rdfs:comment>The starting index of search results to be returned(starting at 1) </rdfs:comment>
    <rdfs:domain rdf:resource="#SearchRequest"/>
    <rdfs:range rdf:resource="&xsd;positiveInteger" />    
</owl:DatatypeProperty>

<owl:DatatypeProperty rdf:ID="hasSearchLimit">
    <rdfs:label>limit</rdfs:label> 
    <rdfs:comment>The total number search results to be returned (between 0 and total results) </rdfs:comment>
    <rdfs:domain rdf:resource="#SearchRequest"/>
    <rdfs:range rdf:resource="&xsd;nonNegativeInteger" />    
</owl:DatatypeProperty>

<owl:DatatypeProperty rdf:ID="hasSearchSortField">
    <rdfs:label>sort field</rdfs:label> 
    <rdfs:comment>The field to be used to sort search results.</rdfs:comment>
    <rdfs:domain rdf:resource="#SearchRequest"/>
    <rdfs:range rdf:resource="&xsd;string" />    
</owl:DatatypeProperty>

<owl:DatatypeProperty rdf:ID="hasSearchSortReverse">
    <rdfs:label>reverse sort </rdfs:label> 
    <rdfs:comment>Whether reverse the order of search results.</rdfs:comment>
    <rdfs:domain rdf:resource="#SearchRequest"/>
    <rdfs:range rdf:resource="&xsd;boolean" />    
</owl:DatatypeProperty>


<!-- *********************************************************************** -->
<!-- search response -->
<!-- *********************************************************************** -->
<owl:Class rdf:ID="SearchResponse">
    <rdfs:label>Search Response</rdfs:label> 
    <rdfs:comment>The data generated by a search engine for encoding search result.</rdfs:comment>     
</owl:Class>

<owl:ObjectProperty rdf:ID="hasSearchRequest">
    <rdfs:label>Search Request</rdfs:label> 
    <rdfs:comment>The search request that lead to this search response.</rdfs:comment>     
    <rdfs:domain rdf:resource="#SearchResponse"/>
    <rdfs:range rdf:resource="#SearchRequest"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="hasSearchResults">
    <rdfs:label>Search Results</rdfs:label> 
    <rdfs:comment>Search results are listed as an instance of rdfs:Seq.</rdfs:comment>     
    <rdfs:domain rdf:resource="#SearchResponse"/>
    <rdfs:range rdf:resource="&rdf;Seq"/>
</owl:ObjectProperty>

<owl:DatatypeProperty rdf:ID="isSearchSucceed">
    <rdfs:label>succeed</rdfs:label> 
    <rdfs:comment>the status of search process. False will be return when search cannot be executed or search fails.</rdfs:comment>
    <rdfs:domain rdf:resource="#SearchResponse"/>
    <rdfs:range rdf:resource="&xsd;boolean"/>
</owl:DatatypeProperty>

<owl:DatatypeProperty rdf:ID="hasSearchErrorMessage">
    <rdfs:label>error message</rdfs:label> 
    <rdfs:comment>the error message explaining why search failed.</rdfs:comment>
    <rdfs:domain rdf:resource="#SearchResponse"/>
    <rdfs:range rdf:resource="&xsd;string" />    
</owl:DatatypeProperty>

<owl:DatatypeProperty rdf:ID="hasSearchTotalResults">
    <rdfs:label>total results</rdfs:label> 
    <rdfs:comment>how many results has been found.</rdfs:comment>
    <rdfs:domain rdf:resource="#SearchResponse"/>
    <rdfs:range rdf:resource="&xsd;nonNegativeInteger" />    
</owl:DatatypeProperty>

<owl:DatatypeProperty rdf:ID="hasSearchReturnedResults">
    <rdfs:label>returned results</rdfs:label> 
    <rdfs:comment>how many results has been returned in this response.</rdfs:comment>
    <rdfs:domain rdf:resource="#SearchResponse"/>
    <rdfs:range rdf:resource="&xsd;nonNegativeInteger" />    
</owl:DatatypeProperty>

<owl:DatatypeProperty rdf:ID="hasSearchProcessSeconds">
    <rdfs:label>process time (seconds)</rdfs:label> 
    <rdfs:comment>how many seconds were used to process this query.</rdfs:comment>
    <rdfs:domain rdf:resource="#SearchResponse"/>
    <rdfs:range rdf:resource="&xsd;float" />    
</owl:DatatypeProperty>


</rdf:RDF>
