Update and issues: ACTION: LeeF to draft WSDL 1.1 for SPARQL thingy with AndyS and Elias

Hi Everyone,

The latest version of a proposed Working Group Note presenting a WSDL 1.1 
document for the SPARQL protocol can be found at:

  http://thefigtrees.net/DAWG/sparql-wsdl-1.1-note.html

As far as I'm concerned, this version is finished modulo the unresolved 
issues presented below that have been discovered as we've worked on the 
WSDL 1.1 and various sample code generated from the WSDL 1.1. Note that 
the WSDL references the sparql-protocol-types.xsd from the WD rather than 
the LC as there have been two significant changes between 
  http://www.w3.org/2001/sw/DataAccess/proto-wd/sparql-protocol-types.xsd
    and
  http://www.w3.org/2001/sw/DataAccess/proto-wd/sparql-protocol-types.xsd

(Removal of a stray '/>' and the addition of an import of result2.xsd)

The Java version of this generated sample code (generated using Axis's 
wsdl2java) can be found at:

  http://thefigtrees.net/DAWG/SPARQLClient-20050927.zip

It's a complete sample which will be explained and linked to on the ESW 
Wiki ( http://esw.w3.org/topic/SparqlProtocolWsdl11Examples - no content 
yet ). 

Elias is working on a python sample though he's been having a heck of a 
time convincing it not to use SOAP-encoding. I'm also nearly finished with 
a C# sample using Microsoft's wsdl.exe. 

Now, a summary of the issues raised by these explorations:


1. xs:all in sparql-protocol-types.xsd

Running Microsoft's wsdl.exe on the SPARQL Protocol XML Schema from:

  http://www.w3.org/2001/sw/DataAccess/proto-wd/sparql-protocol-types.xsd

gives the error:

C:\Documents and Settings\Lee\My Documents\Visual Studio 
Projects\SPARQLSharpClient\SPARQLSharpClient\Web 
References\SPARQLExampleService\Reference.map(1): Custom tool error: 
Unable to import WebService/Schema. Unable to import binding 
'QuerySoapBinding' from namespace 
'http://www.w3.org/2005/08/sparql-protocol-query/#'. Unable to import 
operation 'query'. Schema with 
targetNamespace='http://www.w3.org/2005/09/sparql-protocol-types/#' has 
invalid syntax. The {max occurs} of all the particles in the {particles} 
of an all group must be 0 or 1. An error occurred at , (17, 10).

This refers to the 'default-graph-uri' and 'named-graph-uri' elements that 
are inside an xs:all group and are children of 'query-request'. The 
relevant part of the XML Schema Part 0: Primer can be found at:

  http://www.w3.org/TR/xmlschema-0/#ref18

"""
There exists a third option for constraining elements in a group: All the 
elements in the group may appear once or not at all, and they may appear 
in any order. The all  group (which provides a simplified version of the 
SGML &-Connector) is limited to the top-level of any content model. 
Moreover, the group's children must all be  individual elements (no 
groups), and no element in the content model may appear more than once, 
i.e. the permissible values of  minOccurs and maxOccurs are 0 and 1.
"""

So, we can't legally both allow for multiple (default or named) graphs, 
and also allow for the elements to be in an arbitrary order. So I suspect 
that we should change this from an xs:all to an xs:sequence.


2. Importing XML Schema

We've noticed two different behaviors with respect to code-generation 
tools that read in a WSDL 1.1 file and its referenced schemas. Some tools 
(eg, Axis), seem to maintain a global cache of namespace --> schema 
mappings. These tools add to this mapping whether via <wsdl:import ...> 
elements in the WSDL document or via <xs:import ...> elements in any 
imported schema documents. Other tools require that a particular schema 
document that references elements defined in another schema document 
import the second schema themselves (eg, Elias' python tool (name?) and 
C#'s wsdl.exe). If anyone knows of a way to make these tools work 
otherwise, please let me know.

So, what does this mean? sparql-protocol-types.xsd references both 
vbr:sparql (root element of the XML results format) and rdf:RDF (root 
element of an RDF/XML document) but only imports 
http://www.w3.org/2005/sparql-results# (result2.xsd) because we do not 
have a schema document for RDF/XML. In Andy's initial WSDL 1.1 document, 
he solved this by creating a placeholder rdf.xsd ( 
http://thefigtrees.net/DAWG/rdf.xsd ) and importing this from the WSDL 1.1 
document, which makes Axis (wsdl2java) happy. 

But this hack doesn't cut it for tools that are require the referring 
schema document to directly import the referred schema document. For these 
tools to be happy, sparql-protocol-types.xsd would have to import rdf.xsd, 
which I don't think anyone is happy with, since this would be putting a 
rather inelegant hack into a normative document.

So, I don't have a good solution here, and I don't think Kendall does 
either. The best solution may be to explain the hack and instructions for 
implementing it on the ESW Wiki page -- these instructions are rather 
tedious though, as they would require a C# or python user to download the 
normative sparql-protocol-types.xsd, edit it to add an import of the 
placeholder rdf.xsd, and then edit the WSDL 1.1 document to point to this 
locally edited copy of sparql-protocol-types.xsd instead of the normative 
version. (The alternative would be to have the Note reference a WSDL 1.1 
document which imports a sparql-protocol-types.xsd which imports the 
placeholder rdf.xsd. I don't like this alternative since it requires 
maintaining a copy of sparql-protocol-types.xsd just for this (ugly) 
purpose.)


3. soap:operation

.Net's wsdl.exe pointed out that the WSDL 1.1 needed a soap:operation 
element to be legal. I added the following:

   <soap:operation style="document" 
soapAction="http://www.w3.org/2005/08/sparql-protocol-query/#query-action" 
/>

I only bring this up since I invented that soapAction so that I could have 
a legal WSDL 1.1 document.



thanks,
Lee

Received on Tuesday, 27 September 2005 06:26:57 UTC