<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="ehcache" >
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="diskStore"/>
                <xs:element minOccurs="0" maxOccurs="1"
                            ref="cacheManagerEventListenerFactory"/>
                <xs:element minOccurs="0" maxOccurs="1"
                            ref="cacheManagerPeerProviderFactory"/>
                <xs:element minOccurs="0" maxOccurs="1"
                            ref="cacheManagerPeerListenerFactory"/>
                <xs:element ref="defaultCache"/>
                <xs:element maxOccurs="unbounded" ref="cache"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="diskStore">
        <xs:complexType>
            <xs:attribute name="path" use="optional" />
        </xs:complexType>
    </xs:element>
    <xs:element name="cacheManagerEventListenerFactory">
        <xs:complexType>
            <xs:attribute name="class" use="required"/>
            <xs:attribute name="properties" use="optional"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="cacheManagerPeerProviderFactory">
        <xs:complexType>
            <xs:attribute name="class" use="required"/>
            <xs:attribute name="properties" use="optional"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="cacheManagerPeerListenerFactory">
        <xs:complexType>
            <xs:attribute name="class" use="required"/>
            <xs:attribute name="properties" use="optional"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="defaultCache">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheEventListenerFactory"/>
                <xs:element minOccurs="0" maxOccurs="1" ref="bootstrapCacheLoaderFactory"/>
            </xs:sequence>
            <xs:attribute name="diskExpiryThreadIntervalSeconds" use="optional" type="xs:integer"/>
            <xs:attribute name="diskPersistent" use="optional" type="xs:boolean"/>
            <xs:attribute name="eternal" use="required" type="xs:boolean"/>
            <xs:attribute name="maxElementsInMemory" use="required" type="xs:integer"/>
            <xs:attribute name="memoryStoreEvictionPolicy" use="optional" type="xs:string"/>
            <xs:attribute name="overflowToDisk" use="required" type="xs:boolean"/>
            <xs:attribute name="timeToIdleSeconds" use="optional" type="xs:integer"/>
            <xs:attribute name="timeToLiveSeconds" use="optional" type="xs:integer"/>
            <xs:attribute name="maxElementsOnDisk" use="optional" type="xs:integer"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="cache">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheEventListenerFactory"/>
                <xs:element minOccurs="0" maxOccurs="1" ref="bootstrapCacheLoaderFactory"/>
            </xs:sequence>
            <xs:attribute name="diskExpiryThreadIntervalSeconds" use="optional" type="xs:integer"/>
            <xs:attribute name="diskPersistent" use="optional" type="xs:boolean"/>
            <xs:attribute name="eternal" use="required" type="xs:boolean"/>
            <xs:attribute name="maxElementsInMemory" use="required" type="xs:integer"/>
            <xs:attribute name="memoryStoreEvictionPolicy" use="optional" type="xs:string"/>
            <xs:attribute name="name" use="required" type="xs:string"/>
            <xs:attribute name="overflowToDisk" use="required" type="xs:boolean"/>
            <xs:attribute name="timeToIdleSeconds" use="optional" type="xs:integer"/>
            <xs:attribute name="timeToLiveSeconds" use="optional" type="xs:integer"/>
            <xs:attribute name="maxElementsOnDisk" use="optional" type="xs:integer"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="cacheEventListenerFactory">
        <xs:complexType>
            <xs:attribute name="class" use="required"/>
            <xs:attribute name="properties" use="optional"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="bootstrapCacheLoaderFactory">
        <xs:complexType>
            <xs:attribute name="class" use="required"/>
            <xs:attribute name="properties" use="optional"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

