<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns="http://www.mulesource.org/schema/mule/${ModuleNameLower}/${MuleMajorMinorVersion}"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:mule="http://www.mulesource.org/schema/mule/core/${MuleMajorMinorVersion}"
            targetNamespace="http://www.mulesource.org/schema/mule/${ModuleNameLower}/${MuleMajorMinorVersion}"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified">

    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
    <xsd:import namespace="http://www.springframework.org/schema/beans"
                schemaLocation="http://www.springframework.org/schema/beans"/>

    <xsd:import namespace="http://www.mulesource.org/schema/mule/core/${MuleMajorMinorVersion}"/>

    <!--
    TODO define the emelements that can be used to configure components in ths module.

    Mule provides a set of base schema types for all elements in Mule such as -
    - Transformers
    - Inbound and Outbound Routers
    - Filters
    - etc

    For example -

    <xsd:element name="is-xml-filter" type="mule:abstractFilterType" substitutionGroup="mule:abstract-filter"/>

    <xsd:complexType name="xmlTransformerType">
        <xsd:complexContent>
            <xsd:extension base="mule:abstractTransformerType">
                <xsd:attribute name="outputEncoding" type="xsd:string"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:element name="dom-to-xml" type="xmlTransformerType" substitutionGroup="mule:abstract-transformer"/>
    -->

    <!--

    When writing schema for simple property types you can just add xsd:attribute elements
    For complex properties with multiple values you can add custom elements and register
    a definition parser with ${ModuleNameLower}NamespaceHandler.

    For example -

    <xsd:attribute name="swizzleSize" type="mule:substitutableInt">
        <xsd:annotation>
            <xsd:documentation>
                Sets the amount of swizzle available for your twizzle
            </xsd:documentation>
        </xsd:annotation>
    </xsd:attribute>

    Note the type of the attribute is mule:substitutableInt.  For non-string simple
    types you should use mule:substitutableBoolean, mule:substitutableLong, etc since
    these types allow property placeholders to be used instead of the actual value.
    The property can then be set according to the properties available to the MUle instance. i.e

    <${ModuleNameLower}:some-filter name="smallTwizzler" swizzlerSize="${small.swizzle}"/>

    where small.swizzle is set in a properties files or system property.  This makes it easy
    to use the same config file for differnet environments such as Developement, UAT and Production

    -->

</xsd:schema>