<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="ListObject" type="ListObjectType"/>

  <xs:complexType name="ListObjectType">
    <xs:all>
      <xs:element type="DataSourceType" name="DataSource"/>
      <xs:element type="ListItemType" name="Item"/>
      <xs:element type="MethodsType" name="Methods" minOccurs="0"/>
      <xs:element type="AdvancedSearchObjectsType" name="AdvancedSearchObjects" minOccurs="0"/>
      <xs:element type="NestedListObjectsType" name="NestedListObjects" minOccurs="0"/>
    </xs:all>
    <xs:attribute type="xs:string" name="name" use="required"/>
    <xs:attribute type="xs:string" name="simpleEditorOnly"/>
    <xs:attribute type="xs:string" name="generateLoadMethod"/>
    <xs:attribute type="xs:string" name="filter"/>
    <xs:attribute type="xs:string" name="paging"/>
    <xs:attribute type="xs:string" name="initialLoadPageSize"/>
    <xs:attribute type="xs:string" name="reloadPageSize"/>
    <xs:attribute type="xs:string" name="lightWeight"/>
    <xs:attribute type="xs:string" name="schemaVersion"/>
  </xs:complexType>

  <xs:complexType name="DataSourceType">
    <xs:attribute type="xs:string" name="name" use="required"/>
  </xs:complexType>

  <xs:complexType name="ListItemType">
    <xs:attribute type="xs:string" name="objectClass" use="required"/>
  </xs:complexType>

  <xs:complexType name="MethodsType">
    <xs:sequence>
      <xs:element type="MethodType" name="Method" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="MethodType">
    <xs:attribute type="xs:string" name="name" use="required"/>
  </xs:complexType>

  <xs:complexType name="AdvancedSearchObjectsType">
    <xs:sequence>
      <xs:element type="AdvancedSearchObjectType" name="AdvancedSearchObject" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="AdvancedSearchObjectType">
    <xs:sequence>
      <xs:element type="AdvancedSearchAttributesType" name="AdvancedSearchAttributes" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute type="xs:string" name="name" use="required"/>
  </xs:complexType>

  <xs:complexType name="AdvancedSearchAttributesType">
    <xs:sequence maxOccurs="unbounded" minOccurs="0">
      <xs:element type="AdvancedSearchAttributeType" name="AdvancedSearchAttribute"/>
    </xs:sequence>
    <xs:attribute type="xs:string" name="profileId" use="required"/>
  </xs:complexType>

  <xs:complexType name="AdvancedSearchAttributeType">
    <xs:choice minOccurs="0">
      <xs:element type="ParametersType" name="Parameters"/>
      <xs:element type="ParametersType" name="lookupParameters"/>
    </xs:choice>
    <xs:attribute type="xs:string" name="label" use="required"/>
    <xs:attribute type="xs:string" name="property" use="required"/>
    <xs:attribute type="xs:string" name="type" use="required"/>
    <xs:attribute type="xs:string" name="defaultValue"/>
    <xs:attribute type="xs:string" name="defaultOperator"/>
    <xs:attribute type="xs:string" name="toggleId"/>
    <xs:attribute type="xs:string" name="dataSource"/>
    <xs:attribute type="xs:string" name="call"/>
    <xs:attribute type="xs:string" name="lookupProcess"/>
    <xs:attribute type="xs:string" name="lookupProcessReturnValue"/>
    <xs:attribute type="xs:string" name="lookupObject"/>
    <xs:attribute type="xs:string" name="lookupObjectDisplayValue"/>
    <xs:attribute type="xs:string" name="visible"/>
    <xs:attribute type="xs:string" name="editable"/>
    <xs:attribute type="xs:string" name="alwaysToday"/>
    <xs:attribute type="xs:string" name="dateOffset"/>
    <xs:attribute type="xs:string" name="numberFormat"/>
    <xs:attribute type="xs:string" name="stepSize"/>
	<xs:attribute type="xs:string" name="latitudeProperty"/>
	<xs:attribute type="xs:string" name="longitudeProperty"/>
	<xs:attribute type="xs:string" name="appContextDistanceUnitKey"/>
  </xs:complexType>

  <xs:complexType name="ParametersType">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element type="InputType" name="Input" />
    </xs:sequence>
    <xs:attribute type="xs:string" name="name"/>
  </xs:complexType>

  <xs:complexType name="InputType">
    <xs:attribute type="xs:string" name="name" use="required"/>
    <xs:attribute type="xs:string" name="type" use="optional"/>
    <xs:attribute type="xs:string" name="value" use="required"/>
  </xs:complexType>

  <xs:complexType name="NestedListObjectsType">
    <xs:sequence>
      <xs:element type="NestedListObjectType" name="ListObject" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="NestedListObjectType" mixed="true">
    <xs:all>
      <xs:element type="EventsType" name="Events" minOccurs="0"/>
    </xs:all>
    <xs:attribute type="xs:string" name="name" use="required"/>
    <xs:attribute type="xs:string" name="objectClass" use="required"/>
    <xs:attribute type="xs:string" name="parentReferenceProperty" use="required"/>
    <xs:attribute type="xs:string" name="nestedReferenceProperty" use="required"/>
  </xs:complexType>

  <xs:complexType name="EventsType">
    <xs:all>
      <xs:element type="EventType" name="Event"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="EventType">
    <xs:attribute type="xs:string" name="name" use="required"/>
    <xs:attribute type="xs:string" name="eventHandler" use="required"/>
  </xs:complexType>

</xs:schema>