Najprostszy przykład SOAP


241

Jaki jest najprostszy przykład SOAP przy użyciu Javascript?

Aby być jak najbardziej użytecznym, odpowiedź powinna:

  • Bądź funkcjonalny (innymi słowy faktycznie działa)
  • Wyślij co najmniej jeden parametr, który można ustawić w innym miejscu w kodzie
  • Przetwórz co najmniej jedną wartość wyniku, którą można odczytać w innym miejscu kodu
  • Pracuj z najnowszymi wersjami przeglądarki
  • Bądź tak przejrzysty i jak najkrótszy, bez korzystania z zewnętrznej biblioteki

5
Prostota i przejrzystość może kolidować z nieużywaniem biblioteki zewnętrznej. Czy naprawdę chcesz napisać własny konwerter WSDL -> JS?
mikemaccana

19
Mam pytanie: gdybym zobaczył to pytanie jako pierwszą osobę, oczekiwałbym, że zostanie ono poddane ocenie z komentarzami typu „pokaż kod, nie jest to„ wypożycz koder ”. Nic osobistego, Thomas :) Ale nie rozumiem, jak społeczność decyduje, co jest dobre, a co złe.
最 白 目

4
Hej, nie martw się. Chyba chodzi o to, że istnieje wiele sposobów pisania klienta SOAP za pomocą JavaScript. Wiele z nich jest brzydkich, więc liczyłem na kilka pomysłów na utrzymanie ich w czystości.
Thomas Bratt

@dan to dlatego, że 1. to pytanie jest dość stare, wciąż padało wiele podstawowych pytań, które tradycyjnie mają wiele pozytywnych opinii, 2. opisuje raczej prosty problem, więc prawdopodobnie przyciąga nowych użytkowników, którzy mogliby głosować zasada „hej, ja też chcę to wiedzieć!” zamiast „hej, to pytanie pokazuje wysiłek badawczy. jest użyteczne i jasne!”. Ponieważ moim zdaniem pytanie to nie zawiera, głosowałem za nim. Nic osobistego też: D
phil294

@ThomasBratt Prawdopodobnie będę kontynuować to na meta, ale tego typu pytania zasługują na szansę. Jest to idealne pytanie do zstępującej biblioteki referencyjnej lub bazy wiedzy. Ale może zaakceptowana odpowiedź zasługuje również na zachętę do dodatkowej pracy nóg? Nadal nie ma nic bardziej akceptowanego niż SO, więc gdzie indziej? Nawet SO próbowało zbudować witrynę z dokumentacją - i zakończyło się niepowodzeniem. Nic nie zastąpi SO ...
YoYo

Odpowiedzi:


201

To najprostszy klient SOAP JavaScript, jaki mogę utworzyć.

<html>
<head>
    <title>SOAP JavaScript Client Test</title>
    <script type="text/javascript">
        function soap() {
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open('POST', 'https://somesoapurl.com/', true);

            // build SOAP request
            var sr =
                '<?xml version="1.0" encoding="utf-8"?>' +
                '<soapenv:Envelope ' + 
                    'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
                    'xmlns:api="http://127.0.0.1/Integrics/Enswitch/API" ' +
                    'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' +
                    'xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">' +
                    '<soapenv:Body>' +
                        '<api:some_api_call soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' +
                            '<username xsi:type="xsd:string">login_username</username>' +
                            '<password xsi:type="xsd:string">password</password>' +
                        '</api:some_api_call>' +
                    '</soapenv:Body>' +
                '</soapenv:Envelope>';

            xmlhttp.onreadystatechange = function () {
                if (xmlhttp.readyState == 4) {
                    if (xmlhttp.status == 200) {
                        alert(xmlhttp.responseText);
                        // alert('done. use firebug/console to see network response');
                    }
                }
            }
            // Send the POST request
            xmlhttp.setRequestHeader('Content-Type', 'text/xml');
            xmlhttp.send(sr);
            // send request
            // ...
        }
    </script>
