Experience with SPARQL/P/SOAP/Axis

I have been using Axis1 to implement/explore the SPARQL protocol over SOAP.

Axis1: http://ws.apache.org/axis/
Axis2: http://ws.apache.org/axis2/

Axis2 (v0.9) was released while I was doing this and I am keen to switch
because the new Axis architecture is more interesting for streamed processing. 
That said, I would not expect migration from Axis1 to Axis2 to be generally
fast because existing systems still be around and developers have Axis1 skills.

Axis2 isn't complete yet, and features I use are not ready yet.

WSDL 1.1. file attached, including a possible SOAP binding.

Summary:
+ Removing the rdf-dataset level and merging the elements simplifies
+ Request for HTTP POST binding
+ Minor problem with defining the encoding for HTTP returns

-------------------------------------------------

1/ rdf-dataset

The type "rdf-dataset" does not add much - and it is lost in the HTTP binding
anyway.  As it appears the variability and idiosyncrasies of the various
WSDL/SOAP toolkits means it is hard to get a general description that works -
the best we can do is to be as simple as possible.  I didn't have any such
issues with the SPARQL WSDL with Axis but in talking to other people who have
had to write and deploy systems working across different SOAP stacks, the
advice seems to be "keep it as simple as possible"

I merged the parts of rdf-dataset into the query type:

  <xs:element name="query">
    <xs:complexType>
      <xs:all>
 <xs:element minOccurs="1" maxOccurs="1"
                     name="sparql-query" type="xs:string"/>
 <xs:element minOccurs="0" maxOccurs="1"
                     name="default-graph-uri" type="xs:anyURI"/>
 <xs:element minOccurs="0" maxOccurs="unbounded"
                     name="named-graph-uri" type="xs:anyURI"/>
       </xs:all>
     </xs:complexType>
   </xs:element>


This also removes the ordering coming from the sequence
which also isn't present in the HTTP GET binding.

I don't use the HTTP GET bindings from WSDL (I have directly written a
servlet).  HTTP GET binding is only defined for simple types in Axis (1 & 2)
at the moment and not the full application/x-www-form-urlencoded encoing rules
in WSDL 2.0.

2/ We should change "default-graph-uri" to be maxOccurs="unbounded" to align
with the WG description about multiple FROM URIs.

3/ I needed to define rdf:RDF, not just import the namespace.  I defined it as
an element with no further details about it.  JAXB happy (Java-XML binding).

4/ SOAP binding.  Having to fill in the blanks, I choose literal documents, 
not SOAP encoding for the SOAP binding.

[Detail: I use a custom serializer for putting an RDF model into
the output stream - otherwise I use JAXB for mapping XML to and
from Java.  This was one reason why I stuck with Axis1.]

5/ Please include a whttp:methodDefault="POST" binding with an encoding of
application/x-www-form-urlencoded (which is not the default).  This makes the
servlet API work seamlessly for queries sent over POST (e.g. potentially long
queries).

<operation ref=....
       whttp:inputSerialization='application/x-www-form-urlencoded'
       whttp:location=...
       whttp:method='POST'/>


6/ I was not sure what the {http output serialization} should be because it
isn't only application/xml for result sets but also application/rdf+xml for a
graph.

 Andy

Received on Monday, 18 July 2005 14:56:00 UTC