OPeNDAP SOAP API

Release Information

Project: Server 4
Internal Release Number: X.Y.Z
Related Documents:
LINKS TO RELEVANT STANDARDS
LINKS TO OTHER DOCUMENTS

Process impact: The OPeNDAP SOAP API precisely defines the command set and protocol to used by OPeNDAP Servers.

Introduction

 

For more information, see the project proposal.

SOAP

SOAP can be used in two basic ways, as a tool for doing RPC on remote systems, and as a messaging service.

When SOAP is used to perform RPC the parameters passed and the return values must be consistent with the SOAP data model (unless custom encodings are used, more on that later). This model is relatively simplistic, it contains a collection of atomic types, arrays, and structures. In the SOAP data model values must be associated with each instance of an atomic type, this includes members of an array or structure.

Given the type constraints and the embedded value requirements of the SOAP data model it is not practical to try to shoe-horn the OPeNDAP data model directly into a SOAP data model representation model.

In order pass our DAP objects via SOAP methods we have 2 choices: Extend the SOAP data model to cover our custom data types (so that our types can be used in an RPC request) or rely on SOAP messaging.

Custom data types require the use of custom serialization and de-serialization classes that must be integrated into the SOAP server (and client). These classes are tightly coupled to the particular implementation of the SOAP engine (such as Apache AXIS, GLUE, etc.)

Messaging allows us to pass W3C DOM trees back and forth between server and client. Each side can then act upon them as necessary (parse them into a Java/C++ class in memory, extract pertinent information directly from the DOM elements, what have you)

Using a SOAP messaging scheme will cut us off from the automatic WSDL generation tools that have been developed for the SOAP RPC model. However, this may not be such a large issue. Ultimately, having a custom data type in an RPC call only buys you the information (at the WSDL level) that this method requires (for example) a "DDS" or a "ConstraintExpression" but probably doesn't lead you to an implementation of such a beast.

Prototype SOAP Implementation


The alpha release of Server4 provides a prototype implementation of the OPeNDAP SOAP interface. It is based on the description in this document, and utilizes the Scheme 2 as the method for binary data transfer. The binary data response is NOT chunked at this time, thus the serialized binary data content of the data attachment is DAP2 compliant. Read this document carefully to see the complete details for the prototype interface, and remember - Scheme 2 .

 

Web Services

We will need to write a WSDL description of the SOAP interface so that we can play in the Web Services arena

 

 

SOAP with Attachments

Because data responses will require that we package binary data, and we do not wish to suffer the content inflation that base 64 encoding (or any other ASCII encoding) cuases, we will be using SOAP with attachments in our responses.

In order to keep the system simple attachments will used as follows:

  • Request messages sent to the server will not have attacments.
  • All responses from the server will be multi part MIME documents (Content-Type: Multipart/Related). If no binary data content is requested then the server will only include a single part. If data is requested more parts will be added as needed to fulfill the request(s). The first part of the multipart MIME document will always contain a SOAP envelope , body, and OPeNDAP message content (as XML).

 

Message Content

 

Proposed message content schemes:

client Requests:

The content of the SOAP body is made up of OPeNDAP Request elements. There must be at least one Request element, and there may be more than one. (Should there be a limit to how many?)

 