</head>
<body>
    <form name="Demo" action="" method="post">
        <div>
            <input type="button" value="Soap" onclick="soap();" />
        </div>
    </form>
</body>
</html> <!-- typo -->

2
Co z wysłaniem <soapenv: Header>? Próbowałem wbudować moje tagi nagłówka w zmienną sr, jednak serwer otrzymał pusty soapenv: Header
Boiler Bill

To zadziałało dla mnie! (po zamianie adresu URL usługi SOAP na rzeczywistą i wyłączeniu ograniczeń między domenami w mojej przeglądarce, jak sugeruje @Prestaul)
Niko Bellic

Tworzę wieloplatformową aplikację w języku nativescript dla Androida / iOS. Chcę korzystać z usług sieciowych SOAP. Proszę, poprowadź mnie za to samo. Użyłem powyższego kodu dla żądania SOAP i chcę format odpowiedzi SOAP, jak obsługiwać odpowiedź. Zapoznaj się z moim pytaniem - stackoverflow.com/questions/37745840/...
Onkar Nene,

Musiałem użyć tego ostatnio do obsługi starszego kodu. Napotkał problem z brakującym nagłówkiem, który powodował „niedopasowanie ContractFilter w EndpointDispatcher”. Dodanie xmlhttp.setRequestHeader('SOAPAction', 'http://myurl.com/action');tuż przed tym xmlhttp.send(sr)naprawiłem.
RDRick

80

Istnieje wiele dziwactw w sposobie, w jaki przeglądarki obsługują XMLHttpRequest, ten kod JS będzie działał we wszystkich przeglądarkach:
https://github.com/ilinsky/xmlhttprequest

Ten kod JS konwertuje XML na łatwe w obsłudze obiekty JavaScript:
http://www.terracoder.com/index.php/xml-objectifier

Powyższy kod JS może zostać zawarty na stronie, aby spełnić wymagania dotyczące braku zewnętrznej biblioteki.

var symbol = "MSFT"; 
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "http://www.webservicex.net/stockquote.asmx?op=GetQuote",true);
xmlhttp.onreadystatechange=function() {
 if (xmlhttp.readyState == 4) {
  alert(xmlhttp.responseText);
  // http://www.terracoder.com convert XML to JSON 
  var json = XMLObjectifier.xmlToJSON(xmlhttp.responseXML);
  var result = json.Body[0].GetQuoteResponse[0].GetQuoteResult[0].Text;
  // Result text is escaped XML string, convert string to XML object then convert to JSON object
  json = XMLObjectifier.xmlToJSON(XMLObjectifier.textToXML(result));
  alert(symbol + ' Stock Quote: $' + json.Stock[0].Last[0].Text); 
 }
}
xmlhttp.setRequestHeader("SOAPAction", "http://www.webserviceX.NET/GetQuote");
xmlhttp.setRequestHeader("Content-Type", "text/xml");
var xml = '<?xml version="1.0" encoding="utf-8"?>' +
 '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
                'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' +
                'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' + 
   '<soap:Body> ' +
     '<GetQuote xmlns="http://www.webserviceX.NET/"> ' +
       '<symbol>' + symbol + '</symbol> ' +
     '</GetQuote> ' +
   '</soap:Body> ' +
 '</soap:Envelope>';
xmlhttp.send(xml);
// ...Include Google and Terracoder JS code here...

Dwie inne opcje:


co powinienem zrobić, jeśli chcę przekazać wiele kopert?
Ajay Patel,

używam powyższego kodu, ale xmlhttp.responseText zawsze powoduje, że null.can może dostarczyć mi linki do pokonania błędu
user969275

Link do usunięcia kodu Google: github.com/ilinsky/xmlhttprequest
ToastyMallows

48

Nie można tego zrobić za pomocą prostego JavaScript, chyba że usługa internetowa znajduje się w tej samej domenie co strona. Edycja: w 2008 r. I IE <10 nie można tego zrobić za pomocą prostego javascript, chyba że usługa jest w tej samej domenie co strona.

