OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

unitsml message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [unitsml] WSDL Example for Discussion


Quoting "Stuart Chalk" <schalk@unf.edu>:

> As we talked about yesterday please find below information regarding  
>  an example WSDL service that I have put up.
>
> The service converts temperature and requires a value and a unit as   
> input parameters.  The URL of the WSDL is
> http://chalk.coas.unf.edu:8080/axis2/services/tempConvert?wsdl
> (...)
> You can play around with the other methods getCelcius and  
> getFarenheit  and units F and K
>
> Attached is an example file with the unitsML WSDLConversionFrom   
> element referencing the WSDL above.
> (Bob the code references a slightly diferent version of the   
> SimpleSchema I put up)
>
> Personally, I think the initialUnit is not required because the   
> pointer is to the generic conversion
> service not to a method that requires a unit of kelvin as default.
>
> Thoughts?

I don't think we have (anywhere near) enough information in the  
WSDLConversionFrom element. Which endpoint to use, what to put in  
which parameters, where to put the numerical value of the unit, is  
lacking.

I was playing around a bit with it:

import edu.unf.coas.chalk.tempconvert.*;

public class Client {
         public static void main(String[] args) {
                 TempConvert tc = new TempConvert();
                 System.out.print(args[0] + " " + args[1] + " = ");
                 TempConvertPortType port = tc.getTempConvertSOAP12PortHttp();
                 try {
                         String res = port.getKelvin(args[0], args[1]);
                         System.out.print(res + ", ");
                         res = port.getFahrenheit(args[0], args[1]);
                         System.out.print(res + ", ");
                         res = port.getCelcius(args[0], args[1]);
                         System.out.println(res);
                 } catch (Exception ex) {
                         System.out.println("EX : " + ex);
                         ex.printStackTrace(System.out);
                 }
         }
}

(the content of the edu.unf.coas.chalk.tempconvert package were  
generated by wsimport -keep -extension on a locally edited copy of the  
WSDL as wsimport doesn't like the xs:any reference)

Here are some observations (not unitsml related)
- The WSDL seems broken? (try to run java's wsimport on it)
- 10C =  283 K, 50 ?F, 10 ?C
- 10.0 = <value unit="K">283.2</value>, 50.0 ?F, 10.0 ?C <-- wondering  
what's happening here..


design of the process: You noticed that the initialUnit is  
superfluous. It only is because you give the current unit explicitly  
(i.e. the part of unit=C above). From the document point of view the  
value of having initialUnit in is better than having it only as  
(encoded, hidden, documented or whatever) argument to the (http or  
soap) invocation of one of the methods. You say it's a generic  
service, that's true, on the other hand the more generic the services  
are the harder it becomes to encode that in unitsml. Values that we  
can expect any unitsml processor to have available are the desired and  
the current unit, as well as the numerical value(s). We need to  
communicate how to encode these (e.g. in xml transport, element or  
attribute? name of the thing?). We need to communicate where to put  
them. In the http transport case e.g. we'd need to provide a sample  
template. The less we specify, the more the processor has to calculate  
on its own and the less likely it becomes that unitsml processors  
other than the ones we write will support all the necessary cases to  
deduce arguments as general as possible. So I'd say, we specify more.  
Atm after all we only have: "Here is a file telling you how to reach  
and where to find N functions". We EXPECT these functions to be units  
and conversion related. But we don't have a naming convention for the  
methods. If in the file there are two functions f(x,y) and g(a,b,c)  
we'd neither know (programmatically) what x and y (or a, b and c  
respectively) mean, or which of the two methods to call. So, we might  
also suggest naming conventions on parameters and methods so that we  
can spare the information from the document. But we need that  
information...

In that light, of course the most accessible services only take one  
parameter (the numerical value), encode from and to units in their  
name and have e.g. the hint "convert" embedded. They should use (e.g.)  
"value" as name of the numerical value parameter. It should be obvious  
what to do with convertCelsiusKelvin(value):  
http...../convertCelsiusKelvin?value=x

Of course (from a CS POV) this is ugly. Then again the code for the  
stuff mentioned in previous paragraph could easily written by a  
program referring to a DB of existing conversions, calling a generic  
function, but I digress...

I just talked to Bob about the necessary information in the instance  
document as well as in the guidelines. I'll try to outline the things  
that I think should be in the document, in the guidelines, and thus  
what we require the processor to be able to do (i.e. sketch out above  
thoughts to concrete suggestions). I'll continue on that later.

-Martin


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]