Server Responses:

 

  • Scheme 1: The server will respond to a client request with a mulitpart MIME document. The first part will contain a SOAP envelope and body. The XML message content contained in the SOAP body will be:
    • All of the Request elements received from the client.
    • An OPeNDAP Response element, with the same reqID attribute as the cooresponding Request element, for each Request element sent from the client. The content of the Response element will be a DDX (if the request is for a DDX or DATA) or a THREDDS catalog. The DDX in a Response element cooresponding to the DATA request will carry a blob reference that will indicate through the use of an href attribute set equal to the reqID, the Content-ID of the MIME part carrying the binary encoded data.

    If there client did not request data then only one MIME part will be returned. If there was one or more data requests then a MIME part will be added to carry the binary encoded data stuff for each data request. The Content-ID header of the MIME part carrying the binary data will be set to the reqID of the original request.




  • Scheme 2: The server will respond to a client request with a mulitpart MIME document. The first part will contain a SOAP envelope and body. The XML message content contained in the SOAP body will be:
    • All of the Request elements received from the client.
    • An OPeNDAP Response element, with the same reqID attribute as the cooresponding Request element, for each Request element sent from the client. The content of the Response element will be a DDX if the request is for a DDX, or a THREDDS catalog. If there is a request for data, then the Response element cooresponding to that request have empty content, and an href attribiute set to the contentID of the attachment containing DDX added.

    If there client did not request data then only one MIME part will be returned. If there was one or more data requests then for each data request 2 MIME parts will be added:
    • One will have a Content-ID MIME header set to the the value indicated in the href attribute of the Response in the SOAP envelope/attachment . It will contain the DDX for the dataset being returned. This DDX will carry a blob element that will link to the data attachment through the use of an href attribute set equal to the Content-ID of the MIME part carrying the binary encoded data.

    • The other part will carry the binary encoded data stuff for each data request. The Content-ID of the MIME part carrying the binary data will be set to the value of the href attribute in the blob element.

Potter likes scheme 1 for it's compactness, but Scheme 1 requires that the OLFS parse the DDX from the BES data responses to build the SOAP envelope, and then que data comming from the BES for inclusion in the MIME attachments. This increaes the front end burden.

Scheme 2 is an optimization. It would allow the BES to return the data response as pre packaged MIME parts that the OLFS just ships down the pipe. But - Potter thinks it's ugly.

Despite Potter's esthetic concerns, Scheme 2 has been implemented as the prototype interface.

 

Chunked Data Response

When responding to a GetDATA request the server will chunk the binary data that is sent back (in a MIME attachment) based on the following scheme:

 

The Chunking Scheme (Not to be confused with a can of bad chinese food from 1976):

The binary data will be sent in blocks. Each block will preceded by a 32 bit signed integer, XDR encoded. The value of this integer indicates the number of bytes of data to follow. This number is a contract between the server and the client. The server is promising to send that many bytes.

The end of the transmission will be indicated by the server sending a length value of zero.

 

Errors

If the server encounters an error during the transmission of a chunk it must pad the transmission with bytes (typically zeros) until the length of transmission comittment has been fulfilled. Then the server may send a length value of -1 (0xFFFFFFFF) to indicate that an error was encountered.

Then the server will transmit an OPeNDAP XML error element that contains information about the error.

 

Error Handling

There are two places that the server can indicate tot he client that it has recevied an error, in the SOAP message body contents and in the binary data.

 

  • Embedded errors in XML

    If the server encounters an error in the process of generating an XML response (THREDDS catalog, DDX, a DataDDX) then it will embed an OPeNDAP Error element in the XML element that is being prepared, or replace the element with the Error element. The client should search all XML sent back from the server for Error elements prior to doing anything else with the returned content. The server will (attempt to) always return well formed XML.

  • Errors in binary data

    If the server encounters an error during the transmission of a binary data chunk it must pad the transmission with bytes (typically zeros) until the length of transmission comittment has been fulfilled. Then the server may send a length value of -1 (0xFFFFFFFF) to indicate that an error was encountered.

    Then the server will transmit an OPeNDAP XML error element that contains information about the error.

 

Request Message Elements