Jeśli usługa internetowa znajduje się w innej domenie [i musisz obsługiwać IE <10], będziesz musiał użyć strony proxy w swojej własnej domenie, która pobierze wyniki i zwróci je tobie. Jeśli nie potrzebujesz starej obsługi IE, musisz dodać obsługę CORS do swojej usługi. W obu przypadkach powinieneś użyć czegoś takiego jak lib, który sugerują timyates, ponieważ nie chcesz samodzielnie analizować wyników.

Jeśli usługa internetowa znajduje się w Twojej domenie, nie używaj SOAP. Nie ma dobrego powodu, aby to zrobić. Jeśli usługa internetowa znajduje się w Twojej domenie, zmodyfikuj ją, aby mogła zwrócić JSON i zaoszczędzić sobie kłopotów ze wszystkimi problemami związanymi z SOAP.

Krótka odpowiedź brzmi: nie twórz żądań SOAP z javascript. Użyj usługi sieci Web, aby zażądać danych z innej domeny, a jeśli to zrobisz, przeanalizuj wyniki po stronie serwera i zwróć je w przyjaznej formie js.


1
Chodzi o to, aby serwer SOAP obsługiwał również stronę HTML w celu łatwego testowania i oceny. Klient będzie w tej samej domenie. Nieużywanie SOAP w interfejsie wydaje się być zaakceptowanym widokiem. Wszelkie uwagi dotyczące tego, dlaczego? Dodaj do nowego pytania: stackoverflow.com/questions/127038
Thomas Bratt

1
Nie ma sensu odpowiadać tam ... Zgadzam się z Gizmo we wszystkich trzech punktach. XML jest rozdęty i stanowi wyzwanie dla js, podczas gdy JSON jest zwięzły i natywny.
Prestaul

10
re „nie można tego zrobić”: Dzisiaj można to zrobić za pomocą (głównie) prostego JavaScript, jeśli klient obsługuje udostępnianie zasobów między źródłami . Mam nadzieję, że za 3-4 lata będzie powszechnie dostępny.
Constantin,

2
@Constantin, CORS pozwoli na to, jeśli chcesz obsługiwać tylko nowsze przeglądarki i jeśli masz kontrolę nad serwerem i możesz tam również dodać obsługę CORS. Mimo to nadal twierdzę, że połączenia SOAP powinny być wykonywane tylko między serwerami, a klient powinien używać czegoś bardziej przyjaznego dla JS, takiego jak JSON.
Prestaul

1
@NikoBellic może używać klient oparty na przeglądarce XMLHttpRequest, prawdopodobnie za pośrednictwem biblioteki, takiej jak jquery. Klient węzła użyłby czegoś innego. Większość usług internetowych używa REST jako przewodnika przy projektowaniu interfejsu API, ale istnieje wiele dobrych wzorców. Kluczem tutaj jest to, że ciała żądań / odpowiedzi są JSON, ponieważ klienci javascript (przeglądarka / węzeł / gdziekolwiek) rozumieją JSON natywnie.
Prestaul,

14

Możesz użyć wtyczki jquery.soap, aby wykonać pracę za Ciebie.

Ten skrypt używa $ .ajax do wysłania koperty SOAPE. Może przyjmować jako dane wejściowe XML DOM, ciąg XML lub JSON, a odpowiedź może zostać zwrócona jako DOM XML, ciąg XML lub JSON.

Przykładowe użycie ze strony:

$.soap({
    url: 'http://my.server.com/soapservices/',
    method: 'helloWorld',

    data: {
        name: 'Remy Blom',
        msg: 'Hi!'
    },

    success: function (soapResponse) {
        // do stuff with soapResponse
        // if you want to have the response as JSON use soapResponse.toJSON();
        // or soapResponse.toString() to get XML string
        // or soapResponse.toXML() to get XML DOM
    },
    error: function (SOAPResponse) {
        // show error
    }
});

8

Tomasz:

