<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://myTest/SearchFilterMessage" targetNamespace="http://myTest/SearchFilterMessage" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:simpleType name="AttributeType">
		<xs:annotation>
			<xs:documentation>Attribute of BO.</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:maxLength value="25"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="AttributesList">
		<xs:annotation>
			<xs:documentation>List of BO's attributes.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Attribute" type="AttributeType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="OrderingType">
		<xs:annotation>
			<xs:documentation>List of BO's attributes for ordering purposes.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Attribute" type="AttributeType" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="direction" use="optional" default="ASC">
			<xs:annotation>
				<xs:documentation>The type of ordering.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="ASC"/>
					<xs:enumeration value="DESC"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="BooleanStatement">
		<xs:annotation>
			<xs:documentation>Boolean statement type.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="bopnd" type="BooleanOperand" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Boolean operand.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="BooleanOperator">
		<xs:annotation>
			<xs:documentation>Boolean operator type. Possible operators.</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:enumeration value="AND"/>
			<xs:enumeration value="OR"/>
			<xs:enumeration value="NOT"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ComparisionOperator">
		<xs:annotation>
			<xs:documentation>Comparision operator type. Possible operators.</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:enumeration value="&lt;"/>
			<xs:enumeration value=">"/>
			<xs:enumeration value="="/>
			<xs:enumeration value="&lt;>"/>
			<xs:enumeration value="&lt;="/>
			<xs:enumeration value=">="/>
			<xs:enumeration value="LIKE"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="ComparisionOperand">
		<xs:annotation>
			<xs:documentation>Comparision statement type.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="cop" type="ComparisionOperator">
				<xs:annotation>
					<xs:documentation>Comparision operator</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="opnd" type="xs:string" minOccurs="2" maxOccurs="2">
				<xs:annotation>
					<xs:documentation>Operand</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="BooleanOperand">
		<xs:annotation>
			<xs:documentation>Boolean operand type.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="bop" type="BooleanOperator">
				<xs:annotation>
					<xs:documentation>Boolean operator.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="bopnd" type="BooleanOperand" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>Boolean operand.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="copnd" type="ComparisionOperand" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>Comparision operand.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SearchFilterType">
		<xs:sequence>
			<xs:element name="BOType">
				<xs:annotation>
					<xs:documentation>Type of BOs to be searched.</xs:documentation>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:maxLength value="35"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="SearchCriteria" type="BooleanStatement">
				<xs:annotation>
					<xs:documentation>Criteria used to define which BOs/records will be selected.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="AttributesSet" type="AttributesList" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Set of BO attributes to return as a search response.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Ordering" type="OrderingType" minOccurs="0">
				<xs:annotation>
					<xs:documentation>BO attributes used to define ordering of selected BOs/records.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="SearchFilter" type="SearchFilterType">
		<xs:annotation>
			<xs:documentation>Search filter root element</xs:documentation>
		</xs:annotation>
	</xs:element>
</xs:schema>