The following client request messages must be supported on every OPeNDAP server that supports a SOAP interface:

 

  • GetDDX:
    The GetDDX request message looks like this:
        <Request reqID="clientUID">
            <GetDDX>
                <path>/path/to/a/data/set</path>
                <constraintExpression>projection&selection1&selection2&...&selectionN</path>
             </GetDDX>
        </Request>
    Where:
    • clientUID - Is a unique identifier sent by the client to provide a link between request and reply elements in the server's SOAP message response.

    • path - Is the path on the server that points to the data set for which the DDX is being requested. The last element in the path string must be a data set. If it is a collection, then the server will return an error.

    • constraintExpression - An expression containing projection and selection information. The returned DDX wil reflect the application of this expression. If this element is missing, or has empty content then the entire DDX will be sent.

  • GetTHREDDSCatalog:
    The GetTHREDDSCatalog request message looks like this:
        <Request reqID="clientUID">
            <GetTHREDDSCatalog>
                <path>/path/to/a/data/set</path>
             </GetTHREDDSCatalog>
        </Request>
    Where:
    • clientUID - Is a unique identifier sent by the client to provide a link between request and reply elements in the server's SOAP message response.

    • path - Is a path on the server that points to a collection of data sets. This path may not end in a single dataset. THREDDS catalogs are provided only for collections, not for "atoms".

  • GetDATA:


    The GetDATA request message looks like this:
        <Request reqID="clientUID">
            <GetDATA>
                <path>/path/to/a/data/set</path>
                <constraintExpression>projection&selection1&selection2&...&selectionN</path>
             </GetDATA>
        </Request>
    Where:
    • clientUID - Is a unique identifier sent by the client to provide a link between request and reply elements in the server's SOAP message response.

    • path - Is the path on the server that points to the data set for which the DDX is being requested. The last element in the path string must be a data set. If it is a collection, then the server will return an error.

    • constraintExpression - An expression containing projection and selection information. The returned DDX wil reflect the application of this expression. If this element is missing, or has empty content then the entire DDX will be sent.

 

 

Response Message Elements

 

The following server Response messages must be supported on every OPeNDAP server that supports a SOAP interface:

 

  • GetDDX Response :
    The Response message element for a GetDDX Request looks like this:
        <Request reqID="clientUID">
            The DDX representation of dataset corresponding to the the request, or an error.
        </Request>
    Where:
    • clientUID - Is a unique identifier sent by the client to provide a link between request and reply elements in the server's SOAP message response.


  • GetTHREDDSCatalog Response:
    The Response element for a GetTHREDDSCatalog request message looks like this:
        <Response reqID="clientUID">
            The THREDDS catalog of the collection indicated in the request, or an error.
        </Response>
    Where:
    • clientUID - Is a unique identifier sent by the client to provide a link between request and reply elements in the server's SOAP message response.

  • GetDATA Response :

    • Scheme 1
      The Response element for a GetDATA request message looks like this:
          <Response reqID="clientUID">
              The DDX representation of dataset corresponding to the the request, or an error.
              The DDX must contain a blob element with an href attribute set to the reqID.
          </Response>

      Where:

      • clientUID - Is a unique identifier sent by the client to provide a link between request and reply elements in the server's SOAP message response.

    This element must appear in content of the SOAP body element. It must be paired with a MIME attachment whose Content-ID header is equal to the value of the href attribute in the blob element in the DDX. This MIME attachment must contain the XDR encoded serialized OPeNDAP binary data that correspondes to the DDX.

    • Scheme 2

      The Response element for a GetDATA request message looks like this:
          <Response reqID="clientUID"  href="cid:ddxUID" />
      Where:
      • clientUID - Is a unique identifier sent by the client to provide a link between request and reply elements in the server's SOAP message response.
      • ddxUID - Is a unique identifier indicating the MIME header Content-ID of the attachment containing the DDX document.

    This element must appear in content of the SOAP body element. It must be paired with 2 MIME attachments The first must have a Content-ID header that is equal to the value of the href attribute in the Response element. This MIME attachment must contain the DDX that corresponds to the original request. The DDX must contain a blob element with an href attribute set to MIME header Content-ID of the attachment containgin the binary encoded data.

    The second MIME attachement part will carry the binary encoded data stuff for the data request. The Content-ID of the MIME part carrying the binary data will be set to the value of the href attribute of the blob element in the DDX. .

 

 

