<?xml version="1.0" encoding="UTF-8"?>
<definitions targetNamespace="http://www.wiris.net/quizzes/wsdl"
             xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:tns="http://www.wiris.net/quizzes/wsdl"
             xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
             xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
 <!-- Abstract section -->
 <types>
  <xsd:schema targetNamespace="http://www.wiris.net/quizzes/wsdl">
   <!-- ROOT -->
   <xsd:complexType name="processQuestions">
    <xsd:sequence>
     <xsd:element name="processQuestion" type="tns:processQuestion"
                  minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
   </xsd:complexType>
   <!--PROCESS QUESTION -->
   <xsd:complexType name="processQuestion">
    <xsd:sequence>
     <xsd:element name="question" type="tns:question" minOccurs="1"
                  maxOccurs="1"/>
     <xsd:element name="userData" type="tns:userData" minOccurs="0"
                  maxOccurs="1"/>
     <xsd:element name="processes" type="tns:processes" minOccurs="0"
                  maxOccurs="1"/>
    </xsd:sequence>
   </xsd:complexType>
   <!--QUESTION-->
   <xsd:complexType name="question">
    <xsd:annotation>
     <xsd:documentation>This is the static data attached to one question. In
                        other words, it is the question definition. It is
                        suitable for caching.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
     <xsd:element name="wirisCasSession" type="xsd:string" minOccurs="0"
                  maxOccurs="1">
      <xsd:annotation>
       <xsd:documentation>Session of WIRIS CAS containing the algorithm for this
                          question.</xsd:documentation>
      </xsd:annotation>
     </xsd:element>
     <xsd:element name="correctAnswers" type="tns:correctAnswers" minOccurs="0"
                  maxOccurs="1">
      <xsd:annotation>
       <xsd:documentation>The list of answers usually defined by the teacher.</xsd:documentation>
      </xsd:annotation>
     </xsd:element>
     <xsd:element name="assertions" type="tns:assertions" minOccurs="0"
                  maxOccurs="1"/>
     <xsd:element name="options" type="tns:options" minOccurs="0"
                  maxOccurs="1"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:string" use="optional"/>
   </xsd:complexType>
   <!--CORRECT ANSWERS -->
   <xsd:complexType name="correctAnswers">
    <xsd:sequence>
     <xsd:element name="correctAnswer" type="tns:correctAnswer" minOccurs="0"
                  maxOccurs="unbounded"/>
    </xsd:sequence>
   </xsd:complexType>
   <!--CORRECT ANSWER -->
   <xsd:complexType name="correctAnswer">
    <xsd:annotation>
     <xsd:documentation>This type contains the definition of an answer to a
                        question. It is an extension of tns:answer, who in turn
                        is an extension of tns:math.</xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
     <xsd:extension base="xsd:string">
      <xsd:attribute name="type" type="tns:mathType" use="optional" default="text"/>
      <xsd:attribute name="id" type="xsd:string" use="optional"/>
      <xsd:attribute name="weight" type="xsd:string" use="optional"/>
     </xsd:extension>
    </xsd:simpleContent>
   </xsd:complexType>
   <!--ASSERTIONS -->
   <xsd:complexType name="assertions">
    <xsd:sequence>
     <xsd:element name="assertion" type="tns:assertion" minOccurs="1"
                  maxOccurs="unbounded"/>
    </xsd:sequence>
   </xsd:complexType>
   <!--ASSERTION-->
   <xsd:complexType name="assertion">
    <xsd:sequence>
     <xsd:element name="param" minOccurs="0" maxOccurs="unbounded"
                  type="tns:param"/>
    </xsd:sequence>
    <xsd:attribute name="name" use="required" type="tns:assertionName"/>
    <xsd:attribute name="answer" use="optional" type="xsd:string"/>
    <xsd:attribute name="correctAnswer" use="optional" type="xsd:string"/>
   </xsd:complexType>
   <!-- LIST OF ASSERTION NAMES -->
   <xsd:simpleType name="assertionName">
    <xsd:restriction base="xsd:string">
    <!--Check www.wiris.net/demo/quizzes/assertions.xml for updates on this list-->
     <xsd:enumeration value="syntax_expression"/>
     <xsd:enumeration value="syntax_quantity"/>
     <xsd:enumeration value="syntax_list"/>
     
     <xsd:enumeration value="equivalent_symbolic"/>
     <xsd:enumeration value="equivalent_literal"/>
     <xsd:enumeration value="equivalent_set"/>
     
     <xsd:enumeration value="check_simplified"/>
     <xsd:enumeration value="check_expanded"/>
     <xsd:enumeration value="check_factorized"/>
     <xsd:enumeration value="check_integer_form"/>
     <xsd:enumeration value="check_fraction_form"/>
     <xsd:enumeration value="check_polynomial_form"/>
     <xsd:enumeration value="check_rational_function_form"/>
     <xsd:enumeration value="check_elemental_function_form"/>
     <xsd:enumeration value="check_divisible"/>
     <xsd:enumeration value="check_unit"/>
     <xsd:enumeration value="check_unit_literal"/>
     <xsd:enumeration value="check_no_more_decimals"/>
     <xsd:enumeration value="check_no_more_digits"/>
     <xsd:enumeration value="check_scientific_notation"/>
     
    </xsd:restriction>
   </xsd:simpleType>
   <!-- PARAM -->
   <xsd:complexType name="param">
    <xsd:simpleContent>
     <xsd:extension base="xsd:string">
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="type" type="tns:mathType" use="optional"/>
     </xsd:extension>
    </xsd:simpleContent>
   </xsd:complexType>
   <!--OPTIONS -->
   <xsd:complexType name="options">
    <xsd:sequence>
     <xsd:element name="option" type="tns:option" minOccurs="0"
                  maxOccurs="unbounded"/>
    </xsd:sequence>
   </xsd:complexType>
   <!--OPTION -->
   <xsd:complexType name="option">
    <xsd:simpleContent>
     <xsd:extension base="xsd:string">
      <xsd:attribute name="name" type="tns:optionName"/>
     </xsd:extension>
    </xsd:simpleContent>
   </xsd:complexType>
   <!-- LIST OF OPTION NAMES -->
   <xsd:simpleType name="optionName">
    <xsd:restriction base="xsd:string">
     <xsd:enumeration value="tolerance"/>
     <xsd:enumeration value="precision"/>
     <xsd:enumeration value="relative_tolerance"/>
    </xsd:restriction>
   </xsd:simpleType>
   <!-- USER DATA -->
   <xsd:complexType name="userData">
    <xsd:sequence>
     <xsd:element name="randomSeed" type="xsd:integer" minOccurs="0"
                  maxOccurs="1">
      <xsd:annotation>
       <xsd:documentation>The random seed to be used when running the CAS
                          session.</xsd:documentation>
      </xsd:annotation>
     </xsd:element>
     <xsd:element name="answers" type="tns:answers" minOccurs="0"
                  maxOccurs="1"/>
    </xsd:sequence>
   </xsd:complexType>
   <!--ANSWERS -->
   <xsd:complexType name="answers">
    <xsd:sequence>
     <xsd:element name="answer" type="tns:answer" minOccurs="1"
                  maxOccurs="unbounded"/>
    </xsd:sequence>
   </xsd:complexType>
   <!--ANSWER -->
   <xsd:complexType name="answer">
    <xsd:annotation>
     <xsd:documentation>This type answer to a question. It is an extension of
                        tns:math.</xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
     <xsd:extension base="xsd:string">
      <xsd:attribute name="type" type="tns:mathType" use="required"/>
      <xsd:attribute name="id" type="xsd:string" use="optional"/>
     </xsd:extension>
    </xsd:simpleContent>
   </xsd:complexType>
   <!-- ABSTRACT TYPE MATH -->
   <xsd:complexType name="math">
    <xsd:annotation>
     <xsd:documentation>Not used but its the parent type for answer,
                        corectAnswer, variable, eval, param.</xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
     <xsd:extension base="xsd:string">
      <xsd:attribute name="type" type="tns:mathType" use="required"/>
     </xsd:extension>
    </xsd:simpleContent>
   </xsd:complexType>
   <!--TYPES OF MATH CONTENT -->
   <xsd:simpleType name="mathType">
    <xsd:restriction base="xsd:string">
     <xsd:enumeration value="mathml"/>
     <xsd:enumeration value="text"/>
     <xsd:enumeration value="image"/>
     <xsd:enumeration value="variableName"/>
     <xsd:enumeration value="functionName"/>
    </xsd:restriction>
   </xsd:simpleType>
   <!--PROCESSES -->
   <xsd:complexType name="processes">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
     <xsd:element name="getVariables" type="tns:getVariables"/>
     <xsd:element name="getEvalFunction" type="tns:getEvalFunction"/>
     <xsd:element name="getCheckAssertions" type="tns:getCheckAssertions"/>
     <xsd:element name="getTranslation" type="tns:getTranslation"/>
     <!--xsd:element name="getGrammar" type="tns:getGrammar"/-->
     <xsd:element name="storeQuestion" type="tns:storeQuestion"/>
     <xsd:element name="freeQuestion" type="tns:freeQuestion"/>
    </xsd:choice>
   </xsd:complexType>
   <!-- ABSTRACT PROCESS-->
   <xsd:complexType name="abstractProcess" abstract="true"/>
   <!--GET VARIABLES -->
   <xsd:complexType name="getVariables">
    <xsd:attribute name="names" type="xsd:string" use="required"/>
    <xsd:attribute name="type" type="tns:mathType" use="required" />
    <xsd:attribute name="library" type="tns:library" use="optional"
    default="auto"/>
   </xsd:complexType>
   <xsd:simpleType name="library">
    <xsd:restriction base="xsd:string">
     <xsd:enumeration value="true"/>
     <xsd:enumeration value="false"/>
     <xsd:enumeration value="auto"/>
    </xsd:restriction>
   </xsd:simpleType>
   <!-- EVAL FUNCTION -->
   <xsd:complexType name="getEvalFunction">
    <xsd:attribute name="function" type="xsd:string" use="required"/>
    <xsd:attribute name="type" type="tns:mathType" use="optional"
                   default="mathml"/>
    <xsd:attribute name="library" type="tns:library" use="optional"
                   default="auto"/>
   </xsd:complexType>
   <!-- GET TRSNSLATION -->
   <xsd:complexType name="getTranslation">
    <xsd:attribute name="source" type="xsd:string" use="optional"/>
    <xsd:attribute name="target" type="xsd:string" use="required"/>
   </xsd:complexType>
   <!-- CHECK ASSERTIONS -->
   <xsd:complexType name="getCheckAssertions">
    <xsd:attribute name="library" type="tns:library" use="optional"
                   default="auto"/>
   </xsd:complexType>
   <!-- GET GRAMMAR -->
   <!--xsd:complexType name="getGrammar">
     <xsd:attribute name="answer" type="xsd:string" use="optional"/>
   </xsd:complexType-->
   <!--STORE QUESTION -->
   <xsd:complexType name="storeQuestion"></xsd:complexType>
   <!--FREE QUESTION -->
   <xsd:complexType name="freeQuestion"></xsd:complexType>
   
   <!--OUTPUT-->
   <!-- PROCESS QUESTIONS RESULT -->
   <xsd:complexType name="processQuestionsResult">
    <xsd:sequence>
     <xsd:element name="processQuestionResult" type="tns:processQuestionResult"
                  minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
   </xsd:complexType>
   <!-- PROCESS QUESTION RESULT -->
   <xsd:complexType name="processQuestionResult">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
     <xsd:element name="getCheckAssertionsResult"
                  type="tns:getCheckAssertionsResult"/>
     <xsd:element name="getVariablesResult" type="tns:getVariablesResult"/>
     <xsd:element name="getEvalFunctionResult"
                  type="tns:getEvalFunctionResult"/>
     <xsd:element name="getTranslationResult" type="tns:getTranslationResult"/>
     <!--xsd:element name="getGrammarResult" type="tns:getGrammarResult"/-->
     <xsd:element name="storeQuestionResult" type="tns:storeQuestionResult"/>
     <xsd:element name="freeQuestionResult" type="tns:freeQuestionResult"/>
    </xsd:choice>
   </xsd:complexType>
   <!--ABSTRACT RESULT-->
   <!--CHECK ASSERTIONS RESULT-->
   <xsd:complexType name="abstractResult" abstract="true"/>
   <xsd:complexType name="getCheckAssertionsResult">
    <xsd:sequence>
     <xsd:element name="error" type="tns:error" minOccurs="0"
                  maxOccurs="unbounded"/>
     <xsd:element name="check" type="tns:check" minOccurs="0"
                  maxOccurs="unbounded"/>
    </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="check">
    <xsd:simpleContent>
     <xsd:extension base="xsd:boolean">
      <xsd:attribute name="assertion" type="tns:assertionName" use="required"/>
      <xsd:attribute name="answer" type="xsd:string" use="optional"/>
      <xsd:attribute name="correctAnswer" type="xsd:string" use="optional"/>
      <xsd:attribute name="error" type="xsd:string" use="optional"/>
     </xsd:extension>
    </xsd:simpleContent>
   </xsd:complexType>
   <!--GET VARIABLES RESULT -->
   <xsd:complexType name="getVariablesResult">
    <xsd:sequence>
     <xsd:element name="error" type="tns:error" minOccurs="0"
                  maxOccurs="unbounded"/>
     <xsd:element name="variable" type="tns:variable" minOccurs="0"
                  maxOccurs="unbounded"/>
    </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="variable">
    <xsd:annotation>
     <xsd:documentation>Is an extension of tns:math</xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
     <xsd:extension base="xsd:string">
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="type" type="tns:mathType" use="required"/>
     </xsd:extension>
    </xsd:simpleContent>
   </xsd:complexType>
   <!-- EVALUATE FUNCTION RESULT -->
   <xsd:complexType name="getEvalFunctionResult">
    <xsd:sequence>
     <xsd:element name="error" type="tns:error" minOccurs="0"
                  maxOccurs="unbounded"/>
     <xsd:element name="eval" type="tns:eval" minOccurs="0"
                  maxOccurs="unbounded"/>
    </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="eval">
    <xsd:annotation>
     <xsd:documentation>Is an extension of tns:math</xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
     <xsd:extension base="xsd:string">
      <xsd:attribute name="function" type="xsd:string" use="required"/>
      <xsd:attribute name="type" type="tns:mathType" use="required"/>
      <xsd:attribute name="arg" type="xsd:string" use="optional"/>
     </xsd:extension>
    </xsd:simpleContent>
   </xsd:complexType>
   <!-- GET TRANSLATION RESULT -->
   <xsd:complexType name="getTranslationResult">
    <xsd:sequence>
     <xsd:element name="error" type="tns:error" minOccurs="0"
                  maxOccurs="unbounded"/>
     <xsd:element name="wirisCasSession" type="xsd:string" minOccurs="1"
                  maxOccurs="1"/>
    </xsd:sequence>
   </xsd:complexType>
   <!-- STORE QUESTION RESULT -->
   <xsd:complexType name="storeQuestionResult">
    <xsd:all>
     <xsd:element name="id" type="xsd:string" minOccurs="1" maxOccurs="1"/>
    </xsd:all>
   </xsd:complexType>
   <!-- FREE QUESTION RESULT -->
   <xsd:complexType name="freeQuestionResult"></xsd:complexType>
   <!--xsd:complexType name="getGrammarResult"></xsd:complexType-->
   <!--end Result -->
   <xsd:complexType name="error">
    <xsd:sequence>
     <xsd:element name="location" type="tns:errorLocation" minOccurs="1"
                  maxOccurs="1"/>
     <xsd:element name="detail" type="xsd:string" minOccurs="0" maxOccurs="1"/>
    </xsd:sequence>
    <xsd:attribute name="type" type="tns:errorType"/>
    <xsd:attribute name="id" type="xsd:string"/>
   </xsd:complexType>
   <xsd:simpleType name="errorType">
    <xsd:restriction base="xsd:string">
     <xsd:enumeration value="mathSyntax"/>
     <xsd:enumeration value="paramValue"/>
    </xsd:restriction>
   </xsd:simpleType>
   <xsd:complexType name="errorLocation">
    <xsd:attribute name="element" type="xsd:string" use="required"/>
    <xsd:attribute name="ref" type="xsd:string" use="required"/>
    <xsd:attribute name="fromline" type="xsd:integer" use="optional"/>
    <xsd:attribute name="fromcolumn" type="xsd:integer" use="optional"/>
    <xsd:attribute name="toline" type="xsd:integer" use="optional"/>
    <xsd:attribute name="tocolumn" type="xsd:integer" use="optional"/>
   </xsd:complexType>
  </xsd:schema>
 </types>
 <message name="processQuestions">
  <part name="processQuestions" type="tns:processQuestions"/>
 </message>
 <message name="doProcessQuestionsResponse">
  <part name="processQuestionsResult" type="tns:processQuestionsResult"/>
 </message>
 <message name="empty"/>
 <message name="getServerInformationResponse">
  <part name="serverName" type="xsd:string"/>
  <part name="version" type="xsd:string"/>
 </message>
 <portType name="wirisQuizzesPort">
  <operation name="doProcessQuestions">
   <input message="tns:processQuestions"/>
   <output message="tns:doProcessQuestionsResponse"/>
  </operation>
  <operation name="doGetServerInformation">
   <input message="tns:empty"/>
   <output message="tns:getServerInformationResponse"/>
  </operation>
 </portType>
 <!-- Concrete section -->
 <binding name="wirisQuizzesBinding" type="tns:wirisQuizzesPort">
  <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  <operation name="doProcessQuestions">
   <soap:operation soapAction="http://www.wiris.net/demo/quizzes/soap/doProcessQuestions"/>
   <input>
    <soap:body use="literal"/>
   </input>
   <output>
    <soap:body use="literal"/>
   </output>
  </operation>
  <operation name="doGetServerInformation">
   <soap:operation soapAction="http://www.wiris.net/demo/quizzes/soap/doGetServerInformation"/>
   <input>
    <soap:body use="literal"/>
   </input>
   <output>
    <soap:body use="literal"/>
   </output>
  </operation>
 </binding>
 <service name="wirisQuizzes">
  <port name="wirisQuizzesPort" binding="tns:wirisQuizzesBinding">
   <soap:address location="http://www.wiris.net/demo/quizzes/soap"/>
  </port>
 </service>
</definitions>
