<?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 data schema.
                            The name omits leading and trailing
                            whitespace, and is case sensitive.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>

                <xs:element name="element" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>

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

                            <xs:element name="type" type="xs:string">
                                <xs:annotation>
                                    <xs:documentation>The type of the data element.
                                        The type name is the fully qualified class name,
                                        or the primitive Java type of the element.
                                    </xs:documentation>
                                </xs:annotation>
                            </xs:element>

                            <xs:element name="isArray" type="xs:boolean"
                                default="true" minOccurs="0">
                                <xs:annotation>
                                    <xs:documentation>Whether or not the schema element is
                                        an array within the data.  False if unspecified.
                                    </xs:documentation>
                                </xs:annotation>
                            </xs:element>

                            <xs:element name="partitioner"
                                type="xs:string" minOccurs="0">
                                <xs:annotation>
                                    <xs:documentation>Partitioner type for the element.
                                        The type name is the fully qualified class name.
                                        Uses the primitive Java type partitioner if unspecified.
                                    </xs:documentation>
                                </xs:annotation>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>