<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           targetNamespace="http://zf4.biz/app/config/"
           xmlns="http://zf4.biz/app/config/"
           elementFormDefault="qualified"
           xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
           vc:minVersion="1.1" >

    <xs:element name="configuration">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:Name" minOccurs="1" maxOccurs="1"/>
                <xs:element ref="rendering" minOccurs="1" maxOccurs="1"/>
                <xs:element ref="environment" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="rendering">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="cache" minOccurs="1" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="translation"/>
                            <xs:element name="serialization"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="environment">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="item" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:Name"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="item">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="formlabel" type="xs:string" minOccurs="1" maxOccurs="1"/>
                <xs:element name="description" type="xs:string" minOccurs="1" maxOccurs="1"/>
                <xs:element ref="extendeditem" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute type="xs:boolean" name="enabled" use="required"/>
            <xs:attribute type="xs:string" name="id" use="required"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="extendeditem">
        <xs:complexType>
            <xs:annotation>
                <xs:documentation>An extended configuration item</xs:documentation>
            </xs:annotation>
            <xs:sequence>
                <xs:element name="formlabel" type="xs:string" minOccurs="1" maxOccurs="1"/>
                <xs:element name="description" type="xs:string" minOccurs="1" maxOccurs="1"/>
                <xs:element name="value" type="xs:anySimpleType">
                    <xs:alternative test="@fldtype='date'" type="xs:date"/>
                    <xs:alternative test="@fldtype='bool'" type="xs:boolean"/>
                    <xs:alternative test="@fldtype='int'" type="xs:int"/>
                    <xs:alternative test="@fldtype='float'" type="xs:float"/>
                    <xs:alternative test="@fldtype='string'" type="xs:string"/>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="id" type="xs:Name"/>
            <xs:attribute name="fldtype" type="extendedItemType"/>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="extendedItemType">
        <xs:restriction base="xs:Name">
            <xs:enumeration value="date"/>
            <xs:enumeration value="bool"/>
            <xs:enumeration value="int"/>
            <xs:enumeration value="string"/>
            <xs:enumeration value="float"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="purposeType">
        <xs:restriction base="xs:Name">
            <xs:enumeration value="cacheStorageTransformation"/>
            <xs:enumeration value="cacheStorageSerialization"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="cacheStorageSerializationType">
        <xs:restriction base="xs:Name">
            <xs:enumeration value="json"/>
            <xs:enumeration value="xml"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>