|
m |
(45 intermediate revisions not shown.) |
Line 3: |
Line 3: |
| {| | | {| |
| | | | | |
- | WikiPathways can be accessed programmatically through a [[wikipedia:Web_service#Service-oriented_architecture|SOAP web service]]. Web services provide powerful means to query, access and interact with the pathway content at WikiPathways. | + | WikiPathways can be accessed programmatically through a REST web service. These services provide powerful means to query, access and interact with the pathway content at WikiPathways. |
| |rowspan="2" valign="top"|__TOC__ | | |rowspan="2" valign="top"|__TOC__ |
| |- | | |- |
| | | | | |
- | == Showcase ==
| |
- | {|style="width:75%;" border="0" valign="top" cellspacing="5" cellpadding="1"
| |
- | |
| |
- | {|border="0" align="center" cellpadding="1"
| |
- | |-
| |
- | |align="center"|<big>'''Search'''</big>
| |
- | |-
| |
- | |
| |
- | {|style="border:0px;" border="1" cellpadding="1" align="center"
| |
- | |-
| |
- | |align="center"|[http://137.120.14.13:8180/wikipathways-search/WikiPathwaysSearch.html http://www.wikipathways.org/images/9/92/WikiPathwaysSearch200.png]
| |
- | |}
| |
- | |-
| |
- | |align="center"|''Use the web service to search for pathways'' <sup>[[{{FULLPAGENAME}}/WikiPathwaysSearch|more info]]</sup>
| |
- | |}
| |
- | |
| |
- | {|border="0" align="center" cellpadding="1"
| |
- | |-
| |
- | |align="center"|<big>'''View data'''</big>
| |
- | |-
| |
- | |
| |
- | {|style="border:0px;" border="1" cellpadding="1" align="center"
| |
- | |-
| |
- | |align="center"|[http://137.120.14.13:8180/atlas-mapper/AtlasMapper.html http://www.wikipathways.org/images/6/6e/AtlasMapper200.png]
| |
- | |}
| |
- | |-
| |
- | |align="center"|''View gene expression data on pathways'' <sup>[[{{FULLPAGENAME}}/AtlasMapper|more info]]</sup>
| |
- | |}
| |
- | |-
| |
- | |
| |
- | {|border="0" align="center" cellpadding="1"
| |
- | |-
| |
- | |align="center"|<big>'''Query interactions'''</big>
| |
- | |-
| |
- | |
| |
- | {|style="background:#ceceff;border:0px;" border="1" cellpadding="1" align="center"
| |
- | |-
| |
- | |align="center"|[http://www.pathvisio.org/Cytoscape_plugin http://www.wikipathways.org/images/c/c4/Cytoscape200.png]
| |
- | |}
| |
- | |-
| |
- | |align="center"|''Load pathways as interaction networks in Cytoscape''
| |
- | |}
| |
- | |
| |
- | {|border="0" align="center" cellpadding="1"
| |
- | |-
| |
- | |align="center"|<big>'''Build workflows'''</big>
| |
- | |-
| |
- | |
| |
- | {|style="border:0px;" border="1" cellpadding="1" align="center"
| |
- | |-
| |
- | |align="center"|[http://www.myexperiment.org/packs/30 http://www.wikipathways.org/images/f/f6/Taverna200.png]
| |
- | |}
| |
- | |-
| |
- | |align="center"|''Use pathway information in your Taverna workflows''
| |
- | |}
| |
- | |}
| |
- | |}
| |
- |
| |
- | == Test Drive ==
| |
- | Take the WikiPathways web service for a full-featured test drive:
| |
- | # Install the free testing tool, [http://www.soapui.org/ SoapUI] ''(web start version is also available)''.
| |
- | # Load [http://www.wikipathways.org/wpi/webservice/webservice.php?wsdl our WSDL file].
| |
| | | |
| == API Reference == | | == API Reference == |
- | See the [[{{FULLPAGENAME}}/API|API reference]] page for a list of available web service functions and data structures. | + | See the [https://webservice.wikipathways.org Swagger] page for a list of available web service functions and data structures. |
| | | |
| === Java libraries === | | === Java libraries === |
| | | |
- | You can get a high-level API to the WikiPathways web service here: [http://svn.bigcat.unimaas.nl/pathvisio/trunk/tools/wikipathways-client source] [http://pathvisio.org/data/wikipathways-client-bin.zip compiled binary] | + | You can get a high-level API to the WikiPathways web service here: [http://developers.pathvisio.org/browser/trunk/modules/org.wikipathways.client source] [http://developers.pathvisio.org/data/releases compiled binaries] (choose the most recent wikipathways_client_bin-*). |
| | | |
| === Working with GPML === | | === Working with GPML === |
- | The pathways on WikiPathways are stored in the GPML format. This is an XML format and can be processed in any programming language. See [http://www.pathvisio.org/EverythingGPML here] for the GPML specification. If you are developing in Java, we recommend using our [[#Java libraries|Java libraries]]. | + | The pathways on WikiPathways are stored in the GPML format. This is an XML format and can be processed in any programming language. See [http://developers.pathvisio.org/wiki/EverythingGpml here] for the GPML specification. If you are developing in Java, we recommend using our [[#Java libraries|Java libraries]]. |
- | | + | |
- | === SOAP libraries ===
| + | |
- | For most programming languages, libraries exist to make working with SOAP web service easier. Below is a short list of SOAP libraries for popular programming languages that might help you work with the WikiPathways web service.
| + | |
- | | + | |
- | * Java:
| + | |
- | ** [http://ws.apache.org/axis/java/index.html Apache Axis]
| + | |
- | ** See the [[#Java|Java example code]]
| + | |
- | * Perl:
| + | |
- | ** [http://www.soaplite.com/ SOAP::Lite]
| + | |
- | ** See the [[#Perl|Perl example code]]
| + | |
- | * Php:
| + | |
- | ** [http://nl.php.net/soap SOAP] (official php soap library)
| + | |
- | ** [http://phpsoaptoolkit.sourceforge.net/phpsoap/ PHP-SOAP]
| + | |
- | * Python:
| + | |
- | ** [http://pywebsvcs.sourceforge.net/ SOAPpy]
| + | |
- | ** [http://trac.optio.webfactional.com/ soaplib]
| + | |
- | * R
| + | |
- | ** [http://www.omegahat.org/SSOAP/ SSOAP]
| + | |
- | ** See the [[#R|R example code]]
| + | |
- | | + | |
- | == Example Code ==
| + | |
- | Below you find some small example scripts in various languages that may help to get you started.
| + | |
- | | + | |
- | === Java ===
| + | |
- | Use the [[#Java libraries|wikipathways-client and PathVisio libraries]] to access the WikiPathways web service from Java. Below is a short example program in Java.
| + | |
- | | + | |
- | <pre>
| + | |
- | package org.pathvisio.wikipathways;
| + | |
- | | + | |
- | import java.io.File;
| + | |
- | import java.net.URL;
| + | |
- | | + | |
- | import org.pathvisio.model.DataSource;
| + | |
- | import org.pathvisio.model.ObjectType;
| + | |
- | import org.pathvisio.model.Pathway;
| + | |
- | import org.pathvisio.model.PathwayElement;
| + | |
- | import org.pathvisio.model.Xref;
| + | |
- | import org.pathvisio.wikipathways.webservice.WSPathway;
| + | |
- | import org.pathvisio.wikipathways.webservice.WSPathwayInfo;
| + | |
- | import org.pathvisio.wikipathways.webservice.WSSearchResult;
| + | |
- | | + | |
- | public class Example {
| + | |
- | public static void main(String[] args) {
| + | |
- | try {
| + | |
- | //Create a client to the WikiPathways web service
| + | |
- | WikiPathwaysClient client = new WikiPathwaysClient(
| + | |
- | new URL("http://www.wikipathways.org/wpi/webservice/webservice.php")
| + | |
- | );
| + | |
- |
| + | |
- | //Find a pathway by affymetrix probeset
| + | |
- | Xref affy = new Xref("201746_at", DataSource.AFFY);
| + | |
- | System.out.println("Searching for pathways with Affymetrix probeset " + affy);
| + | |
- | | + | |
- | WSSearchResult[] result = client.findPathwaysByXref(affy);
| + | |
- | for(WSSearchResult r : result) {
| + | |
- | System.out.println("Found pathway: " + r.getName() + " (" + r.getSpecies() + ")");
| + | |
- | }
| + | |
- |
| + | |
- | //Download a pathway from WikiPathways
| + | |
- | WSPathway wsPathway = client.getPathway("WP274");
| + | |
- | System.out.println("Downloaded pathway " + wsPathway.getName() +
| + | |
- | ", revision " + wsPathway.getRevision());
| + | |
- | //Create a pathway object
| + | |
- | Pathway pathway = WikiPathwaysClient.toPathway(wsPathway);
| + | |
- |
| + | |
- | //Get all genes, proteins and metabolites for a pathway
| + | |
- | for(PathwayElement pwElm : pathway.getDataObjects()) {
| + | |
- | //Only take elements with type DATANODE (genes, proteins, metabolites)
| + | |
- | if(pwElm.getObjectType() == ObjectType.DATANODE) {
| + | |
- | //Print information to the screen
| + | |
- | System.out.println(pwElm.getTextLabel());
| + | |
- | System.out.println("\t" + pwElm.getXref());
| + | |
- | System.out.println("\t" + pwElm.getDataNodeType());
| + | |
- | }
| + | |
- | }
| + | |
- |
| + | |
- | //Save the pathway locally
| + | |
- | pathway.writeToXml(new File(wsPathway.getName() + ".gpml"), true);
| + | |
- |
| + | |
- | //Print info for all WikiPathways pathways
| + | |
- | WSPathwayInfo[] pathwayList = client.listPathways();
| + | |
- |
| + | |
- | for(WSPathwayInfo pathwayInfo : pathwayList) {
| + | |
- | System.out.println("Pathway:");
| + | |
- | System.out.println("\tIdentifier:\t" + pathwayInfo.getId());
| + | |
- | System.out.println("\tName:\t" + pathwayInfo.getName());
| + | |
- | System.out.println("\tOrganism:\t" + pathwayInfo.getSpecies());
| + | |
- | }
| + | |
- | } catch(Exception e) {
| + | |
- | e.printStackTrace();
| + | |
- | }
| + | |
- | }
| + | |
- | }
| + | |
- | </pre>
| + | |
- | | + | |
- | Once you downloaded the libraries and compiled the Example class, you can run it with
| + | |
- | <pre>
| + | |
- | java -classpath wikipathways-client.jar:. org.pathvisio.wikipathways.Example
| + | |
- | </pre>
| + | |
- | | + | |
- | === Perl ===
| + | |
- | This is a short example of a few ways to interact with the WikiPathways web service in Perl.
| + | |
- | | + | |
- | <pre>
| + | |
- | #!perl -w
| + | |
- | use strict;
| + | |
- | | + | |
- | # Load module
| + | |
- | use SOAP::Lite;
| + | |
- | | + | |
- | # Debugging (optional)
| + | |
- | #SOAP::Lite->import(+trace => qw(debug));
| + | |
- | | + | |
- | # Create service interface with fault handler
| + | |
- | my $wp_soap = SOAP::Lite
| + | |
- | ->proxy('http://www.wikipathways.org/wpi/webservice/webservice.php')
| + | |
- | ->uri('http://www.wikipathways.org/webservice')
| + | |
- | ->on_fault(sub {
| + | |
- | my $soap = shift;
| + | |
- | my $res = shift;
| + | |
- | # Map faults to exceptions
| + | |
- | if(ref($res) eq '') {
| + | |
- | die($res);
| + | |
- | } else {
| + | |
- | die($res->faultstring);
| + | |
- | }
| + | |
- | return new SOAP::SOM;
| + | |
- | } );
| + | |
- | | + | |
- | # listOrganisms (no args; returns array of strings)
| + | |
- | my @orgList = $wp_soap->listOrganisms()->paramsout;
| + | |
- | unshift(@orgList, $wp_soap->listOrganisms()->result); #add first result to list
| + | |
- | $" = ", "; # change list separator
| + | |
- | print "listOrganisms: @orgList\n";
| + | |
- | | + | |
- | # getPathwayInfo (one arg; returns hash reference)
| + | |
- | my $pwId = SOAP::Data->name(pwId => "WP274");
| + | |
- | my $pathwayInfo = $wp_soap->getPathwayInfo($pwId)->result;
| + | |
- | # Access data via hash reference
| + | |
- | print "\ngetPathwayInfo(pwId=WP274):\n";
| + | |
- | foreach my $key (keys %{$pathwayInfo}) {
| + | |
- | print "\t$key: $pathwayInfo->{$key}\n";
| + | |
- | }
| + | |
- | | + | |
- | # findPathwaysByXref (multiple args; returns array of hash references)
| + | |
- | my $argsXrefData = SOAP::Data->name(
| + | |
- | id => '201746_at',
| + | |
- | code => 'X',
| + | |
- | pass => '',
| + | |
- | revision => ''
| + | |
- | );
| + | |
- | my @foundPathwayRefList = $wp_soap->findPathwaysByXref($argsXrefData)->paramsout;
| + | |
- | unshift(@foundPathwayRefList, $wp_soap->findPathwaysByXref($argsXrefData)->result); #add first result to list
| + | |
- | print "\nfindPathwaysByXref(id=201746_at, code=X):\n";
| + | |
- | foreach my $ref (@foundPathwayRefList){
| + | |
- | foreach my $key (keys %{ $ref}){
| + | |
- | if ($key =~ /^fields$/){ # Another hash reference to deconstruct
| + | |
- | foreach my $fieldkey (keys %{ $ref->{$key}}){
| + | |
- | print "\t$key.$fieldkey: $ref->{$key}->{$fieldkey}\n";
| + | |
- | }
| + | |
- | } else {
| + | |
- | print "\t$key: $ref->{$key}\n";
| + | |
- | }
| + | |
- | }
| + | |
- | }
| + | |
- | </pre>
| + | |
- | | + | |
- | === R ===
| + | |
- | Using the [http://www.omegahat.org/SSOAP/ SSOAP] package in [http://www.r-project.org R], you can retrieve pathway information from the WikiPathways web service and use it in your R scripts (e.g. for gene set enrichment or pathway statistics). Below are a few code snippets that show you how to use SSOAP with the WikiPathways web service.
| + | |
- | | + | |
- | <pre><nowiki>
| + | |
- | ## Install SSOAP from Bioconductor ##
| + | |
- | source("http://bioconductor.org/biocLite.R")
| + | |
- | biocLite("SSOAP")
| + | |
| | | |
- | ## Load the SSOAP library ##
| + | === Libraries === |
- | library(SSOAP)
| + | Below is a short list of libraries for popular programming languages that might help you work with the WikiPathways web service. |
| | | |
- | ## Create a SOAPServer instance for the web service ##
| + | * R: The rWikiPathways package with vignettes at [https://bioconductor.org/packages/release/bioc/html/rWikiPathways.html bioconductor]. |
- | srv = SOAPServer("http://www.wikipathways.org/wpi/webservice/webservice.php");
| + | * Java: Java API client with code examples at [https://github.com/wikipathways/wikipathways-api-client-java github]. |
| + | * Perl: Perl API client with code examples at [https://github.com/wikipathways/wikipathways-api-client-perl github]. |
| + | * Php: Example scripts at [https://github.com/wikipathways/scripts/ github]. |
| + | * Python: Python API client with code examples at [https://github.com/wikipathways/wikipathways-api-client-py github]. |
| | | |
- | ## List all organisms on WikiPathways ##
| + | == Other Examples == |
- | reply = .SOAP(srv, "listOrganisms", action=I("listOrganisms"), handlers=NULL)
| + | |
- | doc = xmlParse(reply$content, asText=TRUE)
| + | |
- | organismNodes = xmlElementsByTagName(xmlRoot(doc), "organisms", TRUE)
| + | |
| | | |
- | for(node in organismNodes) {
| + | === Groovy === |
- | print(xmlValue(node)) #Print the organism name to the screen
| + | |
- | }
| + | |
| | | |
- | ## Find all pathways for the 'apoptosis' keyword ##
| + | [http://www.helixsoft.nl/blog/?p=153 This blog post] contains an example of how to use the WikiPathways webservice in Groovy. |
- | reply = .SOAP(srv, "findPathwaysByText", query="apoptosis", species="", action=I("findPathwaysByText"), handlers=NULL)
| + | |
- | doc = xmlParse(reply$content, asText=TRUE)
| + | |
| | | |
- | # Find the result nodes with an xpath query
| + | == How to cite == |
- | resultNodes = getNodeSet(doc, "//*[local-name()='result']")
| + | Kelder T, Pico AR, Hanspers K, van Iersel MP, Evelo C, Conklin BR. (2009) '''Mining Biological Pathways Using WikiPathways Web Services.''' PLoS ONE 4(7): [http://www.plosone.org/article/info:doi/10.1371/journal.pone.0006447 doi:10.1371/journal.pone.0006447] |
- | # Print the pathway name, species and url for each result
| + | |
- | for(node in resultNodes) {
| + | |
- | children = xmlChildren(node, addNames= TRUE)
| + | |
- | url = xmlValue(children$url)
| + | |
- | name = xmlValue(children$name);
| + | |
- | species = xmlValue(children$species);
| + | |
- |
| + | |
- | print(paste(name, " (", species, "): ", url, sep=""))
| + | |
- | }
| + | |
- | </nowiki></pre>
| + | |
| | | |
| ----- | | ----- |
| <p>[[:Help:Contents|Return to Help Contents]]</p> | | <p>[[:Help:Contents|Return to Help Contents]]</p> |
- | <p>[[:Help:Frequently_Asked_Questions|Continue to FAQ]]</p>
| |