<?xml version="1.0" encoding="UTF-8" ?>

<xsd:schema xmlns="http://symfony.com/schema/dic/symfony"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://symfony.com/schema/dic/symfony"
    elementFormDefault="qualified">

    <xsd:element name="config" type="config" />

    <xsd:simpleType name="validator_api_version">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="auto" />
            <xsd:enumeration value="2.4" />
            <xsd:enumeration value="2.5" />
            <xsd:enumeration value="2.5-bc" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="config">
        <xsd:all>
            <xsd:element name="assets" type="assets" minOccurs="0" maxOccurs="1" />
            <xsd:element name="form" type="form" minOccurs="0" maxOccurs="1" />
            <xsd:element name="csrf-protection" type="csrf_protection" minOccurs="0" maxOccurs="1" />
            <xsd:element name="esi" type="esi" minOccurs="0" maxOccurs="1" />
            <xsd:element name="ssi" type="ssi" minOccurs="0" maxOccurs="1" />
            <xsd:element name="fragments" type="fragments" minOccurs="0" maxOccurs="1" />
            <xsd:element name="profiler" type="profiler" minOccurs="0" maxOccurs="1" />
            <xsd:element name="router" type="router" minOccurs="0" maxOccurs="1" />
            <xsd:element name="session" type="session" minOccurs="0" maxOccurs="1" />
            <xsd:element name="request" type="request" minOccurs="0" maxOccurs="1" />
            <xsd:element name="templating" type="templating" minOccurs="0" maxOccurs="1" />
            <xsd:element name="translator" type="translator" minOccurs="0" maxOccurs="1" />
            <xsd:element name="validation" type="validation" minOccurs="0" maxOccurs="1" />
            <xsd:element name="annotations" type="annotations" minOccurs="0" maxOccurs="1" />
            <xsd:element name="property-access" type="property_access" minOccurs="0" maxOccurs="1" />
            <xsd:element name="serializer" type="serializer" minOccurs="0" maxOccurs="1" />
        </xsd:all>

        <xsd:attribute name="http-method-override" type="xsd:boolean" />
        <xsd:attribute name="trusted-proxies" type="xsd:string" />
        <xsd:attribute name="ide" type="xsd:string" />
        <xsd:attribute name="secret" type="xsd:string" />
        <xsd:attribute name="default-locale" type="xsd:string" />
        <xsd:attribute name="test" type="xsd:boolean" />
    </xsd:complexType>

    <xsd:complexType name="form">
        <xsd:all>
            <xsd:element name="csrf-protection" type="form_csrf_protection" minOccurs="0" maxOccurs="1" />
        </xsd:all>
        <xsd:attribute name="enabled" type="xsd:boolean" />
    </xsd:complexType>

    <xsd:complexType name="form_csrf_protection">
        <xsd:attribute name="enabled" type="xsd:boolean" />
        <xsd:attribute name="field-name" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="csrf_protection">
        <xsd:attribute name="enabled" type="xsd:boolean" />
        <xsd:attribute name="field-name" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="esi">
        <xsd:attribute name="enabled" type="xsd:boolean" />
    </xsd:complexType>

    <xsd:complexType name="ssi">
        <xsd:attribute name="enabled" type="xsd:boolean" />
    </xsd:complexType>

    <xsd:complexType name="fragments">
        <xsd:attribute name="enabled" type="xsd:boolean" />
        <xsd:attribute name="path" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="profiler">
        <xsd:all>
            <xsd:element name="matcher" type="profiler_matcher" minOccurs="0" maxOccurs="1" />
        </xsd:all>

        <xsd:attribute name="collect" type="xsd:string" />
        <xsd:attribute name="only-exceptions" type="xsd:string" />
        <xsd:attribute name="only-master-requests" type="xsd:string" />
        <xsd:attribute name="enabled" type="xsd:string" />
        <xsd:attribute name="dsn" type="xsd:string" />
        <xsd:attribute name="username" type="xsd:string" />
        <xsd:attribute name="password" type="xsd:string" />
        <xsd:attribute name="lifetime" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="profiler_matcher">
        <xsd:attribute name="ip" type="xsd:string" />
        <xsd:attribute name="path" type="xsd:string" />
        <xsd:attribute name="service" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="router">
        <xsd:attribute name="resource" type="xsd:string" />
        <xsd:attribute name="type" type="xsd:string" />
        <xsd:attribute name="http-port" type="xsd:string" />
        <xsd:attribute name="https-port" type="xsd:string" />
        <xsd:attribute name="strict-requirements" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="session">
        <xsd:attribute name="enabled" type="xsd:boolean" />
        <xsd:attribute name="storage-id" type="xsd:string" />
        <xsd:attribute name="handler-id" type="xsd:string" />
        <xsd:attribute name="name" type="xsd:string" />
        <xsd:attribute name="cookie-lifetime" type="xsd:string" />
        <xsd:attribute name="cookie-path" type="xsd:string" />
        <xsd:attribute name="cookie-domain" type="xsd:string" />
        <xsd:attribute name="cookie-secure" type="xsd:boolean" />
        <xsd:attribute name="cookie-httponly" type="xsd:boolean" />
        <xsd:attribute name="cache-limiter" type="xsd:string" />
        <xsd:attribute name="gc-maxlifetime" type="xsd:string" />
        <xsd:attribute name="gc-divisor" type="xsd:string" />
        <xsd:attribute name="gc-probability" type="xsd:string" />
        <xsd:attribute name="use-strict-mode" type="xsd:boolean" />
        <xsd:attribute name="save-path" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="request">
        <xsd:sequence>
            <xsd:element name="format" type="format" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="format">
        <xsd:choice minOccurs="1" maxOccurs="unbounded">
            <xsd:element name="mime-type" type="xsd:string" />
        </xsd:choice>
        <xsd:attribute name="name" type="xsd:string" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="assets">
        <xsd:sequence>
            <xsd:element name="base-url" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
            <xsd:element name="package" type="package" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>

        <xsd:attribute name="base-path" type="xsd:string" />
        <xsd:attribute name="version" type="xsd:string" />
        <xsd:attribute name="version-format" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="package">
        <xsd:sequence>
            <xsd:element name="base-url" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>

        <xsd:attribute name="name" type="xsd:string" use="required" />
        <xsd:attribute name="base-path" type="xsd:string" />
        <xsd:attribute name="version" type="xsd:string" />
        <xsd:attribute name="version-format" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="templating">
        <xsd:sequence>
            <xsd:element name="loader" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
            <xsd:element name="engine" type="xsd:string" minOccurs="1" maxOccurs="unbounded" />
            <xsd:element name="assets-base-url" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
            <xsd:element name="package" type="old-package" minOccurs="0" maxOccurs="unbounded" />
            <xsd:element name="form" type="form-resources" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>

        <xsd:attribute name="assets-version" type="xsd:string" />
        <xsd:attribute name="assets-version-format" type="xsd:string" />
        <xsd:attribute name="cache" type="xsd:string" />
        <xsd:attribute name="hinclude-default-template" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="form-resources">
        <xsd:choice minOccurs="1" maxOccurs="unbounded">
            <xsd:element name="resource" type="xsd:string" />
        </xsd:choice>
    </xsd:complexType>

    <xsd:complexType name="old-package">
        <xsd:sequence>
            <xsd:element name="base-url" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>

        <xsd:attribute name="name" type="xsd:string" use="required" />
        <xsd:attribute name="version" type="xsd:string" />
        <xsd:attribute name="version-format" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="translator">
        <xsd:sequence>
            <xsd:element name="fallback" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>
        <xsd:attribute name="enabled" type="xsd:boolean" />
        <xsd:attribute name="fallback" type="xsd:string" />
        <xsd:attribute name="logging" type="xsd:boolean" />
    </xsd:complexType>

    <xsd:complexType name="validation">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="static-method" type="xsd:string" />
        </xsd:choice>

        <xsd:attribute name="enabled" type="xsd:boolean" />
        <xsd:attribute name="cache" type="xsd:string" />
        <xsd:attribute name="enable-annotations" type="xsd:boolean" />
        <xsd:attribute name="static-method" type="xsd:boolean" />
        <xsd:attribute name="translation-domain" type="xsd:string" />
        <xsd:attribute name="strict-email" type="xsd:boolean" />
        <xsd:attribute name="api" type="validator_api_version" />
    </xsd:complexType>

    <xsd:complexType name="annotations">
        <xsd:attribute name="cache" type="xsd:string" />
        <xsd:attribute name="debug" type="xsd:string" />
        <xsd:attribute name="file-cache-dir" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="property_access">
        <xsd:attribute name="magic-call" type="xsd:boolean" />
        <xsd:attribute name="throw-exception-on-invalid-index" type="xsd:boolean" />
    </xsd:complexType>

    <xsd:complexType name="serializer">
        <xsd:attribute name="enabled" type="xsd:boolean" />
        <xsd:attribute name="cache" type="xsd:string" />
        <xsd:attribute name="enable-annotations" type="xsd:boolean" />
    </xsd:complexType>
</xsd:schema>
