Cómo importar XSD a WSDL

El lenguaje de descripción de servicios web (WSDL) es un modelo y formato para describir servicios web usando XML. Un consumidor puede localizar un servicio y ejecutar sus operaciones. Este proceso puede automatizarse con herramientas de desarrollo comunes, permitiendo integración de aplicaciones con poco código. Los WSDL son un contrato entre proveedor y consumidor; hacen un servicio auto-descriptivo. Proporcionan descripciones de operaciones públicas, tipos de datos para mensajes, detalles de enlace para protocolo de transporte y dirección del servicio. Un elemento "import" en un WSDL puede importar WSDLs externos o esquemas XML. Importar elementos externos permite WSDLs más modulares, reutilizar tipos XML entre definiciones de servicios y soportar múltiples versiones de un esquema.

Paso 1

Crea archivo nuevo en tu editor de texto o XML. Si soporta WSDL, elige WSDL como tipo. Si no, pero soporta XML, elige XML. Si no soporta ninguno, elige texto plano.

Paso 2

Nombra el archivo como quieras y pon extensión ".wsdl". Ejemplo: "HolaMundo.wsdl".

Paso 3

Crea segundo archivo nuevo. Si el editor soporta esquemas XML, elige "Esquema XML" o "XSD". Si no, pero soporta XML, elige XML. Si no, texto plano.

Paso 4

Nombra el archivo y pon extensión ".xsd". Ejemplo: "HolaMundo.xsd".

Paso 5

Introduce este marcado en el archivo de esquema XML:

<?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>

Define un esquema con namespace "https://schemas.myorg.com/person/phone" y un tipo de dato "Phone".

Paso 6

Introduce este marcado en el archivo WSDL:

<?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 con ejemplo de import</wsdl:documentation>
  <wsdl:types>
    <xs:import namespace="https://schemas.myorg.com/person/phone" 
      schemaLocation="https://www.myorg.com/supporting/schemas/helloworld.xsd"/>
  </wsdl:types>
  <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: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: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>

Este marcado define un WSDL que importa un esquema XML externo "helloworld.xsd" con el namespace "https://schemas.myorg.com/person/phone".

La sentencia import en el WSDL importa un namespace XML de un archivo. Su propósito principal es importar el namespace, no indicar dónde encontrar sus declaraciones. Incluye el atributo opcional "schemaLocation". Es opcional porque un namespace puede importarse del mismo archivo o registrarse de otra forma. Según la especificación WSDL, "schemaLocation" es solo una pista; un parser XML puede ignorarla. Si ya conoce los tipos de ese namespace, o tiene otro mecanismo para encontrarlos, no necesita usar la ubicación. Pero en muchos casos se importa un namespace que el parser desconoce, así que "schemaLocation" se vuelve necesario, aunque técnicamente sigue siendo solo una pista.

Consejo

Nuevas tecnologías como intercambio de metadatos (MEX) permiten compartir qué capacidades soporta un servicio, pero aún no se han adoptado ampliamente.

Advertencia

WSDL soporta "includes" e "imports". Suenan似似 pero se comportan distinto. "Import" importa otro namespace. "Include" importa declaraciones de tipos XML a un namespace existente.