Come Importare XSD in WSDL
Il Web Services Description Language (WSDL) è un modello e un formato per descrivere i servizi web utilizzando XML. Un consumatore può localizzare un servizio ed eseguirne le operazioni. Questo processo può essere automatizzato utilizzando la maggior parte degli strumenti di sviluppo comuni, consentendo l'integrazione delle applicazioni con poco codice scritto dagli sviluppatori. I WSDL rappresentano un contratto tra il fornitore del servizio e il consumatore; rendono un servizio auto-descrittivo. I WSDL forniscono descrizioni di tutte le operazioni pubbliche, tipi di dati per tutti i messaggi del servizio, dettagli di binding per il protocollo di trasporto e informazioni sull'indirizzo del servizio. Un elemento "import" può essere utilizzato in un WSDL per importare WSDL esterni o schemi XML. L'importazione di elementi esterni è utile per rendere il WSDL più modulare, riutilizzare i tipi di dati XML tra più definizioni di servizio e supportare più versioni di uno schema.
Passaggio 1
Crea un nuovo file nel tuo editor di testo o XML. Se l'editor supporta i WSDL, seleziona WSDL come tipo di file. Se non supporta i WSDL ma supporta XML, seleziona XML come tipo di file. Se non sono supportati né WSDL né XML, seleziona un tipo di file di testo semplice.
Passaggio 2
Assegna al file il nome che desideri e dai al file l'estensione ".wsdl". Ad esempio, il file può essere denominato "HelloWorld.wsdl".
Passaggio 3
Crea un secondo nuovo file nel tuo editor di testo o XML. Se l'editor supporta gli schemi XML, seleziona schema XML o XSD come tipo di file. Se non supporta gli schemi XML ma supporta i file XML, seleziona XML come tipo di file. Se non sono supportati né gli schemi XML né XML, seleziona un tipo di file di testo semplice.
Passaggio 4
Assegna al file il nome che desideri e dai al file l'estensione ".xsd". Ad esempio, il file può essere denominato "HelloWorld.xsd".
Passaggio 5
Inserisci il seguente markup nel file dello schema XML che hai creato:
<?xml version="1.0" ?>
<xsd:schema targetNamespace="https://schemas.myorg.com/person/phone" xmlns:xsd="https://www.w3.org/2001/XMLSchema">
<xsd:import namespace="https://www.w3.org/2001/XMLSchema"/>
<xsd:complexType name="Phone">
<xsd:sequence>
<xsd:element name="areaCode" type="xsd:int"/>
<xsd:element name="exchange" type="xsd:int"/>
<xsd:element name="number" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Questo definisce uno schema con il namespace "https://schemas.myorg.com/person/phone", che definisce un singolo tipo di dato "Phone".
Passaggio 6
Inserisci il seguente markup nel file WSDL che hai creato:
<?xml version="1.0"?>
<wsdl:description xmlns:wsdl="https://www.w3.org/ns/wsdl"
xmlns:wsoap="https://www.w3.org/ns/wsdl/soap"
xmlns:external="https://schemas.myorg.com/person/phone"
xmlns:helloWorld="https://schemas.myorg.com/wsdl/helloworld"
targetNamespace="https://schemas.myorg.com/wsdl/helloworld">
<wsdl:documentation>WSDL with an import example</wsdl:documentation>
<wsdl:types>
<xs:import namespace="https://schemas.myorg.com/person/phone"
schemaLocation="https://www.myorg.com/supporting/schemas/helloworld.xsd"/>
<xsd:schema xmlns:xsd="https://www.w3.org/2001/XMLSchema"
targetNamespace="https://schemas.myorg.com/wsdl/helloworld">
<xsd:element name="CallNumber" type="external:Phone"/>
<xsd:element name="HelloResponse" type="xsd:string"/>
</xsd:schema>
</wsdl:types>
<wsdl:interface name="helloInterface">
<wsdl:operation name="CallMe" pattern="https://www.w3.org/ns/wsdl/in-out"
style="https://www.w3.org/ns/wsdl/style/iri">
<wsdl:input messageLabel="In" element="helloWorld:CallNumber" />
<wsdl:output messageLabel="Out" element="helloWorld:HelloResponse" />
</wsdl:operation>
</wsdl:interface>
<wsdl:binding name="helloBinding" interface="hy:helloInterface"
type="https://www.w3.org/ns/wsdl/soap"
wsoap:protocol="https://www.w3.org/2003/05/soap/bindings/HTTP/">
<wsdl:operation ref="hy:Hello"
wsoap:mep="https://www.w3.org/2003/05/soap/mep/soap-response"/>
</wsdl:binding>
<wsdl:service name="helloService" interface="hy:helloInterface">
<wsdl:endpoint name="helloEndpoint" binding="hy:helloBinding"
address="https://www.myorg.com/Service/Hello"/>
</wsdl:service>
</wsdl:description>
Questo markup definisce un WSDL che importa uno schema XML esterno denominato "helloworld.xsd" che contiene il namespace "https://schemas.myorg.com/person/phone".
L'istruzione di import nel WSDL importa un namespace XML da un file. Lo scopo principale dell'elemento import è importare il namespace, non indicare dove si trovano le dichiarazioni in quel namespace. L'elemento include l'attributo opzionale "schemaLocation". L'attributo è opzionale perché un namespace può essere importato dallo stesso file o essere registrato in un altro modo. Secondo la specifica WSDL, "schemaLocation" è solo un suggerimento; un parser XML è libero di ignorare la posizione. Se il parser conosce già i tipi di schema in quel namespace, o ha un altro meccanismo per trovarli, non deve usare la posizione. Tuttavia, in molti casi viene importato un namespace di cui il parser XML non sa nulla, quindi l'attributo "schemaLocation" diventa necessario, ma tecnicamente rimane solo un suggerimento.
Suggerimento
Nuove tecnologie come lo scambio di metadati (MEX) sono state introdotte per condividere informazioni sulle capacità supportate da un servizio, ma questi standard non sono ancora stati ampiamente adottati.
Avvertenza
I WSDL supportano sia include che import. Possono sembrare simili, ma si comportano in modo diverso. Un'istruzione import importa un altro namespace. Un'istruzione include importa dichiarazioni di tipi di dati XML in un namespace esistente.