Is XSD information for a SOAP WSDL mandatory?












0















Is the XSD file mandatory for a SOAP WSDL? If the .xsd file is not mandatory, then is it mandatory I put the XSD information inside the WSDL Types Element?



I have written a custom XML deserializer/serializer and a custom WSDL generator that will take in python functions (that have been Type Hinted) and dynamically generate a WSDL based on the functions fed to it.



 def example(arg1: str, arg2: int) -> str:
code


So the WSDL I generate is correct, assuming the type hints are correct (whoever wrote the python module, etc). I can feed in a python function or multiple, and generate a WSDL dynamically. The last remaining piece is the type tag. This wiki blurb on XSD makes me think that making a XSD or a XSD generator will be trivial since it will too be based off the function type hints, and since all of this is dynamic/unknown, no pre-made assumptions can be made for the XSD.




XSD can be used to express a set of rules to which an XML document
must conform in order to be considered "valid" according to that
schema. However, unlike most other schema languages, XSD was also
designed with the intent that determination of a document's validity
would produce a collection of information adhering to specific data
types. Such a post-validation infoset can be useful in the development
of XML document processing software....




I have looked at several example WSDL, this one is not using a XSD, but it is explicitly stating the types inside the main XML. I assume then if I do not use a XSD, I simply need to add information inside the WSDL Types Element? I have that information readily available and can simply put the function type signature inside



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


EDIT: Here is another example WSDL and their XSD usage is different as well, so far as that the xsd types are simply added in the message elements and ignoring it in the types element. This difference is very confusing and nothing via google provides any concrete information for XSD and especially WSDL usage.



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









share|improve this question





























    0















    Is the XSD file mandatory for a SOAP WSDL? If the .xsd file is not mandatory, then is it mandatory I put the XSD information inside the WSDL Types Element?



    I have written a custom XML deserializer/serializer and a custom WSDL generator that will take in python functions (that have been Type Hinted) and dynamically generate a WSDL based on the functions fed to it.



     def example(arg1: str, arg2: int) -> str:
    code


    So the WSDL I generate is correct, assuming the type hints are correct (whoever wrote the python module, etc). I can feed in a python function or multiple, and generate a WSDL dynamically. The last remaining piece is the type tag. This wiki blurb on XSD makes me think that making a XSD or a XSD generator will be trivial since it will too be based off the function type hints, and since all of this is dynamic/unknown, no pre-made assumptions can be made for the XSD.




    XSD can be used to express a set of rules to which an XML document
    must conform in order to be considered "valid" according to that
    schema. However, unlike most other schema languages, XSD was also
    designed with the intent that determination of a document's validity
    would produce a collection of information adhering to specific data
    types. Such a post-validation infoset can be useful in the development
    of XML document processing software....




    I have looked at several example WSDL, this one is not using a XSD, but it is explicitly stating the types inside the main XML. I assume then if I do not use a XSD, I simply need to add information inside the WSDL Types Element? I have that information readily available and can simply put the function type signature inside



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


    EDIT: Here is another example WSDL and their XSD usage is different as well, so far as that the xsd types are simply added in the message elements and ignoring it in the types element. This difference is very confusing and nothing via google provides any concrete information for XSD and especially WSDL usage.



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









    share|improve this question



























      0












      0








      0








      Is the XSD file mandatory for a SOAP WSDL? If the .xsd file is not mandatory, then is it mandatory I put the XSD information inside the WSDL Types Element?



      I have written a custom XML deserializer/serializer and a custom WSDL generator that will take in python functions (that have been Type Hinted) and dynamically generate a WSDL based on the functions fed to it.



       def example(arg1: str, arg2: int) -> str:
      code


      So the WSDL I generate is correct, assuming the type hints are correct (whoever wrote the python module, etc). I can feed in a python function or multiple, and generate a WSDL dynamically. The last remaining piece is the type tag. This wiki blurb on XSD makes me think that making a XSD or a XSD generator will be trivial since it will too be based off the function type hints, and since all of this is dynamic/unknown, no pre-made assumptions can be made for the XSD.




      XSD can be used to express a set of rules to which an XML document
      must conform in order to be considered "valid" according to that
      schema. However, unlike most other schema languages, XSD was also
      designed with the intent that determination of a document's validity
      would produce a collection of information adhering to specific data
      types. Such a post-validation infoset can be useful in the development
      of XML document processing software....




      I have looked at several example WSDL, this one is not using a XSD, but it is explicitly stating the types inside the main XML. I assume then if I do not use a XSD, I simply need to add information inside the WSDL Types Element? I have that information readily available and can simply put the function type signature inside



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


      EDIT: Here is another example WSDL and their XSD usage is different as well, so far as that the xsd types are simply added in the message elements and ignoring it in the types element. This difference is very confusing and nothing via google provides any concrete information for XSD and especially WSDL usage.



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









      share|improve this question
















      Is the XSD file mandatory for a SOAP WSDL? If the .xsd file is not mandatory, then is it mandatory I put the XSD information inside the WSDL Types Element?



      I have written a custom XML deserializer/serializer and a custom WSDL generator that will take in python functions (that have been Type Hinted) and dynamically generate a WSDL based on the functions fed to it.



       def example(arg1: str, arg2: int) -> str:
      code


      So the WSDL I generate is correct, assuming the type hints are correct (whoever wrote the python module, etc). I can feed in a python function or multiple, and generate a WSDL dynamically. The last remaining piece is the type tag. This wiki blurb on XSD makes me think that making a XSD or a XSD generator will be trivial since it will too be based off the function type hints, and since all of this is dynamic/unknown, no pre-made assumptions can be made for the XSD.




      XSD can be used to express a set of rules to which an XML document
      must conform in order to be considered "valid" according to that
      schema. However, unlike most other schema languages, XSD was also
      designed with the intent that determination of a document's validity
      would produce a collection of information adhering to specific data
      types. Such a post-validation infoset can be useful in the development
      of XML document processing software....




      I have looked at several example WSDL, this one is not using a XSD, but it is explicitly stating the types inside the main XML. I assume then if I do not use a XSD, I simply need to add information inside the WSDL Types Element? I have that information readily available and can simply put the function type signature inside



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


      EDIT: Here is another example WSDL and their XSD usage is different as well, so far as that the xsd types are simply added in the message elements and ignoring it in the types element. This difference is very confusing and nothing via google provides any concrete information for XSD and especially WSDL usage.



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






      python xml soap xsd wsdl






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 13 '18 at 18:54







      Kent Wong

















      asked Nov 13 '18 at 16:37









      Kent WongKent Wong

      1501213




      1501213
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53285611%2fis-xsd-information-for-a-soap-wsdl-mandatory%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53285611%2fis-xsd-information-for-a-soap-wsdl-mandatory%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Full-time equivalent

          Bicuculline

          さくらももこ