From mgruenb at gmx.net Tue Mar 2 13:05:08 2004 From: mgruenb at gmx.net (Michael Gruenberger) Date: Tue Mar 2 13:46:44 2004 Subject: [MOBY-l] A Java web service problem Message-ID: <1078250708.3392.121.camel@vogel> Hello everyone, I've registered a web service written in Java (using AXIS) with BioMOBY, but I'm having problems with the data type my web service returns. Mark has already helped me through all the other steps, but I'm completely stuck here, so any help would be really appreciated! If anyone has already written a web service in Java that works with BioMOBY it would be great if you could send me some source code or examples. OK, here the problem: My Java web service looks like this: public String getPBfromGO(String goid) { create a String of XML with data for BioMOBY clients Base64 encode and return the String } This means that I'm returning a string in the SOAP message: w3c/XMLSchema-instance/type = http://XMLSchema/string But Marks client expects: w3c/XMLSchema-instance/type = http://schemas/soap/encoding/base64 So the question is how to write my Java web service to return a Base64 type instead of a String type (using AXIS)? Or maybe CDATA is easier? Below is Marks last reply to my problem, which might help clarify my problem. Cheers, Michael. -----Forwarded Message----- From: Mark Wilkinson To: Michael Gruenberger Subject: Re: [MOBY] Re: [MISC] Re: Registering existing web services withMOBY Date: Tue, 02 Mar 2004 09:09:07 -0800 Below is the message structure from my service first, and then from your service. Comments on the messages follow: ================== MINE ========================== ***** ***** PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4K ICAgICAgPG1vYnk6TU9CWSB4bWxuczptb2J5PSdodHRwOi8vd3d3 LmJpb21vYnkub3JnL21vYnknIHhtbG5zPSdodHRwOi8vd3d3LmJp b21vYnkub3JnL21vYnknPgogICAgICAgIDxtb2J5OlJlc3BvbnNl IG1vYnk6YXV0aG9yaXR5PSdpbGx1bWluYWUuY29tJz4KICAgICAg ICA8bW9ieTpxdWVyeVJlc3BvbnNlIHF1ZXJ5SUQ9JzEnLz4KICAg IDwvbW9ieTpSZXNwb25zZT4KICAgICAgPC9tb2J5Ok1PQlk+Cg== ===================================================== =========== YOURS ================================== rO0ABXQByjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+CiAgIDxtb QlkgeG1sbnM6bW9ieT0naHR0cDovL3d3dy5iaW9tb2J5Lm9yZy9tb2J5Jz4KICAgICAgP UmVzcG9uc2UgbW9ieTphdXRob3JpdHk9J2h0dHA6Ly93d3cucGF0aGJhc2UubmV0Jz4KI ICAgPG1vYnk6cXVlcnlSZXNwb25zZT4KCQk8bW9ieTpDb2xsZWN0aW9uIG1vYnk6YXJ0a bWU9J0tub3duX1BhdGhiYXNlX0ltYWdlc193aXRoX3NwZWNpZmljX0dPX0lEJz4KCQkgI OlNpbXBsZT4KCQkgICAgPE9iamVjdCBuYW1lc3BhY2U9J1BhdGhiYXNlX1BCJyBpZD0nJ ICAgPC9PYmplY3Q+CgkJICA8L21vYnk6U2ltcGxlPgoJCTwvbW9ieTpDb2xsZWN0aW9uP ICAgICA8L21vYnk6cXVlcnlSZXNwb25zZT4KICAgICAgPC9tb2J5OlJlc3BvbnNlPgogI Ynk6TU9CWT4K ======================================================= I have put ***'s at the points where the message is wonky. My message is encoded in the format (abbreviated URI's): w3c/XMLSchema-instance/type = http://schemas/soap/encoding/base64 Yours is: w3c/XMLSchema-instance/type = http://XMLSchema/string This is no doubt the source of the problem. Otherwise, your message structure seems to be compatible with mine in all other ways (that I can see by eye, though XML isn't particularly human-readable ;-) ) I think once you figure out how to pass base64 encoded data *as* base64 encoded soap content, you will have solved the problem! > - Do I have to change the return type from String to soemthing else? But > without hand-coding the SOAP message I can only return native Java > types, e.g. String, int, float, Hashtable etc and only String seems to > make sense for XML data This is beyond my scope of knowlege, I'm afraid... > My service is sending Base64 at the moment, so if you should be able to > see in your error logs what the problem is. The debugYourService seems > to be handling it fine... It isn't, actually. If it were working properly it would actually be decoding it in the very last step, and you would see the base64 printed to your screen as raw XML... so debugYourService is only getting as far as it can before stopping. -- Michael Gruenberger Computer Officer, University of Cambridge Developer, Pathbase, http://www.pathbase.net PGP-Public Key ID: 278E1DFF -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: This is a digitally signed message part Url : http://biomoby.org/pipermail/moby-l/attachments/20040302/e813080a/attachment-0001.bin From markw at illuminae.com Tue Mar 2 13:47:14 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Tue Mar 2 13:53:02 2004 Subject: [MOBY-l] moby-l list settings Message-ID: <1078253234.1917.113.camel@localilluminae.com> Due to the amount of spam I have had to moderate in the past couple of months, I have switched this list to member-only posting. If you have trouble getting your postings through, please email me directly and I'll try to fix the problem. Mark -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From senger at ebi.ac.uk Tue Mar 2 13:55:17 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Tue Mar 2 14:01:09 2004 Subject: [MOBY-l] A Java web service problem In-Reply-To: <1078250708.3392.121.camel@vogel> Message-ID: > So the question is how to write my Java web service to return a Base64 > type instead of a String type (using AXIS)? Or maybe CDATA is easier? > Your method must return type byte[] - for that Axis create bas64 encoding. That's hopefully all. Martin -- Martin Senger EMBL Outstation - Hinxton Senger@EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From mgruenb at gmx.net Thu Mar 4 04:32:30 2004 From: mgruenb at gmx.net (Michael Gruenberger) Date: Thu Mar 4 04:38:09 2004 Subject: [MOBY-l] A Java web service problem In-Reply-To: References: Message-ID: <1078392750.3051.5.camel@vogel> Thanks Martin, it has indeed worked and the data type returned from my web service is now: xsi:type="ns2:base64Binary" but Perl/scripts/debugYourService www.pathbase.net getPBfromGO scripts/goid.moby (with goid 0005224) still doesn't decode it and Marks CGI client still gives the same error message. Any other ideas? Cheers, Michael. On Tue, 2004-03-02 at 18:55, Martin Senger wrote: > > So the question is how to write my Java web service to return a Base64 > > type instead of a String type (using AXIS)? Or maybe CDATA is easier? > > You method must return type byte[] - for that Axis create bas64 > encoding. That's hopefully all. > > Martin From senger at ebi.ac.uk Thu Mar 4 05:05:26 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Thu Mar 4 05:11:16 2004 Subject: [MOBY-l] A Java web service problem In-Reply-To: <1078392750.3051.5.camel@vogel> Message-ID: > still doesn't decode it and Marks CGI client still gives the same error > message. > What does the error message say? Martin -- Martin Senger EMBL Outstation - Hinxton Senger@EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From mgruenb at gmx.net Thu Mar 4 05:36:22 2004 From: mgruenb at gmx.net (Michael Gruenberger) Date: Thu Mar 4 05:41:52 2004 Subject: [MOBY-l] A Java web service problem In-Reply-To: References: Message-ID: <1078396581.3051.14.camel@vogel> The CGI client output error message: BioMOBY Service: getPBfromGO consumes a Gene Ontology accession number and returns a collection of associated Pathbase accession numbers. ________________________________________________________________________ Result for GO:0005224 Service returned no response =================================================================== scripts/debugYourService www.pathbase.net getPBfromGO scripts/goid.moby: It just outputs the Base64 encoded message again. It doesn't decode it. No error message as far as I can see. Here the relevant part of the output (with the Base64 stuff cut short): ... Date: Thu, 04 Mar 2004 10:29:32 GMT Server: Apache Coyote/1.0 Content-Type: text/xml; charset=utf-8 Client-Date: Thu, 04 Mar 2004 10:29:14 GMT Client-Response-Num: 1 Client-Transfer-Encoding: chunked Set-Cookie: JSESSIONID=47867777393E99565BDE4F04BFBF9585; Path=/axis ck8wQUJYUUNORHc[cut]...[cut]JQ0FnUEM5dGIySjVPazFQUWxrKwpDZz09 SOAP::Deserializer::deserialize: () SOAP::Parser::decode: () SOAP::SOM::new: () rO0ABX[cut]...[cut]C9tb2J5Ok1PQlk+ Cg==SOAP::Data::DESTROY: () SOAP::Data::DESTROY: () .... On Thu, 2004-03-04 at 10:05, Martin Senger wrote: > > still doesn't decode it and Marks CGI client still gives the same error > > message. > > > What does the error message say? > > Martin From senger at ebi.ac.uk Thu Mar 4 06:34:15 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Thu Mar 4 06:40:04 2004 Subject: [MOBY-l] A Java web service problem In-Reply-To: <1078396581.3051.14.camel@vogel> Message-ID: As I understand you are using Mark's client to access your service. The client indicates "Service returned no response". But obviouly your service got iys request. If this is the case I would recommend: 1) to look into your service code and trace step by step what it does with this particular request, 2) to try an independent client, perhaps one written in Java, to see if its behaviour is the same as the Mark's one, For this type of debugging it would be easier to go back (just for a while) to type String - and use TCP monitor (provided by Axis) to see what is really on the wire. Remember that I already suggested to you to give me the endpoint of your service and I can test it from here by my clients (which is roughly the same as ad 2) above). Martin -- Martin Senger EMBL Outstation - Hinxton Senger@EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From markw at illuminae.com Thu Mar 4 08:45:39 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Thu Mar 4 08:51:35 2004 Subject: [MOBY] Re: [MOBY-l] A Java web service problem In-Reply-To: <1078396581.3051.14.camel@vogel> References: <1078396581.3051.14.camel@vogel> Message-ID: <1078407939.1730.8.camel@localilluminae.com> Debugging using the CGI client is not a good idea, since it will die "gracefully" under most failures. "Service returned no response" generally means that it DID return a response, but the content of the response was empty or uninterpretable. Stick to the command-line clients for debugging, under most circumstances. Viji - do you have any advice in this situation? M On Thu, 2004-03-04 at 02:36, Michael Gruenberger wrote: > The CGI client output error message: > > BioMOBY Service: getPBfromGO > consumes a Gene Ontology accession number and returns a collection of > associated Pathbase accession numbers. > ________________________________________________________________________ > Result for GO:0005224 > Service returned no response > > =================================================================== > > scripts/debugYourService www.pathbase.net getPBfromGO scripts/goid.moby: > > It just outputs the Base64 encoded message again. It doesn't decode it. > No error message as far as I can see. Here the relevant part of the > output (with the Base64 stuff cut short): > > > ... > Date: Thu, 04 Mar 2004 10:29:32 GMT > Server: Apache Coyote/1.0 > Content-Type: text/xml; charset=utf-8 > Client-Date: Thu, 04 Mar 2004 10:29:14 GMT > Client-Response-Num: 1 > Client-Transfer-Encoding: chunked > Set-Cookie: JSESSIONID=47867777393E99565BDE4F04BFBF9585; Path=/axis > > > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:xsd="http://www.w3.org/1999/XMLSchema" > xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"> > > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:ns1="http://biomoby.org/"> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:ns2="http://www.w3.org/2001/XMLSchema">ck8wQUJYUUNORHc[cut]...[cut]JQ0FnUEM5dGIySjVPazFQUWxrKwpDZz09 > > > > SOAP::Deserializer::deserialize: () > SOAP::Parser::decode: () > SOAP::SOM::new: () > rO0ABX[cut]...[cut]C9tb2J5Ok1PQlk+ > Cg==SOAP::Data::DESTROY: () > SOAP::Data::DESTROY: () > .... > > > On Thu, 2004-03-04 at 10:05, Martin Senger wrote: > > > still doesn't decode it and Marks CGI client still gives the same error > > > message. > > > > > What does the error message say? > > > > Martin > > _______________________________________________ > moby-l mailing list > moby-l@biomoby.org > http://biomoby.org/mailman/listinfo/moby-l -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From viji at gsf.de Thu Mar 4 09:26:33 2004 From: viji at gsf.de (Viji) Date: Thu Mar 4 09:34:42 2004 Subject: [MOBY] Re: [MOBY-l] A Java web service problem In-Reply-To: <1078407939.1730.8.camel@localilluminae.com> References: <1078396581.3051.14.camel@vogel> <1078407939.1730.8.camel@localilluminae.com> Message-ID: <40473C99.9020207@gsf.de> Hi, My first try to check whether my service works will always be 1. with Martin's run-cmdline-client script . When it passes there, I go to next step. 2. Then, I try from the client(MOBY). But many times, my services worked fine with the above script, but give a "Service returned no response" in the client(MOBY). In all those situations, either there was a problem with the input MOBY object(not parsed properly for input value or a wrong schema ) or an output object (again, wrong schema of the output MOBY object) or my machine was not visible for the server to get something. 3. Moreover, as Martin suggested, I have used a monitor(in my case, SOAP monitor in AXIS) for SOAP request and response. That will also help to debug the problem. 4. You will get some error message or some output in your server where you have deployed your service (when it was tried to access ). Check that also... I couldn't think anything else apart from the above. Michael, did you get a chance to look into the sample code in java (for registering and retrieving a service) which was provided in the list ? But all my services have text-xml as output which will be plugged in an output MOBY object inside . This was much simpler and easier for me for all of my services. Hope it helps. Regards Viji Mark Wilkinson wrote: >Debugging using the CGI client is not a good idea, since it will die >"gracefully" under most failures. "Service returned no response" >generally means that it DID return a response, but the content of the >response was empty or uninterpretable. > >Stick to the command-line clients for debugging, under most >circumstances. > >Viji - do you have any advice in this situation? > >M > >On Thu, 2004-03-04 at 02:36, Michael Gruenberger wrote: > > >>The CGI client output error message: >> >>BioMOBY Service: getPBfromGO >>consumes a Gene Ontology accession number and returns a collection of >>associated Pathbase accession numbers. >>________________________________________________________________________ >>Result for GO:0005224 >>Service returned no response >> >>=================================================================== >> >>scripts/debugYourService www.pathbase.net getPBfromGO scripts/goid.moby: >> >>It just outputs the Base64 encoded message again. It doesn't decode it. >>No error message as far as I can see. Here the relevant part of the >>output (with the Base64 stuff cut short): >> >> >>... >>Date: Thu, 04 Mar 2004 10:29:32 GMT >>Server: Apache Coyote/1.0 >>Content-Type: text/xml; charset=utf-8 >>Client-Date: Thu, 04 Mar 2004 10:29:14 GMT >>Client-Response-Num: 1 >>Client-Transfer-Encoding: chunked >>Set-Cookie: JSESSIONID=47867777393E99565BDE4F04BFBF9585; Path=/axis >> >> >>>xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >>xmlns:xsd="http://www.w3.org/1999/XMLSchema" >>xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"> >> >> >soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" >>xmlns:ns1="http://biomoby.org/"> >> >xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>xmlns:ns2="http://www.w3.org/2001/XMLSchema">ck8wQUJYUUNORHc[cut]...[cut]JQ0FnUEM5dGIySjVPazFQUWxrKwpDZz09 >> >> >> >>SOAP::Deserializer::deserialize: () >>SOAP::Parser::decode: () >>SOAP::SOM::new: () >>rO0ABX[cut]...[cut]C9tb2J5Ok1PQlk+ >>Cg==SOAP::Data::DESTROY: () >>SOAP::Data::DESTROY: () >>.... >> >> >>On Thu, 2004-03-04 at 10:05, Martin Senger wrote: >> >> >>>>still doesn't decode it and Marks CGI client still gives the same error >>>>message. >>>> >>>> >>>> >>> What does the error message say? >>> >>> Martin >>> >>> >>_______________________________________________ >>moby-l mailing list >>moby-l@biomoby.org >>http://biomoby.org/mailman/listinfo/moby-l >> >> From markw at illuminae.com Thu Mar 4 10:47:43 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Thu Mar 4 10:53:33 2004 Subject: [MOBY] Re: [MOBY-l] A Java web service problem In-Reply-To: References: Message-ID: <1078415263.1616.29.camel@localilluminae.com> my messages are encoded as: xsi:type = http://schemas.xmlsoap.org/soap/encoding/base64 your messages are encoded as: xsi:type = http://www.w3.org/2001/XMLSchema/base64Binary That is likely the source of the problem. Interestingly, soap:base64 is defined as: So it shouldn't *really* make a difference. I might jot a quick note to Paul Kulchenko later today to ask him if this is a bug in SOAP Lite, or if the payload really does have to be defined by a soap encoding data-type rather than directly as an XML Schema data-type. In the meantime, perhaps you should do as Martin suggests and switch back to regular strings... interestingly, Viji's services pass their output as xsi:type=http://www.w3.org/2001/XMLSchema/string i.e. the SOAP Body data-type is defined by an XML schema, rather than a SOAP encoding style, so it seems more and more like the problem we are seeing is a bug in SOAP::Lite... Michael, can you put your services back to the state they were in when you were passing your data as string so that I can look at the output again? Thanks! Mark On Thu, 2004-03-04 at 03:34, Martin Senger wrote: > As I understand you are using Mark's client to access your service. The > client indicates "Service returned no response". But obviouly your service > got iys request. If this is the case I would recommend: > > 1) to look into your service code and trace step by step what it does > with this particular request, > 2) to try an independent client, perhaps one written in Java, to see if > its behaviour is the same as the Mark's one, > > For this type of debugging it would be easier to go back (just for a > while) to type String - and use TCP monitor (provided by Axis) to see what > is really on the wire. > > Remember that I already suggested to you to give me the endpoint of > your service and I can test it from here by my clients (which is roughly > the same as ad 2) above). > > Martin -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From senger at ebi.ac.uk Tue Mar 9 06:00:46 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Tue Mar 9 06:12:40 2004 Subject: [MOBY] Re: [MOBY-l] A Java web service problem In-Reply-To: <1078829629.3071.76.camel@vogel> Message-ID: > thanks for all your suggestions and sorry for the delay in getting back > to you (I've been in hospital for the last few days). > welcome back, I hope you feel well Regarding the problem of interoperability between java client and perl services, Viji's recent problem reminded me that the issue may be because wrongly set SOAPAction header. The jMoby CentralImp class sets it from the given namespace. But this is exactlky the think you can clearly see when usig the SOAP/TCP monitor. If/when you are too frustrated perhaps consider to drop here at Hinxton (I guess it must be about 10 miles, or even less, surely better than for most of other BioMoby users :-)) and we may look at it togerther. Cheers, Martin -- Martin Senger EMBL Outstation - Hinxton Senger@EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From viji at gsf.de Tue Mar 9 06:45:57 2004 From: viji at gsf.de (Viji) Date: Tue Mar 9 06:54:02 2004 Subject: [MOBY] Re: [MOBY-l] A Java web service problem In-Reply-To: <1078829629.3071.76.camel@vogel> References: <1078415263.1616.29.camel@localilluminae.com> <1078829629.3071.76.camel@vogel> Message-ID: <404DAE75.8070903@gsf.de> Hi Michael, Wish you feel the best. Below is the link that will take you to my posting (on Feb 10th in moby-l mailing list) on the sample java source code for registering and retrieving a moby compliant service. http://open-bio.org/pipermail/moby-l/2004-February/000757.html If this doesn't work, get back to me and I can send you. Hope I can help you. Regards Viji Michael Gruenberger wrote: >Hi Mark and Martin and Viji, > >thanks for all your suggestions and sorry for the delay in getting back >to you (I've been in hospital for the last few days). > >I have reset my service to output the XML as String (but without the >CDATA, because it doesn't seem to make a difference). My service seems >to be receiving the GOid's from MOBY, so I don't think the input is the >problem. I haven't used AXIS monitor yet, but I'll give it a try in the >next few days to see if there are any error messages (there aren't any >in the error logs). > >Viji, do you mind sending me some example code you are using for your >services, then I should be able to copy your style and adjust it for my >service?! > >Cheers, > >Michael. > >On Thu, 2004-03-04 at 15:47, Mark Wilkinson wrote: > > >>my messages are encoded as: >> >>xsi:type = http://schemas.xmlsoap.org/soap/encoding/base64 >> >>your messages are encoded as: >> >>xsi:type = http://www.w3.org/2001/XMLSchema/base64Binary >> >>That is likely the source of the problem. >> >>Interestingly, soap:base64 is defined as: >> >> >> >> >> >>So it shouldn't *really* make a difference. I might jot a quick note to >>Paul Kulchenko later today to ask him if this is a bug in SOAP Lite, or >>if the payload really does have to be defined by a soap encoding >>data-type rather than directly as an XML Schema data-type. >> >>In the meantime, perhaps you should do as Martin suggests and switch >>back to regular strings... interestingly, Viji's services pass their >>output as >> >>xsi:type=http://www.w3.org/2001/XMLSchema/string >> >>i.e. the SOAP Body data-type is defined by an XML schema, rather than a >>SOAP encoding style, so it seems more and more like the problem we are >>seeing is a bug in SOAP::Lite... >> >>Michael, can you put your services back to the state they were in when >>you were passing your data as string so that I can look at the output >>again? >> >>Thanks! >> >>Mark >> >> >> > > > From senger at ebi.ac.uk Tue Mar 9 07:07:07 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Tue Mar 9 07:13:22 2004 Subject: [MOBY] Re: [MOBY-l] A Java web service problem In-Reply-To: <1078833900.3071.92.camel@vogel> Message-ID: > (Mark) Just a suggestion: It might be useful to post these files on the > Moby web site (if they aren't yet). Maybe here: > http://www.biomoby.org/moby-live/Java/docs/index.html ?! > This page is maintained by me. I will look at it... Thanks for the suggestion. Martin -- Martin Senger EMBL Outstation - Hinxton Senger@EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From dag at sonsorol.org Wed Mar 10 21:30:13 2004 From: dag at sonsorol.org (Chris Dagdigian) Date: Wed Mar 10 21:35:54 2004 Subject: [MOBY-l] O|B|F mail update -- making progress on anti-spam issues with our mailing lists Message-ID: <404FCF35.5010705@sonsorol.org> Hi folks, Apologies for the cross-posting but I just wanted to give our list members and admins an update on some new anti-spam measures we have (re)enabled. Good news to report basically... The most annoying spams recently have been the simple plain text messages without any HTML, attachments or mime-encoding that just slip right by our filters. Some lists have been forced to switch over to "only members can post" while other lists (like bioperl) have consistantly voted to stay as open as possible. I'll update you on our current efforts as well as a new effort that is about 24 hours old but already working really well so far. Until yesterday we had three main lines of defense against spam: 1. The mailserver itself (rejects mail from nonexistant domains, etc.) 2. The sendmail Mail::Milter extention (MIMEDefang+SpamAssassin are used to scan all incoming messages. Anything that scores higher than 8.0 is simply discarded automatically. MIMEDefang also strips dangerous attachments like .exe and .pif) 3. Our mailing list moderation queue (emails with attachments, odd MIME encodings and spamassassin scores from 0.0 - 7.9 are held in a moderator queue for a human to make an accept/discard decision) Here are some stats on how this system worked over the past few days: o 138 attempts to relay mail through our server blocked o 192 emails blocked due to forged or unresolvable sender domain o 577 emails discarded automatically by SpamAssassin+MIMEDefang This system worked *ok* but put a lot of work onto the shoulders of our list admins who constantly had to weed out the spam caught up in the mailing list moderator system. Yesterday I brought online another system that seems to be already working really well. It catches spam before we even accept it on our server which makes the load easier on both our scanning software and our human list moderators. The system is the RBL+ blackhole list from http://www.mail-abuse.org and the way it works is that we now query (via DNS) the RBL+ database each time someone connects to our mail server. If the RBL check against the sender IP address comes back as "positive" we reject the incoming email. RBL+ is a combination of four constantly updated databases: 1. RBL -- IP addresses of known, documented spammers and spam machines 2. RSS -- IP addresses of documented/tested unsecured email relays 3. OPS -- IP addresses of documented open proxy servers w/ spam history 3. DUL -- IP addresses belonging to ISP dialup and DHCP customers We have already blocked 137 email attempts in the last 24 hours from machines that were listed in one or more of the RBL databases. It is too soon to tell but if the RBL+ system plus our existing anti-spam measures work well enough we may be in a position where our "closed" mailing lists could revert back to being 'anyone can post'. Feedback appreciated. Especially if you get a "reject" message from us saying that you are listed in the RBL+ blackhole database! Regards, Chris O|B|F From fgibbons at hms.harvard.edu Tue Mar 16 18:07:28 2004 From: fgibbons at hms.harvard.edu (Frank Gibbons) Date: Tue Mar 16 18:10:30 2004 Subject: [MOBY-l] Interpreting results from Service->execute() Message-ID: <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> Hi MOBYers, I've been playing with MOBY all day (installed Perl 5.8.3 just for this!), and find that it works pretty well. I've successfully called plantspGetProtein from sdsc.edu and GetPubmed from prometheus.brc.mcw.edu. Now I'm trying to call getInteractingMethods from pdg.cnb.uam.es, and although it returns something, I just don't understand what it returns. The code I'm using to call it is appended at the end of this (having been cribbed from Catherine Letondal and Ken Streube - thanks to both for great tutorials!), but the important part is this: my $pid = "EBI-141"; my $result = $service->execute( XMLinputlist => [ ["object$i", ""] ] ) || 'None'; Response is: Now I'm not XML expert, but it's certainly not gibberish, or an error condition. I'm fairly sure the accession number I'm using is correct (it works when I go to IntAct's webpage): if it's not correct, shouldn't the service let me know somehow ("ID not found"). And if it is correct, where's my information? If the id is correct, but there are in fact no interacting methods, shouldn't it say "There are no interacting methods"? Instead it seems to just be acknowledging my request, but not providing any new information. I'll be the first to admit ignorance of XML, SOAP, etc. If this is a really dumb question, I'll be happy to read whatever you guys suggest. But I'm really hoping there's a simpler answer Thanks (in advance), -Frank Gibbons ========================= appended code here ========================= #!/home/fgibbons/bin/perl use MOBY::Client::Central; use MOBY::Client::Service; use strict; my $Central = MOBY::Client::Central->new(); my ($Services, $REG) = # ); # $Central->findService( authURI => 'prometheus.brc.mcw.edu', # serviceName => 'GetPubmed' $Central->findService( authURI => 'pdg.cnb.uam.es', serviceName => 'getInteractingMethods' ); unless ($Services) { print "Service discovery failed with the following errror: ", $REG->message; exit(0); } my @PIDs = ('1BIJ', '4HHB'); my @IntActIDs = ('EBI-141'); printf("%-35s\t\t %s\n%s\n", "Service", "provided by", "="x80); foreach my $S ( #sort { #$a->authority cmp $b->authority or #$a->name cmp $b->name } @{$Services}) { printf("%-35s\t\t%s%s\n", $S->name, $S->authority, $S->description); my $WSDL = $Central->retrieveService($S); my $service = MOBY::Client::Service->new(service => $WSDL); my $i = 0; foreach my $pid (@IntActIDs) { my $result = $service->execute( XMLinputlist => [ ["object$i", ""] ] ) || 'None'; print "Result ($i): $result\n"; $i++; } } PhD, Computational Biologist, Harvard Medical School BCMP/SGM-322, 250 Longwood Ave, Boston MA 02115, USA. Tel: 617-432-3555 Fax: 617-432-3557 http://llama.med.harvard.edu/~fgibbons From markw at illuminae.com Tue Mar 16 18:21:45 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Tue Mar 16 18:27:09 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> References: <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> Message-ID: <1079479305.1856.188.camel@localilluminae.com> Hi Frank, I'm pleased that you have had relatively good luck using MOBY! w.r.t. your specific question: On Tue, 2004-03-16 at 15:07, Frank Gibbons wrote: > Response is: > > > xmlns='http://www.biomoby.org/moby'> > > > > > > Now I'm not XML expert, but it's certainly not gibberish, or an error > condition. I'm fairly sure the accession number I'm using is correct (it > works when I go to IntAct's webpage): if it's not correct, shouldn't the > service let me know somehow ("ID not found"). And if it is correct, where's > my information? If the id is correct, but there are in fact no interacting > methods, shouldn't it say "There are no interacting methods"? Instead it > seems to just be acknowledging my request, but not providing any new > information. The service is, in fact, responding correctly according to the API, where the following statement appears: "There are as many queryResponse elements as there were queryInput elements (if a service cannot respond to a specific query for whatever reason, this element may be empty!)." When I designed this aspect of the behaviour, my intention was to avoid having to enumerate all of the different possible reasons why something might fail; it was sufficient to simply return an "I don't know" as an empty node in the XML. There is no implication therein that the ID you passed is invalid, nor anything else... and in fact, for non-authoritative services there is no way for the service provider to know this in any case! Saying "ID unknown" (or whatever) might incorrectly imply that the ID is invalid, rather than just replying that this *particular* service doesn't know the answer to your question, thus the behaviour is to simply return you 'null' if the service can't respond. The client-side paradigm you might want to use is that if you can't get the result from one service, iterate through the valid services that provide your desired output until you *do* get a result. If you don't get a result from anyone, then you are out of luck, but that still doesn't imply that the ID number you used is invalid :-) > But I'm > really hoping there's a simpler answer The simpler answer might be that the service isn't working properly ;-) We'll have to ask our Spanish friends to check it... hopefully they are listening! good luck! Mark -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From jmfernandez at cnb.uam.es Wed Mar 17 09:37:45 2004 From: jmfernandez at cnb.uam.es (=?ISO-8859-1?Q?Jos=E9_Mar=EDa_Fern=E1ndez_Gonz=E1lez?=) Date: Wed Mar 17 09:43:17 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <1079479305.1856.188.camel@localilluminae.com> References: <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> Message-ID: <405862B9.2050800@cnb.uam.es> > Hi MOBYers, > > I've been playing with MOBY all day (installed Perl 5.8.3 just for this!), and find that it works pretty well. I've successfully called plantspGetProtein from sdsc.edu and GetPubmed from prometheus.brc.mcw.edu. > > Now I'm trying to call getInteractingMethods from pdg.cnb.uam.es, and although it returns something, I just don't understand what it returns. The code I'm using to call it is appended at the end of this (having been cribbed from > Catherine Letondal and Ken Streube - thanks to both for great tutorials!), but the important part is this: > > my $pid = "EBI-141"; > my $result = > $service->execute( XMLinputlist => [ > ["object$i", > ""] > ] ) || 'None'; The shortest answer is: there is no answer. (please, follow reading!) The larger one: EBI-141 is an IntAct identifier, which corresponds to an interactor in this case (P53905 from UniProt). The service was designed thinking on protein ids because we are integrating data both from IntAct and other sources (like REGIA or VPiL). So, the identifier is not found and the method returns nothing... Also, it doesn't belong to any of the accepted input namespaces (AGI_LocusCode, Swiss-Prot, SPTR, TrEMBL) But it is true, there are two bugs: one related to signal an invalid namespace, and other related to say 'no output'. I'm fixing them since now. > > > The simpler answer might be that the service isn't working properly ;-) > We'll have to ask our Spanish friends to check it... hopefully they are > listening! You had enough luck (at least this time ;-)! > > good luck! > > Mark > > Cheers, Jos? Mar?a -- Jos? Mar?a Fern?ndez Gonz?lez e-mail: jmfernandez@cnb.uam.es Tlfn: (+34) 91 585 46 69 Fax: (+34) 91 585 45 06 Grupo de Dise?o de Proteinas Protein Design Group Centro Nacional de Biotecnolog?a National Center of Biotechnology C.P.: 28049 Zip Code: 28049 Campus Universidad Aut?noma. Cantoblanco, Madrid (Spain). From fgibbons at hms.harvard.edu Wed Mar 17 10:21:25 2004 From: fgibbons at hms.harvard.edu (Frank Gibbons) Date: Wed Mar 17 10:24:28 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <405862B9.2050800@cnb.uam.es> References: <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> Message-ID: <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> Jos? Mar?a, Thanks for your response. >The larger one: EBI-141 is an IntAct identifier, which corresponds to an >interactor in this case (P53905 from UniProt). > >The service was designed thinking on protein ids because we are >integrating data both from IntAct and other sources (like REGIA or VPiL). >So, the identifier is not found and the method returns nothing... Also, it >doesn't belong to any of the accepted input namespaces (AGI_LocusCode, >Swiss-Prot, SPTR, TrEMBL) In fact, I just figured this out. There must be an easy way to find out the required input/output for a service. In my ignorance, I resorted to going to that MOBY-S web-page that lets you select input data types, then shows what services accept that type. I selected each protein type in sequence, until I found your services. But since there are at least half a dozen different protein ID systems, it gets complicated. I guess I could have written a script to iterate through them all, then iterate through the services I'm interested in, to find one that works. But shouldn't it be possible, once I know which service I'm interested in, to figure out what input it's looking for? I'm thinking specifically in terms of finding out what are the acceptable namespaces. Of course, I'm sure it is possible (wouldn't it be in the WSDL?) - anyone care to point me to a description of this? :) >But it is true, there are two bugs: one related to signal an invalid >namespace, and other related to say 'no output'. I'm fixing them since now. > >> >>The simpler answer might be that the service isn't working properly ;-) This raises an issue that would seem to increase in importance as the number of available services increases: if a service either doesn't work properly (someone puts it up prematurely, for example), or doesn't work at all (it worked a while ago, but something broke, and nobody is fixing it), how are service consumers to know? This is especially true if the response for unrecognized input data is simply an empty message. Should there be a meta-service, that rates the other services in terms of reliability, percentage time that it's up, length of service, or other criteria? I'm not imagining that it would "Service A is much better than Service B", merely that "Service C was last reported working successfully on January 19, 2002." or "Service D has responded to 97% of all requests in the last week." Maybe there is something like this already? Anyway, thanks to you (and to Mark) for setting me straight. -Frank PhD, Computational Biologist, Harvard Medical School BCMP/SGM-322, 250 Longwood Ave, Boston MA 02115, USA. Tel: 617-432-3555 Fax: 617-432-3557 http://llama.med.harvard.edu/~fgibbons From markw at illuminae.com Wed Mar 17 12:11:58 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed Mar 17 12:19:59 2004 Subject: [MOBY-l] simple MOBY screen-scraper code Message-ID: <1079543518.1847.109.camel@localilluminae.com> Rebecca requested this from me this morning (in exchange for setting up some services for me at MIPS :-) ). It may be useful to others, so I am sending it to the list. This code takes the authority, servicename, namespace, and id and makes the call to the service, then prints an HTML table of the results via screen-scraping the moby client CGI's output. Modify this as you wish for your own purposes. M -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From jmfernandez at cnb.uam.es Wed Mar 17 13:13:01 2004 From: jmfernandez at cnb.uam.es (=?ISO-8859-1?Q?Jos=E9_Mar=EDa_Fern=E1ndez_Gonz=E1lez?=) Date: Wed Mar 17 13:18:33 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> References: <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> Message-ID: <4058952D.9020002@cnb.uam.es> > > In fact, I just figured this out. There must be an easy way to find out > the required input/output for a service. In my ignorance, I resorted to > going to that MOBY-S web-page that lets you select input data types, > then shows what services accept that type. I selected each protein type > in sequence, until I found your services. But since there are at least > half a dozen different protein ID systems, it gets complicated. I guess > I could have written a script to iterate through them all, then iterate > through the services I'm interested in, to find one that works. But > shouldn't it be possible, once I know which service I'm interested in, > to figure out what input it's looking for? I'm thinking specifically in > terms of finding out what are the acceptable namespaces. Of course, I'm > sure it is possible (wouldn't it be in the WSDL?) - anyone care to point > me to a description of this? :) Well, my preferred technique (for humans) is using the Ken Steube's "Service Instance Encyclopedia", which distills the list of services into a HTML using a CGI. http://plantsp.sdsc.edu/plantsp/cgi-bin/MOBY/list.services.cgi Obviusly, you can do it yourself using the available methods 'retrieveServiceNames' and 'findService' in MOBY::Client::Central object, if you are using Perl libraries. > >> But it is true, there are two bugs: one related to signal an invalid >> namespace, and other related to say 'no output'. I'm fixing them since >> now. >> >>> >>> The simpler answer might be that the service isn't working properly ;-) > I think there should be a common way to tell the most common errors, like an unrecognized namespace or an empty output. > > This raises an issue that would seem to increase in importance as the > number of available services increases: if a service either doesn't work > properly (someone puts it up prematurely, for example), or doesn't work > at all (it worked a while ago, but something broke, and nobody is fixing > it), how are service consumers to know? This is especially true if the > response for unrecognized input data is simply an empty message. Should > there be a meta-service, that rates the other services in terms of > reliability, percentage time that it's up, length of service, or other > criteria? I'm not imagining that it would "Service A is much better than > Service B", merely that "Service C was last reported working > successfully on January 19, 2002." or "Service D has responded to 97% of > all requests in the last week." Maybe there is something like this already? > The same problem is out there since years for CGI's. Some biological 'classical' web services are maintained by a team, but the input and output formats change, breaking all the programs which use it (I had some nasty experiences when I built a meta-threading server 3~4 years ago). Some other services remain working until they break, because they were built for a project which finished some years ago. The surviving ones are: 1) the most successful ones 2) those ones with support (money to pay a maintainer). Perhaps, the only way to tackle a piece of this problem is periodically doing some tests on the service. Some of them could be generic, like sending an ill-formed input or a correct object belonging to an incorrect namespace. The others should be provided by the service creator: two or three input objects which should give the same output. Obviusly, many services will not have a deterministic output, because they are based on a changing database, for instance. But for these cases the service creators could notify 'our service is still alive!'. You know, there is no easy way! Best Regards, Jos? Mar?a -- Jos? Mar?a Fern?ndez Gonz?lez e-mail: jmfernandez@cnb.uam.es Tlfn: (+34) 91 585 46 69 Fax: (+34) 91 585 45 06 Grupo de Dise?o de Proteinas Protein Design Group Centro Nacional de Biotecnolog?a National Center of Biotechnology C.P.: 28049 Zip Code: 28049 Campus Universidad Aut?noma. Cantoblanco, Madrid (Spain). From markw at illuminae.com Wed Mar 17 13:42:03 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed Mar 17 13:50:40 2004 Subject: [MOBY-l] simple MOBY screen-scraper code Message-ID: <1079548923.1850.116.camel@localilluminae.com> Weird! in my "sent" box, it has an attachment, and in my MOBY inbox it says it has an attachment, but the attachment is missing! Here is a re-send, with attachment again, but here is the code in-line to make sure it actually gets to you... #!/usr/bin/perl -w use strict; #============================= # you need to provide these... my $auth = $ARGV[0]; my $service= $ARGV[1]; my $namespace = $ARGV[2]; my $id = $ARGV[3]; #============================== # URL encode $auth =~s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg; $service =~s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg; $namespace =~s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg; $id =~s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg; use LWP::UserAgent; my $ua = LWP::UserAgent->new; # Initialize proxy settings from environment variables $ua->env_proxy; # Create a request my $req = HTTP::Request->new(GET => "http://mobycentral.cbr.nrc.ca/cgi-bin/gbrowse_moby?authority=$auth;servicename=$service;namespace=$namespace;id=$id"); $req->header('Accept' => 'text/html'); # Pass request to the user agent and get a respnse back my $res = $ua->request($req); # Check the outcome of the response unless ($res->is_success) { return; } my $content = $res->content; my @tablerows = $content =~ /SCRAPE_ME_START\s*\-\-\s*\>(.*?)\<\!\s*\-\-\s*SCRAPE_ME_END/g; print "\n"; print "
MOBY results
\n"; print "\n"; foreach (@tablerows){ print; print "\n"; } print "
\n"; print "
\n"; Original Message=============================== Rebecca requested this from me this morning (in exchange for setting up some services for me at MIPS :-) ). It may be useful to others, so I am sending it to the list. This code takes the authority, servicename, namespace, and id and makes the call to the service, then prints an HTML table of the results via screen-scraping the moby client CGI's output. Modify this as you wish for your own purposes. M -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From markw at illuminae.com Wed Mar 17 13:46:15 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed Mar 17 13:51:34 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> References: <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> Message-ID: <1079549174.1849.120.camel@localilluminae.com> On Wed, 2004-03-17 at 07:21, Frank Gibbons wrote: > But shouldn't it be > possible, once I know which service I'm interested in, to figure out what > input it's looking for? I'm thinking specifically in terms of finding out > what are the acceptable namespaces. Of course, I'm sure it is possible > (wouldn't it be in the WSDL?) - anyone care to point me to a description of > this? :) The WSDL could (in principle) tell you the service signature in terms of its structure (XSD) but not its semantics. For MOBY, the structure is ~irrelevant to us, since the ontology precisely defines the structure for both input and output. As such, we haven't even found the need to implement the creation of an XSD for our objects, hence the somewhat peculiar WSDL that you get from MOBY Central. Here's the code that does what you want: use MOBY::Client::Central; $m = MOBY::Client::Central->new; ($ss, $r) = $m->findService(authURI => $auth, serviceName => $name); $service = shift @{$ss}; print "Service $name from $auth is of type ".($service-type)."\n"; print "It consumes: \n"; $inputs = $service->input; foreach $in (@{$inputs}){ print "\t",$in->objectType,"\n"; print "\tin namespace(s)\n"; my $namespaces = $in->namespaces; foreach $ns(@{$namespaces}){ print "\t\t$ns\n"; } } print "It generates: \n"; $outputs = $service->output; foreach $out (@{$outputs}){ print "\t",$out->objectType,"\n"; print "\tin namespace(s)\n"; my $namespaces = $out->namespaces; foreach $ns(@{$namespaces}){ print "\t\t$ns\n"; } } > Should there be a > meta-service, that rates the other services in terms of reliability, > percentage time that it's up, length of service, or other criteria? We are discussing this up here in Canuk-land, but it isn't that easy - see below. > I'm not > imagining that it would "Service A is much better than Service B", merely > that "Service C was last reported working successfully on January 19, > 2002." or "Service D has responded to 97% of all requests in the last > week." Maybe there is something like this already? It is surprisingly hard to do this, since the registry does not have any role in your transaction with the service itself - it is merely a broker. On the other hand, we can "watch" peoples behaviour as they use the registry, and make statements like "9 out of 10 bioinformaticians who made this type of query chose this service provider". The problem of keeping services functional, or reporting on their functionality is something that I don't think we can address (any more than Google can address the problem of links being outdated or down at the moment you click them on the Google site). M -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From steube at sdsc.edu Wed Mar 17 13:47:49 2004 From: steube at sdsc.edu (Ken Steube) Date: Wed Mar 17 13:53:16 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <4058952D.9020002@cnb.uam.es> Message-ID: On Wed, 17 Mar 2004, Jos? Mar?a Fern?ndez Gonz?lez wrote: > Perhaps, the only way to tackle a piece of this problem is > periodically doing some tests on the service. Some of them could be > generic, like sending an ill-formed input or a correct object > belonging to an incorrect namespace. The others should be provided by > the service creator: two or three input objects which should give the > same output. Obviusly, many services will not have a deterministic > output, because they are based on a changing database, for instance. > But for these cases the service creators could notify 'our service is > still alive!'. There are two initiatives going on help to test a service to see if it's working. One problem is to know how to choose a good input so that you can expect a meaningful response from a particular service...the more you know about the biology behind the particular service, the more likely you are to specify a good input. 1) The new GBrowse client has two links toward the bottom (Snapdragon... and Arabidopsis...). Click on them to submit a particular input and then you can run the suggested service. The point here is we are suggesting a good choice of input. We need to add more examples for other services. This way is limited because usually a bunch of services come up and the user has to know which ones to try for that input. 2) The second way is a demo I recently used for a talk + live demo. http://plantsp.sdsc.edu/plantsp/html/service_demo.html This form allows you to enter a serviceName, authURI and a block of XML input. You can run any service by changing the three inputs on this form, but as you'll see I have filled out the form with values already entered that produce good results. I think this is a good way to test any service. Just create one form per service with appropriate values already filled in the three inputs. Now anyone can to go this form and test the service at any time they want to do so. Ken -- -- -- Ken Steube San Diego Supercomputer Center University of California, San Diego, MC 0505 9500 Gilman Drive San Diego, California, 92093-0505 USA FAX (858) 822-3610 From fgibbons at hms.harvard.edu Wed Mar 17 15:27:13 2004 From: fgibbons at hms.harvard.edu (Frank Gibbons) Date: Wed Mar 17 15:30:17 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <1079538843.1847.66.camel@localilluminae.com> References: <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> Message-ID: <5.2.1.1.2.20040317150815.01a5a120@email.med.harvard.edu> Mark, At 10:54 AM 3/17/2004, Mark Wilkinson wrote: >The WSDL could (in principle) tell you the service signature in terms of >its structure (XSD) but not its semantics. For MOBY, the structure is >~irrelevant to us, since the ontology precisely defines the structure >for both input and output. As such, we haven't even found the need to >implement the creation of an XSD for our objects, hence the somewhat >peculiar WSDL that you get from MOBY Central. Thanks for the code to show what the input/output is for each service. Since it didn't quite work with outputs that are collections, I'm appending my modified version here. In fact, it queries MOBY for all services, then prints an alphabetized (case-insensitive) list of services, handling both simple and collection outputs. I hope it's useful to someone else. Thanks again for answering my questions. -Frank ----------------------------------------- appended perl code ------------------------------------------------------------ use MOBY::Client::Central; $m = MOBY::Client::Central->new; #my ($auth, $name) = ('pdg.cnb.uam.es', 'getInteractions'); ($ss, $r) = $m->findService(); #authURI => $auth, serviceName => $name); my $i = 0; foreach my $service (sort { lc $a->name cmp lc $b->name } @{$ss} ) { $i++; print "$i: Service ", $service->name, " from ", $service->authority, " is of type ", $service->type, "\n"; print "It consumes: \n"; $inputs = $service->input; foreach $in ( @{$inputs} ) { print "\t", $in->objectType, "\n"; print "\t\tin namespace(s)\n"; my $namespaces = $in->namespaces; foreach $ns ( @{$namespaces} ) { print "\t\t\t\t$ns\n"; } } print "It generates "; $outputs = $service->output; foreach $out ( @{$outputs} ) { # Check for isCollection, each element of the collection should have an objectType if ($out->isCollection) { print "a collection of outputs:\n"; foreach my $simple (@{$out->Simples}) { print "\t", $simple->objectType, "\n"; print "\t\tin namespace(s)\n"; foreach $ns ( @{$simple->namespaces} ) { print "\t\t\t\t$ns\n"; } } } else { print "a single output:\n"; print "\t", $out->objectType, "\n"; print "\t\tin namespace(s)\n"; foreach $ns ( @{$out->namespaces} ) { print "\t\t\t\t$ns\n"; } } } print "\n", '-'x80, "\n"; } PhD, Computational Biologist, Harvard Medical School BCMP/SGM-322, 250 Longwood Ave, Boston MA 02115, USA. Tel: 617-432-3555 Fax: 617-432-3557 http://llama.med.harvard.edu/~fgibbons From gordonp at cbr.nrc.ca Wed Mar 17 15:30:12 2004 From: gordonp at cbr.nrc.ca (Paul Gordon) Date: Wed Mar 17 15:35:35 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <4058952D.9020002@cnb.uam.es> References: <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> <4058952D.9020002@cnb.uam.es> Message-ID: <4058B554.2090505@cbr.nrc.ca> Or have a Time To Live associated with a service. The policy would be central. By default, a service stays listed for, lets say, 7 days. From trusted domains you could make it longer. Unless the provider sends a renewal message for their service, it disappears on the expiry date. That way, you don't get cruft build up. Those that want to provide services can at the very least send a message via the API once a month saying "we're still in business, and our service works!" > > Perhaps, the only way to tackle a piece of this problem is > periodically doing some tests on the service. Some of them could be > generic, like sending an ill-formed input or a correct object > belonging to an incorrect namespace. The others should be provided by > the service creator: two or three input objects which should give the > same output. Obviusly, many services will not have a deterministic > output, because they are based on a changing database, for instance. > But for these cases the service creators could notify 'our service is > still alive!'. > > You know, there is no easy way! > > Best Regards, > Jos? Mar?a > From senger at ebi.ac.uk Wed Mar 17 15:41:37 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Wed Mar 17 15:47:09 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <4058B554.2090505@cbr.nrc.ca> Message-ID: > Or have a Time To Live associated with a service. The policy would be > central. By default, a service stays listed for, lets say, 7 days... > I like it, and I like that somebody brought it here again. I was trying a year ago, but nobody listened to me. This "leasing" is a concept that has been discussed a lot within myGrid project and is very appealling. It is part of a broader question of "quality of service" (or "metadata" attached to a service). Regards, Martin -- Martin Senger EMBL Outstation - Hinxton Senger@EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From fgibbons at hms.harvard.edu Wed Mar 17 16:14:19 2004 From: fgibbons at hms.harvard.edu (Frank Gibbons) Date: Wed Mar 17 16:17:25 2004 Subject: [MOBY-l] Time-to-live as service metadata In-Reply-To: References: <4058B554.2090505@cbr.nrc.ca> Message-ID: <5.2.1.1.2.20040317160713.01a595b0@email.med.harvard.edu> At 03:41 PM 3/17/2004, Martin Senger wrote: > > Or have a Time To Live associated with a service. The policy would be > > central. By default, a service stays listed for, lets say, 7 days... > > > I like it, and I like that somebody brought it here again. I was trying >a year ago, but nobody listened to me. This "leasing" is a concept that >has been discussed a lot within myGrid project and is very appealling. It >is part of a broader question of "quality of service" (or "metadata" >attached to a service). Sounds like a good idea to me (not that I have any experience in this stuff). I think, if MOBY takes off in a big way, this might turn out to be an Achilles' heel if not tackled early. What will happen if, five years from now, there are 1000 services registered, but only 250 of them actually work as advertised? You're going to have some pretty unhappy service consumers on your hands, and it's going to become harder for others to justify adding services. Imagine MOBY as one of those maps you get a holiday fair, showing what each booth is and what they're selling. If most of the booths are empty, or are selling something different from what the little map says, pretty soon people start to say "oh, MOBY used to be great when it started out, but you don't want to go there now unless you really have a lot of time on your hands - most of the booths are empty, and those that aren't empty are selling something different from what you expect." "Time to live" sounds like a fairly low-maintenance way to go. -Frank PhD, Computational Biologist, Harvard Medical School BCMP/SGM-322, 250 Longwood Ave, Boston MA 02115, USA. Tel: 617-432-3555 Fax: 617-432-3557 http://llama.med.harvard.edu/~fgibbons From gordonp at cbr.nrc.ca Wed Mar 17 16:20:07 2004 From: gordonp at cbr.nrc.ca (Paul Gordon) Date: Wed Mar 17 16:25:31 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: References: Message-ID: <4058C107.4020209@cbr.nrc.ca> We would be crazy not to implement this. Every distributed system that I can think of has some kind of expiry mechanism. Think TTL data on TCP packets, DNS entries, Web caching... Martin Senger wrote: >>Or have a Time To Live associated with a service. The policy would be >>central. By default, a service stays listed for, lets say, 7 days... >> >> >> > I like it, and I like that somebody brought it here again. I was trying >a year ago, but nobody listened to me. This "leasing" is a concept that >has been discussed a lot within myGrid project and is very appealling. It >is part of a broader question of "quality of service" (or "metadata" >attached to a service). > > Regards, > Martin > > > From steube at sdsc.edu Wed Mar 17 16:25:35 2004 From: steube at sdsc.edu (Ken Steube) Date: Wed Mar 17 16:31:01 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <4058B554.2090505@cbr.nrc.ca> Message-ID: On Wed, 17 Mar 2004, Paul Gordon wrote: > Or have a Time To Live associated with a service. I wonder if this would be effective. My approach to the Time To Live approach would be to write a cron job that notifies MOBY-Central that my services are still OK. So my services might break and Time To Live wouldn't be useful. I like the idea of having a standard test script that gets run periodically by someone's computer. It would have a carefully chosen input to produce a predictable output which can be verified to be correct by the test script. It could then notify MOBY-Central of success and MOBY-Central could be queried by anyone for the last time there was a success. Ken From markw at illuminae.com Wed Mar 17 16:39:03 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed Mar 17 16:44:29 2004 Subject: [MISC] [MOBY-l] Time-to-live as service metadata In-Reply-To: <5.2.1.1.2.20040317160713.01a595b0@email.med.harvard.edu> References: <4058B554.2090505@cbr.nrc.ca> <5.2.1.1.2.20040317160713.01a595b0@email.med.harvard.edu> Message-ID: <1079559543.12062.30.camel@localilluminae.com> To be honest, I have racked my brains on this, and can't come up with a better solution that what you & Martin are suggesting either - I was hoping to bring it up at the MOBY meeting in CSHL in a couple of weeks, but it looks like the cat's out of the bag again now :-) It's all a part of the larger issue of security (in general) and quality of service. My understanding of UDDI is that UDDI registrations don't time-out, but rather are governed by (a) quite small and domain specific registries, that (b) have password authentication for the register/deregister process if necessary. As such, they might not experience the problem of wanton random (useless) service registration since only a select few can register services, nor of services becoming obsolete given the peer-pressure of the smaller social-domain the registry caters to. Conversely, if you look at the services currently available in MOBY Central you will already see quite a bit of garbage - services and objects called "TEST", for example - people not cleaning up after themselves... in fact, I noticed this morning that someone has registered an object called "LSID" that is specific to a particular domain of LSID's! EEEK! Granted, this is my fault for not getting off my arse and setting up a test-instance of the registry, but it does emphasize the need for some sort of automated maintenance! My inner voice tells me that the more barriers we put at the service-provision side of the equation, the fewer people will play the game, and the less useful MOBY will be. It's easy enough for people with a good knowledge of systems to set up a cron that will re-register their services on a weekly basis, but this does raise the bar higher than I had hoped to w.r.t. service-provider buy-in, and will be quite foreign to someone on e.g. MS Windows. The flip-side of the coin is, as you say, that the less reliable/useful the system is as a whole the less it will be used - a deadly downwards spiral toward uselessness! Damned if you do, damned if you don't! Personally, I'm all for the time-to-live solution, if the person who decides to build it *promises* to build the tools to make it easy to implement! ...notice that we first need someone to raise their hand and volunteer to build it ;-) I'm trying to get more money to pay coders in my lab, but that will take time, so... anyone with idle hands is welcome to do the devils work! M On Wed, 2004-03-17 at 13:14, Frank Gibbons wrote: > At 03:41 PM 3/17/2004, Martin Senger wrote: > > > Or have a Time To Live associated with a service. The policy would be > > > central. By default, a service stays listed for, lets say, 7 days... > > > > > I like it, and I like that somebody brought it here again. I was trying > >a year ago, but nobody listened to me. This "leasing" is a concept that > >has been discussed a lot within myGrid project and is very appealling. It > >is part of a broader question of "quality of service" (or "metadata" > >attached to a service). > > Sounds like a good idea to me (not that I have any experience in this > stuff). I think, if MOBY takes off in a big way, this might turn out to be > an Achilles' heel if not tackled early. What will happen if, five years > from now, there are 1000 services registered, but only 250 of them actually > work as advertised? You're going to have some pretty unhappy service > consumers on your hands, and it's going to become harder for others to > justify adding services. > > Imagine MOBY as one of those maps you get a holiday fair, showing what each > booth is and what they're selling. If most of the booths are empty, or are > selling something different from what the little map says, pretty soon > people start to say "oh, MOBY used to be great when it started out, but you > don't want to go there now unless you really have a lot of time on your > hands - most of the booths are empty, and those that aren't empty are > selling something different from what you expect." > > "Time to live" sounds like a fairly low-maintenance way to go. > > -Frank > > > PhD, Computational Biologist, > Harvard Medical School BCMP/SGM-322, 250 Longwood Ave, Boston MA 02115, USA. > Tel: 617-432-3555 Fax: > 617-432-3557 http://llama.med.harvard.edu/~fgibbons > > _______________________________________________ > moby-l mailing list > moby-l@biomoby.org > http://biomoby.org/mailman/listinfo/moby-l -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From senger at ebi.ac.uk Wed Mar 17 16:44:23 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Wed Mar 17 16:50:03 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: Message-ID: > I wonder if this would be effective. My approach to the Time To Live > approach would be to write a cron job that notifies MOBY-Central that my > services are still OK. So my services might break and Time To Live > wouldn't be useful. > You can always cheat - and break things, of course. But why to write a cron job that notifies if there is nothing to notify? :-) Better to create a cron job that can re-register my service after checking that my service is okay. The beauty of this is that the cron job is create by the same person that wrote the service so he/she knows the best how to check the service. > I like the idea of having a standard test script that gets run > periodically by someone's computer. It would have a carefully chosen input > to produce a predictable output which can be verified to be correct by the > test script. > There is no such think as a standard test... Just my 2c, Martin -- Martin Senger EMBL Outstation - Hinxton Senger@EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From steube at sdsc.edu Wed Mar 17 18:13:13 2004 From: steube at sdsc.edu (Ken Steube) Date: Wed Mar 17 18:18:40 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: Message-ID: I don't think it's appropriate to delete people's services because they didn't update the Time To Live. Let me suggest an alternative: What I was trying to say in my last post was that I think it's more useful for Central to store a "Time of Last Successful Test" for each service. Service authors then could write a test for each service that upon success updates this timestamp at Central. This test is what should go in cron for periodic execution. Then we could adjust findService() to have an extra option like "testTime=>7" to request services that have been successfully tested in the last 7 days. I will also suggest another timestamp for each service: one that says the service is known to be down as of a certain date, and the author has not been able to fix it yet. With this you can notify the world your service is down and you haven't fixed it yet. With this approach nobody's service gets deleted and you have a really useful way to see if a service is being maintained. Ken On Wed, 17 Mar 2004, Martin Senger wrote: > > I wonder if this would be effective. My approach to the Time To Live > > approach would be to write a cron job that notifies MOBY-Central that my > > services are still OK. So my services might break and Time To Live > > wouldn't be useful. > > > You can always cheat - and break things, of course. But why to write a > cron job that notifies if there is nothing to notify? :-) Better to create > a cron job that can re-register my service after checking that my service > is okay. The beauty of this is that the cron job is create by the same > person that wrote the service so he/she knows the best how to check the > service. > > > I like the idea of having a standard test script that gets run > > periodically by someone's computer. It would have a carefully chosen input > > to produce a predictable output which can be verified to be correct by the > > test script. > > > There is no such think as a standard test... > > Just my 2c, Martin > > -- -- -- Ken Steube San Diego Supercomputer Center University of California, San Diego, MC 0505 9500 Gilman Drive San Diego, California, 92093-0505 USA FAX (858) 822-3610 From senger at ebi.ac.uk Wed Mar 17 18:30:18 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Wed Mar 17 18:35:50 2004 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: Message-ID: > I don't think it's appropriate to delete people's services because they > didn't update the Time To Live. > I do, but that's perhaps just a matter of style. The important thing you mentioned is hidden in your words "...to have an extra option...". That's what I called metadata attached to a service. Moby should have a general mechanism how to attached metadata - and then we can document which metadata are encouraged to have - and the "time of the last access" may be one of them. But important is to add this mechanism "from the top" (having an API for it) and let perhaps service providers to fill/use it "from the bottom". Martin -- Martin Senger EMBL Outstation - Hinxton Senger@EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From markw at illuminae.com Thu Mar 18 10:33:23 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Thu Mar 18 15:20:46 2004 Subject: [MOBY-l] The original thread returns... Re: Interpreting results from Service->execute() In-Reply-To: <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> References: <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> Message-ID: <1079624003.1849.8.camel@localilluminae.com> Frank! Sorry, I was totally braindead when I responded to this message a few days ago. I apologize - multitasking is obviously getting the better of me! So, the *correct* answer to this question is that we have no *formal* way for the server to report errors to you, but we do have an *informal* way for this to happen. In the moby:Response XML block there is a serviceNotes element: freetext notes here [ ] ... ... and that should be used by the service provider to pass you free-text descriptions of what may have gone wrong server-side with your query (or any other unstructured notes that the service provider may wish to send you, even if the service executed successfully!) So far, nobody I know is using that (probably because I have not written the API's to do so ;-) ), and the existing clients would ignore it anyway... but it is there for that purpose! There are actually several bits of the MOBY-S API that have not yet been "instantiated" at the code level... this is one of them. I'll try to get this done today, since Heiko just wrote me that he needs it up and running right away as well. Anyway, that is the *correct* answer to your question. Sorry for that - I was thinking in terms of an error "object" rather than a free-text note, so it just never tweaked in my head that we had an element for that purpose, and I misled you with my initial response. Mark On Tue, 2004-03-16 at 15:07, Frank Gibbons wrote: > Hi MOBYers, > > I've been playing with MOBY all day (installed Perl 5.8.3 just for this!), > and find that it works pretty well. I've successfully called > plantspGetProtein from sdsc.edu and GetPubmed from prometheus.brc.mcw.edu. > > Now I'm trying to call getInteractingMethods from pdg.cnb.uam.es, and > although it returns something, I just don't understand what it returns. The > code I'm using to call it is appended at the end of this (having been > cribbed from > Catherine Letondal and Ken Streube - thanks to both for great tutorials!), > but the important part is this: > > my $pid = "EBI-141"; > my $result = > $service->execute( XMLinputlist => [ > ["object$i", > " id='$pid'/>"] > ] ) || 'None'; > > Response is: > > > xmlns='http://www.biomoby.org/moby'> > > > > > > Now I'm not XML expert, but it's certainly not gibberish, or an error > condition. I'm fairly sure the accession number I'm using is correct (it > works when I go to IntAct's webpage): if it's not correct, shouldn't the > service let me know somehow ("ID not found"). And if it is correct, where's > my information? If the id is correct, but there are in fact no interacting > methods, shouldn't it say "There are no interacting methods"? Instead it > seems to just be acknowledging my request, but not providing any new > information. > > I'll be the first to admit ignorance of XML, SOAP, etc. If this is a really > dumb question, I'll be happy to read whatever you guys suggest. But I'm > really hoping there's a simpler answer > > Thanks (in advance), > > -Frank Gibbons > > ========================= appended code here ========================= > #!/home/fgibbons/bin/perl > > use MOBY::Client::Central; > use MOBY::Client::Service; > use strict; > my $Central = MOBY::Client::Central->new(); > > my ($Services, $REG) = > # ); > # $Central->findService( authURI => 'prometheus.brc.mcw.edu', > # serviceName => 'GetPubmed' > > $Central->findService( authURI => 'pdg.cnb.uam.es', > serviceName => 'getInteractingMethods' > ); > unless ($Services) { > print "Service discovery failed with the following errror: ", > $REG->message; > exit(0); > } > > my @PIDs = ('1BIJ', '4HHB'); > my @IntActIDs = ('EBI-141'); > printf("%-35s\t\t %s\n%s\n", "Service", "provided by", "="x80); > foreach my $S ( #sort { > #$a->authority cmp $b->authority or > #$a->name cmp $b->name } > @{$Services}) { > printf("%-35s\t\t%s%s\n", $S->name, $S->authority, $S->description); > my $WSDL = $Central->retrieveService($S); > my $service = MOBY::Client::Service->new(service => $WSDL); > my $i = 0; > foreach my $pid (@IntActIDs) { > my $result = > $service->execute( XMLinputlist => [ > ["object$i", > " id='$pid'/>"] > ] ) || 'None'; > print "Result ($i): $result\n"; > $i++; > } > } > > > > PhD, Computational Biologist, > Harvard Medical School BCMP/SGM-322, 250 Longwood Ave, Boston MA 02115, USA. > Tel: 617-432-3555 Fax: > 617-432-3557 http://llama.med.harvard.edu/~fgibbons > > _______________________________________________ > moby-l mailing list > moby-l@biomoby.org > http://biomoby.org/mailman/listinfo/moby-l -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From letondal at pasteur.fr Fri Mar 19 11:30:15 2004 From: letondal at pasteur.fr (Catherine Letondal) Date: Fri Mar 19 11:35:36 2004 Subject: [MOBY-l] Output of a service Message-ID: <200403191630.i2JGUFoA511736@electre.pasteur.fr> Hi, We have successfully done the demo (test_sequencetofasta) service and we have started to setup a first service (see http://bioweb.pasteur.fr/seqanal/interfaces/melting.html): my $reg = $C->registerService( serviceName => 'Melting', authURI => $authURI, contactEmail => $email, description => "Melting: enthalpie, entropy and melting temperature (N. Le Novere)", URL => $url, input => [ ['', ["NucleotideSequence" => []]], ], output => [ ['', ["text-plain" => []]], ], category => "moby", serviceType => "Analysis", ); We have troubles finding how to return the result. The current code is: sub Melting { my ($caller, $query) = @_; ### return $query; # echo back the input my $MOBY_RESPONSE = ''; my @simples = MobyXmlObject->getMobySimples($query); foreach my $s (@simples) { my ($name, $ns, $id) = ($s->articleName(), $s->namespace(), $s->id()); my $seq = ''; my $len = ''; foreach my $inc ($s->getIncludedObjects()) { $seq = $inc->valueTrimmed() if $inc->articleName() eq 'SequenceString'; $len = $inc->valueTrimmed() if $inc->articleName() eq 'Length'; } if ($seq) { #my $fasta = ">$id $ns length=$len\n" . &sixty_bustup($seq); open (MELTING, ****--smt that provde a text output--****) ; my textresult = join("",); close (MELTING); $result = qq{ }; } else { $result = simpleResponse('', ''); } $MOBY_RESPONSE .= simpleResponse($result, ''); } return responseHeader . $MOBY_RESPONSE . responseFooter; } The "debug" step worked ok. Now, it is the ->execute() that returns... nothing. We have looked at many sources of information on the biomoby.org Web site and elsewhere: http://biomoby.org/SettingUpPerlServices.html http://biomoby.org/moby-live/Perl/scripts/Services/LocalServices.pm http://biomoby.org/moby-live/Perl/scripts/testMOBYCentral_v05.pl as well as the papers, and the tutorials, but we haven't found yet where the XML description associated to an object is. Our service returns a text-plain object (the output of a program). I would have several questions: 1) Do we have to register a sub-class of text-plain or is it possible de use the text-plain object type? 2) If we have to register a new object type : - a) What kind of namespace would you use for such a new object type then? - b) What kind of id also? (is there an id for an analysis?) 3) Once you know what type of object you have to return, how do you provide it as a return value of your service? In raw XML? I hope these are not too much FAQ, thanks in advance, -- Catherine Letondal -- Pasteur Institute Computing Center From markw at illuminae.com Fri Mar 19 12:11:33 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Fri Mar 19 12:17:16 2004 Subject: [MOBY] [MOBY-l] Output of a service In-Reply-To: <200403191630.i2JGUFoA511736@electre.pasteur.fr> References: <200403191630.i2JGUFoA511736@electre.pasteur.fr> Message-ID: <1079716292.1893.40.camel@localilluminae.com> Hi Catherine! Congratulations on your first service :-) A few comments, and answers to your questions: > serviceType => "Analysis", please feel free to register a more descriptive service type that inherits from "Analysis" - e.g. melting_point_determination ISA Analysis ... though if we were to do it right, it should probably have a bit more granularity than that... something like: Nucleotide_Sequence_Analysis DNA_Sequence_Analysis Physical ( Structural... Chemical... Functional...) Melting_Point > my @simples = MobyXmlObject->getMobySimples($query); I see you are using Ken's code to get the Simples. This is fine, but I don't think his code has been updated with the recent API changes that require the inputs to be enumerated. Ken? Also, Ken, perhaps you could migrate these routines into the CommonSubs.pm module (or simply add your module in the CVS) to make it easier for all of us to keep the code up-to-date with API changes. Catherine - you wont *break* anything by being non-compliant in this way, since these API changes were all backward-compatible, however you wont be 100% compliant... which is a shame for your first service :-) > > > You should probably register an object that inherits from text-formatted (rather than text-plain) and give it the name of your analysis program e.g. as we have done with NCBI_Blast_Text and NCBI_Blast_XML. > $MOBY_RESPONSE .= simpleResponse($result, ''); simpleResponse now takes three arguments, the third one being the enumerated identity of the query to which you are responding (see above). Again, you wont *break* anything by doing it this way, but... > return responseHeader . $MOBY_RESPONSE . responseFooter; responseHeader also takes arguments. At a minimum, it takes your authority, but it can also be used to provide serviceNotes. responseHeader('bioweb.pasteur.fr'); or responseHeader( -authority => 'bioweb.pasteur.fr', -note => 'software version xxx'); something like that... > The "debug" step worked ok. Now, it is the ->execute() that returns... nothing. Unfortunately, I don't see your service in the registry, so you must have it in some private registry? If I could see it, I could help you debug it... > the XML description associated to an object is. Ken has this tool in his "encyclopedia": http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?obj=PutYourObjectHere > 1) Do we have to register a sub-class of text-plain or is it possible de use the > text-plain object type? You can output text-plain if you wish, but it is better "semantically" to create a specific object type for a specific data type, as this will help people to e.g. create parsers for your output (parsing "plain-text" would be meaningless... ;-) ) > 2) If we have to register a new object type : > - a) What kind of namespace would you use for such a new object type then? you don't register namespaces together with objects - the two things are independent. What you would do is to take the namespace/id from the incoming request object and use that as the namespace/id of your outgoing plain-text (or whatever) object. The way to think of MOBY Analysis services is that they take incoming data and output a different representation of the same data, hence the output has the same namespace/ID as the input (in most cases...) > 3) Once you know what type of object you have to return, how do you provide it > as a return value of your service? In raw XML? Your service code is ~perfect as far as I can see, so I am not sure why you are not getting any output from it... Your interpretation of the spec seems to be 100% correct! yes, when using the simpleResponse subroutine you do exactly as you say - you give it raw XML, and it will build the response for you. > I hope these are not too much FAQ, thanks in advance, I'm sorry that I wasn't able to solve your exact problem... if you register your service in the public registry I will play with it today and we should have it fixed up right away! Cheers! M -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From markw at illuminae.com Fri Mar 19 12:20:32 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Fri Mar 19 12:25:49 2004 Subject: [MOBY] [MOBY-l] Output of a service In-Reply-To: <1079716292.1893.40.camel@localilluminae.com> References: <200403191630.i2JGUFoA511736@electre.pasteur.fr> <1079716292.1893.40.camel@localilluminae.com> Message-ID: <1079716832.1890.51.camel@localilluminae.com> Could someone out there please forward my response on to Catherine? I'm not sure if my own response will get through to her since my SMTP server has been blacklisted throughout the world :-/ It just bounced back to me as "rejected". Thanks! M On Fri, 2004-03-19 at 09:11, Mark Wilkinson wrote: > Hi Catherine! > > Congratulations on your first service :-) > > A few comments, and answers to your questions: > > > > serviceType => "Analysis", > > please feel free to register a more descriptive service type that > inherits from "Analysis" - e.g. melting_point_determination ISA Analysis > > ... though if we were to do it right, it should probably have a bit more > granularity than that... something like: > > Nucleotide_Sequence_Analysis > DNA_Sequence_Analysis > Physical ( Structural... Chemical... Functional...) > Melting_Point > > > > my @simples = MobyXmlObject->getMobySimples($query); > > I see you are using Ken's code to get the Simples. This is fine, but I > don't think his code has been updated with the recent API changes that > require the inputs to be enumerated. Ken? Also, Ken, perhaps you could > migrate these routines into the CommonSubs.pm module (or simply add your > module in the CVS) to make it easier for all of us to keep the code > up-to-date with API changes. > > Catherine - you wont *break* anything by being non-compliant in this > way, since these API changes were all backward-compatible, however you > wont be 100% compliant... which is a shame for your first service :-) > > > > > > > > > You should probably register an object that inherits from text-formatted > (rather than text-plain) and give it the name of your analysis program > e.g. as we have done with NCBI_Blast_Text and NCBI_Blast_XML. > > > > $MOBY_RESPONSE .= simpleResponse($result, ''); > > simpleResponse now takes three arguments, the third one being the > enumerated identity of the query to which you are responding (see > above). Again, you wont *break* anything by doing it this way, but... > > > > return responseHeader . $MOBY_RESPONSE . responseFooter; > > responseHeader also takes arguments. At a minimum, it takes your > authority, but it can also be used to provide serviceNotes. > > responseHeader('bioweb.pasteur.fr'); > > or > > responseHeader( > -authority => 'bioweb.pasteur.fr', > -note => 'software version xxx'); > > something like that... > > > The "debug" step worked ok. Now, it is the ->execute() that returns... nothing. > > Unfortunately, I don't see your service in the registry, so you must > have it in some private registry? If I could see it, I could help you > debug it... > > > the XML description associated to an object is. > > Ken has this tool in his "encyclopedia": > > http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?obj=PutYourObjectHere > > > 1) Do we have to register a sub-class of text-plain or is it possible de use the > > text-plain object type? > > You can output text-plain if you wish, but it is better "semantically" > to create a specific object type for a specific data type, as this will > help people to e.g. create parsers for your output (parsing "plain-text" > would be meaningless... ;-) ) > > > 2) If we have to register a new object type : > > - a) What kind of namespace would you use for such a new object type then? > > you don't register namespaces together with objects - the two things are > independent. What you would do is to take the namespace/id from the > incoming request object and use that as the namespace/id of your > outgoing plain-text (or whatever) object. The way to think of MOBY > Analysis services is that they take incoming data and output a different > representation of the same data, hence the output has the same > namespace/ID as the input (in most cases...) > > > > 3) Once you know what type of object you have to return, how do you provide it > > as a return value of your service? In raw XML? > > Your service code is ~perfect as far as I can see, so I am not sure why > you are not getting any output from it... Your interpretation of the > spec seems to be 100% correct! > > yes, when using the simpleResponse subroutine you do exactly as you say > - you give it raw XML, and it will build the response for you. > > > I hope these are not too much FAQ, thanks in advance, > > I'm sorry that I wasn't able to solve your exact problem... if you > register your service in the public registry I will play with it today > and we should have it fixed up right away! > > Cheers! > > M -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From steube at sdsc.edu Fri Mar 19 12:30:37 2004 From: steube at sdsc.edu (Ken Steube) Date: Fri Mar 19 12:36:00 2004 Subject: [MOBY] [MOBY-l] Output of a service In-Reply-To: <1079716292.1893.40.camel@localilluminae.com> Message-ID: Catherine, there could be some other reasons why you're getting no output from the service. Something in the configuration or registration of the service could be wrong and you might get no error message. Try these things: 1) Edit the dispatcher CGI and add a line die 'xxxxx verifying CGI gets called'; and try to execute the service. Look in the httpd error log file and see if the xxxxx line is there. If not, then maybe your URL to the dispatcher is wrong causing the CGI to not be executed. 2) One the dispatcher CGI is being called, try to verify that the method test_SequenceToFASTA is being called. Put a die line like the one above in it and again check the httpd log. If the xxxxx line is not there then the dispatch is failing. Check to make sure you have the 'use MobyEd_services;' line correct and that the name of the service is correct. 3) Maybe the file is not being compiled correctly. You might not see any error message even from failure to compile. At the top of the method test_SequenceToFasta put a line 'return $query;' to return the input without modification. Now you should see a return value, but it will just be the input echoed back. When you get to that point, you know the reason is later in the script and you can start to narrow it down. Ken On Fri, 19 Mar 2004, Mark Wilkinson wrote: > Hi Catherine! > > Congratulations on your first service :-) > > A few comments, and answers to your questions: > > > > serviceType => "Analysis", > > please feel free to register a more descriptive service type that > inherits from "Analysis" - e.g. melting_point_determination ISA Analysis > > ... though if we were to do it right, it should probably have a bit more > granularity than that... something like: > > Nucleotide_Sequence_Analysis > DNA_Sequence_Analysis > Physical ( Structural... Chemical... Functional...) > Melting_Point > > > > my @simples = MobyXmlObject->getMobySimples($query); > > I see you are using Ken's code to get the Simples. This is fine, but I > don't think his code has been updated with the recent API changes that > require the inputs to be enumerated. Ken? Also, Ken, perhaps you could > migrate these routines into the CommonSubs.pm module (or simply add your > module in the CVS) to make it easier for all of us to keep the code > up-to-date with API changes. > > Catherine - you wont *break* anything by being non-compliant in this > way, since these API changes were all backward-compatible, however you > wont be 100% compliant... which is a shame for your first service :-) > > > > > > > > > You should probably register an object that inherits from text-formatted > (rather than text-plain) and give it the name of your analysis program > e.g. as we have done with NCBI_Blast_Text and NCBI_Blast_XML. > > > > $MOBY_RESPONSE .= simpleResponse($result, ''); > > simpleResponse now takes three arguments, the third one being the > enumerated identity of the query to which you are responding (see > above). Again, you wont *break* anything by doing it this way, but... > > > > return responseHeader . $MOBY_RESPONSE . responseFooter; > > responseHeader also takes arguments. At a minimum, it takes your > authority, but it can also be used to provide serviceNotes. > > responseHeader('bioweb.pasteur.fr'); > > or > > responseHeader( > -authority => 'bioweb.pasteur.fr', > -note => 'software version xxx'); > > something like that... > > > The "debug" step worked ok. Now, it is the ->execute() that returns... nothing. > > Unfortunately, I don't see your service in the registry, so you must > have it in some private registry? If I could see it, I could help you > debug it... > > > the XML description associated to an object is. > > Ken has this tool in his "encyclopedia": > > http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?obj=PutYourObjectHere > > > 1) Do we have to register a sub-class of text-plain or is it possible de use the > > text-plain object type? > > You can output text-plain if you wish, but it is better "semantically" > to create a specific object type for a specific data type, as this will > help people to e.g. create parsers for your output (parsing "plain-text" > would be meaningless... ;-) ) > > > 2) If we have to register a new object type : > > - a) What kind of namespace would you use for such a new object type then? > > you don't register namespaces together with objects - the two things are > independent. What you would do is to take the namespace/id from the > incoming request object and use that as the namespace/id of your > outgoing plain-text (or whatever) object. The way to think of MOBY > Analysis services is that they take incoming data and output a different > representation of the same data, hence the output has the same > namespace/ID as the input (in most cases...) > > > > 3) Once you know what type of object you have to return, how do you provide it > > as a return value of your service? In raw XML? > > Your service code is ~perfect as far as I can see, so I am not sure why > you are not getting any output from it... Your interpretation of the > spec seems to be 100% correct! > > yes, when using the simpleResponse subroutine you do exactly as you say > - you give it raw XML, and it will build the response for you. > > > I hope these are not too much FAQ, thanks in advance, > > I'm sorry that I wasn't able to solve your exact problem... if you > register your service in the public registry I will play with it today > and we should have it fixed up right away! > > Cheers! > > M > > -- -- -- Ken Steube San Diego Supercomputer Center University of California, San Diego, MC 0505 9500 Gilman Drive San Diego, California, 92093-0505 USA FAX (858) 822-3610 From mdjgf8 at mizzou.edu Fri Mar 19 21:07:55 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Fri Mar 19 21:13:16 2004 Subject: [MOBY-l] Suggestions for objects in new service... Message-ID: <6686291B-7A13-11D8-BF33-000393B6201C@mizzou.edu> I have created a service out of an XML-RPC service that gets genes and proteins from text (extractGeneProteinNames), and returns a score for its likelihood of the returned word being a gene or protein. There are two types of outputs, one with any acronyms (like MAPK), and another with just regular words (like mitogen-activated protein kinase, or other words, genes, proteins etc). Here is a sample text output: ------------------------------------------------------------------------ ---------------------------------------- (INPUT: We observed an increase in mitogen-activated protein kinase (MAPK) activity.) ACRONYM: MAPK LONG FORM: mitogen-activated protein kinase SCORE: 0.90884572798250385 NAME: MAPK SCORE: 1 NAME: mitogen-activated protein kinase SCORE: 1 NAME: increase SCORE: 0.06212914418525689 NAME: We SCORE: 1.0000000000000237e-300 ------------------------------------------------------------------------ ---------------------------------------- So with this I need to have the input as some object. I found a namespace called Global that this may fit in, but I am unsure. There is an object named text-plain also, but I don't know if that works or not either. ------------------------------------------------------------------------ ---------------------------------------- We observed an increase in mitogen-activated protein kinase (MAPK) activity. ------------------------------------------------------------------------ ---------------------------------------- And then here is the possible output: ------------------------------------------------------------------------ ---------------------------------------- MAPK mitogen-activated protein kinase 0.90884572798250385 mitogen-activated protein kinase 1 increase 0.06212914418525689 ------------------------------------------------------------------------ ---------------------------------------- I am guessing there are other places where some kind of score is given on analysis of something, so I don't think it is far off creating a new object for this one. I don't know if global_keyword fits either, or what to do with that namespace attribute. I am not well-versed in all of this, so any comments and suggestions are very welcome! Thanks to Ken Steube for helping me get even this far!!! -Michael Jensen michael@inblosam.com From letondal at pasteur.fr Sat Mar 20 11:28:35 2004 From: letondal at pasteur.fr (Catherine Letondal) Date: Sat Mar 20 22:37:26 2004 Subject: FW: [MOBY] [MOBY-l] Output of a service In-Reply-To: Your message of "Fri, 19 Mar 2004 11:19:34 CST." <295CC5EB4257D411B34D00D0B7748F4432DF43@baldar.brc.mcw.edu> Message-ID: <200403201629.i2KGSZqK264330@electre.pasteur.fr> Vijay Narayanasamy wrote: > Thanks for forwarding Marks' answer! > > -----Original Message----- > From: Mark Wilkinson [mailto:markw@illuminae.com] > Sent: Friday, March 19, 2004 11:12 AM > To: Catherine Letondal > Cc: mobyl > Subject: Re: [MOBY] [MOBY-l] Output of a service > > Hi Catherine! > > Congratulations on your first service :-) > > A few comments, and answers to your questions: > > > > serviceType => "Analysis", > > please feel free to register a more descriptive service type that > inherits from "Analysis" - e.g. melting_point_determination ISA Analysis > > ... though if we were to do it right, it should probably have a bit more > granularity than that... something like: > > Nucleotide_Sequence_Analysis > DNA_Sequence_Analysis > Physical ( Structural... Chemical... Functional...) > Melting_Point > We prefer to do it right. Are there already some sub-classes planned for analysis services? I know people working on ontologies of bioinformatics tools, they have probably some good ideas? So, we have to register new service types, anyway. I guess I have tu use registerServiceType in MOBY::Client::Central? what is the Relationships like in: $c->registerServiceType ( serviceType => $serviceType description => "human readable description" Relationships => {$relationshipType1 => \@services, $relationshipType2 => \@services} contactEmail => "your@email.address.here" authURI => "your.authority.info" ); ? > > > my @simples = MobyXmlObject->getMobySimples($query); > > I see you are using Ken's code to get the Simples. This is fine, but I > don't think his code has been updated with the recent API changes that > require the inputs to be enumerated. Ken? Also, Ken, perhaps you could > migrate these routines into the CommonSubs.pm module (or simply add your > module in the CVS) to make it easier for all of us to keep the code > up-to-date with API changes. > > Catherine - you wont *break* anything by being non-compliant in this > way, since these API changes were all backward-compatible, however you > wont be 100% compliant... which is a shame for your first service :-) Again, I really wish to start with the right code, but are there some examples I can copy? > > > > > > > > > You should probably register an object that inherits from text-formatted > (rather than text-plain) and give it the name of your analysis program > e.g. as we have done with NCBI_Blast_Text and NCBI_Blast_XML. Ok. > > > > $MOBY_RESPONSE .= simpleResponse($result, ''); > > simpleResponse now takes three arguments, the third one being the > enumerated identity of the query to which you are responding (see > above). Again, you wont *break* anything by doing it this way, but... What is the second argument? Do you have an example? > > return responseHeader . $MOBY_RESPONSE . responseFooter; > > responseHeader also takes arguments. At a minimum, it takes your > authority, but it can also be used to provide serviceNotes. > > responseHeader('bioweb.pasteur.fr'); > > or > > responseHeader( > -authority => 'bioweb.pasteur.fr', > -note => 'software version xxx'); > > something like that... Ok. > > > The "debug" step worked ok. Now, it is the ->execute() that returns... > nothing. > > Unfortunately, I don't see your service in the registry, so you must > have it in some private registry? If I could see it, I could help you > debug it... We used the register, execute, deregister script (and we first make some tries on an internal host), but we will quickly turn to bioweb.pasteur.fr. > > > the XML description associated to an object is. > > Ken has this tool in his "encyclopedia": > > http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?obj=PutYourObjectHere Very convenient!! But when calling: http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?text-plain or: http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?NucleotideSequence I just get: ? > > > 1) Do we have to register a sub-class of text-plain or is it possible de > use the > > text-plain object type? > > You can output text-plain if you wish, but it is better "semantically" > to create a specific object type for a specific data type, as this will > help people to e.g. create parsers for your output (parsing "plain-text" > would be meaningless... ;-) ) Ok. > > > 2) If we have to register a new object type : > > - a) What kind of namespace would you use for such a new object type > then? > > you don't register namespaces together with objects - the two things are > independent. What you would do is to take the namespace/id from the > incoming request object and use that as the namespace/id of your > outgoing plain-text (or whatever) object. The way to think of MOBY > Analysis services is that they take incoming data and output a different > representation of the same data, hence the output has the same > namespace/ID as the input (in most cases...) Ok. So the sequence been passed to the service *must* have an id? > > > > 3) Once you know what type of object you have to return, how do you > provide it > > as a return value of your service? In raw XML? > > Your service code is ~perfect as far as I can see, so I am not sure why > you are not getting any output from it... Your interpretation of the > spec seems to be 100% correct! > > yes, when using the simpleResponse subroutine you do exactly as you say > - you give it raw XML, and it will build the response for you. > > > I hope these are not too much FAQ, thanks in advance, > > I'm sorry that I wasn't able to solve your exact problem... if you > register your service in the public registry I will play with it today > and we should have it fixed up right away! > I have an additional question. When calling a service asking for several parameters, you put them in different articles, right? >From the perldoc: $Service->execute(XMLinputlist => [ ['sequence', '' ], ['anotherparam', '' ] ]); Object1 and Object1 could be 2 parameters to the service? Or: my $result = $S->execute( XMLinputlist => [ ['sequence', qq{ 19 acggtagctaggtaccc at }], ['anotherparam', qq{4}] ] ) ; Thanks a lot for your advices. -- Catherine Letondal -- Pasteur Institute Computing Center From letondal at pasteur.fr Sun Mar 21 07:51:01 2004 From: letondal at pasteur.fr (Catherine Letondal) Date: Sun Mar 21 07:56:28 2004 Subject: [MOBY] [MOBY-l] Output of a service In-Reply-To: Your message of "Fri, 19 Mar 2004 09:30:37 PST." Message-ID: <200403211251.i2LCp13g330009@electre.pasteur.fr> Ken Steube wrote: > Catherine, there could be some other reasons why you're getting no > output from the service. Something in the configuration or registration of > the service could be wrong and you might get no error message. > > Try these things: > > 1) Edit the dispatcher CGI and add a line > > die 'xxxxx verifying CGI gets called'; > > and try to execute the service. Look in the httpd error log file and > see if the xxxxx line is there. If not, then maybe your URL to the > dispatcher is wrong causing the CGI to not be executed. Ok. > 2) One the dispatcher CGI is being called, try to verify that the > method test_SequenceToFASTA is being called. Put a die line like > the one above in it and again check the httpd log. If the xxxxx line > is not there then the dispatch is failing. Check to make sure you have > the 'use MobyEd_services;' line correct and that the name of the service > is correct. Regarding the test_SequenceToFASTA, everything went Ok. We have put the Melting sub in another module (something like PasteurMoby_services.pm), though. > 3) Maybe the file is not being compiled correctly. You might not see any > error message even from failure to compile. At the top of the method > test_SequenceToFasta put a line 'return $query;' to return the input > without modification. Now you should see a return value, but it will > just be the input echoed back. When you get to that point, you know the > reason is later in the script and you can start to narrow it down. We have run a debug script (exactly like in your tutorial), where the Melting sub executed correctly. So, since the test_SequenceToFASTA and the debug step were correct, we wondered whether the errors could be more in the data format returned. But I just found that there was a simple perl bug in the Melting sub. So it's working, now (I still have to see how to pass several parameters the right way), and we will now proceed to decide about object types and service types. Thanks for your advices (and for your tutorial)! What would be really nice too, could be to have the source code of the existing services (the sub doing the service and the registration code of the corresponding objects and services). That would really help. Why not having this in the CVS for instance? -- Catherine Letondal -- Pasteur Institute Computing Center From markw at illuminae.com Mon Mar 22 11:44:32 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Mon Mar 22 11:50:17 2004 Subject: FW: [MOBY] [MOBY-l] Output of a service In-Reply-To: <200403201629.i2KGSZqK264330@electre.pasteur.fr> References: <200403201629.i2KGSZqK264330@electre.pasteur.fr> Message-ID: <1079973872.2080.37.camel@localilluminae.com> On Sat, 2004-03-20 at 08:28, Catherine Letondal wrote: > We prefer to do it right. :-) > Are there already some sub-classes planned for > analysis services? I know people working on ontologies of bioinformatics > tools, they have probably some good ideas? I recall that in one of our very first MOBY meetings we designed a prototype service ontology (Suzi Lewis and Jason Stewart, actually, sitting in the pub with a pint and a laptop!). I believe a second version came from Richard Bruskiewich at the Singapore hackathon. Unfortunately, neither of these have ever been implemented. I think they are still on my drive somewhere - let me go hunting to see if I can find them. If I do, I will send them out to the list and we can, as a group, go through it. This might also be a good task to tackle at the upcoming MOBY meeting in CSHL. We can also look at the myGrid service ontology for ideas. > what is the Relationships like in: > > $c->registerServiceType ( > Relationships => {$relationshipType1 => \@services, > $relationshipType2 => \@services} Services currently only have an ISA relationship, so it would look like: Relationships => {'ISA' => ['Analysis']} > Again, I really wish to start with the right code, but are there some > examples I can copy? all of the services in /moby-live/scripts/services/LocalServices.pm are the ones that I am running from MOBY Central, and they are all now compliant (thanks to debugging by Rebecca and Beatrice!). There is also a "template" service that you could perhaps copy/paste and then edit to your own needs. > What is the second argument? Do you have an example? The second argument is the articleName for the outgoing Simple, however I don't think anyone is using this attribute yet. There are examples in the CommonSubs pod documentation. This attribute is only really useful for cases where you might be outputting several objects of the same type, but which are intended to have different meanings.... off the top of my head, let's say you were searching for a certain functional domain, and the service returned to you all examples of that domain as sequence objects, plus a consensus sequence object. This output would be difficult to interpret without the individual pieces of the output being somehow "tagged" using an articleName attribute. > > Ken has this tool in his "encyclopedia": > > > > http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?obj=PutYourObjectHere > > Very convenient!! But when calling: > > http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?text-plain > or: > http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?NucleotideSequence > I just get: > > > ??? I can't duplicate this error. For me, the URL http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?obj=NucleotideSequence resolves to: ...which is completely correct :-) > Ok. So the sequence been passed to the service *must* have an id? uh...no, not necessarily. Incomnig objects will always have a namespace and id *attribute*, but it is perfectly fine to have "anonymous" objects where these have no value. I guess what I meant to say is that you simply take whatever the incoming namespace/id were (even if they are null), and output your object with the same values. > I have an additional question. When calling a service asking for several > parameters, you put them in different articles, right? Yes, that's correct. There are some things to watch out for in this regard, but without knowing your exact service I don't know what to warn you about... Just be aware that there are inputs as well as inputs for passing multiple arguments into a service (though from your example, I think you are using multiple with the correct intention!), and note also that there are "Secondary" arguments that can be passed to a service, though no existing client program supports them yet :-( my $result = $S->execute( > XMLinputlist => [ > ['sequence', qq{ > 19 > acggtagctaggtaccc > at > }], > ['anotherparam', qq{4}] > ] > ) ; > It sounds to me like you are well on your way to getting some very complex services up and running! I'm looking forward to using them! Mark -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From a.garcia at imb.uq.edu.au Wed Mar 24 07:43:53 2004 From: a.garcia at imb.uq.edu.au (a.garcia@imb.uq.edu.au) Date: Wed Mar 24 07:49:17 2004 Subject: [MOBY-l] inquiry/ontology Message-ID: I would like to know if there is an ontology for bioinformatic services available? Is that part of BioMoby? Who is working on that ontology? Cheers. From mdjgf8 at mizzou.edu Wed Mar 24 07:52:00 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Wed Mar 24 07:57:20 2004 Subject: [MOBY-l] structuring output of a service... Message-ID: <0AE9FBC2-7D92-11D8-B757-000393B6201C@mizzou.edu> I have created a service out of an XML-RPC service that gets genes and proteins from text (extractGeneProteinNames), and returns a score for its likelihood of the returned word being a gene or protein. There are two types of outputs, one with any acronyms (like MAPK), and another with just regular words (like mitogen-activated protein kinase, or other words, genes, proteins etc). Here is a sample text output: ------------------------------------------------------------------------ ---------------------------------------- (INPUT: We observed an increase in mitogen-activated protein kinase (MAPK) activity.) ACRONYM: MAPK LONG FORM: mitogen-activated protein kinase SCORE: 0.90884572798250385 NAME: MAPK SCORE: 1 NAME: mitogen-activated protein kinase SCORE: 1 NAME: increase SCORE: 0.06212914418525689 NAME: We SCORE: 1.0000000000000237e-300 ------------------------------------------------------------------------ ---------------------------------------- So with this I need to have the input as some object. I found a namespace called Global that this may fit in, but I am unsure. There is an object named text-plain also, but I don't know if that works or not either. ------------------------------------------------------------------------ ---------------------------------------- We observed an increase in mitogen-activated protein kinase (MAPK) activity. ------------------------------------------------------------------------ ---------------------------------------- And then here is the possible output: ------------------------------------------------------------------------ ---------------------------------------- MAPK mitogen-activated protein kinase 0.90884572798250385 mitogen-activated protein kinase 1 increase 0.06212914418525689 ------------------------------------------------------------------------ ---------------------------------------- I am guessing there are other places where some kind of score is given on analysis of something, so I don't think it is far off creating a new object for this one. I don't know if global_keyword fits either, or what to do with that namespace attribute. I am not well-versed in all of this, so any comments and suggestions are very welcome! Thanks to Ken Steube for helping me get even this far!!! -Michael Jensen michael@inblosam.com From markw at illuminae.com Wed Mar 24 11:34:03 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed Mar 24 11:39:37 2004 Subject: [MOBY-l] Re: [MOBY] [MOBY-dev] inquiry/ontology In-Reply-To: References: Message-ID: <1080146042.1950.89.camel@localilluminae.com> On Wed, 2004-03-24 at 04:43, a.garcia@imb.uq.edu.au wrote: > Who is working on that ontology? Cheers. Apparently, you are ;-) We currently have a *horrible* ontology for MOBY Services, and in fact this is quite a timely message as there is a conversation going on another list (the OBO list) about exactly this topic. Our ontology should soon get a lot better... I still haven't had time to find the original proposal for the MOBY Service ontology, but I know that we have not yet built it. If I find it, I will post it to the list and we can re-evaluate it as a group. the myGrid project also has a (much richer) ontology for bioinformatics services. You might want to talk to them. M > _______________________________________________ > MOBY-dev mailing list > MOBY-dev@biomoby.org > http://www.biomoby.org/mailman/listinfo/moby-dev -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From markw at illuminae.com Wed Mar 24 11:37:09 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed Mar 24 11:45:46 2004 Subject: [MOBY-l] Someone please forward... Message-ID: <1080146229.1950.93.camel@localilluminae.com> Hi all, could someone please forward this response to Michael? I've tried repeatedly to get it to him, but my institute's server is still being blacklisted by some spam-filters :-( thanks! M -----Forwarded Message----- > From: Mark Wilkinson > To: Michael Jensen > Subject: [Fwd: [MISC] Returned mail: see transcript for details] > Date: Tue, 23 Mar 2004 13:53:53 -0800 > > -----Forwarded Message----- > > From: Mail Delivery Subsystem > > To: markw@illuminae.com > > Subject: [MISC] Returned mail: see transcript for details > > Date: Sat, 20 Mar 2004 14:12:17 -0600 > > > > The original message was received at Sat, 20 Mar 2004 14:10:15 -0600 > > from markw@localhost > > > > ----- The following addresses had permanent fatal errors ----- > > mdjgf8@mizzou.edu > > (reason: 550 5.2.1 Mail delivery failure. 24.85.83.208 Please *forward* this error message to postmaster@mis... for assistance. markw@illuminae.com msg to mdjgf8@mizzou.edu failed-14:12:13 03-20-2004. SORBS-DUN) > > > > ----- Transcript of session follows ----- > > 451 biomoby.org: Name server timeout > > ... while talking to um-smtp-130.um.umsystem.edu.: > > >>> RCPT To: > > <<< 550 5.2.1 Mail delivery failure. 24.85.83.208 Please *forward* this error message to postmaster@missouri.edu for assistance. markw@illuminae.com msg to mdjgf8@mizzou.edu failed-14:12:13 03-20-2004. SORBS-DUN > > 550 5.1.1 mdjgf8@mizzou.edu... User unknown > > > > ______________________________________________________________________ > > Reporting-MTA: dns; localilluminae.com > > Arrival-Date: Sat, 20 Mar 2004 14:10:15 -0600 > > > > Final-Recipient: RFC822; mdjgf8@mizzou.edu > > Action: failed > > Status: 5.2.1 > > Remote-MTA: DNS; um-smtp-130.um.umsystem.edu > > Diagnostic-Code: SMTP; 550 5.2.1 Mail delivery failure. 24.85.83.208 Please *forward* this error message to postmaster@missouri.edu for assistance. markw@illuminae.com msg to mdjgf8@mizzou.edu failed-14:12:13 03-20-2004. SORBS-DUN > > Last-Attempt-Date: Sat, 20 Mar 2004 14:12:17 -0600 > > > > ______________________________________________________________________ > > From: Mark Wilkinson > > To: Michael Jensen > > Cc: mobyl > > Subject: Re: [MOBY] [MOBY-l] Suggestions for objects in new service... > > Date: Sat, 20 Mar 2004 12:10:15 -0800 > > > > Hi Michael! I'm excited to see you setting up services! > > > > > So with this I need to have the input as some object. I found a > > > namespace called Global that this may fit in, but I am unsure. There is > > > an object named text-plain also, but I don't know if that works or not > > > either. > > > > okay, first be sure that you aren't confusing namespaces with objects - > > the two are different things. > > > > I think for a service like this (which is very cool, by the way!) I > > would register it as follows: > > > > input: plain-text, **no** namespace (i.e. all namespaces) > > output: ___???__, **no** namespace > > > > now... for output object format we have a couple of choices. The one > > you suggest is fine, though I think we could put a bit more "semantics" > > into it... My instinct is to build the output in this way (also note > > that in your example you have a Scored_string object that has TWO String > > sub-components, and another Scored_string object that has only ONE > > String sub-component... and that isn't allowed!): > > > > Option 1: outputting a proprietary object 'keyword_score' > > > > > > > > MAPK > > > articleName="string_component"/> > > 0.9088453834 > > > > > > > > > articleName='string_component'/> > > 0.06212399 > > > > > > > > or Option 2 - outputting a proprietary child of formatted-text: > > > > > > > > ACRONYM: MAPK > > LONG FORM: mitogen-activated protein kinase > > SCORE: 0.90884572798250385 > > > > NAME: MAPK > > SCORE: 1 > > > > NAME: mitogen-activated protein kinase > > SCORE: 1 > > > > NAME: increase > > SCORE: 0.06212914418525689 > > > > NAME: We > > SCORE: 1.0000000000000237e-300 > > > > > > > > There may be other options, but those are the most obvious to me. The > > choice really comes down to whether or not you have a well-recognized > > flat-file format (i.e. one for which there exists a parser that could > > also be a MOBY service) > > > > > I am guessing there are other places where some kind of score is given > > > on analysis of something, so I don't think it is far off creating a new > > > object for this one. I don't know if global_keyword fits either, or > > > what to do with that namespace attribute. > > > > Creating new objects is fine (encouraged!) since it increases the > > semantics of your output - the ontology takes care of any problems > > relating to interpretation/visualization of your output. > > > > It's probably worth pointing out here that services are allowed to > > output "secondary objects", and one might consider this as a place to > > put the "score" component, **however** in this case that will not work, > > because the score would be applied to the entire collection object, > > rather than to the individual components as you require. This is an > > interesting insight for me, as it does expose a limitation in the > > modelling system... > > > > > I am not well-versed in all of this, so any comments and suggestions > > > are very welcome! Thanks to Ken Steube for helping me get even this > > > far!!! > > > > I second that - Ken is a real star!!! :-) > > > > I hope that there this is helpful to you, > > > > Cheers! > > > > M -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From markw at illuminae.com Wed Mar 24 17:27:13 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed Mar 24 17:32:33 2004 Subject: [MOBY-l] MOBY Central down-time Message-ID: <1080167233.1950.161.camel@localilluminae.com> Hi all, MOBY Central will be down for several minutes (only... we hope!) Thursday morning EDT for some upgrades and patches to the kernel. If you have trouble hitting it, please just try again later, M -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From mdjgf8 at mizzou.edu Thu Mar 25 09:54:15 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Thu Mar 25 09:59:34 2004 Subject: [MOBY-l] revised service output...need some explanations though... Message-ID: <48DCD315-7E6C-11D8-B757-000393B6201C@mizzou.edu> Thanks for your help Mark, and Ken! Here is the output of my service (extractGeneProteinNames) when 'We observed an increase in mitogen-activated protein kinase (MAPK) activity.' is the input (it extracts names of genes or proteins and scores them, along with acronyms): MAPK 0.90884572798250385 1 1 0.06212914418525689 1.0000000000000237e-300 I like Mark's idea of using a collection for this, rather than formatted text. I think something like MedLine abstracts are more fit for the formatted text option. I am trying to figure out a few things still. What do I need to put in for the Scored_string namespace attribute? Does that mean the user will be sending a namespace and I just pass that through? And if there is none then I leave it blank? Same questions with the id attribute. My second question is about the Global_keyword. One of the problems I see is that the returned scored text isn't always just one word, like 'MAPK' or 'increase', but will spell out an acronym and return that, as in 'mitogen-activated protein kinase'. From what I know, Global_keyword is designed to be only ONE word, so is there something else like Global_text or do I have to make that or what? My third question is with this new Scored_string thing. Is it an object? I'm a little confused about that, but I think once I know what it is I can figure out how to register it. Do I have to do anything different because it is part of a collection or no? THANKS everyone! -Michael Jensen mdjgf8@mizzou.edu (Mark, my email box was full I think so your email kept bouncing back. It is empty now. :) From gordonp at cbr.nrc.ca Thu Mar 25 10:01:34 2004 From: gordonp at cbr.nrc.ca (Paul Gordon) Date: Thu Mar 25 10:06:53 2004 Subject: [MOBY-l] revised service output...need some explanations though... In-Reply-To: <48DCD315-7E6C-11D8-B757-000393B6201C@mizzou.edu> References: <48DCD315-7E6C-11D8-B757-000393B6201C@mizzou.edu> Message-ID: <4062F44E.9090009@cbr.nrc.ca> I realize I'm getting in on this conversation late, but am I not reading the spec right? Shouldn't each Scored_string be wrapped in a Simple tag? > > > xmlns='http://www.biomoby.org/moby'> > > > > articleName="acronym">MAPK > id="mitogen-activated protein kinase" articleName="string_component"/> > articleName="score">0.90884572798250385 > > > > articleName="string_component"/> > 1 > > > > id="mitogen-activated protein kinase" articleName="string_component"/> > 1 > > > > articleName="string_component"/> > articleName="score">0.06212914418525689 > > > > articleName="string_component"/> > articleName="score">1.0000000000000237e-300 > > > > > > I like Mark's idea of using a collection for this, rather than > formatted text. I think something like MedLine abstracts are more fit > for the formatted text option. I am trying to figure out a few things > still. What do I need to put in for the Scored_string namespace > attribute? > > > > Does that mean the user will be sending a namespace and I just pass > that through? And if there is none then I leave it blank? Same > questions with the id attribute. > > My second question is about the Global_keyword. One of the problems I > see is that the returned scored text isn't always just one word, like > 'MAPK' or 'increase', but will spell out an acronym and return that, > as in 'mitogen-activated protein kinase'. From what I know, > Global_keyword is designed to be only ONE word, so is there something > else like Global_text or do I have to make that or what? > > My third question is with this new Scored_string thing. Is it an > object? I'm a little confused about that, but I think once I know what > it is I can figure out how to register it. Do I have to do anything > different because it is part of a collection or no? > > THANKS everyone! > > -Michael Jensen > mdjgf8@mizzou.edu > > (Mark, my email box was full I think so your email kept bouncing back. > It is empty now. :) > > > _______________________________________________ > moby-l mailing list > moby-l@biomoby.org > http://biomoby.org/mailman/listinfo/moby-l > From letondal at pasteur.fr Fri Mar 26 05:21:16 2004 From: letondal at pasteur.fr (Catherine Letondal) Date: Fri Mar 26 05:26:34 2004 Subject: [MOBY-l] toString() method in MOBY::Client::Central::retrieveNamespaces Message-ID: <200403261021.i2QALGt8269325@electre.pasteur.fr> Hi, I have a problem when using the MOBY::Client::Central::retrieveNamespaces method, and someone else trying the exercises (*) in my tutorial informed me about the same problem: Can't call method "toString" on an undefined value at /home/fgibbons/lib/perl5/site_perl/5.8.3/MOBY/Client/Central.pm line 1234. MOBY::Client::Central::retrieveNamespaces('MOBY::Client::Central=HASH(0x8a7d64c)') called at /d0/home/fgibbons/cvs/BioMOBY/MyScripts/ex2.pl line 6 (this is the line that generates the error: $desc = $elem->getFirstChild->toString; ) His platform and versions are: (Version/OS info: Perl 5.8.3, Debian Linux 2.4.18) Mine are: perl, v5.6.1 built for alpha-dec_osf The same script works on a recently installed MacOSX with the latest versions of all thr CPAN packages required to run a biomoby script. According to the documentation: retrieveNamespaces Title : retrieveNamespaces Usage : $ns = $MOBY->retrieveNamespaces([$reg_name]) Function : get the list of all registered Object types Returns : hashref of hash: $ns{$namespace} = $definition Args : $reg_name: name of registry you wish to retrieve from (optional) the argument is optional? Does someone have an idea about this problem? Thanks in advance for any help. -- Catherine Letondal -- Pasteur Institute Computing Center (*) the script is this one: http://www.pasteur.fr/~letondal/biomoby/biomoby-tutorial-perl-sol.html#exo-by-name-io From mwilkinson at mrl.ubc.ca Fri Mar 26 10:51:31 2004 From: mwilkinson at mrl.ubc.ca (Mark Wilkinson) Date: Fri Mar 26 10:56:57 2004 Subject: [MOBY-l] Re: revised service output...need some explanations though... Message-ID: <1080316275.3512.1.camel@localilluminae.com> On Thu, 2004-03-25 at 06:54, Michael Jensen wrote: > > xmlns='http://www.biomoby.org/moby'> > > > > articleName="acronym">MAPK > id="mitogen-activated protein kinase" articleName="string_component"/> > articleName="score">0.90884572798250385 > The structure is not quite correct - it should be ... > still. What do I need to put in for the Scored_string namespace > attribute? > > Does that mean the user will be sending a namespace and I just pass > that through? And if there is none then I leave it blank? Same > questions with the id attribute. That's correct, unless you actually have pre-defined identifiers for the object you are passing back (which may be true in your case, or at least, for some of your sub-objects). e.g. if you have "MAPK" as an entity in your own database, and it has an ID number in your database, then you should probably register your own namespace and then send it back as: MAPK 0.90884572798250385 This makes it possible to discover other services in your database using the component of this message, based on the fact that you would likely register services that consume objects in the $myNS namespace. > From what I know, Global_keyword > is designed to be only ONE word, so is there something else like > Global_text or do I have to make that or what? I am really in two minds about this. Global_keyword is one of the most confusing objects we have! Certainly my intention when I made it was that it would contain only one "meaningful" thing, i.e. that it would not contain a comma-delimited list of keywords, or keywords joined by boolean operators... but i didn't really intend it to be one-word-only... in fact, I have several services that return Global_keyword objects with more than one word (e.g. when I am returning taxa names from a Genbank parse). If you think it is more meaningful to have two objects - Global_keyword, and Global_keyphrase - then please feel free to register the latter, and I will tighten up the definition of the former (though of course, we can't enforce this anyway...) > My third question is with this new Scored_string thing. Is it an > object? I'm a little confused about that, but I think once I know what > it is I can figure out how to register it. Yes, it is a new object. > Do I have to do anything > different because it is part of a collection or no? Not during registration of the object itself. You are only concerned about collections when you come to register your service. > (Mark, my email box was full I think so your email kept bouncing back. > It is empty now. :) Okay, let's cross our fingers that this gets through! M -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre -- Mark Wilkinson, Assistant Professor (Bioinformatics) Dept. of Medical Genetics, University of British Columbia James Hogg iCAPTURE Centre for Cardiovascular and Pulmonary Research 166 - 1081 Burrard St. Vancouver, BC, Canada, V6Z 1Y6 tel: (604) 682 2344 ext. 62129 fax: (604) 806 9274 ------------------------------------------------------------------------ It just goes to show you that SOAP::Lite is more intuitive than you might think, if you know enough Perl and have the patience to dive into the source code. -Byrne Reese -http://builder.com.com/5100-6389_14-1045078-2.html ------------------------------------------------------------------------ From mwilkinson at mrl.ubc.ca Fri Mar 26 11:11:53 2004 From: mwilkinson at mrl.ubc.ca (Mark Wilkinson) Date: Fri Mar 26 11:17:33 2004 Subject: [MOBY-l] (no subject) Message-ID: <1080317513.1968.0.camel@localilluminae.com> On Fri, 2004-03-26 at 02:21, Catherine Letondal wrote: > (this is the line that generates the error: > $desc = $elem->getFirstChild->toString; > ) that bug has been fixed for a while in the CVS version of MOBY - please CVS update to get the patch. (yes, the argument is optional... but I did just notice that the documentation is incorrect, talking about objects instead of namespaces...) M -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From mdjgf8 at mizzou.edu Mon Mar 29 15:39:20 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Mon Mar 29 15:44:41 2004 Subject: [MOBY-l] registering Scored_string object... Message-ID: <279A0CDF-81C1-11D8-9C8E-000393B6201C@mizzou.edu> Thanks again for Ken and his examples to get me this far... I want to register this object, but as it is my first one I may need some assistance. Some output of my service may be: MAPK 0.90884572798250385 1 0.06212914418525689 Starting with Ken's object registration example script, I put the following together. On the ISA and HASA I am assuming below the first value is what the tag is, like String, Object, or Long, unless it is a ISA, then it is just what type it is. Then I assume the second value is what the articleName is, and can be blank if there is none. Is this correct? Will what I have below register the object for the XML output above? ------------------------ #!/usr/local/bin/perl5.6.1 use warnings 'all'; use strict; # Register a new data object called Scored_string use lib '/usr/home/jonhar/Apps/moby-live/Perl'; use MOBY::Client::Central; use MOBY::Client::Service; my $Central = MOBY::Client::Central->new(); my $reg = $Central->registerObjectClass( objectType => "Scored_string", description => "Any text with a score or ranking associated, with a possible acronym for the keyword", contactEmail => 'michael@inblosam.com', authURI => "www.inblosam.com", Relationships => { ISA => [ ['Object', ''], ], HASA => [ ['String', 'acronym'], ['Object', 'string_component'], ['Long', 'score'], ] } ); print STDERR "registerObjectClass failed: ", $reg->message, "\n" unless $reg->success; ----------------------- And one more question: In the MOBYClientCentral test file (testMOBYClientCentral_v05.pl) on the site, it has the following snippet of code. As I will have a collection as my output, do I just use it like I have it below (below the test one)? TEST($C->registerService( serviceName => "myfirstservice2", serviceType => "Retrieval", authURI => "www.illuminae.com", contactEmail => 'your@mail.address', description => "this is my first service", category => "moby", URL => "http://illuminae/cgi-bin/service.pl", input =>[ # ['articleName1', [[Object => ['UglyNamespace']]]], # Collection ['articleName1', [Object => ['UglyNamespace']]], # Simple ], output =>[ ['articleName2', [String => ['UglyNamespace']]], # Simple ], ), 20, 1); sub register_service { my $C = shift; my $reg = $C->registerService( serviceName => 'extractGeneProteinNames', authURI => $authURI, contactEmail => $email, description => "Takes any text (abstract, full text article, etc.) and extr acts names and abbreviations of genes and proteins, with a score (0-1, with 1 be ing highest).", URL => $url, input => [ ['', ["text-plain" => []]], ], output => [ ['', [["Scored_string" => []]]], ], category => "moby", serviceType => "Retrieval", ); die "Bad return value from registerService" unless $reg; if ($reg->success == 1){ print "Registration successful\n\n"; } else { print "Registration failed: ", $reg->message, "\n"; } } I am not sure the "text-plain" is right for the input either, but all I expect is something like this. We observed an increase in mitogen-activated protein kinase (MAPK) activity. Thanks for all your help with all of my questions!! -Michael Jensen michael@inblosam.com From mwilkinson at mrl.ubc.ca Tue Mar 30 11:46:03 2004 From: mwilkinson at mrl.ubc.ca (Mark Wilkinson) Date: Tue Mar 30 11:53:14 2004 Subject: [MOBY] [MOBY-l] registering Scored_string object... In-Reply-To: <279A0CDF-81C1-11D8-9C8E-000393B6201C@mizzou.edu> References: <279A0CDF-81C1-11D8-9C8E-000393B6201C@mizzou.edu> Message-ID: <1080665163.2491.14.camel@charles> On Mon, 2004-03-29 at 12:39, Michael Jensen wrote: > Starting with Ken's object registration example script, I put the > following together. On the ISA and HASA I am assuming below the first > value is what the tag is, like String, Object, or Long, unless it is a > ISA, then it is just what type it is. Then I assume the second value is > what the articleName is, and can be blank if there is none. No need to assume - it's in the POD documentation: Title : registerObject ; registerObjectClass Usage : $REG = $MOBY->registerObject(%args) Usage : $REG = $MOBY->registerObjectClass(%args) Function : register a new type of MOBY Object Returns : MOBY::Registration object Args : objectType => "the name of the Object" description => "a human-readable description of the object" contactEmail => "your@email.address" authURI => "URI of the registrar of this object" Relationships => { relationshipType1 => [ [Object1, articleName], [Object2, articleName]], relationshipType2 => [ [Object1, articleName]]} > Is this correct? Will what I have below register the object for the XML > output above? I believe so, yes. That should work just fine! I wonder if perhaps you could change the name from "Scored_String" to something a bit more proprietary? "Inblosam_Scored_String", or something like that? Only because it isn't a universally common data-type, and it has a component that might be unexpected (the acronym component) based on a human-readable name "Scored_String", so this might confuse people. At the end of the day, the name of an object is ~irrelevant, and we shouldn't interpret them, but of course, we all do :-) > input => [ ['', ["text-plain" => []]], ], > output => [ ['', [["Scored_string" => []]]], ], > category => "moby", > serviceType => "Retrieval", > ); that looks correct (by eye). > I am not sure the "text-plain" is right for the input either, but all I > expect is something like this. You could register your input as "String", since there doesn't seem to be any implicit limitation on the type/structure of String that you consume... but I think "text-plain" is probably a better choice if you want to weed-out most of the single-word inputs, which are more likely to be carried in String objects than in text-plain objects (we hope!) > Thanks for all your help with all of my questions!! Good luck with this! It is really quite a cool service - I'm wondering if you might be able to add some value to this by outputting Xref's inside of your Scored_String object. Since you obviously have some knowledge of the identity of the protein (since you found it!), you could perhaps Xref it's SwissProt, or gi number or something like that. This would allow us to take free-text, pass it to your service, and automatically retrieve e.g. the genbank record for all of the proteins described therein, since I have already written the services that do this kind of retrieval... M -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From mdjgf8 at mizzou.edu Tue Mar 30 11:59:06 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Tue Mar 30 12:04:21 2004 Subject: [MOBY] [MOBY-l] registering Scored_string object... In-Reply-To: <1080665163.2491.14.camel@charles> References: <279A0CDF-81C1-11D8-9C8E-000393B6201C@mizzou.edu> <1080665163.2491.14.camel@charles> Message-ID: <8E178B94-826B-11D8-AD1D-000393B6201C@mizzou.edu> I will try a different name for the Scored_string. I questioned the same thing, because I did have the acronym element in there it isn't quite universal. About the identification of the protein, it actually doesn't know anything about the identity of the protein/gene, but rather infers that within the context of the sentence that word/phrase has a probability of *score* to be a gene or a protein. It is an algorithm that is used from here: http://bionlp.stanford.edu/ There is a publication in the works about it. -Michael On Mar 30, 2004, at 10:46 AM, Mark Wilkinson wrote: > On Mon, 2004-03-29 at 12:39, Michael Jensen wrote: > >> Starting with Ken's object registration example script, I put the >> following together. On the ISA and HASA I am assuming below the first >> value is what the tag is, like String, Object, or Long, unless it is a >> ISA, then it is just what type it is. Then I assume the second value >> is >> what the articleName is, and can be blank if there is none. > > No need to assume - it's in the POD documentation: > > Title : registerObject ; registerObjectClass > Usage : $REG = $MOBY->registerObject(%args) > Usage : $REG = $MOBY->registerObjectClass(%args) > Function : register a new type of MOBY Object > Returns : MOBY::Registration object > Args : objectType => "the name of the Object" > description => "a human-readable description of > the object" > contactEmail => "your@email.address" > authURI => "URI of the registrar of this object" > Relationships => { > relationshipType1 => [ > [Object1, articleName], > [Object2, articleName]], > relationshipType2 => [ > [Object1, articleName]]} > > >> Is this correct? Will what I have below register the object for the >> XML >> output above? > > I believe so, yes. That should work just fine! > > I wonder if perhaps you could change the name from "Scored_String" to > something a bit more proprietary? "Inblosam_Scored_String", or > something like that? Only because it isn't a universally common > data-type, and it has a component that might be unexpected (the acronym > component) based on a human-readable name "Scored_String", so this > might > confuse people. At the end of the day, the name of an object is > ~irrelevant, and we shouldn't interpret them, but of course, we all do > :-) > > >> input => [ ['', ["text-plain" => []]], ], >> output => [ ['', [["Scored_string" => []]]], ], >> category => "moby", >> serviceType => "Retrieval", >> ); > > that looks correct (by eye). > >> I am not sure the "text-plain" is right for the input either, but all >> I >> expect is something like this. > > You could register your input as "String", since there doesn't seem to > be any implicit limitation on the type/structure of String that you > consume... but I think "text-plain" is probably a better choice if you > want to weed-out most of the single-word inputs, which are more likely > to be carried in String objects than in text-plain objects (we hope!) > >> Thanks for all your help with all of my questions!! > > Good luck with this! It is really quite a cool service - I'm wondering > if you might be able to add some value to this by outputting Xref's > inside of your Scored_String object. Since you obviously have some > knowledge of the identity of the protein (since you found it!), you > could perhaps Xref it's SwissProt, or gi number or something like that. > This would allow us to take free-text, pass it to your service, and > automatically retrieve e.g. the genbank record for all of the proteins > described therein, since I have already written the services that do > this kind of retrieval... > > M > > -- > Mark Wilkinson (mwilkinson@mrl.ubc.ca) > University of British Columbia iCAPTURE Centre > _______________________________________________ > moby-l mailing list > moby-l@biomoby.org > http://biomoby.org/mailman/listinfo/moby-l > From mdjgf8 at mizzou.edu Tue Mar 30 12:41:56 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Tue Mar 30 12:47:11 2004 Subject: [MOBY-l] Registering with a HASA Long Message-ID: <8A3DF017-8271-11D8-AD1D-000393B6201C@mizzou.edu> Object Type Long does not exist in the biomoby.org Object Class system When I try to register the following, I get the above error. my $reg = $Central->registerObjectClass( objectType => "Scored_acronym_string", description => "Any text with a score or ranking associated, with possible acronym for keyword", contactEmail => 'michael@inblosam.com', authURI => "www.inblosam.com", Relationships => { ISA => [ ['Object', ''], ], HASA => [ ['String', 'acronym'], ['Object', 'string_component'], ['Long', 'score'], ] } ); Does this mean no one has registered Long before? It works if I use Integer there, but I need Long. -Michael Jensen michael@inblosam.com From gordonp at cbr.nrc.ca Tue Mar 30 15:48:35 2004 From: gordonp at cbr.nrc.ca (Paul Gordon) Date: Tue Mar 30 15:53:47 2004 Subject: [MOBY-l] Registering with a HASA Long In-Reply-To: <8A3DF017-8271-11D8-AD1D-000393B6201C@mizzou.edu> References: <8A3DF017-8271-11D8-AD1D-000393B6201C@mizzou.edu> Message-ID: <4069DD23.5020201@cbr.nrc.ca> The thing is, MOBY Objects are not tied to a particular programming language or OS platform, so what does a Long mean? There is in pricipal no size limit on an Integer in MOBY. It means Integer in the mathematical sense. It would be up to the implementing client to use the BigDecimal in Java, or BigInt in Perl if it can't fit the data into a standard integer representation for the language, or at least give a warning that the value could not be processed. My CDN$0.02 > Does this mean no one has registered Long before? It works if I use > Integer there, but I need Long. From mwilkinson at mrl.ubc.ca Tue Mar 30 16:58:25 2004 From: mwilkinson at mrl.ubc.ca (Mark Wilkinson) Date: Tue Mar 30 17:05:35 2004 Subject: [MOBY] [MOBY-l] Registering with a HASA Long In-Reply-To: <8A3DF017-8271-11D8-AD1D-000393B6201C@mizzou.edu> References: <8A3DF017-8271-11D8-AD1D-000393B6201C@mizzou.edu> Message-ID: <1080683905.1689.21.camel@charles> Hmmm... I thought we had registered Long at some point (though it may be that we did register it and someone maliciously, or accidentally de-registered it...). We have "Float" in there, if that is helpful to you. If you need "Long" please register it. M On Tue, 2004-03-30 at 09:41, Michael Jensen wrote: > Object Type Long does not exist in the biomoby.org Object Class system > > > When I try to register the following, I get the above error. > > my $reg = $Central->registerObjectClass( > objectType => "Scored_acronym_string", > description => "Any text with a score or ranking associated, with > possible acronym for keyword", > contactEmail => 'michael@inblosam.com', > authURI => "www.inblosam.com", > Relationships => { > ISA => [ > ['Object', ''], > ], > HASA => [ > ['String', 'acronym'], > ['Object', 'string_component'], > ['Long', 'score'], > ] > } > ); > > > Does this mean no one has registered Long before? It works if I use > Integer there, but I need Long. > > -Michael Jensen > michael@inblosam.com > > > _______________________________________________ > moby-l mailing list > moby-l@biomoby.org > http://biomoby.org/mailman/listinfo/moby-l -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From mdjgf8 at mizzou.edu Wed Mar 31 09:11:17 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Wed Mar 31 09:16:30 2004 Subject: [MOBY-l] How do I know if my service is working/set up properly? Message-ID: <46AB5EBA-831D-11D8-AD1D-000393B6201C@mizzou.edu> Thanks to everyone for the tips and help on getting my service (extractGeneProteinNames) to where it is now. I think it is pretty much complete, but I wonder if there is some way to look at it and say, "Yes, this service is working properly and set up correctly". Should there be a certain pseudo-universal input that works? Thanks! -Michael Jensen michael@inblosam.com From senger at ebi.ac.uk Wed Mar 31 16:33:05 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Wed Mar 31 16:38:20 2004 Subject: [MOBY-l] getPBfromGO In-Reply-To: <1080316275.3512.1.camel@localilluminae.com> Message-ID: I am playing with some moby services - trying to put them into a workflow engine. And I wonder what is going wrong - it may easily be on my site but I need some external help to tell what's wrong. Calling service getPBfromGO from the http://pathbase1.anat.cam.ac.uk/axis/Pathbase2_SOAP.jws, and sending there this input: I am getting back something encoded as base64binary. Which I get as an array of bytes, convert it into string and print. Usually, Java takes base64-coded data and converts it into byte[] for me. However it this case I print something starting with: rO0ABXQByjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+CiAgIDxtb2J5Ok1P QlkgeG1sbnM6bW9ieT0naHR0cDovL3d3dy5iaW9tb2J5Lm9yZy9tb2J5Jz4KICAgICAgPG1vYnk6 UmVzcG9uc2UgbW9ieTphdXRob3JpdHk9J2h0dHA6Ly93d3cucGF0aGJhc2UubmV0Jz4KICAgICAg ... So I thought that I should have done encoding myself - from whatever reasons. Therefore, I have looked into the wire (tcp monitor) and I expect that I will see there the same data as shown above. What a surprise when I saw there bas64 data, that I expected, but *different* ones. Concretly it started with: ck8wQUJYUUJ5ancvZUcxc0lIWmxjbk5wYjI0OUp6RXV ... So now I wonder that perhaps the services is sending base64 data encoded twice? Or where is the poblem? Thanks for any advise (for example for sending me a piece of perl code that I can use for the same purpose, and compare) Martin -- Martin Senger EMBL Outstation - Hinxton Senger@EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From mgruenb at gmx.net Wed Mar 31 16:48:43 2004 From: mgruenb at gmx.net (Michael Gruenberger) Date: Wed Mar 31 16:53:54 2004 Subject: [MOBY-l] getPBfromGO In-Reply-To: References: Message-ID: <406B3CBB.4030303@gmx.net> Hi Martin, sorry I haven't had time to fix my service yet, I've been busy with moving house and another project... The GOID you are using shouldn't return anything, because no PB entries exist for this GOID, but as I haven't got the service working yet I haven't started looking into the MOBY way of returning empty results. A good GOID to use for testing would be: 5224, which should return 2 PB ID's. I'm afraid I have no idea why the base64 encoded strings are different... Let me know if you find out more! Cheers, Michael. Martin Senger wrote: >I am playing with some moby services - trying to put them into a workflow >engine. And I wonder what is going wrong - it may easily be on my site but >I need some external help to tell what's wrong. > >Calling service getPBfromGO from the >http://pathbase1.anat.cam.ac.uk/axis/Pathbase2_SOAP.jws, and sending there >this input: > > > >I am getting back something encoded as base64binary. Which I get as an >array of bytes, convert it into string and print. Usually, Java takes >base64-coded data and converts it into byte[] for me. However it this case >I print something starting with: > >rO0ABXQByjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+CiAgIDxtb2J5Ok1P >QlkgeG1sbnM6bW9ieT0naHR0cDovL3d3dy5iaW9tb2J5Lm9yZy9tb2J5Jz4KICAgICAgPG1vYnk6 >UmVzcG9uc2UgbW9ieTphdXRob3JpdHk9J2h0dHA6Ly93d3cucGF0aGJhc2UubmV0Jz4KICAgICAg >... > >So I thought that I should have done encoding myself - from whatever >reasons. Therefore, I have looked into the wire (tcp monitor) and I expect >that I will see there the same data as shown above. What a surprise when I >saw there bas64 data, that I expected, but *different* ones. Concretly it >started with: > >xsi:type="xsd:base64Binary">ck8wQUJYUUJ5ancvZUcxc0lIWmxjbk5wYjI0OUp6RXV >... > >So now I wonder that perhaps the services is sending base64 data encoded >twice? Or where is the poblem? > >Thanks for any advise (for example for sending me a piece of perl code >that I can use for the same purpose, and compare) > > Martin > > > > From senger at ebi.ac.uk Wed Mar 31 16:58:57 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Wed Mar 31 17:04:06 2004 Subject: [MOBY-l] getPBfromGO In-Reply-To: <406B3CBB.4030303@gmx.net> Message-ID: > A good GOID to use for testing would be: 5224, which should return 2 PB > ID's. > Thanks. I tried with 5224. And I got the same result. By 'same' I mean not the complete same set of characaters, but something still encoded - (and similar): What I print starts: rO0ABXQByjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+CiAgIDxtb2J5Ok1P QlkgeG1sbnM6bW9ieT0naHR0cDovL3d3dy5iaW9tb2J5Lm9yZy9tb2J5Jz4KICAgICAgPG1vYnk6 UmVzcG9uc2UgbW9ieTphdXRob3JpdHk9J2h0dHA6Ly93d3cucGF0aGJhc2UubmV0Jz4KICAgICAg ... What I see on the wire starts: ck8wQUJYUUJ5ancvZUcxc0lIWmxjbk5wYjI0OUp6 ... Martin -- Martin Senger EMBL Outstation - Hinxton Senger@EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From markw at illuminae.com Wed Mar 31 17:55:23 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed Mar 31 18:00:36 2004 Subject: [MOBY] Re: [MOBY-l] getPBfromGO In-Reply-To: References: Message-ID: <1080773723.2080.15.camel@localhost.localdomain> I wonder if this is the same problem that we noticed a couple of weeks ago with Frank's services... There seems to be a mis-match between how Java libraries encode/decode base-64 data and how the Perl libraries do the same :-P I posted a question in this regard to the SOAP::Lite mailing list but got no response (since Paul dropped off the planet that list hasn't been as responsive as it used to be...) We may have to code around this inconvenience. Let's try to work out a solution in CSHL this weekend. M On Wed, 2004-03-31 at 13:58, Martin Senger wrote: > > A good GOID to use for testing would be: 5224, which should return 2 PB > > ID's. > > > Thanks. I tried with 5224. And I got the same result. By 'same' I mean > not the complete same set of characaters, but something still encoded - > (and similar): > > What I print starts: > > rO0ABXQByjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+CiAgIDxtb2J5Ok1P > QlkgeG1sbnM6bW9ieT0naHR0cDovL3d3dy5iaW9tb2J5Lm9yZy9tb2J5Jz4KICAgICAgPG1vYnk6 > UmVzcG9uc2UgbW9ieTphdXRob3JpdHk9J2h0dHA6Ly93d3cucGF0aGJhc2UubmV0Jz4KICAgICAg > ... > > What I see on the wire starts: > > xsi:type="xsd:base64Binary">ck8wQUJYUUJ5ancvZUcxc0lIWmxjbk5wYjI0OUp6 > ... > > Martin -- Mark Wilkinson (mwilkinson@mrl.ubc.ca) University of British Columbia iCAPTURE Centre From gordonp at cbr.nrc.ca Wed Mar 31 18:06:03 2004 From: gordonp at cbr.nrc.ca (Paul Gordon) Date: Wed Mar 31 18:11:11 2004 Subject: [MOBY] Re: [MOBY-l] getPBfromGO In-Reply-To: <1080773723.2080.15.camel@localhost.localdomain> References: <1080773723.2080.15.camel@localhost.localdomain> Message-ID: <406B4EDB.6010008@cbr.nrc.ca> Mark Wilkinson wrote: >I wonder if this is the same problem that we noticed a couple of weeks >ago with Frank's services... There seems to be a mis-match between how >Java libraries encode/decode base-64 data and how the Perl libraries do >the same :-P > > I have had no trouble using Java to decode a Base64 SOAP message body from any number of services (served from both Perl and Java). But, jMOBY isn't giving me that service at the moment when I check the registry, so I can't test it. I'll hunt that first problem and see if I can help with the second... From senger at ebi.ac.uk Wed Mar 31 18:19:06 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Wed Mar 31 18:24:21 2004 Subject: [MOBY] Re: [MOBY-l] getPBfromGO In-Reply-To: <406B4EDB.6010008@cbr.nrc.ca> Message-ID: > I have had no trouble using Java to decode a Base64 SOAP message body > from any number of services (served from both Perl and Java). > I second this. So far I have not noticed any interoperability issue with base64. (I found some strange encoding provided by Axis - a Java SOAP toolkit - for byte[][], but it was still okay - btw. every character was encoded as an X... but that's not our case now.) > jMOBY isn't giving me that service at the moment when I check the > registry, so I can't test it. > I am getting it from there just now. I am using a default URL from jMoby (which is http://mobycentral.cbr.nrc.ca/cgi-bin/MOBY05/mobycentral.pl). I am using; ./run-cmdline-client -fn getPBfromGO and I am getting: Name: getPBfromGO Type: Retrieval Category: moby Auth: www.pathbase.net Desc: consumes a Gene Ontology accession number and returns a collection of associated Pathbase accession numbers. URL: http://pathbase1.anat.cam.ac.uk/axis/Pathbase2_SOAP.jws Contact: mg287@cam.ac.uk ID: null ... Martin -- Martin Senger EMBL Outstation - Hinxton Senger@EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From gordonp at cbr.nrc.ca Wed Mar 31 18:29:29 2004 From: gordonp at cbr.nrc.ca (Paul Gordon) Date: Wed Mar 31 18:34:37 2004 Subject: [MOBY] Re: [MOBY-l] getPBfromGO In-Reply-To: References: Message-ID: <406B5459.7000900@cbr.nrc.ca> Right. But I retrieve the services based on input object namespace, which seems to miss it (I get 5 services with GO). Or I lose it somehow... Martin Senger wrote: >>I have had no trouble using Java to decode a Base64 SOAP message body >>from any number of services (served from both Perl and Java). >> >> >> > I second this. So far I have not noticed any interoperability issue >with base64. (I found some strange encoding provided by Axis - a Java SOAP >toolkit - for byte[][], but it was still okay - btw. every character was >encoded as an X... but that's not our case now.) > > > >>jMOBY isn't giving me that service at the moment when I check the >>registry, so I can't test it. >> >> >> > I am getting it from there just now. I am using a default URL from >jMoby (which is >http://mobycentral.cbr.nrc.ca/cgi-bin/MOBY05/mobycentral.pl). I am using; > >./run-cmdline-client -fn getPBfromGO > >and I am getting: > >Name: getPBfromGO >Type: Retrieval >Category: moby >Auth: www.pathbase.net >Desc: >consumes a Gene Ontology accession number and returns a collection of >associated Pathbase accession numbers. > >URL: http://pathbase1.anat.cam.ac.uk/axis/Pathbase2_SOAP.jws >Contact: mg287@cam.ac.uk >ID: null >... > > Martin > > > From mgruenb at gmx.net Tue Mar 2 13:05:08 2004 From: mgruenb at gmx.net (Michael Gruenberger) Date: Tue, 02 Mar 2004 18:05:08 +0000 Subject: [MOBY-l] A Java web service problem Message-ID: <1078250708.3392.121.camel@vogel> Hello everyone, I've registered a web service written in Java (using AXIS) with BioMOBY, but I'm having problems with the data type my web service returns. Mark has already helped me through all the other steps, but I'm completely stuck here, so any help would be really appreciated! If anyone has already written a web service in Java that works with BioMOBY it would be great if you could send me some source code or examples. OK, here the problem: My Java web service looks like this: public String getPBfromGO(String goid) { create a String of XML with data for BioMOBY clients Base64 encode and return the String } This means that I'm returning a string in the SOAP message: w3c/XMLSchema-instance/type = http://XMLSchema/string But Marks client expects: w3c/XMLSchema-instance/type = http://schemas/soap/encoding/base64 So the question is how to write my Java web service to return a Base64 type instead of a String type (using AXIS)? Or maybe CDATA is easier? Below is Marks last reply to my problem, which might help clarify my problem. Cheers, Michael. -----Forwarded Message----- From: Mark Wilkinson To: Michael Gruenberger Subject: Re: [MOBY] Re: [MISC] Re: Registering existing web services withMOBY Date: Tue, 02 Mar 2004 09:09:07 -0800 Below is the message structure from my service first, and then from your service. Comments on the messages follow: ================== MINE ========================== ***** ***** PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4K ICAgICAgPG1vYnk6TU9CWSB4bWxuczptb2J5PSdodHRwOi8vd3d3 LmJpb21vYnkub3JnL21vYnknIHhtbG5zPSdodHRwOi8vd3d3LmJp b21vYnkub3JnL21vYnknPgogICAgICAgIDxtb2J5OlJlc3BvbnNl IG1vYnk6YXV0aG9yaXR5PSdpbGx1bWluYWUuY29tJz4KICAgICAg ICA8bW9ieTpxdWVyeVJlc3BvbnNlIHF1ZXJ5SUQ9JzEnLz4KICAg IDwvbW9ieTpSZXNwb25zZT4KICAgICAgPC9tb2J5Ok1PQlk+Cg== ===================================================== =========== YOURS ================================== rO0ABXQByjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+CiAgIDxtb QlkgeG1sbnM6bW9ieT0naHR0cDovL3d3dy5iaW9tb2J5Lm9yZy9tb2J5Jz4KICAgICAgP UmVzcG9uc2UgbW9ieTphdXRob3JpdHk9J2h0dHA6Ly93d3cucGF0aGJhc2UubmV0Jz4KI ICAgPG1vYnk6cXVlcnlSZXNwb25zZT4KCQk8bW9ieTpDb2xsZWN0aW9uIG1vYnk6YXJ0a bWU9J0tub3duX1BhdGhiYXNlX0ltYWdlc193aXRoX3NwZWNpZmljX0dPX0lEJz4KCQkgI OlNpbXBsZT4KCQkgICAgPE9iamVjdCBuYW1lc3BhY2U9J1BhdGhiYXNlX1BCJyBpZD0nJ ICAgPC9PYmplY3Q+CgkJICA8L21vYnk6U2ltcGxlPgoJCTwvbW9ieTpDb2xsZWN0aW9uP ICAgICA8L21vYnk6cXVlcnlSZXNwb25zZT4KICAgICAgPC9tb2J5OlJlc3BvbnNlPgogI Ynk6TU9CWT4K ======================================================= I have put ***'s at the points where the message is wonky. My message is encoded in the format (abbreviated URI's): w3c/XMLSchema-instance/type = http://schemas/soap/encoding/base64 Yours is: w3c/XMLSchema-instance/type = http://XMLSchema/string This is no doubt the source of the problem. Otherwise, your message structure seems to be compatible with mine in all other ways (that I can see by eye, though XML isn't particularly human-readable ;-) ) I think once you figure out how to pass base64 encoded data *as* base64 encoded soap content, you will have solved the problem! > - Do I have to change the return type from String to soemthing else? But > without hand-coding the SOAP message I can only return native Java > types, e.g. String, int, float, Hashtable etc and only String seems to > make sense for XML data This is beyond my scope of knowlege, I'm afraid... > My service is sending Base64 at the moment, so if you should be able to > see in your error logs what the problem is. The debugYourService seems > to be handling it fine... It isn't, actually. If it were working properly it would actually be decoding it in the very last step, and you would see the base64 printed to your screen as raw XML... so debugYourService is only getting as far as it can before stopping. -- Michael Gruenberger Computer Officer, University of Cambridge Developer, Pathbase, http://www.pathbase.net PGP-Public Key ID: 278E1DFF -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: This is a digitally signed message part Url : http://biomoby.org/pipermail/moby-l/attachments/20040302/e813080a/attachment-0002.bin From markw at illuminae.com Tue Mar 2 13:47:14 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Tue, 02 Mar 2004 10:47:14 -0800 Subject: [MOBY-l] moby-l list settings Message-ID: <1078253234.1917.113.camel@localilluminae.com> Due to the amount of spam I have had to moderate in the past couple of months, I have switched this list to member-only posting. If you have trouble getting your postings through, please email me directly and I'll try to fix the problem. Mark -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From senger at ebi.ac.uk Tue Mar 2 13:55:17 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Tue, 2 Mar 2004 18:55:17 +0000 (GMT) Subject: [MOBY-l] A Java web service problem In-Reply-To: <1078250708.3392.121.camel@vogel> Message-ID: > So the question is how to write my Java web service to return a Base64 > type instead of a String type (using AXIS)? Or maybe CDATA is easier? > Your method must return type byte[] - for that Axis create bas64 encoding. That's hopefully all. Martin -- Martin Senger EMBL Outstation - Hinxton Senger at EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From mgruenb at gmx.net Thu Mar 4 04:32:30 2004 From: mgruenb at gmx.net (Michael Gruenberger) Date: Thu, 04 Mar 2004 09:32:30 +0000 Subject: [MOBY-l] A Java web service problem In-Reply-To: References: Message-ID: <1078392750.3051.5.camel@vogel> Thanks Martin, it has indeed worked and the data type returned from my web service is now: xsi:type="ns2:base64Binary" but Perl/scripts/debugYourService www.pathbase.net getPBfromGO scripts/goid.moby (with goid 0005224) still doesn't decode it and Marks CGI client still gives the same error message. Any other ideas? Cheers, Michael. On Tue, 2004-03-02 at 18:55, Martin Senger wrote: > > So the question is how to write my Java web service to return a Base64 > > type instead of a String type (using AXIS)? Or maybe CDATA is easier? > > You method must return type byte[] - for that Axis create bas64 > encoding. That's hopefully all. > > Martin From senger at ebi.ac.uk Thu Mar 4 05:05:26 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Thu, 4 Mar 2004 10:05:26 +0000 (GMT) Subject: [MOBY-l] A Java web service problem In-Reply-To: <1078392750.3051.5.camel@vogel> Message-ID: > still doesn't decode it and Marks CGI client still gives the same error > message. > What does the error message say? Martin -- Martin Senger EMBL Outstation - Hinxton Senger at EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From mgruenb at gmx.net Thu Mar 4 05:36:22 2004 From: mgruenb at gmx.net (Michael Gruenberger) Date: Thu, 04 Mar 2004 10:36:22 +0000 Subject: [MOBY-l] A Java web service problem In-Reply-To: References: Message-ID: <1078396581.3051.14.camel@vogel> The CGI client output error message: BioMOBY Service: getPBfromGO consumes a Gene Ontology accession number and returns a collection of associated Pathbase accession numbers. ________________________________________________________________________ Result for GO:0005224 Service returned no response =================================================================== scripts/debugYourService www.pathbase.net getPBfromGO scripts/goid.moby: It just outputs the Base64 encoded message again. It doesn't decode it. No error message as far as I can see. Here the relevant part of the output (with the Base64 stuff cut short): ... Date: Thu, 04 Mar 2004 10:29:32 GMT Server: Apache Coyote/1.0 Content-Type: text/xml; charset=utf-8 Client-Date: Thu, 04 Mar 2004 10:29:14 GMT Client-Response-Num: 1 Client-Transfer-Encoding: chunked Set-Cookie: JSESSIONID=47867777393E99565BDE4F04BFBF9585; Path=/axis ck8wQUJYUUNORHc[cut]...[cut]JQ0FnUEM5dGIySjVPazFQUWxrKwpDZz09 SOAP::Deserializer::deserialize: () SOAP::Parser::decode: () SOAP::SOM::new: () rO0ABX[cut]...[cut]C9tb2J5Ok1PQlk+ Cg==SOAP::Data::DESTROY: () SOAP::Data::DESTROY: () .... On Thu, 2004-03-04 at 10:05, Martin Senger wrote: > > still doesn't decode it and Marks CGI client still gives the same error > > message. > > > What does the error message say? > > Martin From senger at ebi.ac.uk Thu Mar 4 06:34:15 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Thu, 4 Mar 2004 11:34:15 +0000 (GMT) Subject: [MOBY-l] A Java web service problem In-Reply-To: <1078396581.3051.14.camel@vogel> Message-ID: As I understand you are using Mark's client to access your service. The client indicates "Service returned no response". But obviouly your service got iys request. If this is the case I would recommend: 1) to look into your service code and trace step by step what it does with this particular request, 2) to try an independent client, perhaps one written in Java, to see if its behaviour is the same as the Mark's one, For this type of debugging it would be easier to go back (just for a while) to type String - and use TCP monitor (provided by Axis) to see what is really on the wire. Remember that I already suggested to you to give me the endpoint of your service and I can test it from here by my clients (which is roughly the same as ad 2) above). Martin -- Martin Senger EMBL Outstation - Hinxton Senger at EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From markw at illuminae.com Thu Mar 4 08:45:39 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Thu, 04 Mar 2004 05:45:39 -0800 Subject: [MOBY] Re: [MOBY-l] A Java web service problem In-Reply-To: <1078396581.3051.14.camel@vogel> References: <1078396581.3051.14.camel@vogel> Message-ID: <1078407939.1730.8.camel@localilluminae.com> Debugging using the CGI client is not a good idea, since it will die "gracefully" under most failures. "Service returned no response" generally means that it DID return a response, but the content of the response was empty or uninterpretable. Stick to the command-line clients for debugging, under most circumstances. Viji - do you have any advice in this situation? M On Thu, 2004-03-04 at 02:36, Michael Gruenberger wrote: > The CGI client output error message: > > BioMOBY Service: getPBfromGO > consumes a Gene Ontology accession number and returns a collection of > associated Pathbase accession numbers. > ________________________________________________________________________ > Result for GO:0005224 > Service returned no response > > =================================================================== > > scripts/debugYourService www.pathbase.net getPBfromGO scripts/goid.moby: > > It just outputs the Base64 encoded message again. It doesn't decode it. > No error message as far as I can see. Here the relevant part of the > output (with the Base64 stuff cut short): > > > ... > Date: Thu, 04 Mar 2004 10:29:32 GMT > Server: Apache Coyote/1.0 > Content-Type: text/xml; charset=utf-8 > Client-Date: Thu, 04 Mar 2004 10:29:14 GMT > Client-Response-Num: 1 > Client-Transfer-Encoding: chunked > Set-Cookie: JSESSIONID=47867777393E99565BDE4F04BFBF9585; Path=/axis > > > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:xsd="http://www.w3.org/1999/XMLSchema" > xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"> > > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:ns1="http://biomoby.org/"> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:ns2="http://www.w3.org/2001/XMLSchema">ck8wQUJYUUNORHc[cut]...[cut]JQ0FnUEM5dGIySjVPazFQUWxrKwpDZz09 > > > > SOAP::Deserializer::deserialize: () > SOAP::Parser::decode: () > SOAP::SOM::new: () > rO0ABX[cut]...[cut]C9tb2J5Ok1PQlk+ > Cg==SOAP::Data::DESTROY: () > SOAP::Data::DESTROY: () > .... > > > On Thu, 2004-03-04 at 10:05, Martin Senger wrote: > > > still doesn't decode it and Marks CGI client still gives the same error > > > message. > > > > > What does the error message say? > > > > Martin > > _______________________________________________ > moby-l mailing list > moby-l at biomoby.org > http://biomoby.org/mailman/listinfo/moby-l -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From viji at gsf.de Thu Mar 4 09:26:33 2004 From: viji at gsf.de (Viji) Date: Thu, 04 Mar 2004 15:26:33 +0100 Subject: [MOBY] Re: [MOBY-l] A Java web service problem In-Reply-To: <1078407939.1730.8.camel@localilluminae.com> References: <1078396581.3051.14.camel@vogel> <1078407939.1730.8.camel@localilluminae.com> Message-ID: <40473C99.9020207@gsf.de> Hi, My first try to check whether my service works will always be 1. with Martin's run-cmdline-client script . When it passes there, I go to next step. 2. Then, I try from the client(MOBY). But many times, my services worked fine with the above script, but give a "Service returned no response" in the client(MOBY). In all those situations, either there was a problem with the input MOBY object(not parsed properly for input value or a wrong schema ) or an output object (again, wrong schema of the output MOBY object) or my machine was not visible for the server to get something. 3. Moreover, as Martin suggested, I have used a monitor(in my case, SOAP monitor in AXIS) for SOAP request and response. That will also help to debug the problem. 4. You will get some error message or some output in your server where you have deployed your service (when it was tried to access ). Check that also... I couldn't think anything else apart from the above. Michael, did you get a chance to look into the sample code in java (for registering and retrieving a service) which was provided in the list ? But all my services have text-xml as output which will be plugged in an output MOBY object inside . This was much simpler and easier for me for all of my services. Hope it helps. Regards Viji Mark Wilkinson wrote: >Debugging using the CGI client is not a good idea, since it will die >"gracefully" under most failures. "Service returned no response" >generally means that it DID return a response, but the content of the >response was empty or uninterpretable. > >Stick to the command-line clients for debugging, under most >circumstances. > >Viji - do you have any advice in this situation? > >M > >On Thu, 2004-03-04 at 02:36, Michael Gruenberger wrote: > > >>The CGI client output error message: >> >>BioMOBY Service: getPBfromGO >>consumes a Gene Ontology accession number and returns a collection of >>associated Pathbase accession numbers. >>________________________________________________________________________ >>Result for GO:0005224 >>Service returned no response >> >>=================================================================== >> >>scripts/debugYourService www.pathbase.net getPBfromGO scripts/goid.moby: >> >>It just outputs the Base64 encoded message again. It doesn't decode it. >>No error message as far as I can see. Here the relevant part of the >>output (with the Base64 stuff cut short): >> >> >>... >>Date: Thu, 04 Mar 2004 10:29:32 GMT >>Server: Apache Coyote/1.0 >>Content-Type: text/xml; charset=utf-8 >>Client-Date: Thu, 04 Mar 2004 10:29:14 GMT >>Client-Response-Num: 1 >>Client-Transfer-Encoding: chunked >>Set-Cookie: JSESSIONID=47867777393E99565BDE4F04BFBF9585; Path=/axis >> >> >>>xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >>xmlns:xsd="http://www.w3.org/1999/XMLSchema" >>xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"> >> >> >soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" >>xmlns:ns1="http://biomoby.org/"> >> >xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>xmlns:ns2="http://www.w3.org/2001/XMLSchema">ck8wQUJYUUNORHc[cut]...[cut]JQ0FnUEM5dGIySjVPazFQUWxrKwpDZz09 >> >> >> >>SOAP::Deserializer::deserialize: () >>SOAP::Parser::decode: () >>SOAP::SOM::new: () >>rO0ABX[cut]...[cut]C9tb2J5Ok1PQlk+ >>Cg==SOAP::Data::DESTROY: () >>SOAP::Data::DESTROY: () >>.... >> >> >>On Thu, 2004-03-04 at 10:05, Martin Senger wrote: >> >> >>>>still doesn't decode it and Marks CGI client still gives the same error >>>>message. >>>> >>>> >>>> >>> What does the error message say? >>> >>> Martin >>> >>> >>_______________________________________________ >>moby-l mailing list >>moby-l at biomoby.org >>http://biomoby.org/mailman/listinfo/moby-l >> >> From markw at illuminae.com Thu Mar 4 10:47:43 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Thu, 04 Mar 2004 07:47:43 -0800 Subject: [MOBY] Re: [MOBY-l] A Java web service problem In-Reply-To: References: Message-ID: <1078415263.1616.29.camel@localilluminae.com> my messages are encoded as: xsi:type = http://schemas.xmlsoap.org/soap/encoding/base64 your messages are encoded as: xsi:type = http://www.w3.org/2001/XMLSchema/base64Binary That is likely the source of the problem. Interestingly, soap:base64 is defined as: So it shouldn't *really* make a difference. I might jot a quick note to Paul Kulchenko later today to ask him if this is a bug in SOAP Lite, or if the payload really does have to be defined by a soap encoding data-type rather than directly as an XML Schema data-type. In the meantime, perhaps you should do as Martin suggests and switch back to regular strings... interestingly, Viji's services pass their output as xsi:type=http://www.w3.org/2001/XMLSchema/string i.e. the SOAP Body data-type is defined by an XML schema, rather than a SOAP encoding style, so it seems more and more like the problem we are seeing is a bug in SOAP::Lite... Michael, can you put your services back to the state they were in when you were passing your data as string so that I can look at the output again? Thanks! Mark On Thu, 2004-03-04 at 03:34, Martin Senger wrote: > As I understand you are using Mark's client to access your service. The > client indicates "Service returned no response". But obviouly your service > got iys request. If this is the case I would recommend: > > 1) to look into your service code and trace step by step what it does > with this particular request, > 2) to try an independent client, perhaps one written in Java, to see if > its behaviour is the same as the Mark's one, > > For this type of debugging it would be easier to go back (just for a > while) to type String - and use TCP monitor (provided by Axis) to see what > is really on the wire. > > Remember that I already suggested to you to give me the endpoint of > your service and I can test it from here by my clients (which is roughly > the same as ad 2) above). > > Martin -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From senger at ebi.ac.uk Tue Mar 9 06:00:46 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Tue, 9 Mar 2004 11:00:46 +0000 (GMT) Subject: [MOBY] Re: [MOBY-l] A Java web service problem In-Reply-To: <1078829629.3071.76.camel@vogel> Message-ID: > thanks for all your suggestions and sorry for the delay in getting back > to you (I've been in hospital for the last few days). > welcome back, I hope you feel well Regarding the problem of interoperability between java client and perl services, Viji's recent problem reminded me that the issue may be because wrongly set SOAPAction header. The jMoby CentralImp class sets it from the given namespace. But this is exactlky the think you can clearly see when usig the SOAP/TCP monitor. If/when you are too frustrated perhaps consider to drop here at Hinxton (I guess it must be about 10 miles, or even less, surely better than for most of other BioMoby users :-)) and we may look at it togerther. Cheers, Martin -- Martin Senger EMBL Outstation - Hinxton Senger at EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From viji at gsf.de Tue Mar 9 06:45:57 2004 From: viji at gsf.de (Viji) Date: Tue, 09 Mar 2004 12:45:57 +0100 Subject: [MOBY] Re: [MOBY-l] A Java web service problem In-Reply-To: <1078829629.3071.76.camel@vogel> References: <1078415263.1616.29.camel@localilluminae.com> <1078829629.3071.76.camel@vogel> Message-ID: <404DAE75.8070903@gsf.de> Hi Michael, Wish you feel the best. Below is the link that will take you to my posting (on Feb 10th in moby-l mailing list) on the sample java source code for registering and retrieving a moby compliant service. http://open-bio.org/pipermail/moby-l/2004-February/000757.html If this doesn't work, get back to me and I can send you. Hope I can help you. Regards Viji Michael Gruenberger wrote: >Hi Mark and Martin and Viji, > >thanks for all your suggestions and sorry for the delay in getting back >to you (I've been in hospital for the last few days). > >I have reset my service to output the XML as String (but without the >CDATA, because it doesn't seem to make a difference). My service seems >to be receiving the GOid's from MOBY, so I don't think the input is the >problem. I haven't used AXIS monitor yet, but I'll give it a try in the >next few days to see if there are any error messages (there aren't any >in the error logs). > >Viji, do you mind sending me some example code you are using for your >services, then I should be able to copy your style and adjust it for my >service?! > >Cheers, > >Michael. > >On Thu, 2004-03-04 at 15:47, Mark Wilkinson wrote: > > >>my messages are encoded as: >> >>xsi:type = http://schemas.xmlsoap.org/soap/encoding/base64 >> >>your messages are encoded as: >> >>xsi:type = http://www.w3.org/2001/XMLSchema/base64Binary >> >>That is likely the source of the problem. >> >>Interestingly, soap:base64 is defined as: >> >> >> >> >> >>So it shouldn't *really* make a difference. I might jot a quick note to >>Paul Kulchenko later today to ask him if this is a bug in SOAP Lite, or >>if the payload really does have to be defined by a soap encoding >>data-type rather than directly as an XML Schema data-type. >> >>In the meantime, perhaps you should do as Martin suggests and switch >>back to regular strings... interestingly, Viji's services pass their >>output as >> >>xsi:type=http://www.w3.org/2001/XMLSchema/string >> >>i.e. the SOAP Body data-type is defined by an XML schema, rather than a >>SOAP encoding style, so it seems more and more like the problem we are >>seeing is a bug in SOAP::Lite... >> >>Michael, can you put your services back to the state they were in when >>you were passing your data as string so that I can look at the output >>again? >> >>Thanks! >> >>Mark >> >> >> > > > From senger at ebi.ac.uk Tue Mar 9 07:07:07 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Tue, 9 Mar 2004 12:07:07 +0000 (GMT) Subject: [MOBY] Re: [MOBY-l] A Java web service problem In-Reply-To: <1078833900.3071.92.camel@vogel> Message-ID: > (Mark) Just a suggestion: It might be useful to post these files on the > Moby web site (if they aren't yet). Maybe here: > http://www.biomoby.org/moby-live/Java/docs/index.html ?! > This page is maintained by me. I will look at it... Thanks for the suggestion. Martin -- Martin Senger EMBL Outstation - Hinxton Senger at EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From dag at sonsorol.org Wed Mar 10 21:30:13 2004 From: dag at sonsorol.org (Chris Dagdigian) Date: Wed, 10 Mar 2004 21:30:13 -0500 Subject: [MOBY-l] O|B|F mail update -- making progress on anti-spam issues with our mailing lists Message-ID: <404FCF35.5010705@sonsorol.org> Hi folks, Apologies for the cross-posting but I just wanted to give our list members and admins an update on some new anti-spam measures we have (re)enabled. Good news to report basically... The most annoying spams recently have been the simple plain text messages without any HTML, attachments or mime-encoding that just slip right by our filters. Some lists have been forced to switch over to "only members can post" while other lists (like bioperl) have consistantly voted to stay as open as possible. I'll update you on our current efforts as well as a new effort that is about 24 hours old but already working really well so far. Until yesterday we had three main lines of defense against spam: 1. The mailserver itself (rejects mail from nonexistant domains, etc.) 2. The sendmail Mail::Milter extention (MIMEDefang+SpamAssassin are used to scan all incoming messages. Anything that scores higher than 8.0 is simply discarded automatically. MIMEDefang also strips dangerous attachments like .exe and .pif) 3. Our mailing list moderation queue (emails with attachments, odd MIME encodings and spamassassin scores from 0.0 - 7.9 are held in a moderator queue for a human to make an accept/discard decision) Here are some stats on how this system worked over the past few days: o 138 attempts to relay mail through our server blocked o 192 emails blocked due to forged or unresolvable sender domain o 577 emails discarded automatically by SpamAssassin+MIMEDefang This system worked *ok* but put a lot of work onto the shoulders of our list admins who constantly had to weed out the spam caught up in the mailing list moderator system. Yesterday I brought online another system that seems to be already working really well. It catches spam before we even accept it on our server which makes the load easier on both our scanning software and our human list moderators. The system is the RBL+ blackhole list from http://www.mail-abuse.org and the way it works is that we now query (via DNS) the RBL+ database each time someone connects to our mail server. If the RBL check against the sender IP address comes back as "positive" we reject the incoming email. RBL+ is a combination of four constantly updated databases: 1. RBL -- IP addresses of known, documented spammers and spam machines 2. RSS -- IP addresses of documented/tested unsecured email relays 3. OPS -- IP addresses of documented open proxy servers w/ spam history 3. DUL -- IP addresses belonging to ISP dialup and DHCP customers We have already blocked 137 email attempts in the last 24 hours from machines that were listed in one or more of the RBL databases. It is too soon to tell but if the RBL+ system plus our existing anti-spam measures work well enough we may be in a position where our "closed" mailing lists could revert back to being 'anyone can post'. Feedback appreciated. Especially if you get a "reject" message from us saying that you are listed in the RBL+ blackhole database! Regards, Chris O|B|F From fgibbons at hms.harvard.edu Tue Mar 16 18:07:28 2004 From: fgibbons at hms.harvard.edu (Frank Gibbons) Date: Tue, 16 Mar 2004 18:07:28 -0500 Subject: [MOBY-l] Interpreting results from Service->execute() Message-ID: <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> Hi MOBYers, I've been playing with MOBY all day (installed Perl 5.8.3 just for this!), and find that it works pretty well. I've successfully called plantspGetProtein from sdsc.edu and GetPubmed from prometheus.brc.mcw.edu. Now I'm trying to call getInteractingMethods from pdg.cnb.uam.es, and although it returns something, I just don't understand what it returns. The code I'm using to call it is appended at the end of this (having been cribbed from Catherine Letondal and Ken Streube - thanks to both for great tutorials!), but the important part is this: my $pid = "EBI-141"; my $result = $service->execute( XMLinputlist => [ ["object$i", ""] ] ) || 'None'; Response is: Now I'm not XML expert, but it's certainly not gibberish, or an error condition. I'm fairly sure the accession number I'm using is correct (it works when I go to IntAct's webpage): if it's not correct, shouldn't the service let me know somehow ("ID not found"). And if it is correct, where's my information? If the id is correct, but there are in fact no interacting methods, shouldn't it say "There are no interacting methods"? Instead it seems to just be acknowledging my request, but not providing any new information. I'll be the first to admit ignorance of XML, SOAP, etc. If this is a really dumb question, I'll be happy to read whatever you guys suggest. But I'm really hoping there's a simpler answer Thanks (in advance), -Frank Gibbons ========================= appended code here ========================= #!/home/fgibbons/bin/perl use MOBY::Client::Central; use MOBY::Client::Service; use strict; my $Central = MOBY::Client::Central->new(); my ($Services, $REG) = # ); # $Central->findService( authURI => 'prometheus.brc.mcw.edu', # serviceName => 'GetPubmed' $Central->findService( authURI => 'pdg.cnb.uam.es', serviceName => 'getInteractingMethods' ); unless ($Services) { print "Service discovery failed with the following errror: ", $REG->message; exit(0); } my @PIDs = ('1BIJ', '4HHB'); my @IntActIDs = ('EBI-141'); printf("%-35s\t\t %s\n%s\n", "Service", "provided by", "="x80); foreach my $S ( #sort { #$a->authority cmp $b->authority or #$a->name cmp $b->name } @{$Services}) { printf("%-35s\t\t%s%s\n", $S->name, $S->authority, $S->description); my $WSDL = $Central->retrieveService($S); my $service = MOBY::Client::Service->new(service => $WSDL); my $i = 0; foreach my $pid (@IntActIDs) { my $result = $service->execute( XMLinputlist => [ ["object$i", ""] ] ) || 'None'; print "Result ($i): $result\n"; $i++; } } PhD, Computational Biologist, Harvard Medical School BCMP/SGM-322, 250 Longwood Ave, Boston MA 02115, USA. Tel: 617-432-3555 Fax: 617-432-3557 http://llama.med.harvard.edu/~fgibbons From markw at illuminae.com Tue Mar 16 18:21:45 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Tue, 16 Mar 2004 15:21:45 -0800 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> References: <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> Message-ID: <1079479305.1856.188.camel@localilluminae.com> Hi Frank, I'm pleased that you have had relatively good luck using MOBY! w.r.t. your specific question: On Tue, 2004-03-16 at 15:07, Frank Gibbons wrote: > Response is: > > > xmlns='http://www.biomoby.org/moby'> > > > > > > Now I'm not XML expert, but it's certainly not gibberish, or an error > condition. I'm fairly sure the accession number I'm using is correct (it > works when I go to IntAct's webpage): if it's not correct, shouldn't the > service let me know somehow ("ID not found"). And if it is correct, where's > my information? If the id is correct, but there are in fact no interacting > methods, shouldn't it say "There are no interacting methods"? Instead it > seems to just be acknowledging my request, but not providing any new > information. The service is, in fact, responding correctly according to the API, where the following statement appears: "There are as many queryResponse elements as there were queryInput elements (if a service cannot respond to a specific query for whatever reason, this element may be empty!)." When I designed this aspect of the behaviour, my intention was to avoid having to enumerate all of the different possible reasons why something might fail; it was sufficient to simply return an "I don't know" as an empty node in the XML. There is no implication therein that the ID you passed is invalid, nor anything else... and in fact, for non-authoritative services there is no way for the service provider to know this in any case! Saying "ID unknown" (or whatever) might incorrectly imply that the ID is invalid, rather than just replying that this *particular* service doesn't know the answer to your question, thus the behaviour is to simply return you 'null' if the service can't respond. The client-side paradigm you might want to use is that if you can't get the result from one service, iterate through the valid services that provide your desired output until you *do* get a result. If you don't get a result from anyone, then you are out of luck, but that still doesn't imply that the ID number you used is invalid :-) > But I'm > really hoping there's a simpler answer The simpler answer might be that the service isn't working properly ;-) We'll have to ask our Spanish friends to check it... hopefully they are listening! good luck! Mark -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From jmfernandez at cnb.uam.es Wed Mar 17 09:37:45 2004 From: jmfernandez at cnb.uam.es (=?ISO-8859-1?Q?Jos=E9_Mar=EDa_Fern=E1ndez_Gonz=E1lez?=) Date: Wed, 17 Mar 2004 15:37:45 +0100 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <1079479305.1856.188.camel@localilluminae.com> References: <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> Message-ID: <405862B9.2050800@cnb.uam.es> > Hi MOBYers, > > I've been playing with MOBY all day (installed Perl 5.8.3 just for this!), and find that it works pretty well. I've successfully called plantspGetProtein from sdsc.edu and GetPubmed from prometheus.brc.mcw.edu. > > Now I'm trying to call getInteractingMethods from pdg.cnb.uam.es, and although it returns something, I just don't understand what it returns. The code I'm using to call it is appended at the end of this (having been cribbed from > Catherine Letondal and Ken Streube - thanks to both for great tutorials!), but the important part is this: > > my $pid = "EBI-141"; > my $result = > $service->execute( XMLinputlist => [ > ["object$i", > ""] > ] ) || 'None'; The shortest answer is: there is no answer. (please, follow reading!) The larger one: EBI-141 is an IntAct identifier, which corresponds to an interactor in this case (P53905 from UniProt). The service was designed thinking on protein ids because we are integrating data both from IntAct and other sources (like REGIA or VPiL). So, the identifier is not found and the method returns nothing... Also, it doesn't belong to any of the accepted input namespaces (AGI_LocusCode, Swiss-Prot, SPTR, TrEMBL) But it is true, there are two bugs: one related to signal an invalid namespace, and other related to say 'no output'. I'm fixing them since now. > > > The simpler answer might be that the service isn't working properly ;-) > We'll have to ask our Spanish friends to check it... hopefully they are > listening! You had enough luck (at least this time ;-)! > > good luck! > > Mark > > Cheers, Jos? Mar?a -- Jos? Mar?a Fern?ndez Gonz?lez e-mail: jmfernandez at cnb.uam.es Tlfn: (+34) 91 585 46 69 Fax: (+34) 91 585 45 06 Grupo de Dise?o de Proteinas Protein Design Group Centro Nacional de Biotecnolog?a National Center of Biotechnology C.P.: 28049 Zip Code: 28049 Campus Universidad Aut?noma. Cantoblanco, Madrid (Spain). From fgibbons at hms.harvard.edu Wed Mar 17 10:21:25 2004 From: fgibbons at hms.harvard.edu (Frank Gibbons) Date: Wed, 17 Mar 2004 10:21:25 -0500 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <405862B9.2050800@cnb.uam.es> References: <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> Message-ID: <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> Jos? Mar?a, Thanks for your response. >The larger one: EBI-141 is an IntAct identifier, which corresponds to an >interactor in this case (P53905 from UniProt). > >The service was designed thinking on protein ids because we are >integrating data both from IntAct and other sources (like REGIA or VPiL). >So, the identifier is not found and the method returns nothing... Also, it >doesn't belong to any of the accepted input namespaces (AGI_LocusCode, >Swiss-Prot, SPTR, TrEMBL) In fact, I just figured this out. There must be an easy way to find out the required input/output for a service. In my ignorance, I resorted to going to that MOBY-S web-page that lets you select input data types, then shows what services accept that type. I selected each protein type in sequence, until I found your services. But since there are at least half a dozen different protein ID systems, it gets complicated. I guess I could have written a script to iterate through them all, then iterate through the services I'm interested in, to find one that works. But shouldn't it be possible, once I know which service I'm interested in, to figure out what input it's looking for? I'm thinking specifically in terms of finding out what are the acceptable namespaces. Of course, I'm sure it is possible (wouldn't it be in the WSDL?) - anyone care to point me to a description of this? :) >But it is true, there are two bugs: one related to signal an invalid >namespace, and other related to say 'no output'. I'm fixing them since now. > >> >>The simpler answer might be that the service isn't working properly ;-) This raises an issue that would seem to increase in importance as the number of available services increases: if a service either doesn't work properly (someone puts it up prematurely, for example), or doesn't work at all (it worked a while ago, but something broke, and nobody is fixing it), how are service consumers to know? This is especially true if the response for unrecognized input data is simply an empty message. Should there be a meta-service, that rates the other services in terms of reliability, percentage time that it's up, length of service, or other criteria? I'm not imagining that it would "Service A is much better than Service B", merely that "Service C was last reported working successfully on January 19, 2002." or "Service D has responded to 97% of all requests in the last week." Maybe there is something like this already? Anyway, thanks to you (and to Mark) for setting me straight. -Frank PhD, Computational Biologist, Harvard Medical School BCMP/SGM-322, 250 Longwood Ave, Boston MA 02115, USA. Tel: 617-432-3555 Fax: 617-432-3557 http://llama.med.harvard.edu/~fgibbons From markw at illuminae.com Wed Mar 17 12:11:58 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed, 17 Mar 2004 09:11:58 -0800 Subject: [MOBY-l] simple MOBY screen-scraper code Message-ID: <1079543518.1847.109.camel@localilluminae.com> Rebecca requested this from me this morning (in exchange for setting up some services for me at MIPS :-) ). It may be useful to others, so I am sending it to the list. This code takes the authority, servicename, namespace, and id and makes the call to the service, then prints an HTML table of the results via screen-scraping the moby client CGI's output. Modify this as you wish for your own purposes. M -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From jmfernandez at cnb.uam.es Wed Mar 17 13:13:01 2004 From: jmfernandez at cnb.uam.es (=?ISO-8859-1?Q?Jos=E9_Mar=EDa_Fern=E1ndez_Gonz=E1lez?=) Date: Wed, 17 Mar 2004 19:13:01 +0100 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> References: <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> Message-ID: <4058952D.9020002@cnb.uam.es> > > In fact, I just figured this out. There must be an easy way to find out > the required input/output for a service. In my ignorance, I resorted to > going to that MOBY-S web-page that lets you select input data types, > then shows what services accept that type. I selected each protein type > in sequence, until I found your services. But since there are at least > half a dozen different protein ID systems, it gets complicated. I guess > I could have written a script to iterate through them all, then iterate > through the services I'm interested in, to find one that works. But > shouldn't it be possible, once I know which service I'm interested in, > to figure out what input it's looking for? I'm thinking specifically in > terms of finding out what are the acceptable namespaces. Of course, I'm > sure it is possible (wouldn't it be in the WSDL?) - anyone care to point > me to a description of this? :) Well, my preferred technique (for humans) is using the Ken Steube's "Service Instance Encyclopedia", which distills the list of services into a HTML using a CGI. http://plantsp.sdsc.edu/plantsp/cgi-bin/MOBY/list.services.cgi Obviusly, you can do it yourself using the available methods 'retrieveServiceNames' and 'findService' in MOBY::Client::Central object, if you are using Perl libraries. > >> But it is true, there are two bugs: one related to signal an invalid >> namespace, and other related to say 'no output'. I'm fixing them since >> now. >> >>> >>> The simpler answer might be that the service isn't working properly ;-) > I think there should be a common way to tell the most common errors, like an unrecognized namespace or an empty output. > > This raises an issue that would seem to increase in importance as the > number of available services increases: if a service either doesn't work > properly (someone puts it up prematurely, for example), or doesn't work > at all (it worked a while ago, but something broke, and nobody is fixing > it), how are service consumers to know? This is especially true if the > response for unrecognized input data is simply an empty message. Should > there be a meta-service, that rates the other services in terms of > reliability, percentage time that it's up, length of service, or other > criteria? I'm not imagining that it would "Service A is much better than > Service B", merely that "Service C was last reported working > successfully on January 19, 2002." or "Service D has responded to 97% of > all requests in the last week." Maybe there is something like this already? > The same problem is out there since years for CGI's. Some biological 'classical' web services are maintained by a team, but the input and output formats change, breaking all the programs which use it (I had some nasty experiences when I built a meta-threading server 3~4 years ago). Some other services remain working until they break, because they were built for a project which finished some years ago. The surviving ones are: 1) the most successful ones 2) those ones with support (money to pay a maintainer). Perhaps, the only way to tackle a piece of this problem is periodically doing some tests on the service. Some of them could be generic, like sending an ill-formed input or a correct object belonging to an incorrect namespace. The others should be provided by the service creator: two or three input objects which should give the same output. Obviusly, many services will not have a deterministic output, because they are based on a changing database, for instance. But for these cases the service creators could notify 'our service is still alive!'. You know, there is no easy way! Best Regards, Jos? Mar?a -- Jos? Mar?a Fern?ndez Gonz?lez e-mail: jmfernandez at cnb.uam.es Tlfn: (+34) 91 585 46 69 Fax: (+34) 91 585 45 06 Grupo de Dise?o de Proteinas Protein Design Group Centro Nacional de Biotecnolog?a National Center of Biotechnology C.P.: 28049 Zip Code: 28049 Campus Universidad Aut?noma. Cantoblanco, Madrid (Spain). From markw at illuminae.com Wed Mar 17 13:42:03 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed, 17 Mar 2004 10:42:03 -0800 Subject: [MOBY-l] simple MOBY screen-scraper code Message-ID: <1079548923.1850.116.camel@localilluminae.com> Weird! in my "sent" box, it has an attachment, and in my MOBY inbox it says it has an attachment, but the attachment is missing! Here is a re-send, with attachment again, but here is the code in-line to make sure it actually gets to you... #!/usr/bin/perl -w use strict; #============================= # you need to provide these... my $auth = $ARGV[0]; my $service= $ARGV[1]; my $namespace = $ARGV[2]; my $id = $ARGV[3]; #============================== # URL encode $auth =~s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg; $service =~s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg; $namespace =~s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg; $id =~s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg; use LWP::UserAgent; my $ua = LWP::UserAgent->new; # Initialize proxy settings from environment variables $ua->env_proxy; # Create a request my $req = HTTP::Request->new(GET => "http://mobycentral.cbr.nrc.ca/cgi-bin/gbrowse_moby?authority=$auth;servicename=$service;namespace=$namespace;id=$id"); $req->header('Accept' => 'text/html'); # Pass request to the user agent and get a respnse back my $res = $ua->request($req); # Check the outcome of the response unless ($res->is_success) { return; } my $content = $res->content; my @tablerows = $content =~ /SCRAPE_ME_START\s*\-\-\s*\>(.*?)\<\!\s*\-\-\s*SCRAPE_ME_END/g; print "\n"; print "
MOBY results
\n"; print "\n"; foreach (@tablerows){ print; print "\n"; } print "
\n"; print "
\n"; Original Message=============================== Rebecca requested this from me this morning (in exchange for setting up some services for me at MIPS :-) ). It may be useful to others, so I am sending it to the list. This code takes the authority, servicename, namespace, and id and makes the call to the service, then prints an HTML table of the results via screen-scraping the moby client CGI's output. Modify this as you wish for your own purposes. M -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From markw at illuminae.com Wed Mar 17 13:46:15 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed, 17 Mar 2004 10:46:15 -0800 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> References: <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> Message-ID: <1079549174.1849.120.camel@localilluminae.com> On Wed, 2004-03-17 at 07:21, Frank Gibbons wrote: > But shouldn't it be > possible, once I know which service I'm interested in, to figure out what > input it's looking for? I'm thinking specifically in terms of finding out > what are the acceptable namespaces. Of course, I'm sure it is possible > (wouldn't it be in the WSDL?) - anyone care to point me to a description of > this? :) The WSDL could (in principle) tell you the service signature in terms of its structure (XSD) but not its semantics. For MOBY, the structure is ~irrelevant to us, since the ontology precisely defines the structure for both input and output. As such, we haven't even found the need to implement the creation of an XSD for our objects, hence the somewhat peculiar WSDL that you get from MOBY Central. Here's the code that does what you want: use MOBY::Client::Central; $m = MOBY::Client::Central->new; ($ss, $r) = $m->findService(authURI => $auth, serviceName => $name); $service = shift @{$ss}; print "Service $name from $auth is of type ".($service-type)."\n"; print "It consumes: \n"; $inputs = $service->input; foreach $in (@{$inputs}){ print "\t",$in->objectType,"\n"; print "\tin namespace(s)\n"; my $namespaces = $in->namespaces; foreach $ns(@{$namespaces}){ print "\t\t$ns\n"; } } print "It generates: \n"; $outputs = $service->output; foreach $out (@{$outputs}){ print "\t",$out->objectType,"\n"; print "\tin namespace(s)\n"; my $namespaces = $out->namespaces; foreach $ns(@{$namespaces}){ print "\t\t$ns\n"; } } > Should there be a > meta-service, that rates the other services in terms of reliability, > percentage time that it's up, length of service, or other criteria? We are discussing this up here in Canuk-land, but it isn't that easy - see below. > I'm not > imagining that it would "Service A is much better than Service B", merely > that "Service C was last reported working successfully on January 19, > 2002." or "Service D has responded to 97% of all requests in the last > week." Maybe there is something like this already? It is surprisingly hard to do this, since the registry does not have any role in your transaction with the service itself - it is merely a broker. On the other hand, we can "watch" peoples behaviour as they use the registry, and make statements like "9 out of 10 bioinformaticians who made this type of query chose this service provider". The problem of keeping services functional, or reporting on their functionality is something that I don't think we can address (any more than Google can address the problem of links being outdated or down at the moment you click them on the Google site). M -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From steube at sdsc.edu Wed Mar 17 13:47:49 2004 From: steube at sdsc.edu (Ken Steube) Date: Wed, 17 Mar 2004 10:47:49 -0800 (PST) Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <4058952D.9020002@cnb.uam.es> Message-ID: On Wed, 17 Mar 2004, Jos? Mar?a Fern?ndez Gonz?lez wrote: > Perhaps, the only way to tackle a piece of this problem is > periodically doing some tests on the service. Some of them could be > generic, like sending an ill-formed input or a correct object > belonging to an incorrect namespace. The others should be provided by > the service creator: two or three input objects which should give the > same output. Obviusly, many services will not have a deterministic > output, because they are based on a changing database, for instance. > But for these cases the service creators could notify 'our service is > still alive!'. There are two initiatives going on help to test a service to see if it's working. One problem is to know how to choose a good input so that you can expect a meaningful response from a particular service...the more you know about the biology behind the particular service, the more likely you are to specify a good input. 1) The new GBrowse client has two links toward the bottom (Snapdragon... and Arabidopsis...). Click on them to submit a particular input and then you can run the suggested service. The point here is we are suggesting a good choice of input. We need to add more examples for other services. This way is limited because usually a bunch of services come up and the user has to know which ones to try for that input. 2) The second way is a demo I recently used for a talk + live demo. http://plantsp.sdsc.edu/plantsp/html/service_demo.html This form allows you to enter a serviceName, authURI and a block of XML input. You can run any service by changing the three inputs on this form, but as you'll see I have filled out the form with values already entered that produce good results. I think this is a good way to test any service. Just create one form per service with appropriate values already filled in the three inputs. Now anyone can to go this form and test the service at any time they want to do so. Ken -- -- -- Ken Steube San Diego Supercomputer Center University of California, San Diego, MC 0505 9500 Gilman Drive San Diego, California, 92093-0505 USA FAX (858) 822-3610 From fgibbons at hms.harvard.edu Wed Mar 17 15:27:13 2004 From: fgibbons at hms.harvard.edu (Frank Gibbons) Date: Wed, 17 Mar 2004 15:27:13 -0500 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <1079538843.1847.66.camel@localilluminae.com> References: <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> Message-ID: <5.2.1.1.2.20040317150815.01a5a120@email.med.harvard.edu> Mark, At 10:54 AM 3/17/2004, Mark Wilkinson wrote: >The WSDL could (in principle) tell you the service signature in terms of >its structure (XSD) but not its semantics. For MOBY, the structure is >~irrelevant to us, since the ontology precisely defines the structure >for both input and output. As such, we haven't even found the need to >implement the creation of an XSD for our objects, hence the somewhat >peculiar WSDL that you get from MOBY Central. Thanks for the code to show what the input/output is for each service. Since it didn't quite work with outputs that are collections, I'm appending my modified version here. In fact, it queries MOBY for all services, then prints an alphabetized (case-insensitive) list of services, handling both simple and collection outputs. I hope it's useful to someone else. Thanks again for answering my questions. -Frank ----------------------------------------- appended perl code ------------------------------------------------------------ use MOBY::Client::Central; $m = MOBY::Client::Central->new; #my ($auth, $name) = ('pdg.cnb.uam.es', 'getInteractions'); ($ss, $r) = $m->findService(); #authURI => $auth, serviceName => $name); my $i = 0; foreach my $service (sort { lc $a->name cmp lc $b->name } @{$ss} ) { $i++; print "$i: Service ", $service->name, " from ", $service->authority, " is of type ", $service->type, "\n"; print "It consumes: \n"; $inputs = $service->input; foreach $in ( @{$inputs} ) { print "\t", $in->objectType, "\n"; print "\t\tin namespace(s)\n"; my $namespaces = $in->namespaces; foreach $ns ( @{$namespaces} ) { print "\t\t\t\t$ns\n"; } } print "It generates "; $outputs = $service->output; foreach $out ( @{$outputs} ) { # Check for isCollection, each element of the collection should have an objectType if ($out->isCollection) { print "a collection of outputs:\n"; foreach my $simple (@{$out->Simples}) { print "\t", $simple->objectType, "\n"; print "\t\tin namespace(s)\n"; foreach $ns ( @{$simple->namespaces} ) { print "\t\t\t\t$ns\n"; } } } else { print "a single output:\n"; print "\t", $out->objectType, "\n"; print "\t\tin namespace(s)\n"; foreach $ns ( @{$out->namespaces} ) { print "\t\t\t\t$ns\n"; } } } print "\n", '-'x80, "\n"; } PhD, Computational Biologist, Harvard Medical School BCMP/SGM-322, 250 Longwood Ave, Boston MA 02115, USA. Tel: 617-432-3555 Fax: 617-432-3557 http://llama.med.harvard.edu/~fgibbons From gordonp at cbr.nrc.ca Wed Mar 17 15:30:12 2004 From: gordonp at cbr.nrc.ca (Paul Gordon) Date: Wed, 17 Mar 2004 13:30:12 -0700 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <4058952D.9020002@cnb.uam.es> References: <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> <1079479305.1856.188.camel@localilluminae.com> <5.2.1.1.2.20040317100836.01a45c28@email.med.harvard.edu> <4058952D.9020002@cnb.uam.es> Message-ID: <4058B554.2090505@cbr.nrc.ca> Or have a Time To Live associated with a service. The policy would be central. By default, a service stays listed for, lets say, 7 days. From trusted domains you could make it longer. Unless the provider sends a renewal message for their service, it disappears on the expiry date. That way, you don't get cruft build up. Those that want to provide services can at the very least send a message via the API once a month saying "we're still in business, and our service works!" > > Perhaps, the only way to tackle a piece of this problem is > periodically doing some tests on the service. Some of them could be > generic, like sending an ill-formed input or a correct object > belonging to an incorrect namespace. The others should be provided by > the service creator: two or three input objects which should give the > same output. Obviusly, many services will not have a deterministic > output, because they are based on a changing database, for instance. > But for these cases the service creators could notify 'our service is > still alive!'. > > You know, there is no easy way! > > Best Regards, > Jos? Mar?a > From senger at ebi.ac.uk Wed Mar 17 15:41:37 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Wed, 17 Mar 2004 20:41:37 +0000 (GMT) Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <4058B554.2090505@cbr.nrc.ca> Message-ID: > Or have a Time To Live associated with a service. The policy would be > central. By default, a service stays listed for, lets say, 7 days... > I like it, and I like that somebody brought it here again. I was trying a year ago, but nobody listened to me. This "leasing" is a concept that has been discussed a lot within myGrid project and is very appealling. It is part of a broader question of "quality of service" (or "metadata" attached to a service). Regards, Martin -- Martin Senger EMBL Outstation - Hinxton Senger at EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From fgibbons at hms.harvard.edu Wed Mar 17 16:14:19 2004 From: fgibbons at hms.harvard.edu (Frank Gibbons) Date: Wed, 17 Mar 2004 16:14:19 -0500 Subject: [MOBY-l] Time-to-live as service metadata In-Reply-To: References: <4058B554.2090505@cbr.nrc.ca> Message-ID: <5.2.1.1.2.20040317160713.01a595b0@email.med.harvard.edu> At 03:41 PM 3/17/2004, Martin Senger wrote: > > Or have a Time To Live associated with a service. The policy would be > > central. By default, a service stays listed for, lets say, 7 days... > > > I like it, and I like that somebody brought it here again. I was trying >a year ago, but nobody listened to me. This "leasing" is a concept that >has been discussed a lot within myGrid project and is very appealling. It >is part of a broader question of "quality of service" (or "metadata" >attached to a service). Sounds like a good idea to me (not that I have any experience in this stuff). I think, if MOBY takes off in a big way, this might turn out to be an Achilles' heel if not tackled early. What will happen if, five years from now, there are 1000 services registered, but only 250 of them actually work as advertised? You're going to have some pretty unhappy service consumers on your hands, and it's going to become harder for others to justify adding services. Imagine MOBY as one of those maps you get a holiday fair, showing what each booth is and what they're selling. If most of the booths are empty, or are selling something different from what the little map says, pretty soon people start to say "oh, MOBY used to be great when it started out, but you don't want to go there now unless you really have a lot of time on your hands - most of the booths are empty, and those that aren't empty are selling something different from what you expect." "Time to live" sounds like a fairly low-maintenance way to go. -Frank PhD, Computational Biologist, Harvard Medical School BCMP/SGM-322, 250 Longwood Ave, Boston MA 02115, USA. Tel: 617-432-3555 Fax: 617-432-3557 http://llama.med.harvard.edu/~fgibbons From gordonp at cbr.nrc.ca Wed Mar 17 16:20:07 2004 From: gordonp at cbr.nrc.ca (Paul Gordon) Date: Wed, 17 Mar 2004 14:20:07 -0700 Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: References: Message-ID: <4058C107.4020209@cbr.nrc.ca> We would be crazy not to implement this. Every distributed system that I can think of has some kind of expiry mechanism. Think TTL data on TCP packets, DNS entries, Web caching... Martin Senger wrote: >>Or have a Time To Live associated with a service. The policy would be >>central. By default, a service stays listed for, lets say, 7 days... >> >> >> > I like it, and I like that somebody brought it here again. I was trying >a year ago, but nobody listened to me. This "leasing" is a concept that >has been discussed a lot within myGrid project and is very appealling. It >is part of a broader question of "quality of service" (or "metadata" >attached to a service). > > Regards, > Martin > > > From steube at sdsc.edu Wed Mar 17 16:25:35 2004 From: steube at sdsc.edu (Ken Steube) Date: Wed, 17 Mar 2004 13:25:35 -0800 (PST) Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: <4058B554.2090505@cbr.nrc.ca> Message-ID: On Wed, 17 Mar 2004, Paul Gordon wrote: > Or have a Time To Live associated with a service. I wonder if this would be effective. My approach to the Time To Live approach would be to write a cron job that notifies MOBY-Central that my services are still OK. So my services might break and Time To Live wouldn't be useful. I like the idea of having a standard test script that gets run periodically by someone's computer. It would have a carefully chosen input to produce a predictable output which can be verified to be correct by the test script. It could then notify MOBY-Central of success and MOBY-Central could be queried by anyone for the last time there was a success. Ken From markw at illuminae.com Wed Mar 17 16:39:03 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed, 17 Mar 2004 13:39:03 -0800 Subject: [MISC] [MOBY-l] Time-to-live as service metadata In-Reply-To: <5.2.1.1.2.20040317160713.01a595b0@email.med.harvard.edu> References: <4058B554.2090505@cbr.nrc.ca> <5.2.1.1.2.20040317160713.01a595b0@email.med.harvard.edu> Message-ID: <1079559543.12062.30.camel@localilluminae.com> To be honest, I have racked my brains on this, and can't come up with a better solution that what you & Martin are suggesting either - I was hoping to bring it up at the MOBY meeting in CSHL in a couple of weeks, but it looks like the cat's out of the bag again now :-) It's all a part of the larger issue of security (in general) and quality of service. My understanding of UDDI is that UDDI registrations don't time-out, but rather are governed by (a) quite small and domain specific registries, that (b) have password authentication for the register/deregister process if necessary. As such, they might not experience the problem of wanton random (useless) service registration since only a select few can register services, nor of services becoming obsolete given the peer-pressure of the smaller social-domain the registry caters to. Conversely, if you look at the services currently available in MOBY Central you will already see quite a bit of garbage - services and objects called "TEST", for example - people not cleaning up after themselves... in fact, I noticed this morning that someone has registered an object called "LSID" that is specific to a particular domain of LSID's! EEEK! Granted, this is my fault for not getting off my arse and setting up a test-instance of the registry, but it does emphasize the need for some sort of automated maintenance! My inner voice tells me that the more barriers we put at the service-provision side of the equation, the fewer people will play the game, and the less useful MOBY will be. It's easy enough for people with a good knowledge of systems to set up a cron that will re-register their services on a weekly basis, but this does raise the bar higher than I had hoped to w.r.t. service-provider buy-in, and will be quite foreign to someone on e.g. MS Windows. The flip-side of the coin is, as you say, that the less reliable/useful the system is as a whole the less it will be used - a deadly downwards spiral toward uselessness! Damned if you do, damned if you don't! Personally, I'm all for the time-to-live solution, if the person who decides to build it *promises* to build the tools to make it easy to implement! ...notice that we first need someone to raise their hand and volunteer to build it ;-) I'm trying to get more money to pay coders in my lab, but that will take time, so... anyone with idle hands is welcome to do the devils work! M On Wed, 2004-03-17 at 13:14, Frank Gibbons wrote: > At 03:41 PM 3/17/2004, Martin Senger wrote: > > > Or have a Time To Live associated with a service. The policy would be > > > central. By default, a service stays listed for, lets say, 7 days... > > > > > I like it, and I like that somebody brought it here again. I was trying > >a year ago, but nobody listened to me. This "leasing" is a concept that > >has been discussed a lot within myGrid project and is very appealling. It > >is part of a broader question of "quality of service" (or "metadata" > >attached to a service). > > Sounds like a good idea to me (not that I have any experience in this > stuff). I think, if MOBY takes off in a big way, this might turn out to be > an Achilles' heel if not tackled early. What will happen if, five years > from now, there are 1000 services registered, but only 250 of them actually > work as advertised? You're going to have some pretty unhappy service > consumers on your hands, and it's going to become harder for others to > justify adding services. > > Imagine MOBY as one of those maps you get a holiday fair, showing what each > booth is and what they're selling. If most of the booths are empty, or are > selling something different from what the little map says, pretty soon > people start to say "oh, MOBY used to be great when it started out, but you > don't want to go there now unless you really have a lot of time on your > hands - most of the booths are empty, and those that aren't empty are > selling something different from what you expect." > > "Time to live" sounds like a fairly low-maintenance way to go. > > -Frank > > > PhD, Computational Biologist, > Harvard Medical School BCMP/SGM-322, 250 Longwood Ave, Boston MA 02115, USA. > Tel: 617-432-3555 Fax: > 617-432-3557 http://llama.med.harvard.edu/~fgibbons > > _______________________________________________ > moby-l mailing list > moby-l at biomoby.org > http://biomoby.org/mailman/listinfo/moby-l -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From senger at ebi.ac.uk Wed Mar 17 16:44:23 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Wed, 17 Mar 2004 21:44:23 +0000 (GMT) Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: Message-ID: > I wonder if this would be effective. My approach to the Time To Live > approach would be to write a cron job that notifies MOBY-Central that my > services are still OK. So my services might break and Time To Live > wouldn't be useful. > You can always cheat - and break things, of course. But why to write a cron job that notifies if there is nothing to notify? :-) Better to create a cron job that can re-register my service after checking that my service is okay. The beauty of this is that the cron job is create by the same person that wrote the service so he/she knows the best how to check the service. > I like the idea of having a standard test script that gets run > periodically by someone's computer. It would have a carefully chosen input > to produce a predictable output which can be verified to be correct by the > test script. > There is no such think as a standard test... Just my 2c, Martin -- Martin Senger EMBL Outstation - Hinxton Senger at EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From steube at sdsc.edu Wed Mar 17 18:13:13 2004 From: steube at sdsc.edu (Ken Steube) Date: Wed, 17 Mar 2004 15:13:13 -0800 (PST) Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: Message-ID: I don't think it's appropriate to delete people's services because they didn't update the Time To Live. Let me suggest an alternative: What I was trying to say in my last post was that I think it's more useful for Central to store a "Time of Last Successful Test" for each service. Service authors then could write a test for each service that upon success updates this timestamp at Central. This test is what should go in cron for periodic execution. Then we could adjust findService() to have an extra option like "testTime=>7" to request services that have been successfully tested in the last 7 days. I will also suggest another timestamp for each service: one that says the service is known to be down as of a certain date, and the author has not been able to fix it yet. With this you can notify the world your service is down and you haven't fixed it yet. With this approach nobody's service gets deleted and you have a really useful way to see if a service is being maintained. Ken On Wed, 17 Mar 2004, Martin Senger wrote: > > I wonder if this would be effective. My approach to the Time To Live > > approach would be to write a cron job that notifies MOBY-Central that my > > services are still OK. So my services might break and Time To Live > > wouldn't be useful. > > > You can always cheat - and break things, of course. But why to write a > cron job that notifies if there is nothing to notify? :-) Better to create > a cron job that can re-register my service after checking that my service > is okay. The beauty of this is that the cron job is create by the same > person that wrote the service so he/she knows the best how to check the > service. > > > I like the idea of having a standard test script that gets run > > periodically by someone's computer. It would have a carefully chosen input > > to produce a predictable output which can be verified to be correct by the > > test script. > > > There is no such think as a standard test... > > Just my 2c, Martin > > -- -- -- Ken Steube San Diego Supercomputer Center University of California, San Diego, MC 0505 9500 Gilman Drive San Diego, California, 92093-0505 USA FAX (858) 822-3610 From senger at ebi.ac.uk Wed Mar 17 18:30:18 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Wed, 17 Mar 2004 23:30:18 +0000 (GMT) Subject: [MOBY] [MOBY-l] Interpreting results from Service->execute() In-Reply-To: Message-ID: > I don't think it's appropriate to delete people's services because they > didn't update the Time To Live. > I do, but that's perhaps just a matter of style. The important thing you mentioned is hidden in your words "...to have an extra option...". That's what I called metadata attached to a service. Moby should have a general mechanism how to attached metadata - and then we can document which metadata are encouraged to have - and the "time of the last access" may be one of them. But important is to add this mechanism "from the top" (having an API for it) and let perhaps service providers to fill/use it "from the bottom". Martin -- Martin Senger EMBL Outstation - Hinxton Senger at EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From markw at illuminae.com Thu Mar 18 10:33:23 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Thu, 18 Mar 2004 07:33:23 -0800 Subject: [MOBY-l] The original thread returns... Re: Interpreting results from Service->execute() In-Reply-To: <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> References: <5.2.1.1.2.20040316175749.01a4d590@email.med.harvard.edu> Message-ID: <1079624003.1849.8.camel@localilluminae.com> Frank! Sorry, I was totally braindead when I responded to this message a few days ago. I apologize - multitasking is obviously getting the better of me! So, the *correct* answer to this question is that we have no *formal* way for the server to report errors to you, but we do have an *informal* way for this to happen. In the moby:Response XML block there is a serviceNotes element: freetext notes here [ ] ... ... and that should be used by the service provider to pass you free-text descriptions of what may have gone wrong server-side with your query (or any other unstructured notes that the service provider may wish to send you, even if the service executed successfully!) So far, nobody I know is using that (probably because I have not written the API's to do so ;-) ), and the existing clients would ignore it anyway... but it is there for that purpose! There are actually several bits of the MOBY-S API that have not yet been "instantiated" at the code level... this is one of them. I'll try to get this done today, since Heiko just wrote me that he needs it up and running right away as well. Anyway, that is the *correct* answer to your question. Sorry for that - I was thinking in terms of an error "object" rather than a free-text note, so it just never tweaked in my head that we had an element for that purpose, and I misled you with my initial response. Mark On Tue, 2004-03-16 at 15:07, Frank Gibbons wrote: > Hi MOBYers, > > I've been playing with MOBY all day (installed Perl 5.8.3 just for this!), > and find that it works pretty well. I've successfully called > plantspGetProtein from sdsc.edu and GetPubmed from prometheus.brc.mcw.edu. > > Now I'm trying to call getInteractingMethods from pdg.cnb.uam.es, and > although it returns something, I just don't understand what it returns. The > code I'm using to call it is appended at the end of this (having been > cribbed from > Catherine Letondal and Ken Streube - thanks to both for great tutorials!), > but the important part is this: > > my $pid = "EBI-141"; > my $result = > $service->execute( XMLinputlist => [ > ["object$i", > " id='$pid'/>"] > ] ) || 'None'; > > Response is: > > > xmlns='http://www.biomoby.org/moby'> > > > > > > Now I'm not XML expert, but it's certainly not gibberish, or an error > condition. I'm fairly sure the accession number I'm using is correct (it > works when I go to IntAct's webpage): if it's not correct, shouldn't the > service let me know somehow ("ID not found"). And if it is correct, where's > my information? If the id is correct, but there are in fact no interacting > methods, shouldn't it say "There are no interacting methods"? Instead it > seems to just be acknowledging my request, but not providing any new > information. > > I'll be the first to admit ignorance of XML, SOAP, etc. If this is a really > dumb question, I'll be happy to read whatever you guys suggest. But I'm > really hoping there's a simpler answer > > Thanks (in advance), > > -Frank Gibbons > > ========================= appended code here ========================= > #!/home/fgibbons/bin/perl > > use MOBY::Client::Central; > use MOBY::Client::Service; > use strict; > my $Central = MOBY::Client::Central->new(); > > my ($Services, $REG) = > # ); > # $Central->findService( authURI => 'prometheus.brc.mcw.edu', > # serviceName => 'GetPubmed' > > $Central->findService( authURI => 'pdg.cnb.uam.es', > serviceName => 'getInteractingMethods' > ); > unless ($Services) { > print "Service discovery failed with the following errror: ", > $REG->message; > exit(0); > } > > my @PIDs = ('1BIJ', '4HHB'); > my @IntActIDs = ('EBI-141'); > printf("%-35s\t\t %s\n%s\n", "Service", "provided by", "="x80); > foreach my $S ( #sort { > #$a->authority cmp $b->authority or > #$a->name cmp $b->name } > @{$Services}) { > printf("%-35s\t\t%s%s\n", $S->name, $S->authority, $S->description); > my $WSDL = $Central->retrieveService($S); > my $service = MOBY::Client::Service->new(service => $WSDL); > my $i = 0; > foreach my $pid (@IntActIDs) { > my $result = > $service->execute( XMLinputlist => [ > ["object$i", > " id='$pid'/>"] > ] ) || 'None'; > print "Result ($i): $result\n"; > $i++; > } > } > > > > PhD, Computational Biologist, > Harvard Medical School BCMP/SGM-322, 250 Longwood Ave, Boston MA 02115, USA. > Tel: 617-432-3555 Fax: > 617-432-3557 http://llama.med.harvard.edu/~fgibbons > > _______________________________________________ > moby-l mailing list > moby-l at biomoby.org > http://biomoby.org/mailman/listinfo/moby-l -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From letondal at pasteur.fr Fri Mar 19 11:30:15 2004 From: letondal at pasteur.fr (Catherine Letondal) Date: Fri, 19 Mar 2004 17:30:15 +0100 Subject: [MOBY-l] Output of a service Message-ID: <200403191630.i2JGUFoA511736@electre.pasteur.fr> Hi, We have successfully done the demo (test_sequencetofasta) service and we have started to setup a first service (see http://bioweb.pasteur.fr/seqanal/interfaces/melting.html): my $reg = $C->registerService( serviceName => 'Melting', authURI => $authURI, contactEmail => $email, description => "Melting: enthalpie, entropy and melting temperature (N. Le Novere)", URL => $url, input => [ ['', ["NucleotideSequence" => []]], ], output => [ ['', ["text-plain" => []]], ], category => "moby", serviceType => "Analysis", ); We have troubles finding how to return the result. The current code is: sub Melting { my ($caller, $query) = @_; ### return $query; # echo back the input my $MOBY_RESPONSE = ''; my @simples = MobyXmlObject->getMobySimples($query); foreach my $s (@simples) { my ($name, $ns, $id) = ($s->articleName(), $s->namespace(), $s->id()); my $seq = ''; my $len = ''; foreach my $inc ($s->getIncludedObjects()) { $seq = $inc->valueTrimmed() if $inc->articleName() eq 'SequenceString'; $len = $inc->valueTrimmed() if $inc->articleName() eq 'Length'; } if ($seq) { #my $fasta = ">$id $ns length=$len\n" . &sixty_bustup($seq); open (MELTING, ****--smt that provde a text output--****) ; my textresult = join("",); close (MELTING); $result = qq{ }; } else { $result = simpleResponse('', ''); } $MOBY_RESPONSE .= simpleResponse($result, ''); } return responseHeader . $MOBY_RESPONSE . responseFooter; } The "debug" step worked ok. Now, it is the ->execute() that returns... nothing. We have looked at many sources of information on the biomoby.org Web site and elsewhere: http://biomoby.org/SettingUpPerlServices.html http://biomoby.org/moby-live/Perl/scripts/Services/LocalServices.pm http://biomoby.org/moby-live/Perl/scripts/testMOBYCentral_v05.pl as well as the papers, and the tutorials, but we haven't found yet where the XML description associated to an object is. Our service returns a text-plain object (the output of a program). I would have several questions: 1) Do we have to register a sub-class of text-plain or is it possible de use the text-plain object type? 2) If we have to register a new object type : - a) What kind of namespace would you use for such a new object type then? - b) What kind of id also? (is there an id for an analysis?) 3) Once you know what type of object you have to return, how do you provide it as a return value of your service? In raw XML? I hope these are not too much FAQ, thanks in advance, -- Catherine Letondal -- Pasteur Institute Computing Center From markw at illuminae.com Fri Mar 19 12:11:33 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Fri, 19 Mar 2004 09:11:33 -0800 Subject: [MOBY] [MOBY-l] Output of a service In-Reply-To: <200403191630.i2JGUFoA511736@electre.pasteur.fr> References: <200403191630.i2JGUFoA511736@electre.pasteur.fr> Message-ID: <1079716292.1893.40.camel@localilluminae.com> Hi Catherine! Congratulations on your first service :-) A few comments, and answers to your questions: > serviceType => "Analysis", please feel free to register a more descriptive service type that inherits from "Analysis" - e.g. melting_point_determination ISA Analysis ... though if we were to do it right, it should probably have a bit more granularity than that... something like: Nucleotide_Sequence_Analysis DNA_Sequence_Analysis Physical ( Structural... Chemical... Functional...) Melting_Point > my @simples = MobyXmlObject->getMobySimples($query); I see you are using Ken's code to get the Simples. This is fine, but I don't think his code has been updated with the recent API changes that require the inputs to be enumerated. Ken? Also, Ken, perhaps you could migrate these routines into the CommonSubs.pm module (or simply add your module in the CVS) to make it easier for all of us to keep the code up-to-date with API changes. Catherine - you wont *break* anything by being non-compliant in this way, since these API changes were all backward-compatible, however you wont be 100% compliant... which is a shame for your first service :-) > > > You should probably register an object that inherits from text-formatted (rather than text-plain) and give it the name of your analysis program e.g. as we have done with NCBI_Blast_Text and NCBI_Blast_XML. > $MOBY_RESPONSE .= simpleResponse($result, ''); simpleResponse now takes three arguments, the third one being the enumerated identity of the query to which you are responding (see above). Again, you wont *break* anything by doing it this way, but... > return responseHeader . $MOBY_RESPONSE . responseFooter; responseHeader also takes arguments. At a minimum, it takes your authority, but it can also be used to provide serviceNotes. responseHeader('bioweb.pasteur.fr'); or responseHeader( -authority => 'bioweb.pasteur.fr', -note => 'software version xxx'); something like that... > The "debug" step worked ok. Now, it is the ->execute() that returns... nothing. Unfortunately, I don't see your service in the registry, so you must have it in some private registry? If I could see it, I could help you debug it... > the XML description associated to an object is. Ken has this tool in his "encyclopedia": http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?obj=PutYourObjectHere > 1) Do we have to register a sub-class of text-plain or is it possible de use the > text-plain object type? You can output text-plain if you wish, but it is better "semantically" to create a specific object type for a specific data type, as this will help people to e.g. create parsers for your output (parsing "plain-text" would be meaningless... ;-) ) > 2) If we have to register a new object type : > - a) What kind of namespace would you use for such a new object type then? you don't register namespaces together with objects - the two things are independent. What you would do is to take the namespace/id from the incoming request object and use that as the namespace/id of your outgoing plain-text (or whatever) object. The way to think of MOBY Analysis services is that they take incoming data and output a different representation of the same data, hence the output has the same namespace/ID as the input (in most cases...) > 3) Once you know what type of object you have to return, how do you provide it > as a return value of your service? In raw XML? Your service code is ~perfect as far as I can see, so I am not sure why you are not getting any output from it... Your interpretation of the spec seems to be 100% correct! yes, when using the simpleResponse subroutine you do exactly as you say - you give it raw XML, and it will build the response for you. > I hope these are not too much FAQ, thanks in advance, I'm sorry that I wasn't able to solve your exact problem... if you register your service in the public registry I will play with it today and we should have it fixed up right away! Cheers! M -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From markw at illuminae.com Fri Mar 19 12:20:32 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Fri, 19 Mar 2004 09:20:32 -0800 Subject: [MOBY] [MOBY-l] Output of a service In-Reply-To: <1079716292.1893.40.camel@localilluminae.com> References: <200403191630.i2JGUFoA511736@electre.pasteur.fr> <1079716292.1893.40.camel@localilluminae.com> Message-ID: <1079716832.1890.51.camel@localilluminae.com> Could someone out there please forward my response on to Catherine? I'm not sure if my own response will get through to her since my SMTP server has been blacklisted throughout the world :-/ It just bounced back to me as "rejected". Thanks! M On Fri, 2004-03-19 at 09:11, Mark Wilkinson wrote: > Hi Catherine! > > Congratulations on your first service :-) > > A few comments, and answers to your questions: > > > > serviceType => "Analysis", > > please feel free to register a more descriptive service type that > inherits from "Analysis" - e.g. melting_point_determination ISA Analysis > > ... though if we were to do it right, it should probably have a bit more > granularity than that... something like: > > Nucleotide_Sequence_Analysis > DNA_Sequence_Analysis > Physical ( Structural... Chemical... Functional...) > Melting_Point > > > > my @simples = MobyXmlObject->getMobySimples($query); > > I see you are using Ken's code to get the Simples. This is fine, but I > don't think his code has been updated with the recent API changes that > require the inputs to be enumerated. Ken? Also, Ken, perhaps you could > migrate these routines into the CommonSubs.pm module (or simply add your > module in the CVS) to make it easier for all of us to keep the code > up-to-date with API changes. > > Catherine - you wont *break* anything by being non-compliant in this > way, since these API changes were all backward-compatible, however you > wont be 100% compliant... which is a shame for your first service :-) > > > > > > > > > You should probably register an object that inherits from text-formatted > (rather than text-plain) and give it the name of your analysis program > e.g. as we have done with NCBI_Blast_Text and NCBI_Blast_XML. > > > > $MOBY_RESPONSE .= simpleResponse($result, ''); > > simpleResponse now takes three arguments, the third one being the > enumerated identity of the query to which you are responding (see > above). Again, you wont *break* anything by doing it this way, but... > > > > return responseHeader . $MOBY_RESPONSE . responseFooter; > > responseHeader also takes arguments. At a minimum, it takes your > authority, but it can also be used to provide serviceNotes. > > responseHeader('bioweb.pasteur.fr'); > > or > > responseHeader( > -authority => 'bioweb.pasteur.fr', > -note => 'software version xxx'); > > something like that... > > > The "debug" step worked ok. Now, it is the ->execute() that returns... nothing. > > Unfortunately, I don't see your service in the registry, so you must > have it in some private registry? If I could see it, I could help you > debug it... > > > the XML description associated to an object is. > > Ken has this tool in his "encyclopedia": > > http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?obj=PutYourObjectHere > > > 1) Do we have to register a sub-class of text-plain or is it possible de use the > > text-plain object type? > > You can output text-plain if you wish, but it is better "semantically" > to create a specific object type for a specific data type, as this will > help people to e.g. create parsers for your output (parsing "plain-text" > would be meaningless... ;-) ) > > > 2) If we have to register a new object type : > > - a) What kind of namespace would you use for such a new object type then? > > you don't register namespaces together with objects - the two things are > independent. What you would do is to take the namespace/id from the > incoming request object and use that as the namespace/id of your > outgoing plain-text (or whatever) object. The way to think of MOBY > Analysis services is that they take incoming data and output a different > representation of the same data, hence the output has the same > namespace/ID as the input (in most cases...) > > > > 3) Once you know what type of object you have to return, how do you provide it > > as a return value of your service? In raw XML? > > Your service code is ~perfect as far as I can see, so I am not sure why > you are not getting any output from it... Your interpretation of the > spec seems to be 100% correct! > > yes, when using the simpleResponse subroutine you do exactly as you say > - you give it raw XML, and it will build the response for you. > > > I hope these are not too much FAQ, thanks in advance, > > I'm sorry that I wasn't able to solve your exact problem... if you > register your service in the public registry I will play with it today > and we should have it fixed up right away! > > Cheers! > > M -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From steube at sdsc.edu Fri Mar 19 12:30:37 2004 From: steube at sdsc.edu (Ken Steube) Date: Fri, 19 Mar 2004 09:30:37 -0800 (PST) Subject: [MOBY] [MOBY-l] Output of a service In-Reply-To: <1079716292.1893.40.camel@localilluminae.com> Message-ID: Catherine, there could be some other reasons why you're getting no output from the service. Something in the configuration or registration of the service could be wrong and you might get no error message. Try these things: 1) Edit the dispatcher CGI and add a line die 'xxxxx verifying CGI gets called'; and try to execute the service. Look in the httpd error log file and see if the xxxxx line is there. If not, then maybe your URL to the dispatcher is wrong causing the CGI to not be executed. 2) One the dispatcher CGI is being called, try to verify that the method test_SequenceToFASTA is being called. Put a die line like the one above in it and again check the httpd log. If the xxxxx line is not there then the dispatch is failing. Check to make sure you have the 'use MobyEd_services;' line correct and that the name of the service is correct. 3) Maybe the file is not being compiled correctly. You might not see any error message even from failure to compile. At the top of the method test_SequenceToFasta put a line 'return $query;' to return the input without modification. Now you should see a return value, but it will just be the input echoed back. When you get to that point, you know the reason is later in the script and you can start to narrow it down. Ken On Fri, 19 Mar 2004, Mark Wilkinson wrote: > Hi Catherine! > > Congratulations on your first service :-) > > A few comments, and answers to your questions: > > > > serviceType => "Analysis", > > please feel free to register a more descriptive service type that > inherits from "Analysis" - e.g. melting_point_determination ISA Analysis > > ... though if we were to do it right, it should probably have a bit more > granularity than that... something like: > > Nucleotide_Sequence_Analysis > DNA_Sequence_Analysis > Physical ( Structural... Chemical... Functional...) > Melting_Point > > > > my @simples = MobyXmlObject->getMobySimples($query); > > I see you are using Ken's code to get the Simples. This is fine, but I > don't think his code has been updated with the recent API changes that > require the inputs to be enumerated. Ken? Also, Ken, perhaps you could > migrate these routines into the CommonSubs.pm module (or simply add your > module in the CVS) to make it easier for all of us to keep the code > up-to-date with API changes. > > Catherine - you wont *break* anything by being non-compliant in this > way, since these API changes were all backward-compatible, however you > wont be 100% compliant... which is a shame for your first service :-) > > > > > > > > > You should probably register an object that inherits from text-formatted > (rather than text-plain) and give it the name of your analysis program > e.g. as we have done with NCBI_Blast_Text and NCBI_Blast_XML. > > > > $MOBY_RESPONSE .= simpleResponse($result, ''); > > simpleResponse now takes three arguments, the third one being the > enumerated identity of the query to which you are responding (see > above). Again, you wont *break* anything by doing it this way, but... > > > > return responseHeader . $MOBY_RESPONSE . responseFooter; > > responseHeader also takes arguments. At a minimum, it takes your > authority, but it can also be used to provide serviceNotes. > > responseHeader('bioweb.pasteur.fr'); > > or > > responseHeader( > -authority => 'bioweb.pasteur.fr', > -note => 'software version xxx'); > > something like that... > > > The "debug" step worked ok. Now, it is the ->execute() that returns... nothing. > > Unfortunately, I don't see your service in the registry, so you must > have it in some private registry? If I could see it, I could help you > debug it... > > > the XML description associated to an object is. > > Ken has this tool in his "encyclopedia": > > http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?obj=PutYourObjectHere > > > 1) Do we have to register a sub-class of text-plain or is it possible de use the > > text-plain object type? > > You can output text-plain if you wish, but it is better "semantically" > to create a specific object type for a specific data type, as this will > help people to e.g. create parsers for your output (parsing "plain-text" > would be meaningless... ;-) ) > > > 2) If we have to register a new object type : > > - a) What kind of namespace would you use for such a new object type then? > > you don't register namespaces together with objects - the two things are > independent. What you would do is to take the namespace/id from the > incoming request object and use that as the namespace/id of your > outgoing plain-text (or whatever) object. The way to think of MOBY > Analysis services is that they take incoming data and output a different > representation of the same data, hence the output has the same > namespace/ID as the input (in most cases...) > > > > 3) Once you know what type of object you have to return, how do you provide it > > as a return value of your service? In raw XML? > > Your service code is ~perfect as far as I can see, so I am not sure why > you are not getting any output from it... Your interpretation of the > spec seems to be 100% correct! > > yes, when using the simpleResponse subroutine you do exactly as you say > - you give it raw XML, and it will build the response for you. > > > I hope these are not too much FAQ, thanks in advance, > > I'm sorry that I wasn't able to solve your exact problem... if you > register your service in the public registry I will play with it today > and we should have it fixed up right away! > > Cheers! > > M > > -- -- -- Ken Steube San Diego Supercomputer Center University of California, San Diego, MC 0505 9500 Gilman Drive San Diego, California, 92093-0505 USA FAX (858) 822-3610 From mdjgf8 at mizzou.edu Fri Mar 19 21:07:55 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Fri, 19 Mar 2004 20:07:55 -0600 Subject: [MOBY-l] Suggestions for objects in new service... Message-ID: <6686291B-7A13-11D8-BF33-000393B6201C@mizzou.edu> I have created a service out of an XML-RPC service that gets genes and proteins from text (extractGeneProteinNames), and returns a score for its likelihood of the returned word being a gene or protein. There are two types of outputs, one with any acronyms (like MAPK), and another with just regular words (like mitogen-activated protein kinase, or other words, genes, proteins etc). Here is a sample text output: ------------------------------------------------------------------------ ---------------------------------------- (INPUT: We observed an increase in mitogen-activated protein kinase (MAPK) activity.) ACRONYM: MAPK LONG FORM: mitogen-activated protein kinase SCORE: 0.90884572798250385 NAME: MAPK SCORE: 1 NAME: mitogen-activated protein kinase SCORE: 1 NAME: increase SCORE: 0.06212914418525689 NAME: We SCORE: 1.0000000000000237e-300 ------------------------------------------------------------------------ ---------------------------------------- So with this I need to have the input as some object. I found a namespace called Global that this may fit in, but I am unsure. There is an object named text-plain also, but I don't know if that works or not either. ------------------------------------------------------------------------ ---------------------------------------- We observed an increase in mitogen-activated protein kinase (MAPK) activity. ------------------------------------------------------------------------ ---------------------------------------- And then here is the possible output: ------------------------------------------------------------------------ ---------------------------------------- MAPK mitogen-activated protein kinase 0.90884572798250385 mitogen-activated protein kinase 1 increase 0.06212914418525689 ------------------------------------------------------------------------ ---------------------------------------- I am guessing there are other places where some kind of score is given on analysis of something, so I don't think it is far off creating a new object for this one. I don't know if global_keyword fits either, or what to do with that namespace attribute. I am not well-versed in all of this, so any comments and suggestions are very welcome! Thanks to Ken Steube for helping me get even this far!!! -Michael Jensen michael at inblosam.com From letondal at pasteur.fr Sat Mar 20 11:28:35 2004 From: letondal at pasteur.fr (Catherine Letondal) Date: Sat, 20 Mar 2004 17:28:35 +0100 Subject: FW: [MOBY] [MOBY-l] Output of a service In-Reply-To: Your message of "Fri, 19 Mar 2004 11:19:34 CST." <295CC5EB4257D411B34D00D0B7748F4432DF43@baldar.brc.mcw.edu> Message-ID: <200403201629.i2KGSZqK264330@electre.pasteur.fr> Vijay Narayanasamy wrote: > Thanks for forwarding Marks' answer! > > -----Original Message----- > From: Mark Wilkinson [mailto:markw at illuminae.com] > Sent: Friday, March 19, 2004 11:12 AM > To: Catherine Letondal > Cc: mobyl > Subject: Re: [MOBY] [MOBY-l] Output of a service > > Hi Catherine! > > Congratulations on your first service :-) > > A few comments, and answers to your questions: > > > > serviceType => "Analysis", > > please feel free to register a more descriptive service type that > inherits from "Analysis" - e.g. melting_point_determination ISA Analysis > > ... though if we were to do it right, it should probably have a bit more > granularity than that... something like: > > Nucleotide_Sequence_Analysis > DNA_Sequence_Analysis > Physical ( Structural... Chemical... Functional...) > Melting_Point > We prefer to do it right. Are there already some sub-classes planned for analysis services? I know people working on ontologies of bioinformatics tools, they have probably some good ideas? So, we have to register new service types, anyway. I guess I have tu use registerServiceType in MOBY::Client::Central? what is the Relationships like in: $c->registerServiceType ( serviceType => $serviceType description => "human readable description" Relationships => {$relationshipType1 => \@services, $relationshipType2 => \@services} contactEmail => "your at email.address.here" authURI => "your.authority.info" ); ? > > > my @simples = MobyXmlObject->getMobySimples($query); > > I see you are using Ken's code to get the Simples. This is fine, but I > don't think his code has been updated with the recent API changes that > require the inputs to be enumerated. Ken? Also, Ken, perhaps you could > migrate these routines into the CommonSubs.pm module (or simply add your > module in the CVS) to make it easier for all of us to keep the code > up-to-date with API changes. > > Catherine - you wont *break* anything by being non-compliant in this > way, since these API changes were all backward-compatible, however you > wont be 100% compliant... which is a shame for your first service :-) Again, I really wish to start with the right code, but are there some examples I can copy? > > > > > > > > > You should probably register an object that inherits from text-formatted > (rather than text-plain) and give it the name of your analysis program > e.g. as we have done with NCBI_Blast_Text and NCBI_Blast_XML. Ok. > > > > $MOBY_RESPONSE .= simpleResponse($result, ''); > > simpleResponse now takes three arguments, the third one being the > enumerated identity of the query to which you are responding (see > above). Again, you wont *break* anything by doing it this way, but... What is the second argument? Do you have an example? > > return responseHeader . $MOBY_RESPONSE . responseFooter; > > responseHeader also takes arguments. At a minimum, it takes your > authority, but it can also be used to provide serviceNotes. > > responseHeader('bioweb.pasteur.fr'); > > or > > responseHeader( > -authority => 'bioweb.pasteur.fr', > -note => 'software version xxx'); > > something like that... Ok. > > > The "debug" step worked ok. Now, it is the ->execute() that returns... > nothing. > > Unfortunately, I don't see your service in the registry, so you must > have it in some private registry? If I could see it, I could help you > debug it... We used the register, execute, deregister script (and we first make some tries on an internal host), but we will quickly turn to bioweb.pasteur.fr. > > > the XML description associated to an object is. > > Ken has this tool in his "encyclopedia": > > http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?obj=PutYourObjectHere Very convenient!! But when calling: http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?text-plain or: http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?NucleotideSequence I just get: ? > > > 1) Do we have to register a sub-class of text-plain or is it possible de > use the > > text-plain object type? > > You can output text-plain if you wish, but it is better "semantically" > to create a specific object type for a specific data type, as this will > help people to e.g. create parsers for your output (parsing "plain-text" > would be meaningless... ;-) ) Ok. > > > 2) If we have to register a new object type : > > - a) What kind of namespace would you use for such a new object type > then? > > you don't register namespaces together with objects - the two things are > independent. What you would do is to take the namespace/id from the > incoming request object and use that as the namespace/id of your > outgoing plain-text (or whatever) object. The way to think of MOBY > Analysis services is that they take incoming data and output a different > representation of the same data, hence the output has the same > namespace/ID as the input (in most cases...) Ok. So the sequence been passed to the service *must* have an id? > > > > 3) Once you know what type of object you have to return, how do you > provide it > > as a return value of your service? In raw XML? > > Your service code is ~perfect as far as I can see, so I am not sure why > you are not getting any output from it... Your interpretation of the > spec seems to be 100% correct! > > yes, when using the simpleResponse subroutine you do exactly as you say > - you give it raw XML, and it will build the response for you. > > > I hope these are not too much FAQ, thanks in advance, > > I'm sorry that I wasn't able to solve your exact problem... if you > register your service in the public registry I will play with it today > and we should have it fixed up right away! > I have an additional question. When calling a service asking for several parameters, you put them in different articles, right? >From the perldoc: $Service->execute(XMLinputlist => [ ['sequence', '' ], ['anotherparam', '' ] ]); Object1 and Object1 could be 2 parameters to the service? Or: my $result = $S->execute( XMLinputlist => [ ['sequence', qq{ 19 acggtagctaggtaccc at }], ['anotherparam', qq{4}] ] ) ; Thanks a lot for your advices. -- Catherine Letondal -- Pasteur Institute Computing Center From letondal at pasteur.fr Sun Mar 21 07:51:01 2004 From: letondal at pasteur.fr (Catherine Letondal) Date: Sun, 21 Mar 2004 13:51:01 +0100 Subject: [MOBY] [MOBY-l] Output of a service In-Reply-To: Your message of "Fri, 19 Mar 2004 09:30:37 PST." Message-ID: <200403211251.i2LCp13g330009@electre.pasteur.fr> Ken Steube wrote: > Catherine, there could be some other reasons why you're getting no > output from the service. Something in the configuration or registration of > the service could be wrong and you might get no error message. > > Try these things: > > 1) Edit the dispatcher CGI and add a line > > die 'xxxxx verifying CGI gets called'; > > and try to execute the service. Look in the httpd error log file and > see if the xxxxx line is there. If not, then maybe your URL to the > dispatcher is wrong causing the CGI to not be executed. Ok. > 2) One the dispatcher CGI is being called, try to verify that the > method test_SequenceToFASTA is being called. Put a die line like > the one above in it and again check the httpd log. If the xxxxx line > is not there then the dispatch is failing. Check to make sure you have > the 'use MobyEd_services;' line correct and that the name of the service > is correct. Regarding the test_SequenceToFASTA, everything went Ok. We have put the Melting sub in another module (something like PasteurMoby_services.pm), though. > 3) Maybe the file is not being compiled correctly. You might not see any > error message even from failure to compile. At the top of the method > test_SequenceToFasta put a line 'return $query;' to return the input > without modification. Now you should see a return value, but it will > just be the input echoed back. When you get to that point, you know the > reason is later in the script and you can start to narrow it down. We have run a debug script (exactly like in your tutorial), where the Melting sub executed correctly. So, since the test_SequenceToFASTA and the debug step were correct, we wondered whether the errors could be more in the data format returned. But I just found that there was a simple perl bug in the Melting sub. So it's working, now (I still have to see how to pass several parameters the right way), and we will now proceed to decide about object types and service types. Thanks for your advices (and for your tutorial)! What would be really nice too, could be to have the source code of the existing services (the sub doing the service and the registration code of the corresponding objects and services). That would really help. Why not having this in the CVS for instance? -- Catherine Letondal -- Pasteur Institute Computing Center From markw at illuminae.com Mon Mar 22 11:44:32 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Mon, 22 Mar 2004 08:44:32 -0800 Subject: FW: [MOBY] [MOBY-l] Output of a service In-Reply-To: <200403201629.i2KGSZqK264330@electre.pasteur.fr> References: <200403201629.i2KGSZqK264330@electre.pasteur.fr> Message-ID: <1079973872.2080.37.camel@localilluminae.com> On Sat, 2004-03-20 at 08:28, Catherine Letondal wrote: > We prefer to do it right. :-) > Are there already some sub-classes planned for > analysis services? I know people working on ontologies of bioinformatics > tools, they have probably some good ideas? I recall that in one of our very first MOBY meetings we designed a prototype service ontology (Suzi Lewis and Jason Stewart, actually, sitting in the pub with a pint and a laptop!). I believe a second version came from Richard Bruskiewich at the Singapore hackathon. Unfortunately, neither of these have ever been implemented. I think they are still on my drive somewhere - let me go hunting to see if I can find them. If I do, I will send them out to the list and we can, as a group, go through it. This might also be a good task to tackle at the upcoming MOBY meeting in CSHL. We can also look at the myGrid service ontology for ideas. > what is the Relationships like in: > > $c->registerServiceType ( > Relationships => {$relationshipType1 => \@services, > $relationshipType2 => \@services} Services currently only have an ISA relationship, so it would look like: Relationships => {'ISA' => ['Analysis']} > Again, I really wish to start with the right code, but are there some > examples I can copy? all of the services in /moby-live/scripts/services/LocalServices.pm are the ones that I am running from MOBY Central, and they are all now compliant (thanks to debugging by Rebecca and Beatrice!). There is also a "template" service that you could perhaps copy/paste and then edit to your own needs. > What is the second argument? Do you have an example? The second argument is the articleName for the outgoing Simple, however I don't think anyone is using this attribute yet. There are examples in the CommonSubs pod documentation. This attribute is only really useful for cases where you might be outputting several objects of the same type, but which are intended to have different meanings.... off the top of my head, let's say you were searching for a certain functional domain, and the service returned to you all examples of that domain as sequence objects, plus a consensus sequence object. This output would be difficult to interpret without the individual pieces of the output being somehow "tagged" using an articleName attribute. > > Ken has this tool in his "encyclopedia": > > > > http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?obj=PutYourObjectHere > > Very convenient!! But when calling: > > http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?text-plain > or: > http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?NucleotideSequence > I just get: > > > ??? I can't duplicate this error. For me, the URL http://plantsp.sdsc.edu/cgi-bin/MOBY/MOBY_display_object_xml.cgi?obj=NucleotideSequence resolves to: ...which is completely correct :-) > Ok. So the sequence been passed to the service *must* have an id? uh...no, not necessarily. Incomnig objects will always have a namespace and id *attribute*, but it is perfectly fine to have "anonymous" objects where these have no value. I guess what I meant to say is that you simply take whatever the incoming namespace/id were (even if they are null), and output your object with the same values. > I have an additional question. When calling a service asking for several > parameters, you put them in different articles, right? Yes, that's correct. There are some things to watch out for in this regard, but without knowing your exact service I don't know what to warn you about... Just be aware that there are inputs as well as inputs for passing multiple arguments into a service (though from your example, I think you are using multiple with the correct intention!), and note also that there are "Secondary" arguments that can be passed to a service, though no existing client program supports them yet :-( my $result = $S->execute( > XMLinputlist => [ > ['sequence', qq{ > 19 > acggtagctaggtaccc > at > }], > ['anotherparam', qq{4}] > ] > ) ; > It sounds to me like you are well on your way to getting some very complex services up and running! I'm looking forward to using them! Mark -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From a.garcia at imb.uq.edu.au Wed Mar 24 07:43:53 2004 From: a.garcia at imb.uq.edu.au (a.garcia@imb.uq.edu.au) Date: Wed, 24 Mar 2004 22:43:53 +1000 Subject: [MOBY-l] inquiry/ontology Message-ID: I would like to know if there is an ontology for bioinformatic services available? Is that part of BioMoby? Who is working on that ontology? Cheers. From mdjgf8 at mizzou.edu Wed Mar 24 07:52:00 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Wed, 24 Mar 2004 06:52:00 -0600 Subject: [MOBY-l] structuring output of a service... Message-ID: <0AE9FBC2-7D92-11D8-B757-000393B6201C@mizzou.edu> I have created a service out of an XML-RPC service that gets genes and proteins from text (extractGeneProteinNames), and returns a score for its likelihood of the returned word being a gene or protein. There are two types of outputs, one with any acronyms (like MAPK), and another with just regular words (like mitogen-activated protein kinase, or other words, genes, proteins etc). Here is a sample text output: ------------------------------------------------------------------------ ---------------------------------------- (INPUT: We observed an increase in mitogen-activated protein kinase (MAPK) activity.) ACRONYM: MAPK LONG FORM: mitogen-activated protein kinase SCORE: 0.90884572798250385 NAME: MAPK SCORE: 1 NAME: mitogen-activated protein kinase SCORE: 1 NAME: increase SCORE: 0.06212914418525689 NAME: We SCORE: 1.0000000000000237e-300 ------------------------------------------------------------------------ ---------------------------------------- So with this I need to have the input as some object. I found a namespace called Global that this may fit in, but I am unsure. There is an object named text-plain also, but I don't know if that works or not either. ------------------------------------------------------------------------ ---------------------------------------- We observed an increase in mitogen-activated protein kinase (MAPK) activity. ------------------------------------------------------------------------ ---------------------------------------- And then here is the possible output: ------------------------------------------------------------------------ ---------------------------------------- MAPK mitogen-activated protein kinase 0.90884572798250385 mitogen-activated protein kinase 1 increase 0.06212914418525689 ------------------------------------------------------------------------ ---------------------------------------- I am guessing there are other places where some kind of score is given on analysis of something, so I don't think it is far off creating a new object for this one. I don't know if global_keyword fits either, or what to do with that namespace attribute. I am not well-versed in all of this, so any comments and suggestions are very welcome! Thanks to Ken Steube for helping me get even this far!!! -Michael Jensen michael at inblosam.com From markw at illuminae.com Wed Mar 24 11:34:03 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed, 24 Mar 2004 08:34:03 -0800 Subject: [MOBY-l] Re: [MOBY] [MOBY-dev] inquiry/ontology In-Reply-To: References: Message-ID: <1080146042.1950.89.camel@localilluminae.com> On Wed, 2004-03-24 at 04:43, a.garcia at imb.uq.edu.au wrote: > Who is working on that ontology? Cheers. Apparently, you are ;-) We currently have a *horrible* ontology for MOBY Services, and in fact this is quite a timely message as there is a conversation going on another list (the OBO list) about exactly this topic. Our ontology should soon get a lot better... I still haven't had time to find the original proposal for the MOBY Service ontology, but I know that we have not yet built it. If I find it, I will post it to the list and we can re-evaluate it as a group. the myGrid project also has a (much richer) ontology for bioinformatics services. You might want to talk to them. M > _______________________________________________ > MOBY-dev mailing list > MOBY-dev at biomoby.org > http://www.biomoby.org/mailman/listinfo/moby-dev -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From markw at illuminae.com Wed Mar 24 11:37:09 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed, 24 Mar 2004 08:37:09 -0800 Subject: [MOBY-l] Someone please forward... Message-ID: <1080146229.1950.93.camel@localilluminae.com> Hi all, could someone please forward this response to Michael? I've tried repeatedly to get it to him, but my institute's server is still being blacklisted by some spam-filters :-( thanks! M -----Forwarded Message----- > From: Mark Wilkinson > To: Michael Jensen > Subject: [Fwd: [MISC] Returned mail: see transcript for details] > Date: Tue, 23 Mar 2004 13:53:53 -0800 > > -----Forwarded Message----- > > From: Mail Delivery Subsystem > > To: markw at illuminae.com > > Subject: [MISC] Returned mail: see transcript for details > > Date: Sat, 20 Mar 2004 14:12:17 -0600 > > > > The original message was received at Sat, 20 Mar 2004 14:10:15 -0600 > > from markw at localhost > > > > ----- The following addresses had permanent fatal errors ----- > > mdjgf8 at mizzou.edu > > (reason: 550 5.2.1 Mail delivery failure. 24.85.83.208 Please *forward* this error message to postmaster at mis... for assistance. markw at illuminae.com msg to mdjgf8 at mizzou.edu failed-14:12:13 03-20-2004. SORBS-DUN) > > > > ----- Transcript of session follows ----- > > 451 biomoby.org: Name server timeout > > ... while talking to um-smtp-130.um.umsystem.edu.: > > >>> RCPT To: > > <<< 550 5.2.1 Mail delivery failure. 24.85.83.208 Please *forward* this error message to postmaster at missouri.edu for assistance. markw at illuminae.com msg to mdjgf8 at mizzou.edu failed-14:12:13 03-20-2004. SORBS-DUN > > 550 5.1.1 mdjgf8 at mizzou.edu... User unknown > > > > ______________________________________________________________________ > > Reporting-MTA: dns; localilluminae.com > > Arrival-Date: Sat, 20 Mar 2004 14:10:15 -0600 > > > > Final-Recipient: RFC822; mdjgf8 at mizzou.edu > > Action: failed > > Status: 5.2.1 > > Remote-MTA: DNS; um-smtp-130.um.umsystem.edu > > Diagnostic-Code: SMTP; 550 5.2.1 Mail delivery failure. 24.85.83.208 Please *forward* this error message to postmaster at missouri.edu for assistance. markw at illuminae.com msg to mdjgf8 at mizzou.edu failed-14:12:13 03-20-2004. SORBS-DUN > > Last-Attempt-Date: Sat, 20 Mar 2004 14:12:17 -0600 > > > > ______________________________________________________________________ > > From: Mark Wilkinson > > To: Michael Jensen > > Cc: mobyl > > Subject: Re: [MOBY] [MOBY-l] Suggestions for objects in new service... > > Date: Sat, 20 Mar 2004 12:10:15 -0800 > > > > Hi Michael! I'm excited to see you setting up services! > > > > > So with this I need to have the input as some object. I found a > > > namespace called Global that this may fit in, but I am unsure. There is > > > an object named text-plain also, but I don't know if that works or not > > > either. > > > > okay, first be sure that you aren't confusing namespaces with objects - > > the two are different things. > > > > I think for a service like this (which is very cool, by the way!) I > > would register it as follows: > > > > input: plain-text, **no** namespace (i.e. all namespaces) > > output: ___???__, **no** namespace > > > > now... for output object format we have a couple of choices. The one > > you suggest is fine, though I think we could put a bit more "semantics" > > into it... My instinct is to build the output in this way (also note > > that in your example you have a Scored_string object that has TWO String > > sub-components, and another Scored_string object that has only ONE > > String sub-component... and that isn't allowed!): > > > > Option 1: outputting a proprietary object 'keyword_score' > > > > > > > > MAPK > > > articleName="string_component"/> > > 0.9088453834 > > > > > > > > > articleName='string_component'/> > > 0.06212399 > > > > > > > > or Option 2 - outputting a proprietary child of formatted-text: > > > > > > > > ACRONYM: MAPK > > LONG FORM: mitogen-activated protein kinase > > SCORE: 0.90884572798250385 > > > > NAME: MAPK > > SCORE: 1 > > > > NAME: mitogen-activated protein kinase > > SCORE: 1 > > > > NAME: increase > > SCORE: 0.06212914418525689 > > > > NAME: We > > SCORE: 1.0000000000000237e-300 > > > > > > > > There may be other options, but those are the most obvious to me. The > > choice really comes down to whether or not you have a well-recognized > > flat-file format (i.e. one for which there exists a parser that could > > also be a MOBY service) > > > > > I am guessing there are other places where some kind of score is given > > > on analysis of something, so I don't think it is far off creating a new > > > object for this one. I don't know if global_keyword fits either, or > > > what to do with that namespace attribute. > > > > Creating new objects is fine (encouraged!) since it increases the > > semantics of your output - the ontology takes care of any problems > > relating to interpretation/visualization of your output. > > > > It's probably worth pointing out here that services are allowed to > > output "secondary objects", and one might consider this as a place to > > put the "score" component, **however** in this case that will not work, > > because the score would be applied to the entire collection object, > > rather than to the individual components as you require. This is an > > interesting insight for me, as it does expose a limitation in the > > modelling system... > > > > > I am not well-versed in all of this, so any comments and suggestions > > > are very welcome! Thanks to Ken Steube for helping me get even this > > > far!!! > > > > I second that - Ken is a real star!!! :-) > > > > I hope that there this is helpful to you, > > > > Cheers! > > > > M -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From markw at illuminae.com Wed Mar 24 17:27:13 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed, 24 Mar 2004 14:27:13 -0800 Subject: [MOBY-l] MOBY Central down-time Message-ID: <1080167233.1950.161.camel@localilluminae.com> Hi all, MOBY Central will be down for several minutes (only... we hope!) Thursday morning EDT for some upgrades and patches to the kernel. If you have trouble hitting it, please just try again later, M -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From mdjgf8 at mizzou.edu Thu Mar 25 09:54:15 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Thu, 25 Mar 2004 08:54:15 -0600 Subject: [MOBY-l] revised service output...need some explanations though... Message-ID: <48DCD315-7E6C-11D8-B757-000393B6201C@mizzou.edu> Thanks for your help Mark, and Ken! Here is the output of my service (extractGeneProteinNames) when 'We observed an increase in mitogen-activated protein kinase (MAPK) activity.' is the input (it extracts names of genes or proteins and scores them, along with acronyms): MAPK 0.90884572798250385 1 1 0.06212914418525689 1.0000000000000237e-300 I like Mark's idea of using a collection for this, rather than formatted text. I think something like MedLine abstracts are more fit for the formatted text option. I am trying to figure out a few things still. What do I need to put in for the Scored_string namespace attribute? Does that mean the user will be sending a namespace and I just pass that through? And if there is none then I leave it blank? Same questions with the id attribute. My second question is about the Global_keyword. One of the problems I see is that the returned scored text isn't always just one word, like 'MAPK' or 'increase', but will spell out an acronym and return that, as in 'mitogen-activated protein kinase'. From what I know, Global_keyword is designed to be only ONE word, so is there something else like Global_text or do I have to make that or what? My third question is with this new Scored_string thing. Is it an object? I'm a little confused about that, but I think once I know what it is I can figure out how to register it. Do I have to do anything different because it is part of a collection or no? THANKS everyone! -Michael Jensen mdjgf8 at mizzou.edu (Mark, my email box was full I think so your email kept bouncing back. It is empty now. :) From gordonp at cbr.nrc.ca Thu Mar 25 10:01:34 2004 From: gordonp at cbr.nrc.ca (Paul Gordon) Date: Thu, 25 Mar 2004 08:01:34 -0700 Subject: [MOBY-l] revised service output...need some explanations though... In-Reply-To: <48DCD315-7E6C-11D8-B757-000393B6201C@mizzou.edu> References: <48DCD315-7E6C-11D8-B757-000393B6201C@mizzou.edu> Message-ID: <4062F44E.9090009@cbr.nrc.ca> I realize I'm getting in on this conversation late, but am I not reading the spec right? Shouldn't each Scored_string be wrapped in a Simple tag? > > > xmlns='http://www.biomoby.org/moby'> > > > > articleName="acronym">MAPK > id="mitogen-activated protein kinase" articleName="string_component"/> > articleName="score">0.90884572798250385 > > > > articleName="string_component"/> > 1 > > > > id="mitogen-activated protein kinase" articleName="string_component"/> > 1 > > > > articleName="string_component"/> > articleName="score">0.06212914418525689 > > > > articleName="string_component"/> > articleName="score">1.0000000000000237e-300 > > > > > > I like Mark's idea of using a collection for this, rather than > formatted text. I think something like MedLine abstracts are more fit > for the formatted text option. I am trying to figure out a few things > still. What do I need to put in for the Scored_string namespace > attribute? > > > > Does that mean the user will be sending a namespace and I just pass > that through? And if there is none then I leave it blank? Same > questions with the id attribute. > > My second question is about the Global_keyword. One of the problems I > see is that the returned scored text isn't always just one word, like > 'MAPK' or 'increase', but will spell out an acronym and return that, > as in 'mitogen-activated protein kinase'. From what I know, > Global_keyword is designed to be only ONE word, so is there something > else like Global_text or do I have to make that or what? > > My third question is with this new Scored_string thing. Is it an > object? I'm a little confused about that, but I think once I know what > it is I can figure out how to register it. Do I have to do anything > different because it is part of a collection or no? > > THANKS everyone! > > -Michael Jensen > mdjgf8 at mizzou.edu > > (Mark, my email box was full I think so your email kept bouncing back. > It is empty now. :) > > > _______________________________________________ > moby-l mailing list > moby-l at biomoby.org > http://biomoby.org/mailman/listinfo/moby-l > From letondal at pasteur.fr Fri Mar 26 05:21:16 2004 From: letondal at pasteur.fr (Catherine Letondal) Date: Fri, 26 Mar 2004 11:21:16 +0100 Subject: [MOBY-l] toString() method in MOBY::Client::Central::retrieveNamespaces Message-ID: <200403261021.i2QALGt8269325@electre.pasteur.fr> Hi, I have a problem when using the MOBY::Client::Central::retrieveNamespaces method, and someone else trying the exercises (*) in my tutorial informed me about the same problem: Can't call method "toString" on an undefined value at /home/fgibbons/lib/perl5/site_perl/5.8.3/MOBY/Client/Central.pm line 1234. MOBY::Client::Central::retrieveNamespaces('MOBY::Client::Central=HASH(0x8a7d64c)') called at /d0/home/fgibbons/cvs/BioMOBY/MyScripts/ex2.pl line 6 (this is the line that generates the error: $desc = $elem->getFirstChild->toString; ) His platform and versions are: (Version/OS info: Perl 5.8.3, Debian Linux 2.4.18) Mine are: perl, v5.6.1 built for alpha-dec_osf The same script works on a recently installed MacOSX with the latest versions of all thr CPAN packages required to run a biomoby script. According to the documentation: retrieveNamespaces Title : retrieveNamespaces Usage : $ns = $MOBY->retrieveNamespaces([$reg_name]) Function : get the list of all registered Object types Returns : hashref of hash: $ns{$namespace} = $definition Args : $reg_name: name of registry you wish to retrieve from (optional) the argument is optional? Does someone have an idea about this problem? Thanks in advance for any help. -- Catherine Letondal -- Pasteur Institute Computing Center (*) the script is this one: http://www.pasteur.fr/~letondal/biomoby/biomoby-tutorial-perl-sol.html#exo-by-name-io From mwilkinson at mrl.ubc.ca Fri Mar 26 10:51:31 2004 From: mwilkinson at mrl.ubc.ca (Mark Wilkinson) Date: Fri, 26 Mar 2004 07:51:31 -0800 Subject: [MOBY-l] Re: revised service output...need some explanations though... Message-ID: <1080316275.3512.1.camel@localilluminae.com> On Thu, 2004-03-25 at 06:54, Michael Jensen wrote: > > xmlns='http://www.biomoby.org/moby'> > > > > articleName="acronym">MAPK > id="mitogen-activated protein kinase" articleName="string_component"/> > articleName="score">0.90884572798250385 > The structure is not quite correct - it should be ... > still. What do I need to put in for the Scored_string namespace > attribute? > > Does that mean the user will be sending a namespace and I just pass > that through? And if there is none then I leave it blank? Same > questions with the id attribute. That's correct, unless you actually have pre-defined identifiers for the object you are passing back (which may be true in your case, or at least, for some of your sub-objects). e.g. if you have "MAPK" as an entity in your own database, and it has an ID number in your database, then you should probably register your own namespace and then send it back as: MAPK 0.90884572798250385 This makes it possible to discover other services in your database using the component of this message, based on the fact that you would likely register services that consume objects in the $myNS namespace. > From what I know, Global_keyword > is designed to be only ONE word, so is there something else like > Global_text or do I have to make that or what? I am really in two minds about this. Global_keyword is one of the most confusing objects we have! Certainly my intention when I made it was that it would contain only one "meaningful" thing, i.e. that it would not contain a comma-delimited list of keywords, or keywords joined by boolean operators... but i didn't really intend it to be one-word-only... in fact, I have several services that return Global_keyword objects with more than one word (e.g. when I am returning taxa names from a Genbank parse). If you think it is more meaningful to have two objects - Global_keyword, and Global_keyphrase - then please feel free to register the latter, and I will tighten up the definition of the former (though of course, we can't enforce this anyway...) > My third question is with this new Scored_string thing. Is it an > object? I'm a little confused about that, but I think once I know what > it is I can figure out how to register it. Yes, it is a new object. > Do I have to do anything > different because it is part of a collection or no? Not during registration of the object itself. You are only concerned about collections when you come to register your service. > (Mark, my email box was full I think so your email kept bouncing back. > It is empty now. :) Okay, let's cross our fingers that this gets through! M -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre -- Mark Wilkinson, Assistant Professor (Bioinformatics) Dept. of Medical Genetics, University of British Columbia James Hogg iCAPTURE Centre for Cardiovascular and Pulmonary Research 166 - 1081 Burrard St. Vancouver, BC, Canada, V6Z 1Y6 tel: (604) 682 2344 ext. 62129 fax: (604) 806 9274 ------------------------------------------------------------------------ It just goes to show you that SOAP::Lite is more intuitive than you might think, if you know enough Perl and have the patience to dive into the source code. -Byrne Reese -http://builder.com.com/5100-6389_14-1045078-2.html ------------------------------------------------------------------------ From mwilkinson at mrl.ubc.ca Fri Mar 26 11:11:53 2004 From: mwilkinson at mrl.ubc.ca (Mark Wilkinson) Date: Fri, 26 Mar 2004 08:11:53 -0800 Subject: [MOBY-l] (no subject) Message-ID: <1080317513.1968.0.camel@localilluminae.com> On Fri, 2004-03-26 at 02:21, Catherine Letondal wrote: > (this is the line that generates the error: > $desc = $elem->getFirstChild->toString; > ) that bug has been fixed for a while in the CVS version of MOBY - please CVS update to get the patch. (yes, the argument is optional... but I did just notice that the documentation is incorrect, talking about objects instead of namespaces...) M -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From mdjgf8 at mizzou.edu Mon Mar 29 15:39:20 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Mon, 29 Mar 2004 14:39:20 -0600 Subject: [MOBY-l] registering Scored_string object... Message-ID: <279A0CDF-81C1-11D8-9C8E-000393B6201C@mizzou.edu> Thanks again for Ken and his examples to get me this far... I want to register this object, but as it is my first one I may need some assistance. Some output of my service may be: MAPK 0.90884572798250385 1 0.06212914418525689 Starting with Ken's object registration example script, I put the following together. On the ISA and HASA I am assuming below the first value is what the tag is, like String, Object, or Long, unless it is a ISA, then it is just what type it is. Then I assume the second value is what the articleName is, and can be blank if there is none. Is this correct? Will what I have below register the object for the XML output above? ------------------------ #!/usr/local/bin/perl5.6.1 use warnings 'all'; use strict; # Register a new data object called Scored_string use lib '/usr/home/jonhar/Apps/moby-live/Perl'; use MOBY::Client::Central; use MOBY::Client::Service; my $Central = MOBY::Client::Central->new(); my $reg = $Central->registerObjectClass( objectType => "Scored_string", description => "Any text with a score or ranking associated, with a possible acronym for the keyword", contactEmail => 'michael at inblosam.com', authURI => "www.inblosam.com", Relationships => { ISA => [ ['Object', ''], ], HASA => [ ['String', 'acronym'], ['Object', 'string_component'], ['Long', 'score'], ] } ); print STDERR "registerObjectClass failed: ", $reg->message, "\n" unless $reg->success; ----------------------- And one more question: In the MOBYClientCentral test file (testMOBYClientCentral_v05.pl) on the site, it has the following snippet of code. As I will have a collection as my output, do I just use it like I have it below (below the test one)? TEST($C->registerService( serviceName => "myfirstservice2", serviceType => "Retrieval", authURI => "www.illuminae.com", contactEmail => 'your at mail.address', description => "this is my first service", category => "moby", URL => "http://illuminae/cgi-bin/service.pl", input =>[ # ['articleName1', [[Object => ['UglyNamespace']]]], # Collection ['articleName1', [Object => ['UglyNamespace']]], # Simple ], output =>[ ['articleName2', [String => ['UglyNamespace']]], # Simple ], ), 20, 1); sub register_service { my $C = shift; my $reg = $C->registerService( serviceName => 'extractGeneProteinNames', authURI => $authURI, contactEmail => $email, description => "Takes any text (abstract, full text article, etc.) and extr acts names and abbreviations of genes and proteins, with a score (0-1, with 1 be ing highest).", URL => $url, input => [ ['', ["text-plain" => []]], ], output => [ ['', [["Scored_string" => []]]], ], category => "moby", serviceType => "Retrieval", ); die "Bad return value from registerService" unless $reg; if ($reg->success == 1){ print "Registration successful\n\n"; } else { print "Registration failed: ", $reg->message, "\n"; } } I am not sure the "text-plain" is right for the input either, but all I expect is something like this. We observed an increase in mitogen-activated protein kinase (MAPK) activity. Thanks for all your help with all of my questions!! -Michael Jensen michael at inblosam.com From mwilkinson at mrl.ubc.ca Tue Mar 30 11:46:03 2004 From: mwilkinson at mrl.ubc.ca (Mark Wilkinson) Date: Tue, 30 Mar 2004 08:46:03 -0800 Subject: [MOBY] [MOBY-l] registering Scored_string object... In-Reply-To: <279A0CDF-81C1-11D8-9C8E-000393B6201C@mizzou.edu> References: <279A0CDF-81C1-11D8-9C8E-000393B6201C@mizzou.edu> Message-ID: <1080665163.2491.14.camel@charles> On Mon, 2004-03-29 at 12:39, Michael Jensen wrote: > Starting with Ken's object registration example script, I put the > following together. On the ISA and HASA I am assuming below the first > value is what the tag is, like String, Object, or Long, unless it is a > ISA, then it is just what type it is. Then I assume the second value is > what the articleName is, and can be blank if there is none. No need to assume - it's in the POD documentation: Title : registerObject ; registerObjectClass Usage : $REG = $MOBY->registerObject(%args) Usage : $REG = $MOBY->registerObjectClass(%args) Function : register a new type of MOBY Object Returns : MOBY::Registration object Args : objectType => "the name of the Object" description => "a human-readable description of the object" contactEmail => "your at email.address" authURI => "URI of the registrar of this object" Relationships => { relationshipType1 => [ [Object1, articleName], [Object2, articleName]], relationshipType2 => [ [Object1, articleName]]} > Is this correct? Will what I have below register the object for the XML > output above? I believe so, yes. That should work just fine! I wonder if perhaps you could change the name from "Scored_String" to something a bit more proprietary? "Inblosam_Scored_String", or something like that? Only because it isn't a universally common data-type, and it has a component that might be unexpected (the acronym component) based on a human-readable name "Scored_String", so this might confuse people. At the end of the day, the name of an object is ~irrelevant, and we shouldn't interpret them, but of course, we all do :-) > input => [ ['', ["text-plain" => []]], ], > output => [ ['', [["Scored_string" => []]]], ], > category => "moby", > serviceType => "Retrieval", > ); that looks correct (by eye). > I am not sure the "text-plain" is right for the input either, but all I > expect is something like this. You could register your input as "String", since there doesn't seem to be any implicit limitation on the type/structure of String that you consume... but I think "text-plain" is probably a better choice if you want to weed-out most of the single-word inputs, which are more likely to be carried in String objects than in text-plain objects (we hope!) > Thanks for all your help with all of my questions!! Good luck with this! It is really quite a cool service - I'm wondering if you might be able to add some value to this by outputting Xref's inside of your Scored_String object. Since you obviously have some knowledge of the identity of the protein (since you found it!), you could perhaps Xref it's SwissProt, or gi number or something like that. This would allow us to take free-text, pass it to your service, and automatically retrieve e.g. the genbank record for all of the proteins described therein, since I have already written the services that do this kind of retrieval... M -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From mdjgf8 at mizzou.edu Tue Mar 30 11:59:06 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Tue, 30 Mar 2004 10:59:06 -0600 Subject: [MOBY] [MOBY-l] registering Scored_string object... In-Reply-To: <1080665163.2491.14.camel@charles> References: <279A0CDF-81C1-11D8-9C8E-000393B6201C@mizzou.edu> <1080665163.2491.14.camel@charles> Message-ID: <8E178B94-826B-11D8-AD1D-000393B6201C@mizzou.edu> I will try a different name for the Scored_string. I questioned the same thing, because I did have the acronym element in there it isn't quite universal. About the identification of the protein, it actually doesn't know anything about the identity of the protein/gene, but rather infers that within the context of the sentence that word/phrase has a probability of *score* to be a gene or a protein. It is an algorithm that is used from here: http://bionlp.stanford.edu/ There is a publication in the works about it. -Michael On Mar 30, 2004, at 10:46 AM, Mark Wilkinson wrote: > On Mon, 2004-03-29 at 12:39, Michael Jensen wrote: > >> Starting with Ken's object registration example script, I put the >> following together. On the ISA and HASA I am assuming below the first >> value is what the tag is, like String, Object, or Long, unless it is a >> ISA, then it is just what type it is. Then I assume the second value >> is >> what the articleName is, and can be blank if there is none. > > No need to assume - it's in the POD documentation: > > Title : registerObject ; registerObjectClass > Usage : $REG = $MOBY->registerObject(%args) > Usage : $REG = $MOBY->registerObjectClass(%args) > Function : register a new type of MOBY Object > Returns : MOBY::Registration object > Args : objectType => "the name of the Object" > description => "a human-readable description of > the object" > contactEmail => "your at email.address" > authURI => "URI of the registrar of this object" > Relationships => { > relationshipType1 => [ > [Object1, articleName], > [Object2, articleName]], > relationshipType2 => [ > [Object1, articleName]]} > > >> Is this correct? Will what I have below register the object for the >> XML >> output above? > > I believe so, yes. That should work just fine! > > I wonder if perhaps you could change the name from "Scored_String" to > something a bit more proprietary? "Inblosam_Scored_String", or > something like that? Only because it isn't a universally common > data-type, and it has a component that might be unexpected (the acronym > component) based on a human-readable name "Scored_String", so this > might > confuse people. At the end of the day, the name of an object is > ~irrelevant, and we shouldn't interpret them, but of course, we all do > :-) > > >> input => [ ['', ["text-plain" => []]], ], >> output => [ ['', [["Scored_string" => []]]], ], >> category => "moby", >> serviceType => "Retrieval", >> ); > > that looks correct (by eye). > >> I am not sure the "text-plain" is right for the input either, but all >> I >> expect is something like this. > > You could register your input as "String", since there doesn't seem to > be any implicit limitation on the type/structure of String that you > consume... but I think "text-plain" is probably a better choice if you > want to weed-out most of the single-word inputs, which are more likely > to be carried in String objects than in text-plain objects (we hope!) > >> Thanks for all your help with all of my questions!! > > Good luck with this! It is really quite a cool service - I'm wondering > if you might be able to add some value to this by outputting Xref's > inside of your Scored_String object. Since you obviously have some > knowledge of the identity of the protein (since you found it!), you > could perhaps Xref it's SwissProt, or gi number or something like that. > This would allow us to take free-text, pass it to your service, and > automatically retrieve e.g. the genbank record for all of the proteins > described therein, since I have already written the services that do > this kind of retrieval... > > M > > -- > Mark Wilkinson (mwilkinson at mrl.ubc.ca) > University of British Columbia iCAPTURE Centre > _______________________________________________ > moby-l mailing list > moby-l at biomoby.org > http://biomoby.org/mailman/listinfo/moby-l > From mdjgf8 at mizzou.edu Tue Mar 30 12:41:56 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Tue, 30 Mar 2004 11:41:56 -0600 Subject: [MOBY-l] Registering with a HASA Long Message-ID: <8A3DF017-8271-11D8-AD1D-000393B6201C@mizzou.edu> Object Type Long does not exist in the biomoby.org Object Class system When I try to register the following, I get the above error. my $reg = $Central->registerObjectClass( objectType => "Scored_acronym_string", description => "Any text with a score or ranking associated, with possible acronym for keyword", contactEmail => 'michael at inblosam.com', authURI => "www.inblosam.com", Relationships => { ISA => [ ['Object', ''], ], HASA => [ ['String', 'acronym'], ['Object', 'string_component'], ['Long', 'score'], ] } ); Does this mean no one has registered Long before? It works if I use Integer there, but I need Long. -Michael Jensen michael at inblosam.com From gordonp at cbr.nrc.ca Tue Mar 30 15:48:35 2004 From: gordonp at cbr.nrc.ca (Paul Gordon) Date: Tue, 30 Mar 2004 13:48:35 -0700 Subject: [MOBY-l] Registering with a HASA Long In-Reply-To: <8A3DF017-8271-11D8-AD1D-000393B6201C@mizzou.edu> References: <8A3DF017-8271-11D8-AD1D-000393B6201C@mizzou.edu> Message-ID: <4069DD23.5020201@cbr.nrc.ca> The thing is, MOBY Objects are not tied to a particular programming language or OS platform, so what does a Long mean? There is in pricipal no size limit on an Integer in MOBY. It means Integer in the mathematical sense. It would be up to the implementing client to use the BigDecimal in Java, or BigInt in Perl if it can't fit the data into a standard integer representation for the language, or at least give a warning that the value could not be processed. My CDN$0.02 > Does this mean no one has registered Long before? It works if I use > Integer there, but I need Long. From mwilkinson at mrl.ubc.ca Tue Mar 30 16:58:25 2004 From: mwilkinson at mrl.ubc.ca (Mark Wilkinson) Date: Tue, 30 Mar 2004 13:58:25 -0800 Subject: [MOBY] [MOBY-l] Registering with a HASA Long In-Reply-To: <8A3DF017-8271-11D8-AD1D-000393B6201C@mizzou.edu> References: <8A3DF017-8271-11D8-AD1D-000393B6201C@mizzou.edu> Message-ID: <1080683905.1689.21.camel@charles> Hmmm... I thought we had registered Long at some point (though it may be that we did register it and someone maliciously, or accidentally de-registered it...). We have "Float" in there, if that is helpful to you. If you need "Long" please register it. M On Tue, 2004-03-30 at 09:41, Michael Jensen wrote: > Object Type Long does not exist in the biomoby.org Object Class system > > > When I try to register the following, I get the above error. > > my $reg = $Central->registerObjectClass( > objectType => "Scored_acronym_string", > description => "Any text with a score or ranking associated, with > possible acronym for keyword", > contactEmail => 'michael at inblosam.com', > authURI => "www.inblosam.com", > Relationships => { > ISA => [ > ['Object', ''], > ], > HASA => [ > ['String', 'acronym'], > ['Object', 'string_component'], > ['Long', 'score'], > ] > } > ); > > > Does this mean no one has registered Long before? It works if I use > Integer there, but I need Long. > > -Michael Jensen > michael at inblosam.com > > > _______________________________________________ > moby-l mailing list > moby-l at biomoby.org > http://biomoby.org/mailman/listinfo/moby-l -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From mdjgf8 at mizzou.edu Wed Mar 31 09:11:17 2004 From: mdjgf8 at mizzou.edu (Michael Jensen) Date: Wed, 31 Mar 2004 08:11:17 -0600 Subject: [MOBY-l] How do I know if my service is working/set up properly? Message-ID: <46AB5EBA-831D-11D8-AD1D-000393B6201C@mizzou.edu> Thanks to everyone for the tips and help on getting my service (extractGeneProteinNames) to where it is now. I think it is pretty much complete, but I wonder if there is some way to look at it and say, "Yes, this service is working properly and set up correctly". Should there be a certain pseudo-universal input that works? Thanks! -Michael Jensen michael at inblosam.com From senger at ebi.ac.uk Wed Mar 31 16:33:05 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Wed, 31 Mar 2004 22:33:05 +0100 (BST) Subject: [MOBY-l] getPBfromGO In-Reply-To: <1080316275.3512.1.camel@localilluminae.com> Message-ID: I am playing with some moby services - trying to put them into a workflow engine. And I wonder what is going wrong - it may easily be on my site but I need some external help to tell what's wrong. Calling service getPBfromGO from the http://pathbase1.anat.cam.ac.uk/axis/Pathbase2_SOAP.jws, and sending there this input: I am getting back something encoded as base64binary. Which I get as an array of bytes, convert it into string and print. Usually, Java takes base64-coded data and converts it into byte[] for me. However it this case I print something starting with: rO0ABXQByjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+CiAgIDxtb2J5Ok1P QlkgeG1sbnM6bW9ieT0naHR0cDovL3d3dy5iaW9tb2J5Lm9yZy9tb2J5Jz4KICAgICAgPG1vYnk6 UmVzcG9uc2UgbW9ieTphdXRob3JpdHk9J2h0dHA6Ly93d3cucGF0aGJhc2UubmV0Jz4KICAgICAg ... So I thought that I should have done encoding myself - from whatever reasons. Therefore, I have looked into the wire (tcp monitor) and I expect that I will see there the same data as shown above. What a surprise when I saw there bas64 data, that I expected, but *different* ones. Concretly it started with: ck8wQUJYUUJ5ancvZUcxc0lIWmxjbk5wYjI0OUp6RXV ... So now I wonder that perhaps the services is sending base64 data encoded twice? Or where is the poblem? Thanks for any advise (for example for sending me a piece of perl code that I can use for the same purpose, and compare) Martin -- Martin Senger EMBL Outstation - Hinxton Senger at EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From mgruenb at gmx.net Wed Mar 31 16:48:43 2004 From: mgruenb at gmx.net (Michael Gruenberger) Date: Wed, 31 Mar 2004 22:48:43 +0100 Subject: [MOBY-l] getPBfromGO In-Reply-To: References: Message-ID: <406B3CBB.4030303@gmx.net> Hi Martin, sorry I haven't had time to fix my service yet, I've been busy with moving house and another project... The GOID you are using shouldn't return anything, because no PB entries exist for this GOID, but as I haven't got the service working yet I haven't started looking into the MOBY way of returning empty results. A good GOID to use for testing would be: 5224, which should return 2 PB ID's. I'm afraid I have no idea why the base64 encoded strings are different... Let me know if you find out more! Cheers, Michael. Martin Senger wrote: >I am playing with some moby services - trying to put them into a workflow >engine. And I wonder what is going wrong - it may easily be on my site but >I need some external help to tell what's wrong. > >Calling service getPBfromGO from the >http://pathbase1.anat.cam.ac.uk/axis/Pathbase2_SOAP.jws, and sending there >this input: > > > >I am getting back something encoded as base64binary. Which I get as an >array of bytes, convert it into string and print. Usually, Java takes >base64-coded data and converts it into byte[] for me. However it this case >I print something starting with: > >rO0ABXQByjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+CiAgIDxtb2J5Ok1P >QlkgeG1sbnM6bW9ieT0naHR0cDovL3d3dy5iaW9tb2J5Lm9yZy9tb2J5Jz4KICAgICAgPG1vYnk6 >UmVzcG9uc2UgbW9ieTphdXRob3JpdHk9J2h0dHA6Ly93d3cucGF0aGJhc2UubmV0Jz4KICAgICAg >... > >So I thought that I should have done encoding myself - from whatever >reasons. Therefore, I have looked into the wire (tcp monitor) and I expect >that I will see there the same data as shown above. What a surprise when I >saw there bas64 data, that I expected, but *different* ones. Concretly it >started with: > >xsi:type="xsd:base64Binary">ck8wQUJYUUJ5ancvZUcxc0lIWmxjbk5wYjI0OUp6RXV >... > >So now I wonder that perhaps the services is sending base64 data encoded >twice? Or where is the poblem? > >Thanks for any advise (for example for sending me a piece of perl code >that I can use for the same purpose, and compare) > > Martin > > > > From senger at ebi.ac.uk Wed Mar 31 16:58:57 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Wed, 31 Mar 2004 22:58:57 +0100 (BST) Subject: [MOBY-l] getPBfromGO In-Reply-To: <406B3CBB.4030303@gmx.net> Message-ID: > A good GOID to use for testing would be: 5224, which should return 2 PB > ID's. > Thanks. I tried with 5224. And I got the same result. By 'same' I mean not the complete same set of characaters, but something still encoded - (and similar): What I print starts: rO0ABXQByjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+CiAgIDxtb2J5Ok1P QlkgeG1sbnM6bW9ieT0naHR0cDovL3d3dy5iaW9tb2J5Lm9yZy9tb2J5Jz4KICAgICAgPG1vYnk6 UmVzcG9uc2UgbW9ieTphdXRob3JpdHk9J2h0dHA6Ly93d3cucGF0aGJhc2UubmV0Jz4KICAgICAg ... What I see on the wire starts: ck8wQUJYUUJ5ancvZUcxc0lIWmxjbk5wYjI0OUp6 ... Martin -- Martin Senger EMBL Outstation - Hinxton Senger at EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From markw at illuminae.com Wed Mar 31 17:55:23 2004 From: markw at illuminae.com (Mark Wilkinson) Date: Wed, 31 Mar 2004 14:55:23 -0800 Subject: [MOBY] Re: [MOBY-l] getPBfromGO In-Reply-To: References: Message-ID: <1080773723.2080.15.camel@localhost.localdomain> I wonder if this is the same problem that we noticed a couple of weeks ago with Frank's services... There seems to be a mis-match between how Java libraries encode/decode base-64 data and how the Perl libraries do the same :-P I posted a question in this regard to the SOAP::Lite mailing list but got no response (since Paul dropped off the planet that list hasn't been as responsive as it used to be...) We may have to code around this inconvenience. Let's try to work out a solution in CSHL this weekend. M On Wed, 2004-03-31 at 13:58, Martin Senger wrote: > > A good GOID to use for testing would be: 5224, which should return 2 PB > > ID's. > > > Thanks. I tried with 5224. And I got the same result. By 'same' I mean > not the complete same set of characaters, but something still encoded - > (and similar): > > What I print starts: > > rO0ABXQByjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+CiAgIDxtb2J5Ok1P > QlkgeG1sbnM6bW9ieT0naHR0cDovL3d3dy5iaW9tb2J5Lm9yZy9tb2J5Jz4KICAgICAgPG1vYnk6 > UmVzcG9uc2UgbW9ieTphdXRob3JpdHk9J2h0dHA6Ly93d3cucGF0aGJhc2UubmV0Jz4KICAgICAg > ... > > What I see on the wire starts: > > xsi:type="xsd:base64Binary">ck8wQUJYUUJ5ancvZUcxc0lIWmxjbk5wYjI0OUp6 > ... > > Martin -- Mark Wilkinson (mwilkinson at mrl.ubc.ca) University of British Columbia iCAPTURE Centre From gordonp at cbr.nrc.ca Wed Mar 31 18:06:03 2004 From: gordonp at cbr.nrc.ca (Paul Gordon) Date: Wed, 31 Mar 2004 16:06:03 -0700 Subject: [MOBY] Re: [MOBY-l] getPBfromGO In-Reply-To: <1080773723.2080.15.camel@localhost.localdomain> References: <1080773723.2080.15.camel@localhost.localdomain> Message-ID: <406B4EDB.6010008@cbr.nrc.ca> Mark Wilkinson wrote: >I wonder if this is the same problem that we noticed a couple of weeks >ago with Frank's services... There seems to be a mis-match between how >Java libraries encode/decode base-64 data and how the Perl libraries do >the same :-P > > I have had no trouble using Java to decode a Base64 SOAP message body from any number of services (served from both Perl and Java). But, jMOBY isn't giving me that service at the moment when I check the registry, so I can't test it. I'll hunt that first problem and see if I can help with the second... From senger at ebi.ac.uk Wed Mar 31 18:19:06 2004 From: senger at ebi.ac.uk (Martin Senger) Date: Thu, 1 Apr 2004 00:19:06 +0100 (BST) Subject: [MOBY] Re: [MOBY-l] getPBfromGO In-Reply-To: <406B4EDB.6010008@cbr.nrc.ca> Message-ID: > I have had no trouble using Java to decode a Base64 SOAP message body > from any number of services (served from both Perl and Java). > I second this. So far I have not noticed any interoperability issue with base64. (I found some strange encoding provided by Axis - a Java SOAP toolkit - for byte[][], but it was still okay - btw. every character was encoded as an X... but that's not our case now.) > jMOBY isn't giving me that service at the moment when I check the > registry, so I can't test it. > I am getting it from there just now. I am using a default URL from jMoby (which is http://mobycentral.cbr.nrc.ca/cgi-bin/MOBY05/mobycentral.pl). I am using; ./run-cmdline-client -fn getPBfromGO and I am getting: Name: getPBfromGO Type: Retrieval Category: moby Auth: www.pathbase.net Desc: consumes a Gene Ontology accession number and returns a collection of associated Pathbase accession numbers. URL: http://pathbase1.anat.cam.ac.uk/axis/Pathbase2_SOAP.jws Contact: mg287 at cam.ac.uk ID: null ... Martin -- Martin Senger EMBL Outstation - Hinxton Senger at EBI.ac.uk European Bioinformatics Institute Phone: (+44) 1223 494636 Wellcome Trust Genome Campus (Switchboard: 494444) Hinxton Fax : (+44) 1223 494468 Cambridge CB10 1SD United Kingdom http://industry.ebi.ac.uk/~senger From gordonp at cbr.nrc.ca Wed Mar 31 18:29:29 2004 From: gordonp at cbr.nrc.ca (Paul Gordon) Date: Wed, 31 Mar 2004 16:29:29 -0700 Subject: [MOBY] Re: [MOBY-l] getPBfromGO In-Reply-To: References: Message-ID: <406B5459.7000900@cbr.nrc.ca> Right. But I retrieve the services based on input object namespace, which seems to miss it (I get 5 services with GO). Or I lose it somehow... Martin Senger wrote: >>I have had no trouble using Java to decode a Base64 SOAP message body >>from any number of services (served from both Perl and Java). >> >> >> > I second this. So far I have not noticed any interoperability issue >with base64. (I found some strange encoding provided by Axis - a Java SOAP >toolkit - for byte[][], but it was still okay - btw. every character was >encoded as an X... but that's not our case now.) > > > >>jMOBY isn't giving me that service at the moment when I check the >>registry, so I can't test it. >> >> >> > I am getting it from there just now. I am using a default URL from >jMoby (which is >http://mobycentral.cbr.nrc.ca/cgi-bin/MOBY05/mobycentral.pl). I am using; > >./run-cmdline-client -fn getPBfromGO > >and I am getting: > >Name: getPBfromGO >Type: Retrieval >Category: moby >Auth: www.pathbase.net >Desc: >consumes a Gene Ontology accession number and returns a collection of >associated Pathbase accession numbers. > >URL: http://pathbase1.anat.cam.ac.uk/axis/Pathbase2_SOAP.jws >Contact: mg287 at cam.ac.uk >ID: null >... > > Martin > > >