<?xml version="1.0" encoding="UTF-8" ?>
<!--
 ~ Licensed to the Apache Software Foundation (ASF) under one or more
 ~ contributor license agreements.  See the NOTICE file distributed with
 ~ this work for additional information regarding copyright ownership.
 ~ The ASF licenses this file to You under the Apache License, Version 2.0
 ~ (the "License"); you may not use this file except in compliance with
 ~ the License.  You may obtain a copy of the License at
 ~
 ~    http://www.apache.org/licenses/LICENSE-2.0
 ~
 ~ Unless required by applicable law or agreed to in writing, software
 ~ distributed under the License is distributed on an "AS IS" BASIS,
 ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 ~ See the License for the specific language governing permissions and
 ~ limitations under the License.
 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://pirk.apache.org" xmlns="http://pirk.apache.org"
    elementFormDefault="qualified">

    <xs:element name="schema">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="schemaName" type="xs:string">
                    <xs:annotation>
                        <xs:documentation>
                            The name of the query schema.
                            The name omits leading and trailing
                            whitespace, and is case sensitive.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>

                <xs:element name="dataSchemaName" type="xs:string">
                    <xs:annotation>
                        <xs:documentation>
                            The name of the data schema
                            over which this query is run. The name omits
                            leading and trailing whitespace, and is case
                            sensitive.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>

                <xs:element name="selectorName" type="xs:string">
                    <xs:annotation>
                        <xs:documentation>The name of the name of the
                            element in the data schema that will be the
                            selector for this query.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>

                <xs:element name="elements">
                    <xs:annotation>
                        <xs:documentation>
                            The set of element names to
                            include in the query response.
                        </xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                        <xs:sequence>

                            <xs:element name="name" type="xs:string"
                                maxOccurs="unbounded">
                                <xs:annotation>
                                    <xs:documentation>
                                        The name of an
                                        element in the data schema to
                                        include in the query response.
                                    </xs:documentation>
                                </xs:annotation>
                            </xs:element>

                        </xs:sequence>
                    </xs:complexType>
                </xs:element>

                <xs:element name="filter" type="xs:string"
                    minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>
                            The name of a class used to
                            filter the query response data.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>

                <xs:element name="filterNames" minOccurs="0"
                    maxOccurs="unbounded">
                    <xs:annotation>
                        <xs:documentation>
                            The set of data element names
                            over which the
                            response filter is applied.
                        </xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                        <xs:sequence>

                            <xs:element name="name" type="xs:string">
                                <xs:annotation>
                                    <xs:documentation>
                                        The name of an
                                        element in the data schema over
                                        which to apply the filter.
                                    </xs:documentation>
                                </xs:annotation>
                            </xs:element>

                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>
