<?xml version="1.0" encoding="ISO-8859-1" ?>
<schema
  xmlns="http://www.w3.org/2001/XMLSchema"
  targetNamespace='http://www.topica.com/services/'
  xmlns:t='http://www.topica.com/Dispatcher/'>

 <simpleType name="emailType">
	<restriction base="string">
		<pattern value="[^@]+@[^@]+\.[^@]+" />
	</restriction>
 </simpleType> 

 <element name='topicaAction'>
  <complexType>
   <choice>
    <element ref='t:subscriberImport'/>
    <element ref='t:subscriberExport'/>
    <element ref='t:subscriberUnsubscribe'/>
    <element ref='t:checkContent'/>
   </choice>
   <attribute name='username' type='t:emailType' use='required'/>
   <attribute name='password' type='string' use='required'/>
  </complexType>
 </element>

 <element name='subscriberImport'>
  <complexType>
   <sequence>
    <element ref='t:mapping'/>
    <element ref='t:data'/>
   </sequence>
   <attribute name='first-row' use='required'>
	 <simpleType>
		<restriction base="string">
 		  <enumeration value='data'/>
   		  <enumeration value='header'/>
		</restriction>
 	</simpleType>
   </attribute>
   <attribute name='duplicate' use='required'>
	 <simpleType>
		<restriction base="string">
 		  <enumeration value='reject'/>
   		  <enumeration value='complete-overwrite'/>
   		  <enumeration value='replace-existing'/>
   		  <enumeration value='preserve-existing'/>
		</restriction>
	 </simpleType>
   </attribute>
   <attribute name='send-confirmations' type='boolean' use='required'/>
   <attribute name='column-delimiter' type='string' use='required'/>
   <attribute name='value-delimiter' type='string' use='required'/>
   <attribute name='list' type='t:emailType' use='required'/>
  </complexType>
 </element>

 <element name='mapping'>
  <complexType>
   <sequence>
    <element ref='t:column' maxOccurs='unbounded'/>
   </sequence>
  </complexType>
 </element>

 <element name='column'>
  <complexType>
   <sequence>
    <element ref='t:category-values' minOccurs='0' maxOccurs='unbounded'/>
   </sequence>
   <attribute name='data-type' use='optional'>
	 <simpleType>
		<restriction base="string">
 		  <enumeration value='text'/>
   		  <enumeration value='numeric'/>
   		  <enumeration value='date'/>
   		  <enumeration value='category'/>
   		  <enumeration value='multi'/>
		</restriction>
	 </simpleType>
   </attribute>
   <attribute name='order' type='string' use='required'/>
   <attribute name='field' type='string' use='optional'/>
   <attribute name='create-if-new' type='boolean' use='optional'/>
  </complexType>
 </element>

 <element name='category-values'>
  <complexType>
   <sequence>
    <element ref='t:map' minOccurs='0' maxOccurs='unbounded'/>
   </sequence>
   <attribute name='convert-case' type='boolean' use='required'/>
   <attribute name='create-if-new' type='boolean' use='required'/>
  </complexType>
 </element>

 <element name='map'>
  <complexType>
   <attribute name='from' type='string' use='required'/>
   <attribute name='to' type='string' use='required'/>
  </complexType>
 </element>

 <element name='data'>
  <complexType mixed='true'>
   <attribute name='source' use='required'>
    <simpleType>
     <restriction base='string'>
      <enumeration value='inline'/>
      <enumeration value='uri'/>
      <enumeration value='file'/>
     </restriction>
    </simpleType>
   </attribute>
  </complexType>
 </element>

 <element name='subscriberExport'>
  <complexType>
   <attribute name='list' type='t:emailType' use='required'/>
   <attribute name='column-delimiter' type='string' use='required'/>
   <attribute name='value-delimiter' type='string' use='required'/>
   <attribute name='export-type' use='required'>
	 <simpleType>
		<restriction base="string">
 		  <enumeration value='active'/>
   		  <enumeration value='disabled'/>
   		  <enumeration value='unsubscribed'/>
		</restriction>
	 </simpleType>
   </attribute>
   <attribute name='email-to' type='t:emailType' use='required'/>
   <attribute name='from-date' type='date' use='optional'/>
   <attribute name='to-date' type='date' use='optional'/>
   <attribute name='upload-url' type='string' use='optional'/>
  </complexType>
 </element>

 <element name='subscriberUnsubscribe'>
  <complexType>
   <xs:all>
    <element ref='t:data'/>
   </xs:all>
   <attribute name='list' type='t:emailType' use='required'/>
   <attribute name='email-to' type='t:emailType' use='required'/>
  </complexType>
 </element>


 <element name='checkContent'>
  <complexType>
   <sequence>
    <sequence>
    <element ref='t:campaignData' />
    </sequence>
   </sequence>
  </complexType>
 </element>

 <element name='campaignData'>
  <complexType>
    <sequence>
    <element ref='t:eventHeader' />
    </sequence>
  </complexType>
 </element>

 <element name='eventHeader'>
  <complexType>
    <sequence>
    <element ref='t:eventID' />
    <element ref='t:secondaryID' />
    <element ref='t:sendDate' />
    <element ref='t:sendTime' />
    <element ref='t:token' />
    <element ref='t:subject' />
    <element ref='t:textBody' />
    <element ref='t:htmlBody' />
    <element ref='t:fromName' />
    <element ref='t:fromAddress' />
    <element ref='t:replyTo' />
    <element ref='t:testData' />
    </sequence>
  </complexType>
 </element>

 <element name='eventID'>
  <simpleType>
    <xs:restriction base="string">
      <xs:maxLength value="20"/>
    </xs:restriction>
  </simpleType>
 </element>

 <element name='secondaryID'>
  <simpleType>
    <xs:restriction base="string">
      <xs:maxLength value="20"/>
    </xs:restriction>
  </simpleType>
 </element>

 <element name='sendDate'   type='date'>
 <element name='sendTime'   type='time'>
 <element name='token'      type='string'>

 <element name='subject'>
  <simpleType>
    <xs:restriction base="string">
      <xs:maxLength value="80"/>
    </xs:restriction>
  </simpleType>
 </element>

 <element name='textBody' type='string'>
 <element name='htmlBody' type='string'>

 <element name='fromName'>
  <simpleType>
    <xs:restriction base="string">
      <xs:maxLength value="40"/>
    </xs:restriction>
  </simpleType>
 </element>

 <element name='fromAddress'    type='t:emailType' />
 <element name='replyTo'        type='t:emailType' />
 <element name='testData'       type='string'>

 <element name='checkContentResponse'>
  <complexType>
   <choice>
    <element ref='t:checkContentRule'/>
   </choice>
   <attribute name='result' type='boolean'  use='required'>
  </complexType>
 </element>

 <element name='checkContentRule'>
  <complexType>
   <sequence>
    <element ref="t:score" />
    <element ref="t:description" />
   </sequence>
   <attribute name='contentformat' type='t:contentFormat'>
  </complexType>
 </element>

 <element name='description'    type='string'>
 <element name='score'          type='float'>

 <element name="contentFormat"  use='required'>
	 <simpleType>
		<restriction base="string">
 		  <enumeration value='text'/>
   		  <enumeration value='html'/>
   		  <enumeration value='multi-part'/>
		</restriction>
 	</simpleType>
 </element>

</schema>