JSON jest preferowany do użytku z interfejsem, ponieważ jest javascript. Dlatego nie masz do czynienia z XMLem. Z tego powodu SOAP jest problemem bez korzystania z biblioteki. Ktoś wspomniał o SOAPClient, która jest dobrą biblioteką, zaczęliśmy od niego dla naszego projektu. Miało to jednak pewne ograniczenia i musieliśmy przepisać duże fragmenty. Został wydany jako SOAPj i obsługuje przekazywanie złożonych obiektów na serwer, a także zawiera przykładowy kod proxy do korzystania z usług z innych domen.


2
„JSON jest preferowany do użytku z interfejsem użytkownika, ponieważ jest to JavaScript.” - JSON nie jest JavaScript. (Wygląda jak JavaScript.)
nnnnnn

2
en.wikipedia.org/wiki/JSON - Dosłownie oznacza „JavaScript Object Notation” i chociaż zgadzam się, że JSON jest specyfikacją, a nie językiem i dlatego jest zdecydowanie „nie javascript”, musisz zgodzić się, że nazwa może łatwo mylić ludzi.
P. Roe,

8

Czy ktoś tego próbował? https://github.com/doedje/jquery.soap

Wydaje się bardzo łatwy do wdrożenia.

Przykład:

$.soap({
url: 'http://my.server.com/soapservices/',
method: 'helloWorld',

data: {
    name: 'Remy Blom',
    msg: 'Hi!'
},

success: function (soapResponse) {
    // do stuff with soapResponse
    // if you want to have the response as JSON use soapResponse.toJSON();
    // or soapResponse.toString() to get XML string
    // or soapResponse.toXML() to get XML DOM
},
error: function (SOAPResponse) {
    // show error
}
});

spowoduje

<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <helloWorld>
        <name>Remy Blom</name>
        <msg>Hi!</msg>
    </helloWorld>
  </soap:Body>
</soap:Envelope>

4
<html>
 <head>
    <title>Calling Web Service from jQuery</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#btnCallWebService").click(function (event) {
                var wsUrl = "http://abc.com/services/soap/server1.php";
                var soapRequest ='<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">   <soap:Body> <getQuote xmlns:impl="http://abc.com/services/soap/server1.php">  <symbol>' + $("#txtName").val() + '</symbol>   </getQuote> </soap:Body></soap:Envelope>';
                               alert(soapRequest)
                $.ajax({
                    type: "POST",
                    url: wsUrl,
                    contentType: "text/xml",
                    dataType: "xml",
                    data: soapRequest,
                    success: processSuccess,
                    error: processError
                });

            });
        });

        function processSuccess(data, status, req) { alert('success');
            if (status == "success")
                $("#response").text($(req.responseXML).find("Result").text());

                alert(req.responseXML);
        }

        function processError(data, status, req) {
        alert('err'+data.state);
            //alert(req.responseText + " " + status);
        } 

    </script>
</head>
<body>
    <h3>
        Calling Web Services with jQuery/AJAX
    </h3>
    Enter your name:
    <input id="txtName" type="text" />
    <input id="btnCallWebService" value="Call web service" type="button" />
    <div id="response" ></div>
</body>
</html>

Słuchaj najlepiej JavaScript z samouczkiem SOAP z przykładem.

http://www.codeproject.com/Articles/12816/JavaScript-SOAP-Client



3

Łatwo korzystaj z usług internetowych SOAP z JavaScript -> Listing B

function fncAddTwoIntegers(a, b)
{
    varoXmlHttp = new XMLHttpRequest();
    oXmlHttp.open("POST",
 "http://localhost/Develop.NET/Home.Develop.WebServices/SimpleService.asmx'",
 false);
    oXmlHttp.setRequestHeader("Content-Type", "text/xml");
    oXmlHttp.setRequestHeader("SOAPAction", "http://tempuri.org/AddTwoIntegers");
    oXmlHttp.send(" \
<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' \
xmlns:xsd='http://www.w3.org/2001/XMLSchema' \
 xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'> \
  <soap:Body> \
    <AddTwoIntegers xmlns='http://tempuri.org/'> \
      <IntegerOne>" + a + "</IntegerOne> \
      <IntegerTwo>" + b + "</IntegerTwo> \
    </AddTwoIntegers> \
  </soap:Body> \
</soap:Envelope> \
");
    return oXmlHttp.responseXML.selectSingleNode("//AddTwoIntegersResult").text;
}

