a version for recommended change to GetResource,GetIdentity

Ray Plante rplante at ncsa.uiuc.edu
Mon Jun 19 08:59:58 PDT 2006


Hi Kevin and Aurelien,

(I know I've been sending you stuff fast and furious, so I'll understand 
if you need some time to digest some of this stuff.  Sorry!)

As you know, I've suggested we change the WSDL descriptions of GetResource 
and GetIdentity to use a different output format than 
Search/KeywordSearch to only allow one Resource record to be returned.  
Also, as I've alluded to previously, a number of recent incremental 
changes have introduce a number of inconsistances and a somewhat 
hodgepodge organization of the spec document.  So along with my 
recommended change to the WSDL, I wanted to take the opportunity to 
reorganize the spec around the new WSDL.  

Here's a summary of what I did to the RegistrySearch interface WSDL:
  o  GetResource and GetIdentity share a common output format called 
       ResolveResponse that allows exactly one Resource element.  

  o  I got rid of the separate RegistryInterface.xsd file; since this 
       schema is used only by RegistrySearch, it seems just as easy to 
       include it directly in the <types> section of the WSDL.

  o  I defined an extra NotFound fault for GetResource to handle the case 
       when the input identifier cannot be resolved to a record.  

  o  I added in XQuerySearch to be part of the WSDL, regardless of whether 
       the registry supports it.  

  o  I added the OperationUnsupported fault to XQuerySearch that 
       non-supporting registries should throw.  

  o  in the <binding> section, I matched the soapAction and namespace URIs 
       to the target namespace of the WSDL itself.  

Given these changes, I've reorganized section 2 around the theme that we 
have two kinds of operations in the searching interface:  "search" 
operations that return VOResources and "resolve" operations that return a 
single Resource; the contents now looks like this...

2  Searching	
  2.1  Required Search Operations	
    2.1.1  Output Format	
    2.1.2  Constraint-based Search Query
    2.1.3  Keyword Search Query
  2.2  Resolve Operations
    2.2.1  Output Format
    2.2.2  Identifier Resolution
    2.2.3  Identity Query
  2.3  XQuery Search

There isn't anything new in terms of content (other than what I talked
about above in the WSDL), but you will see a bunch more detail describing
inputs and outputs.  Here are some notes:

  o  The pagination and identifierOnly schemes (old section 2.1) have 
       been integrated into the descriptions of inputs and outputs.

  o  The description of VORegistry metadata has been moved to the (as yet 
       unfinished) section 4.  

  o  I went ahead and changed that "to" attribute to "max".  

So if I can't talk you into the WSDL changes ;-) we can revert the spec 
document back and try to deal with the inconsistancies and organization 
there.  

cheers,
Ray

-------------- next part --------------
<?xml version="1.0" encoding="UTF-8"?>

