Обязателен ли файл XSD для SOAP WSDL? Если файл .xsd не является обязательным, то обязательно ли я помещаю информацию XSD в элемент типа WSDL?
Я написал собственный десериализатор / сериализатор XML и собственный генератор WSDL, который будет принимать функции python (которые были Type Hinted) и динамически генерировать WSDL на основе переданных ему функций.
def example(arg1: str, arg2: int) -> str:
code
Таким образом, сгенерированный мной WSDL верен, если предположить, что подсказки типов верны (кто бы ни написал модуль python и т. Д.). Я могу добавить функцию Python или несколько, и динамически генерировать WSDL. Последний оставшийся фрагмент - это тег типа. Эта вики-реклама о XSD заставляет меня думать, что создание генератора XSD или XSD будет тривиальным, поскольку оно также будет основано на подсказках типов функций, и поскольку все это является динамическим / неизвестным, никакие заранее сделанные предположения не могут быть сделаны для XSD.
XSD может использоваться для выражения набора правил, к которым относится документ XML
должны соответствовать, чтобы считаться «действительным» в соответствии с этим
схемы. Однако, в отличие от большинства других языков схемы, XSD также
разработан с целью определения действительности документа
будет производить сбор информации, привязанной к конкретным данным
типы. Такой информационный набор после проверки может быть полезен при разработке
программного обеспечения для обработки документов XML ....
Я рассмотрел несколько примеров WSDL, этот не использует XSD, но явно указывает типы внутри основного XML. Тогда я предполагаю, что если я не использую XSD, мне просто нужно добавить информацию в элемент WSDL Types? У меня есть эта информация, и я могу просто поместить сигнатуру типа функции внутрь
<?xml version="1.0"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:hy="http://www.herongyang.com/Service/"
targetNamespace="http://www.herongyang.com/Service/">
<wsdl:documentation>
Hello_WSDL_11_SOAP.wsdl
Copyright (c) 2007 HerongYang.com, All Rights Reserved.
</wsdl:documentation>
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.herongyang.com/Service/">
<xsd:element name="HelloRequest" type="xsd:string"/>
<xsd:element name="HelloResponse" type="xsd:string"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="helloInputMessage">
<wsdl:part name="helloInputPart" element="hy:HelloRequest"/>
</wsdl:message>
<wsdl:message name="helloOutputMessage">
<wsdl:part name="helloOutputPart" element="hy:HelloResponse"/>
</wsdl:message>
<wsdl:portType name="helloPortType">
<wsdl:operation name="Hello">
<wsdl:input name="helloInput"
message="hy:helloInputMessage"/>
<wsdl:output name="helloOutput"
message="hy:helloOutputMessage"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="helloBinding" type="hy:helloPortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Hello">
<soap:operation
soapAction="http://www.herongyang.com/Service/Hello"/>
<wsdl:input name="helloInput">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="helloOutput">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="helloService">
<wsdl:port name="helloPort" binding="hy:helloBinding">
<soap:address
location="http://www.herongyang.com/Service/Hello_SOAP_11.php"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
РЕДАКТИРОВАТЬ: Вот еще один пример WSDL и их использование XSD также отличается, поскольку типы xsd просто добавляются в элементы сообщения и игнорируются в элементе типов. Это различие очень запутанное, и ничто через Google не предоставляет никакой конкретной информации для XSD и особенно для использования WSDL.
<definitions name="SoapResponder"
targetNamespace="http://www.SoapClient.com/xml/SoapResponder.wsdl">
<types>
<schema targetNamespace="http://www.SoapClient.com/xml/SoapResponder.xsd">
</schema>
</types>
<message name="Method1">
<part name="bstrParam1" type="xsd:string"/>
<part name="bstrParam2" type="xsd:string"/>
</message>
<message name="Method1Response">
<part name="bstrReturn" type="xsd:string"/>
</message>
<portType name="SoapResponderPortType"></portType>
<binding name="SoapResponderBinding" type="tns:SoapResponderPortType">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="Method1">
<soap:operation soapAction="http://www.SoapClient.com/SoapObject"/>
<input>
<soap:body use="encoded"
namespace="http://www.SoapClient.com/xml/SoapResponder.xsd"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded"
namespace="http://www.SoapClient.com/xml/SoapResponder.xsd"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="SoapResponder">
<documentation>A SOAP service that echoes input parameters in the
response
</documentation>
<port name="SoapResponderPortType" binding="tns:SoapResponderBinding">
<soap:address
location="http://www.soapclient.com/xml/soapresponder.wsdl"/>
</port>
</service>
</definitions>