﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="RASDataSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:l="http://www.legiti-mate.com" targetNamespace="http://www.legiti-mate.com" elementFormDefault="qualified" attributeFormDefault="qualified">
  <xs:annotation>
    <xs:documentation xml:lang="en">
      This schema defines the default structure to be sent for inserts/updates to RAS data
    </xs:documentation>
  </xs:annotation>
  <xs:element name="request">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="route" type="l:route" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="association" type="l:association" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="person" type="l:person" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="vehicle" type="l:vehicle" minOccurs="0" maxOccurs="unbounded"/>        
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="route">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        A route record
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="routeid" type="xs:long"/>
      <xs:element name="routename" type="xs:string"/>
      <xs:element name="nationalroutenumber" type="xs:string"/>
      <xs:element name="boardroutenumber" type="xs:string"/>
      <xs:element name="routedescription" type="xs:string"/>
      <xs:element name="routelengthkm" type="xs:long" nillable="true"/>
      <xs:element name="origin" type="l:place"/>
      <xs:element name="destination" type="l:place"/>      
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="place">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        A place record including the type of place i.e. Intersection
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="placeid" type="xs:long"/>
      <xs:element name="description" type="xs:string"/>
      <xs:element name="placetype" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  
    <xs:complexType name="association">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        An association record
      </xs:documentation>
    </xs:annotation>
		<xs:sequence>
			<xs:element name="associationid" type="xs:long"/>
			<xs:element name="associationname" type="xs:string"/>
			<xs:element name="associationstatus" type="xs:string"/>
			<xs:element name="postaladdress" type="l:address" minOccurs="1" maxOccurs="1"/>
			<xs:element name="physicaladdress" type="l:address" minOccurs="1" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
  
	<xs:complexType name="address">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        An address record
      </xs:documentation>
    </xs:annotation>
		<xs:sequence>
			<xs:element name="addressid" type="xs:long"/>
			<xs:element name="province" type="xs:string"/>
			<xs:element name="addressline1" type="xs:string"/>
			<xs:element name="addressline2" type="xs:string" nillable="true"/>
			<xs:element name="addressline3" type="xs:string" nillable="true"/>
			<xs:element name="pocode" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="vehicle">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        A vehicle record
      </xs:documentation>
    </xs:annotation>
		<xs:sequence>
			<xs:element name="vehicleid" type="xs:long"/>
			<xs:element name="vehiclestatus" type="xs:string"/>
			<xs:element name="vehiclemake" type="xs:string"/>
			<xs:element name="registrationnumber" type="xs:string"/>
			<xs:element name="chassisnumber" type="xs:string"/>
			<xs:element name="enginenumber" type="xs:string"/>
			<xs:element name="grossmass" type="xs:string"/>
			<xs:element name="seatingcapacity" type="xs:string"/>
			<xs:element name="cofexpiry" type="xs:string"/>
			<xs:element name="cofreferencenumber" type="xs:string"/>
			<xs:element name="natisnumber" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>

  <xs:complexType name="person">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        A person record
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="personid" type="xs:long"/>
      <xs:element name="idnumber" type="xs:string"/>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
      <xs:element name="initials" type="xs:string"/>
      <xs:element name="incometaxnumber" type="xs:string" nillable="true"/>
      <xs:element name="telephonenumber" type="xs:string" nillable="true"/>
      <xs:element name="faxnumber" type="xs:string" nillable="true"/>
      <xs:element name="cellnumber" type="xs:string" nillable="true"/>
      <xs:element name="emailaddress" type="xs:string" nillable="true"/>
      <xs:element name="active" type="xs:boolean" nillable="true"/>
      <xs:element name="association" type="l:association" minOccurs="1" maxOccurs="1"/>
      <xs:element name="postaladdress" type="l:address" minOccurs="1" maxOccurs="1"/>
      <xs:element name="physicaladdress" type="l:address" minOccurs="1" maxOccurs="1"/>
    </xs:sequence>
  </xs:complexType>
  
</xs:schema>