To może nie spełniać wszystkich twoich wymagań, ale jest to początek odpowiedzi na twoje pytanie. (Włączyłem XMLHttpRequest () dla ActiveXObject („MSXML2.XMLHTTP”) ).


1

Najprostszy przykład składałby się z:

  1. Uzyskiwanie informacji od użytkowników.
  2. Tworzenie komunikatu XML SOAP podobnego do tego

    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                   xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <GetInfoByZIP xmlns="http://www.webserviceX.NET">
          <USZip>string</USZip>
        </GetInfoByZIP>
      </soap:Body>
    </soap:Envelope>
  3. Wysyłanie wiadomości do adresu URL usługi sieci web za pomocą XHR

  4. Analiza odpowiedzi SOAP XML usługi WWW jest podobna do tej

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <soap:Body>
      <GetInfoByZIPResponse xmlns="http://www.webserviceX.NET">
       <GetInfoByZIPResult>
        <NewDataSet xmlns="">
         <Table>
          <CITY>...</CITY>
          <STATE>...</STATE>
          <ZIP>...</ZIP>
          <AREA_CODE>...</AREA_CODE>
          <TIME_ZONE>...</TIME_ZONE>
         </Table>
        </NewDataSet>
       </GetInfoByZIPResult>
      </GetInfoByZIPResponse>
     </soap:Body>
    </soap:Envelope>
  5. Prezentowanie wyników użytkownikowi.

Ale jest wiele problemów bez zewnętrznych bibliotek JavaScript.


9
Nie jest to przykład Javacript.
Thomas Bratt

Nawet pierwsza część, na którą nie odpowiedziałeś - bądź funkcjonalny (innymi słowy faktycznie działa).
shahar eldad