Example Exchange of Multipart MIME (Scheme 1)

In this example a client sends a SOAP message. Inside the SOAP bpdy, the client has que'd 3 Requests , a GetDDX, a GetDATA, and a GetTHREDDSCatalog. The Servers response is (with the exception of the binary data associated with the GEtDATA request) is shown in full. This is an example of Scheme 1 data transfer.

client sends the request:

 
  POST /opendap/s4/ HTTP/1.0
  Content-Type: text/xml; charset=utf-8
  Accept: application/soap+xml, application/dime, multipart/related, text/*
  User-Agent: Axis/1.3
  Host: 127.0.0.1:3001
  Cache-Control: no-cache
  Pragma: no-cache
  SOAPAction: ""
  Content-Length: 724

  <?xml version="1.0" encoding="UTF-8"?>
  <soapenv:Envelope 
      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <soapenv:Body>
  
          <Request reqID="7fda5ca6:10aaf091914:-8000">
               <GetDDX>
                   <DataSet>
                       <path>/nc/</path>
                       <name>fnoc1.nc</name>
                       <ConstraintExpression>u,v</ConstraintExpression>
                   </DataSet>
               </GetDDX>
          </Request>
		  
          <Request reqID="7fda5ca6:10aaf091914:-7fff">
               <GetDATA>
                   <DataSet>
                       <path>/nc/</path>
                       <name>fnoc2.nc</name>
                       <ConstraintExpression>v</ConstraintExpression>
                   </DataSet>
               </GetDATA>
          </Request>
		  
          <Request reqID="7fda5ca6:10aaf091914:-7ffe">
               <GetTHREDDSCatalog>
                   <path>nc/Test</path>
               </GetTHREDDSCatalog>
          </Request>
		  
      </soapenv:Body>
  </soapenv:Envelope>
  
  

Server responds with a Mulit part MIME:

   HTTP/1.1 200 OK
   Server: Apache-Coyote/1.1
   Content-Type: multipart/related; type="text/xml"; start="<080B6DC4AC8AF0C43041C57CE8DE9646>";  boundary="----=_Part_7_9651610.1145395859678"
   Date: Tue, 18 Apr 2006 21:30:59 GMT
   Connection: close
 
   ------=_Part_7_9651610.1145395859678
   Content-Type: text/xml; charset=UTF-8
   Content-Transfer-Encoding: binary
   Content-Id: <080B6DC4AC8AF0C43041C57CE8DE9646>
   
   <?xml version="1.0" encoding="UTF-8"?>
   <soapenv:Envelope 
       xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	   
       <soapenv:Body>
	   
          <Request reqID="7fda5ca6:10aaf091914:-8000">
               <GetDDX>
                   <DataSet>
                       <path>/nc/</path>
                       <name>fnoc1.nc</name>
                       <ConstraintExpression>u,v</ConstraintExpression>
                   </DataSet>
               </GetDDX>
          </Request>
		  
          <Request reqID="7fda5ca6:10aaf091914:-7fff">
               <GetDATA>
                   <DataSet>
                       <path>/nc/</path>
                       <name>fnoc2.nc</name>
                       <ConstraintExpression>v</ConstraintExpression>
                   </DataSet>
               </GetDATA>
          </Request>
		  
          <Request reqID="7fda5ca6:10aaf091914:-7ffe">
               <GetTHREDDSCatalog>
                   <path>nc/Test</path>
               </GetTHREDDSCatalog>
          </Request>
		  
          <Response reqID="7fda5ca6:10aaf091914:-8000">
              <Dataset name="fnoc1.nc"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns="http://xml.opendap.org/ns/DAP2"
                  xsi:schemaLocation="http://xml.opendap.org/ns/DAP2  http://xml.opendap.org/dap/dap2.xsd">
                    <Attribute name="NC_GLOBAL" type="Container">
                        <Attribute name="base_time" type="String">
                            <value>&quot;88- 10-00:00:00&quot;</value>
                        </Attribute>
                        <Attribute name="title" type="String">
                            <value>&quot; FNOC UV wind components from 1988- 10 to 1988- 13.&quot;</value>
                        </Attribute>
                    </Attribute>
                    <Attribute name="DODS_EXTRA" type="Container">
                        <Attribute name="Unlimited_Dimension" type="String">
                            <value>&quot;time_a&quot;</value>
                        </Attribute>
                    </Attribute>
                    <Array name="u">
                        <Attribute name="units" type="String">
                            <value>&quot;meter per second&quot;</value>
                        </Attribute>
                        <Attribute name="long_name" type="String">
                            <value>&quot;Vector wind eastward component&quot;</value>
                        </Attribute>
                        <Attribute name="missing_value" type="String">
                            <value>&quot;-32767&quot;</value>
                        </Attribute>
                        <Attribute name="scale_factor" type="String">
                            <value>&quot;0.005&quot;</value>
                        </Attribute>
                        <Int16/>
                        <dimension name="time_a" size="16"/>
                        <dimension name="lat" size="17"/>
                        <dimension name="lon" size="21"/>
                    </Array>
                    <Array name="v">
                        <Attribute name="units" type="String">
                            <value>&quot;meter per second&quot;</value>
                        </Attribute>
                        <Attribute name="long_name" type="String">
                            <value>&quot;Vector wind northward component&quot;</value>
                        </Attribute>
                        <Attribute name="missing_value" type="String">
                            <value>&quot;-32767&quot;</value>
                        </Attribute&gt
                        <Attribute name="scale_factor" type="String">
                            <value>&quot;0.005&quot;</value>
                        </Attribute>
                        <Int16/>
                        <dimension name="time_a" size="16"/>
                        <dimension name="lat" size="17"/>
                        <dimension name="lon" size="21"/>
                    </Array>
                </Dataset>
    
          </Response>
		  
          <Response reqID="7fda5ca6:10aaf091914:-7fff">
             <Dataset name="fnoc1.nc"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns="http://xml.opendap.org/ns/DAP2"
                  xsi:schemaLocation="http://xml.opendap.org/ns/DAP2  http://xml.opendap.org/dap/dap2.xsd">
                    <Attribute name="NC_GLOBAL" type="Container">
                        <Attribute name="base_time" type="String">
                            <value>&quot;88- 10-00:00:00&quot;</value>
                        </Attribute>
                        <Attribute name="title" type="String">
                            <value>&quot; FNOC UV wind components from 1988- 10 to 1988- 13.&quot;</value>
                        </Attribute>
                    </Attribute>
                    <Attribute name="DODS_EXTRA" type="Container">
                        <Attribute name="Unlimited_Dimension" type="String">
                            <value>&quot;time_a&quot;</value>
                        </Attribute>
                    </Attribute>
                    <Array name="v">
                        <Attribute name="units" type="String">
                            <value>&quot;meter per second&quot;</value>
                        </Attribute>
                        <Attribute name="long_name" type="String">
                            <value>&quot;Vector wind northward component&quot;</value>
                        </Attribute>
                        <Attribute name="missing_value" type="String">
                            <value>&quot;-32767&quot;</value>
                        </Attribute&gt
                        <Attribute name="scale_factor" type="String">
                            <value>&quot;0.005&quot;</value>
                        </Attribute>
                        <Int16/>
                        <dimension name="time_a" size="16"/>
                        <dimension name="lat" size="17"/>
                        <dimension name="lon" size="21"/>
                    </Array>
                    <blob href="cid:7fda5ca6:10aaf091914:-7fff"/>
                </Dataset>
          </Response>
		  
          <Response reqID="7fda5ca6:10aaf091914:-7ffe">
              <catalog 
                  xmlns="http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0" 
                  xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0.1">
				  
                  <service name="OPeNDAP-Server4" serviceType="OPENDAP" base="/opendap/s4/" />
                  <dataset name="TEst">
                      <metadata inherited="true">
                          <serviceName>OPeNDAP-Server4</serviceName>
                      </metadata>
                      <dataset name=".DS_Store" urlPath="nc/TEst/.DS_Store" />
                      <dataset name="test.nc" urlPath="nc/TEst/test.nc" />
                      <dataset name="testfile.nc" urlPath="nc/TEst/testfile.nc" />
                      <dataset name="TestPat.nc" urlPath="nc/TEst/TestPat.nc" />
                      <dataset name="TestPatDbl.nc" urlPath="nc/TEst/TestPatDbl.nc" />
                      <dataset name="TestPatFlt.nc" urlPath="nc/TEst/TestPatFlt.nc" />
                      <dataset name="TestPatFlt2.nc" urlPath="nc/TEst/TestPatFlt2.nc" />
                      <dataset name="TestPatInt.nc" urlPath="nc/TEst/TestPatInt.nc" />
                      <dataset name="TestPatSht.nc" urlPath="nc/TEst/TestPatSht.nc" />
                      <dataset name="text.nc" urlPath="nc/TEst/text.nc" />
                  </dataset>
              </catalog>		  
           </Response>

       </soapenv:Body>
   </soapenv:Envelope>
   
   ------=_Part_7_9651610.1145395859678
   Content-Type: application/octet-stream
   Content-Transfer-Encoding: binary
   Content-Id: 7fda5ca6:10aaf091914:-7fff
   
    Here be the XDR encoded binary stuff that is the data from the GetDATA request (reqID=7fda5ca6:10aaf091914:-7fff)
   
   ------=_Part_7_9651610.1145395859678--

 

Example Exchange of Multipart MIME (Scheme 2)

In this example a client sends a SOAP message. Inside the SOAP bpdy, the client has que'd 3 Requests , a GetDDX, a GetDATA, and a GetTHREDDSCatalog. The Servers response is (with the exception of the binary data associated with the GEtDATA request) is shown in full. This is an example of Scheme 2 data transfer.

Client sends the request:

 
  POST /opendap/s4/ HTTP/1.0
  Content-Type: text/xml; charset=utf-8
  Accept: application/soap+xml, application/dime, multipart/related, text/*
  User-Agent: Axis/1.3
  Host: 127.0.0.1:3001
  Cache-Control: no-cache
  Pragma: no-cache
  SOAPAction: ""
  Content-Length: 724

  <?xml version="1.0" encoding="UTF-8"?>
  <soapenv:Envelope 
      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <soapenv:Body>
  
          <Request reqID="7fda5ca6:10aaf091914:-8000">
               <GetDDX>
                   <DataSet>
                       <path>/nc/</path>
                       <name>fnoc1.nc</name>
                       <ConstraintExpression>u,v</ConstraintExpression>
                   </DataSet>
               </GetDDX>
          </Request>
		  
          <Request reqID="7fda5ca6:10aaf091914:-7fff">
               <GetDATA>
                   <DataSet>
                       <path>/nc/</path>
                       <name>fnoc2.nc</name>
                       <ConstraintExpression>v</ConstraintExpression>
                   </DataSet>
               </GetDATA>
          </Request>
		  
          <Request reqID="7fda5ca6:10aaf091914:-7ffe">
               <GetTHREDDSCatalog>
                   <path>nc/Test</path>
               </GetTHREDDSCatalog>
          </Request>
		  
      </soapenv:Body>
  </soapenv:Envelope>
  
  

Server responds with a Mulit part MIME:

   HTTP/1.1 200 OK
   Server: Apache-Coyote/1.1
   Content-Type: multipart/related; type="text/xml"; start="<080B6DC4AC8AF0C43041C57CE8DE9646>";  boundary="----=_Part_7_9651610.1145395859678"
   Date: Tue, 18 Apr 2006 21:30:59 GMT
   Connection: close
 
   ------=_Part_7_9651610.1145395859678
   Content-Type: text/xml; charset=UTF-8
   Content-Transfer-Encoding: binary
   Content-Id: <080B6DC4AC8AF0C43041C57CE8DE9646>
   
   <?xml version="1.0" encoding="UTF-8"?>
   <soapenv:Envelope 
       xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	   
       <soapenv:Body>
	   
          <Request reqID="7fda5ca6:10aaf091914:-8000">
               <GetDDX>
                   <DataSet>
                       <path>/nc/</path>
                       <name>fnoc1.nc</name>
                       <ConstraintExpression>u,v</ConstraintExpression>
                   </DataSet>
               </GetDDX>
          </Request>
		  
          <Request reqID="7fda5ca6:10aaf091914:-7fff">
               <GetDATA>
                   <DataSet>
                       <path>/nc/</path>
                       <name>fnoc2.nc</name>
                       <ConstraintExpression>v</ConstraintExpression>
                   </DataSet>
               </GetDATA>
          </Request>
		  
          <Request reqID="7fda5ca6:10aaf091914:-7ffe">
               <GetTHREDDSCatalog>
                   <path>nc/Test</path>
               </GetTHREDDSCatalog>
          </Request>
		  
          <Response reqID="7fda5ca6:10aaf091914:-8000">
              <Dataset name="fnoc1.nc"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns="http://xml.opendap.org/ns/DAP2"
                  xsi:schemaLocation="http://xml.opendap.org/ns/DAP2  http://xml.opendap.org/dap/dap2.xsd">
                    <Attribute name="NC_GLOBAL" type="Container">
                        <Attribute name="base_time" type="String">
                            <value>&quot;88- 10-00:00:00&quot;</value>
                        </Attribute>
                        <Attribute name="title" type="String">
                            <value>&quot; FNOC UV wind components from 1988- 10 to 1988- 13.&quot;</value>
                        </Attribute>
                    </Attribute>
                    <Attribute name="DODS_EXTRA" type="Container">
                        <Attribute name="Unlimited_Dimension" type="String">
                            <value>&quot;time_a&quot;</value>
                        </Attribute>
                    </Attribute>
                    <Array name="u">
                        <Attribute name="units" type="String">
                            <value>&quot;meter per second&quot;</value>
                        </Attribute>
                        <Attribute name="long_name" type="String">
                            <value>&quot;Vector wind eastward component&quot;</value>
                        </Attribute>
                        <Attribute name="missing_value" type="String">
                            <value>&quot;-32767&quot;</value>
                        </Attribute>
                        <Attribute name="scale_factor" type="String">
                            <value>&quot;0.005&quot;</value>
                        </Attribute>
                        <Int16/>
                        <dimension name="time_a" size="16"/>
                        <dimension name="lat" size="17"/>
                        <dimension name="lon" size="21"/>
                    </Array>
                    <Array name="v">
                        <Attribute name="units" type="String">
                            <value>&quot;meter per second&quot;</value>
                        </Attribute>
                        <Attribute name="long_name" type="String">
                            <value>&quot;Vector wind northward component&quot;</value>
                        </Attribute>
                        <Attribute name="missing_value" type="String">
                            <value>&quot;-32767&quot;</value>
                        </Attribute&gt
                        <Attribute name="scale_factor" type="String">
                            <value>&quot;0.005&quot;</value>
                        </Attribute>
                        <Int16/>
                        <dimension name="time_a" size="16"/>
                        <dimension name="lat" size="17"/>
                        <dimension name="lon" size="21"/>
                    </Array>
                </Dataset>
    
          </Response>
		  
          <Response reqID="7fda5ca6:10aaf091914:-7fff" href="cid:7efb2dc1:83ced898276:-5af7" />
		  
          <Response reqID="7fda5ca6:10aaf091914:-7ffe">
              <catalog 
                  xmlns="http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0" 
                  xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0.1">
				  
                  <service name="OPeNDAP-Server4" serviceType="OPENDAP" base="/opendap/s4/" />
                  <dataset name="TEst">
                      <metadata inherited="true">
                          <serviceName>OPeNDAP-Server4</serviceName>
                      </metadata>
                      <dataset name=".DS_Store" urlPath="nc/TEst/.DS_Store" />
                      <dataset name="test.nc" urlPath="nc/TEst/test.nc" />
                      <dataset name="testfile.nc" urlPath="nc/TEst/testfile.nc" />
                      <dataset name="TestPat.nc" urlPath="nc/TEst/TestPat.nc" />
                      <dataset name="TestPatDbl.nc" urlPath="nc/TEst/TestPatDbl.nc" />
                      <dataset name="TestPatFlt.nc" urlPath="nc/TEst/TestPatFlt.nc" />
                      <dataset name="TestPatFlt2.nc" urlPath="nc/TEst/TestPatFlt2.nc" />
                      <dataset name="TestPatInt.nc" urlPath="nc/TEst/TestPatInt.nc" />
                      <dataset name="TestPatSht.nc" urlPath="nc/TEst/TestPatSht.nc" />
                      <dataset name="text.nc" urlPath="nc/TEst/text.nc" />
                  </dataset>
              </catalog>		  
           </Response>

       </soapenv:Body>
   </soapenv:Envelope>
   
   ------=_Part_7_9651610.1145395859678
   Content-Type: application/octet-stream
   Content-Transfer-Encoding: binary
   Content-Id: 7efb2dc1:83ced898276:-5af7
   
    <?xml version="1.0" encoding="UTF-8"?>
	<Dataset name="fnoc1.nc"
	  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	  xmlns="http://xml.opendap.org/ns/DAP2"
	  xsi:schemaLocation="http://xml.opendap.org/ns/DAP2  http://xml.opendap.org/dap/dap2.xsd">
		<Attribute name="NC_GLOBAL" type="Container">
			<Attribute name="base_time" type="String">
				<value>&quot;88- 10-00:00:00&quot;</value>
			</Attribute>
			<Attribute name="title" type="String">
				<value>&quot; FNOC UV wind components from 1988- 10 to 1988- 13.&quot;</value>
			</Attribute>
		</Attribute>
		<Attribute name="DODS_EXTRA" type="Container">
			<Attribute name="Unlimited_Dimension" type="String">
				<value>&quot;time_a&quot;</value>
			</Attribute>
		</Attribute>
		<Array name="v">
			<Attribute name="units" type="String">
				<value>&quot;meter per second&quot;</value>
			</Attribute>
			<Attribute name="long_name" type="String">
				<value>&quot;Vector wind northward component&quot;</value>
			</Attribute>
			<Attribute name="missing_value" type="String">
				<value>&quot;-32767&quot;</value>
			</Attribute&gt
			<Attribute name="scale_factor" type="String">
				<value>&quot;0.005&quot;</value>
			</Attribute>
			<Int16/>
			<dimension name="time_a" size="16"/>
			<dimension name="lat" size="17"/>
			<dimension name="lon" size="21"/>
		</Array>
		<blob href="cid:6efa6ea4:98eda872192:-1ed1"/>
	</Dataset>


   ------=_Part_7_9651610.1145395859678
   Content-Type: application/octet-stream
   Content-Transfer-Encoding: binary
   Content-Id: 6efa6ea4:98eda872192:-1ed1
   
    Here be the XDR encoded binary stuff that is the data from the GetDATA request (reqID=7fda5ca6:10aaf091914:-7fff)
   
   ------=_Part_7_9651610.1145395859678--




 

 

 

 
TODO: Check for words of wisdom and discuss ways to improve this template. Or, evaluate the ReadySET Pro professional software requirements specification template.
Company Proprietary
Copyright © 2003-2004 Jason Robbins. All rights reserved. License terms. Retain this copyright statement whenever this file is used as a template.