<definitions name="IVOARegistrySearch" 
             xmlns="http://schemas.xmlsoap.org/wsdl/" 
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
             xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
             xmlns:xs="http://www.w3.org/2001/XMLSchema" 
             xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
             xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
             xmlns:vr="http://www.ivoa.net/xml/VOResource/v1.0" 
             xmlns:adql="http://www.ivoa.net/xml/ADQL/v1.0" 
             xmlns:tns="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"
             targetNamespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0">
   <types>
      <xs:schema xmlns="http://www.w3.org/2001/XMLSchema" 
         xmlns:tns="http://www.ivoa.net/wsdl/RegistrySearch/v1.0" 
         targetNamespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0">

         <xs:import namespace="http://www.ivoa.net/xml/VOResource/v1.0"
                    schemaLocation=
                  "../../../../schemas/VOResource/v1.0/VOResource-v1.0.xsd"/>
         <xs:import namespace="http://www.ivoa.net/xml/ADQL/v1.0" 
                    schemaLocation="ADQL.xsd" />

         <xs:element name="VOResources">
            <xs:complexType>
               <xs:sequence>
                  <xs:choice>
                     <xs:element name="Resource" type="vr:Resource" 
                                 minOccurs="0" maxOccurs="unbounded"/>
                     <xs:element name="identifier" type="vr:IdentifierURI" 
                                 minOccurs="0" maxOccurs="unbounded"/>
                   </xs:choice>
               </xs:sequence>
               <xs:attribute name="from" type="xs:positiveInteger" />
               <xs:attribute name="numberReturned" type="xs:positiveInteger" />
               <xs:attribute name="more" type="xs:boolean" />
            </xs:complexType>
         </xs:element>
   
         <xs:element name="Where" type="adql:whereType" />

         <xs:element name="Search">
           <xs:complexType>
             <xs:sequence>
               <xs:element ref="ri:Where" minOccurs="1" maxOccurs="1" />
               <xs:element name="from" type="xs:positiveInteger" 
                           minOccurs="0" maxOccurs="1" />
               <xs:element name="to" type="xs:positiveInteger" 
                           minOccurs="0" maxOccurs="1" />
               <xs:element name="identifiersOnly" type="xs:boolean" 
                           minOccurs="0" maxOccurs="1" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>

         <xs:element name="SearchResponse">
           <xs:complexType>
             <xs:sequence>
               <xs:element ref="ri:VOResources" minOccurs="1" maxOccurs="1" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
      
         <xs:element name="ResolveResponse">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="Resource" type="vr:Resource" 
                           minOccurs="1" maxOccurs="1" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
      
         <xs:element name="KeywordSearch">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="keywords" type="xs:string" 
                           minOccurs="1" maxOccurs="1" />
               <xs:element name="orValues" type="xs:boolean" default="false" 
                           minOccurs="1" maxOccurs="1" />
               <xs:element name="from" type="xs:positiveInteger" 
                           minOccurs="0" maxOccurs="1" />
               <xs:element name="to" type="xs:positiveInteger" 
                           minOccurs="0" maxOccurs="1" />
               <xs:element name="identifiersOnly" type="xs:boolean" 
                           minOccurs="0" maxOccurs="1" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
      
         <xs:element name="GetResource">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="identifier" type="xs:string" 
                           minOccurs="1" maxOccurs="1" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>      

         <xs:element name="XQuerySearch">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="xquery" type="xs:string" 
                           minOccurs="1" maxOccurs="1" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>      

         <xs:element name="XQuerySearchResponse">
           <xs:complexType>
             <xs:sequence>
               <xs:any minOccurs="0"/>
             </xs:sequence>
           </xs:complexType>
         </xs:element>

         <xs:element name="ErrorResponse">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="errorMessage" type="xs:string" 
                           minOccurs="1" maxOccurs="1" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>      
      
         <xs:element name="UnsupportedOperation">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="errorMessage" type="xs:string" 
                           minOccurs="0" maxOccurs="1" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>      
      
         <xs:element name="NotFound">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="errorMessage" type="xs:string" 
                           minOccurs="0" maxOccurs="1" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>      
      </xs:schema>      
   </types>

   <message name="empty"/>
   
   <message name="ErrorResp">
      <part name="ErrorResp"  element="tns:ErrorResponse"/>
   </message>   

   <message name="OpUnsupportedResp">
      <part name="OpUnsupportedResp"  element="tns:UnsupportedOperation"/>
   </message>   

   <message name="NotFoundResp">
      <part name="NotFoundResp"  element="tns:NotFound"/>
   </message>   

   <message name="SearchReq">
      <part name="Search" element="tns:Search" />
   </message>
   
   <message name="SearchResp">
      <part name="VOResources" element="tns:SearchResponse" />
   </message>
   
   <message name="ResolveResp">
      <part name="Resource" element="tns:ResolveResponse" />
   </message>
   
   <message name="KeywordSearchReq">
      <part name="KeywordSearch" element="tns:KeywordSearch" />
   </message>

   <message name="GetResourceReq">
      <part name="GetResource" element="tns:GetResource" />
   </message>
         
   <portType name="RegistrySearchPort">
      <operation name="Search">
         <input message="tns:SearchReq" />
         <output message="tns:SearchResp" />
         <fault name="SearchError" message="tns:ErrorResp"/>         
      </operation>

      <operation name="KeywordSearch">
         <input message="tns:KeywordSearchReq" />
         <output message="tns:SearchResp" />
         <fault name="KeywordSearchError" message="tns:ErrorResp"/>         
      </operation>      

      <operation name="GetResource">
         <input message="tns:GetResourceReq" />
         <output message="tns:ResolveResp" />
         <fault name="GetResourceError" message="tns:ErrorResp"/>         
      </operation>      

      <operation name="GetIdentity">
         <input message="tns:empty" />
         <output message="tns:ResolveResp" />
         <fault name="GetIdentityError" message="tns:ErrorResp"/>         
         <fault name="NotFound" message="tns:NotFoundResp"/>
      </operation>      

      <operation name="XQuerySearch">
         <input message="tns:XQuerySearchReq" />
         <output message="tns:XQuerySearchResp" />
         <fault name="XQuerySearchError" message="tns:ErrorResp"/>
         <fault name="OpUnsupported" message="tns:OpUnsupportedResp"/>
      </operation>      
   </portType>

   <binding name="RegistrySearchSOAP" type="tns:RegistrySearchPortType">
      <soap:binding style="document" 
                    transport="http://schemas.xmlsoap.org/soap/http"/>

      <operation name="Search">
         <soap:operation style="document" 
             soapAction="http://www.ivoa.net/wsdl/RegistrySearch/v1.0#Search"/>
         <input>
            <soap:body use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </input>
         <output>
            <soap:body use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0" />
         </output>
         <fault name="SearchError">
            <soap:fault name="SearchError" use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </fault>         
      </operation>

      <operation name="KeywordSearch">
         <soap:operation style="document" 
               soapAction=
                "http://www.ivoa.net/wsdl/RegistrySearch/v1.0#KeywordSearch"/>
         <input>
            <soap:body use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </input>
         <output>
            <soap:body use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </output>
         <fault name="KeywordSearchError">
            <soap:fault name="KeywordSearchError" use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </fault>             
      </operation>      
      
      <operation name="GetResource">
         <soap:operation style="document" 
             soapAction=
                 "http://www.ivoa.net/wsdl/RegistrySearch/v1.0#GetResource" />
         <input>
            <soap:body use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </input>
         <output>
            <soap:body use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </output>
         <fault name="GetResourceError">
            <soap:fault name="GetResourceError" use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </fault>          
      </operation>       
      
      <operation name="GetIdentity">
         <soap:operation style="document" 
             soapAction=
                 "http://www.ivoa.net/wsdl/RegistrySearch/v1.0#GetIdentity" />
         <input>
            <soap:body use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </input>
         <output>
            <soap:body use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </output>
         <fault name="GetResourceError">
            <soap:fault name="GetIdentityError" use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </fault>          
         <fault name="NotFound">
            <soap:fault name="NotFound" use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </fault>          
      </operation>       
      
      <operation name="XQuerySearch">
         <soap:operation style="document" 
               soapAction=
                  "http://www.ivoa.net/wsdl/RegistrySearch/v1.0#XQuerySearch"/>
         <input>
            <soap:body use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </input>
         <output>
            <soap:body use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0" />
         </output>
         <fault name="XQuerySearchError">
            <soap:fault name="XQuerySearchError" use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </fault>         
         <fault name="OpUnsupported">
            <soap:fault name="OpUnsupported" use="literal" 
                  namespace="http://www.ivoa.net/wsdl/RegistrySearch/v1.0"/>
         </fault>         
      </operation>

   </binding>
</definitions>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: RegistryInterface-v0.8.4rp2.doc
Type: application/x-ms-word
Size: 567296 bytes
Desc: 
URL: <http://www.ivoa.net/pipermail/registry/attachments/20060619/8605173b/attachment-0001.bin>


More information about the registry mailing list