0
function SoapQuery(){
  var namespace = "http://tempuri.org/";
  var site = "http://server.com/Service.asmx";
  var xmlhttp = new ActiveXObject("Msxml2.ServerXMLHTTP.6.0");
  xmlhttp.setOption(2,  13056 );  /* if use standard proxy */
  var args,fname =  arguments.callee.caller.toString().match(/ ([^\(]+)/)[1]; /*Имя вызвавшей ф-ции*/
  try { args =   arguments.callee.caller.arguments.callee.toString().match(/\(([^\)]+)/)[1].split(",");  
    } catch (e) { args = Array();};
  xmlhttp.open('POST',site,true);  
  var i, ret = "", q = '<?xml version="1.0" encoding="utf-8"?>'+
   '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'+
   '<soap:Body><'+fname+ ' xmlns="'+namespace+'">';
  for (i=0;i<args.length;i++) q += "<" + args[i] + ">" + arguments.callee.caller.arguments[i] +  "</" + args[i] + ">";
  q +=   '</'+fname+'></soap:Body></soap:Envelope>';
            // Send the POST request
            xmlhttp.setRequestHeader("MessageType","CALL");
            xmlhttp.setRequestHeader("SOAPAction",namespace + fname);
            xmlhttp.setRequestHeader('Content-Type', 'text/xml');
            //WScript.Echo("Запрос XML:" + q);
            xmlhttp.send(q);
     if  (xmlhttp.waitForResponse(5000)) ret = xmlhttp.responseText;
    return ret;
  };





function GetForm(prefix,post_vars){return SoapQuery();};
function SendOrder2(guid,order,fio,phone,mail){return SoapQuery();};

function SendOrder(guid,post_vars){return SoapQuery();};

0

Baza Angularjs $ http na XMLHttpRequest . Tak długo, jak w zestawie treści nagłówka zrobi następujący kod.

"Content-Type": "text/xml; charset=utf-8"

Na przykład:

function callSoap(){
var url = "http://www.webservicex.com/stockquote.asmx";
var soapXml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://www.webserviceX.NET/\"> "+
         "<soapenv:Header/> "+
         "<soapenv:Body> "+
         "<web:GetQuote> "+
         "<web:symbol></web:symbol> "+
         "</web:GetQuote> "+
         "</soapenv:Body> "+
         "</soapenv:Envelope> ";

    return $http({
          url: url,  
          method: "POST",  
          data: soapXml,  
          headers: {  
              "Content-Type": "text/xml; charset=utf-8"
          }  
      })
      .then(callSoapComplete)
      .catch(function(message){
         return message;
      });

    function callSoapComplete(data, status, headers, config) {
        // Convert to JSON Ojbect from xml
        // var x2js = new X2JS();
        // var str2json = x2js.xml_str2json(data.data);
        // return str2json;
        return data.data;

    }

}

0

Pytanie brzmi: „Jaki jest najprostszy przykład SOAP przy użyciu Javascript?”

Ta odpowiedź jest przykładem w środowisku Node.js , a nie w przeglądarce. (Nazwijmy skrypt soap-node.js) I użyjemy publicznej usługi SOAP z Europe PMC jako przykładu, aby uzyskać listę referencyjną artykułu.

const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
const DOMParser = require('xmldom').DOMParser;

function parseXml(text) {
    let parser = new DOMParser();
    let xmlDoc = parser.parseFromString(text, "text/xml");
    Array.from(xmlDoc.getElementsByTagName("reference")).forEach(function (item) {
        console.log('Title: ', item.childNodes[3].childNodes[0].nodeValue);
    });

}

function soapRequest(url, payload) {
    let xmlhttp = new XMLHttpRequest();
    xmlhttp.open('POST', url, true);

    // build SOAP request
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4) {
            if (xmlhttp.status == 200) {
                parseXml(xmlhttp.responseText);
            }
        }
    }

    // Send the POST request
    xmlhttp.setRequestHeader('Content-Type', 'text/xml');
    xmlhttp.send(payload);
}

soapRequest('https://www.ebi.ac.uk/europepmc/webservices/soap', 
    `<?xml version="1.0" encoding="UTF-8"?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Header />
    <S:Body>
        <ns4:getReferences xmlns:ns4="http://webservice.cdb.ebi.ac.uk/"
            xmlns:ns2="http://www.scholix.org"
            xmlns:ns3="https://www.europepmc.org/data">
            <id>C7886</id>
            <source>CTX</source>
            <offSet>0</offSet>
            <pageSize>25</pageSize>
            <email>ukpmc-phase3-wp2b---do-not-reply@europepmc.org</email>
        </ns4:getReferences>
    </S:Body>
    </S:Envelope>`);

Przed uruchomieniem kodu musisz zainstalować dwa pakiety:

npm install xmlhttprequest
npm install xmldom

Teraz możesz uruchomić kod:

node soap-node.js

I zobaczysz wynik, jak poniżej:

Title:  Perspective: Sustaining the big-data ecosystem.
Title:  Making proteomics data accessible and reusable: current state of proteomics databases and repositories.
Title:  ProteomeXchange provides globally coordinated proteomics data submission and dissemination.
Title:  Toward effective software solutions for big biology.
Title:  The NIH Big Data to Knowledge (BD2K) initiative.
Title:  Database resources of the National Center for Biotechnology Information.
Title:  Europe PMC: a full-text literature database for the life sciences and platform for innovation.
Title:  Bio-ontologies-fast and furious.
Title:  BioPortal: ontologies and integrated data resources at the click of a mouse.
Title:  PubMed related articles: a probabilistic topic-based model for content similarity.
Title:  High-Impact Articles-Citations, Downloads, and Altmetric Score.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.