<?xml version="1.0" encoding="utf-8"?>
<!--
   ice.NET Platform

   Copyright (c) PDTec AG. All rights reserved.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

    <xs:include schemaLocation="icequery.xsd"/>

	<xs:element name="Control">
        <xs:annotation>
            <xs:documentation>Root node of the ice table query</xs:documentation>
        </xs:annotation>
        <xs:complexType>
			<xs:sequence>
                <xs:choice minOccurs="1" maxOccurs="1">
                    <xs:element name="JoinQuery" type="JoinQuery">
                        <xs:annotation>
                            <xs:documentation>JoinQuery element for join query tables</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="ExpandQuery" type="ExpandQuery">
                        <xs:annotation>
                            <xs:documentation>ExpandQuery element for expand query tables</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="FindQuery" type="FindQuery">
                        <xs:annotation>
                            <xs:documentation>FindQuery element for find query tables</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:choice>
                <xs:element name="Select" type="Select" minOccurs="0" maxOccurs="unbounded">
                    <xs:annotation>
                        <xs:documentation>Optional select in an ice table query</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Columns" type="Columns" minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation>A collection of columns</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Filters" type="Filters" minOccurs="0" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation>Optional collection of filter</xs:documentation>
                    </xs:annotation>
                </xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

    <xs:complexType name="Select">
        <xs:sequence>
            <xs:element name="Param" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:attribute name="ValueFieldName" type="xs:string" use="required"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="Type" type="SelectType" use="required">
            <xs:annotation>
                <xs:documentation>Radiobutton or checkbox selection type</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="ValueFormat" type="xs:string" use="required">
            <xs:annotation>
                <xs:documentation>Key of localized resurce (overrides the value of 'Format' attribute)</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="ValueFieldName" type="xs:string" use="optional" />
    </xs:complexType>
    
    <xs:complexType name="Columns">
        <xs:sequence>
            <xs:element name="Column" minOccurs="1" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>Creates a column in a query table</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:all>
                        <xs:element name="Text" type="Format" minOccurs="0"/>
                        <xs:element name="Url" type="Format" minOccurs="0" />
                        <xs:element name="ImageUrl" type="Format" minOccurs="0" />
                        <xs:element name="Sort" type="Sort" minOccurs="0" />
                    </xs:all>
                    <xs:attribute name="Caption" type="xs:string" use="required" />
                    <xs:attribute name="DynamicColumnName" type="xs:string" use="optional">
                        <xs:annotation>
                            <xs:documentation>Enables dynamic cell events. Value is mapped to the 'Name' property in eventargs.</xs:documentation>
                        </xs:annotation>
                    </xs:attribute>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="Filters">
        <xs:sequence>
            <xs:element name="Filter" minOccurs="1" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>Creates a query filter on a specified column and fieldname</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:attribute name="Caption" type="xs:string" use="required">
                        <xs:annotation>
                            <xs:documentation>Reference to a column caption from the column collection</xs:documentation>
                        </xs:annotation>
                    </xs:attribute>
                    <xs:attribute name="FieldName" type="xs:string" use="required">
                        <xs:annotation>
                            <xs:documentation>Reference to a field name from the query field collection</xs:documentation>
                        </xs:annotation>
                    </xs:attribute>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Format">
        <xs:sequence>
            <xs:element name="Param" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:attribute name="FieldName" type="xs:string" use="required"/>
                    <xs:attribute name="Optional" type="xs:boolean" use="optional"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="Format" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation>String format</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="FormatKey" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation>Key of localized resurce (overrides the value of 'Format' attribute)</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="FieldName" type="xs:string" use="optional" />
    </xs:complexType>

    <xs:complexType name="Sort">
        <xs:attribute name="FieldName" type="xs:string" use="required" />
    </xs:complexType>

    <xs:simpleType name="SelectType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Check" />
            <xs:enumeration value="Radio" />
        </xs:restriction>
    </xs:simpleType>
</xs:schema>