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

    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.

    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.

    The contents of this file are subject to the terms of either the GNU
    General Public License Version 2 only ("GPL") or the Common Development
    and Distribution License("CDDL") (collectively, the "License").  You
    may not use this file except in compliance with the License.  You can
    obtain a copy of the License at
    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
    or packager/legal/LICENSE.txt.  See the License for the specific
    language governing permissions and limitations under the License.

    When distributing the software, include this License Header Notice in each
    file and include the License file at packager/legal/LICENSE.txt.

    GPL Classpath Exception:
    Oracle designates this particular file as subject to the "Classpath"
    exception as provided by Oracle in the GPL Version 2 section of the License
    file that accompanied this code.

    Modifications:
    If applicable, add the following below the License Header, with the fields
    enclosed by brackets [] replaced by your own identifying information:
    "Portions Copyright [year] [name of copyright owner]"

    Contributor(s):
    If you wish your version of this file to be governed by only the CDDL or
    only the GPL Version 2, indicate your decision by adding "[Contributor]
    elects to include this software in this distribution under the [CDDL or GPL
    Version 2] license."  If you don't indicate a single choice of license, a
    recipient has the option to distribute your version of this file under
    either the CDDL, the GPL Version 2 or to extend the choice of license to
    its licensees as provided above.  However, if you add GPL Version 2 code
    and therefore, elected the GPL Version 2 license, then the option applies
    only if the new code is made subject to such option by the copyright
    holder.

-->

<xsd:schema
     targetNamespace="http://java.sun.com/xml/ns/javaee"
     xmlns:javaee="http://java.sun.com/xml/ns/javaee"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:xml="http://www.w3.org/XML/1998/namespace"
     elementFormDefault="qualified"
     attributeFormDefault="unqualified"
     version="2.1">

  <xsd:annotation>
    <xsd:documentation>

    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.

    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.

    The contents of this file are subject to the terms of either the GNU
    General Public License Version 2 only ("GPL") or the Common Development
    and Distribution License("CDDL") (collectively, the "License").  You
    may not use this file except in compliance with the License.  You can
    obtain a copy of the License at
    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
    or packager/legal/LICENSE.txt.  See the License for the specific
    language governing permissions and limitations under the License.

    When distributing the software, include this License Header Notice in each
    file and include the License file at packager/legal/LICENSE.txt.

    GPL Classpath Exception:
    Oracle designates this particular file as subject to the "Classpath"
    exception as provided by Oracle in the GPL Version 2 section of the License
    file that accompanied this code.

    Modifications:
    If applicable, add the following below the License Header, with the fields
    enclosed by brackets [] replaced by your own identifying information:
    "Portions Copyright [year] [name of copyright owner]"

    Contributor(s):
    If you wish your version of this file to be governed by only the CDDL or
    only the GPL Version 2, indicate your decision by adding "[Contributor]
    elects to include this software in this distribution under the [CDDL or GPL
    Version 2] license."  If you don't indicate a single choice of license, a
    recipient has the option to distribute your version of this file under
    either the CDDL, the GPL Version 2 or to extend the choice of license to
    its licensees as provided above.  However, if you add GPL Version 2 code
    and therefore, elected the GPL Version 2 license, then the option applies
    only if the new code is made subject to such option by the copyright
    holder.
    </xsd:documentation>
  </xsd:annotation>

    <xsd:annotation>
        <xsd:documentation>

            <![CDATA[

            The XML Schema for the JavaServer Faces Application
            Configuration File (Version 2.1).

            All JavaServer Faces configuration files must indicate
            the JavaServer Faces schema by indicating the JavaServer
            Faces namespace:

            http://java.sun.com/xml/ns/javaee

            and by indicating the version of the schema by
            using the version element as shown below:

            <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:schemaLocation="..."
                    version="2.1">
                ...
            </faces-config>

            The instance documents may indicate the published
            version of the schema using xsi:schemaLocation attribute
            for javaee namespace with the following location:

            http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd

            ]]>

        </xsd:documentation>
    </xsd:annotation>

    <xsd:include schemaLocation="javaee_5.xsd"/>

    <!-- **************************************************** -->

    <xsd:element name = "faces-config" type="javaee:faces-configType">
        <xsd:annotation>
            <xsd:documentation>

                The "faces-config" element is the root of the configuration
                information hierarchy, and contains nested elements for all
                of the other configuration settings.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:unique name="faces-config-behavior-ID-uniqueness">
            <xsd:annotation>
                <xsd:documentation>

                    Behavior IDs must be unique within a document.

                </xsd:documentation>
            </xsd:annotation>

            <xsd:selector xpath="javaee:behavior"/>
            <xsd:field    xpath="javaee:behavior-id"/>
        </xsd:unique>

        <xsd:unique name="faces-config-converter-ID-uniqueness">
            <xsd:annotation>
                <xsd:documentation>

                    Converter IDs must be unique within a document.

                </xsd:documentation>
            </xsd:annotation>

            <xsd:selector xpath="javaee:converter"/>
            <xsd:field    xpath="javaee:converter-id"/>
        </xsd:unique>

        <xsd:unique name="faces-config-converter-for-class-uniqueness">
            <xsd:annotation>
                <xsd:documentation>

                    'converter-for-class' element values must be unique
                    within a document.

                </xsd:documentation>
            </xsd:annotation>

            <xsd:selector xpath="javaee:converter"/>
            <xsd:field    xpath="javaee:converter-for-class"/>
        </xsd:unique>

        <xsd:unique name="faces-config-validator-ID-uniqueness">
            <xsd:annotation>
                <xsd:documentation>

                    Validator IDs must be unique within a document.

                </xsd:documentation>
            </xsd:annotation>

            <xsd:selector xpath="javaee:validator"/>
            <xsd:field    xpath="javaee:validator-id"/>
        </xsd:unique>

        <xsd:unique name="faces-config-managed-bean-name-uniqueness">
            <xsd:annotation>
                <xsd:documentation>

                    Managed bean names must be unique within a document.

                </xsd:documentation>
            </xsd:annotation>

            <xsd:selector xpath="javaee:managed-bean"/>
            <xsd:field    xpath="javaee:managed-bean-name"/>
        </xsd:unique>
    </xsd:element>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-configType">
        <xsd:annotation>
            <xsd:documentation>

                The "faces-config" element is the root of the configuration
                information hierarchy, and contains nested elements for all
                of the other configuration settings.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="application"
                         type="javaee:faces-config-applicationType"/>
            <xsd:element name="ordering"
                         type="javaee:faces-config-orderingType"/>
            <xsd:element name="absolute-ordering"
                         type="javaee:faces-config-absoluteOrderingType"
                         minOccurs="0"
                         maxOccurs="1"/>
            <xsd:element name="factory"
                         type="javaee:faces-config-factoryType"/>
            <xsd:element name="component"
                         type="javaee:faces-config-componentType"/>
            <xsd:element name="converter"
                         type="javaee:faces-config-converterType"/>
            <xsd:element name="managed-bean"
                         type="javaee:faces-config-managed-beanType"/>
            <xsd:element name="name"
                         type="javaee:java-identifierType"
                         minOccurs="0"
                         maxOccurs="1">
              <xsd:annotation>
                  <xsd:documentation>
                      
                      The "name" element within the top level "faces-config"
                      element declares the name of this application
                      configuration resource.  Such names are used
                      in the document ordering scheme specified in section
                      JSF.11.4.6.
                      
                  </xsd:documentation>
              </xsd:annotation>
            </xsd:element>
                             
            <xsd:element name="navigation-rule"
                         type="javaee:faces-config-navigation-ruleType"/>
            <xsd:element name="referenced-bean"
                         type="javaee:faces-config-referenced-beanType"/>
            <xsd:element name="render-kit"
                         type="javaee:faces-config-render-kitType"/>
            <xsd:element name="lifecycle"
                         type="javaee:faces-config-lifecycleType"/>
            <xsd:element name="validator"
                         type="javaee:faces-config-validatorType"/>
            <xsd:element name="behavior"
                         type="javaee:faces-config-behaviorType"/>
            <xsd:element name="faces-config-extension"
                         type="javaee:faces-config-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:attribute name="metadata-complete"
                       type="xsd:boolean"
                       use="optional">
            <xsd:annotation>
                <xsd:documentation>

                    The metadata-complete attribute defines whether this
                    JavaServer Faces application is complete, or whether
                    the class files available to this module and packaged with
                    this application should be examined for annotations
                    that specify configuration information.
                    
                    This attribute is only inspected on the application 
                    configuration resource file located at "WEB-INF/faces-config.xml".
                    The presence of this attribute on any application configuration
                    resource other than the one located at "WEB-INF/faces-config.xml",
                    including any files named using the javax.faces.CONFIG_FILES
                    attribute, must be ignored.

                    If metadata-complete is set to "true", the JavaServer Faces
                    runtime must ignore any annotations that specify configuration
                    information, which might be present in the class files
                    of the application.

                    If metadata-complete is not specified or is set to
                    "false", the JavaServer Faces runtime must examine the class
                    files of the application for annotations, as specified by
                    the specification.

                    If "WEB-INF/faces-config.xml" is not present, the JavaServer
                    Faces runtime will assume metadata-complete to be "false".

                    The value of this attribute will have no impact on
                    runtime annotations such as @ResourceDependency or
                    @ListenerFor.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="id" type="xsd:ID" />
        <xsd:attribute name="version"
                       type="javaee:faces-config-versionType"
                       use="required"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name = "faces-config-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for faces-config.  It may contain
                implementation specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>


    <!-- **************************************************** -->


    <xsd:complexType name="faces-config-orderingType">
        <xsd:annotation>
            <xsd:documentation>

              Please see section JSF.11.4.6 for the specification of this element.
                
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="after" 
                         type="javaee:faces-config-ordering-orderingType"
                         minOccurs="0"
                         maxOccurs="1"/>
            <xsd:element name="before" 
                         type="javaee:faces-config-ordering-orderingType"
                         minOccurs="0"
                         maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <xsd:complexType name="faces-config-ordering-orderingType">
        <xsd:annotation>
            <xsd:documentation>

                This element contains a sequence of "id" elements, each of which
                refers to an application configuration resource by the "id"
                declared on its faces-config element.  This element can also contain
                a single "others" element which specifies that this document comes
                before or after other documents within the application.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="name" type="javaee:java-identifierType" minOccurs="0" maxOccurs="unbounded"/>
            <xsd:element name="others" type="javaee:faces-config-ordering-othersType" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <xsd:complexType name="faces-config-ordering-othersType">
        <xsd:annotation>
            <xsd:documentation>

                This element indicates that the ordering sub-element in which
                it was placed should take special action regarding the ordering
                of this application resource relative to other
                application configuration resources.  See section JSF.11.4.6
                for the complete specification.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>


    <!-- **************************************************** -->


    <xsd:complexType name="faces-config-absoluteOrderingType">
        <xsd:annotation>
            <xsd:documentation>

              Only relevant if this is placed within the /WEB-INF/faces-config.xml.
              Please see section JSF.11.4.6 for the specification for details.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="name" type="javaee:java-identifierType" minOccurs="0" maxOccurs="unbounded"/>
            <xsd:element name="others" type="javaee:faces-config-ordering-othersType" minOccurs="0" maxOccurs="1" />
        </xsd:choice>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>


    <!-- **************************************************** -->


    <xsd:complexType name="faces-config-applicationType">
        <xsd:annotation>
            <xsd:documentation>

                The "application" element provides a mechanism to define the
                various per-application-singleton implementation artifacts for
                a particular web application that is utilizing
                JavaServer Faces.  For nested elements that are not specified,
                the JSF implementation must provide a suitable default.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:choice minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="action-listener"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                            The "action-listener" element contains the fully
                            qualified class name of the concrete
                            ActionListener implementation class that will be
                            called during the Invoke Application phase of the
                            request processing lifecycle.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="default-render-kit-id"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                            The "default-render-kit-id" element allows the
                            application to define a renderkit to be used other
                            than the standard one.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="message-bundle"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                            The base name of a resource bundle representing
                            the message resources for this application.  See
                            the JavaDocs for the "java.util.ResourceBundle"
                            class for more information on the syntax of
                            resource bundle names.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="navigation-handler"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                            The "navigation-handler" element contains the
                            fully qualified class name of the concrete
                            NavigationHandler implementation class that will
                            be called during the Invoke Application phase
                            of the request processing lifecycle, if the
                            default ActionListener (provided by the JSF
                            implementation) is used.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="view-handler"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                            The "view-handler" element contains the fully
                            qualified class name of the concrete ViewHandler
                            implementation class that will be called during
                            the Restore View and Render Response phases of the
                            request processing lifecycle.  The faces
                            implementation must provide a default
                            implementation of this class.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="state-manager"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                            The "state-manager" element contains the fully
                            qualified class name of the concrete StateManager
                            implementation class that will be called during
                            the Restore View and Render Response phases of the
                            request processing lifecycle.  The faces
                            implementation must provide a default
                            implementation of this class.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="el-resolver"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                            The "el-resolver" element contains the fully
                            qualified class name of the concrete
                            javax.el.ELResolver implementation class
                            that will be used during the processing of
                            EL expressions.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="property-resolver"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                            The "property-resolver" element contains the fully
                            qualified class name of the concrete
                            PropertyResolver implementation class that will
                            be used during the processing of value binding
                            expressions.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="variable-resolver"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                            The "variable-resolver" element contains the fully
                            qualified class name of the concrete
                            VariableResolver implementation class that will
                            be used during the processing of value binding
                            expressions.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="resource-handler"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>
                        <![CDATA[

                            The "resource-handler" element contains the
                            fully qualified class name of the concrete
                            ResourceHandler implementation class that
                            will be used during rendering and decoding
                            of resource requests The standard
                            constructor based decorator pattern used for
                            other application singletons will be
                            honored.

                        ]]>

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="system-event-listener"
                         type="javaee:faces-config-system-event-listenerType"
                         minOccurs="0"
                         maxOccurs="unbounded">
            </xsd:element>
            <xsd:element
                name="locale-config"
                type="javaee:faces-config-locale-configType"/>
            <xsd:element
                name="resource-bundle"
                type="javaee:faces-config-application-resource-bundleType"/>
            <xsd:element name="application-extension"
                         type="javaee:faces-config-application-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
            <xsd:element
                name="default-validators"
                type="javaee:faces-config-default-validatorsType"/>
            </xsd:choice>
        <xsd:attribute name = "id" type = "xsd:ID"/>
    </xsd:complexType>

    <xsd:complexType name="faces-config-application-resource-bundleType">
        <xsd:annotation>
            <xsd:documentation>

              The resource-bundle element inside the application element
              references a java.util.ResourceBundle instance by name
              using the var element.  ResourceBundles referenced in this
              manner may be returned by a call to
              Application.getResourceBundle() passing the current
              FacesContext for this request and the value of the var
              element below.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="base-name"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The fully qualified class name of the
                        java.util.ResourceBundle instance.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="var"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                        The name by which this ResourceBundle instance
                        is retrieved by a call to
                        Application.getResourceBundle().

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name = "faces-config-application-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for application.  It may contain
                implementation specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>


    <!-- **************************************************** -->

    <xsd:complexType name = "faces-config-factoryType">
        <xsd:annotation>
            <xsd:documentation>

                The "factory" element provides a mechanism to define the
                various Factories that comprise parts of the implementation
                of JavaServer Faces.  For nested elements that are not
                specified, the JSF implementation must provide a suitable
                default.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:choice minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="application-factory"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "application-factory" element contains the
                        fully qualified class name of the concrete
                        ApplicationFactory implementation class that will
                        be called when
                        FactoryFinder.getFactory(APPLICATION_FACTORY) is
                        called.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="exception-handler-factory"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "exception-handler-factory" element contains the
                        fully qualified class name of the concrete
                        ExceptionHandlerFactory implementation class that will
                        be called when
                        FactoryFinder.getFactory(EXCEPTION_HANDLER_FACTORY)
                        is called.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="external-context-factory"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "external-context-factory" element contains the
                        fully qualified class name of the concrete
                        ExternalContextFactory implementation class that will
                        be called when
                        FactoryFinder.getFactory(EXTERNAL_CONTEXT_FACTORY)
                        is called.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>

            <xsd:element name="faces-context-factory"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "faces-context-factory" element contains the
                        fully qualified class name of the concrete
                        FacesContextFactory implementation class that will
                        be called when
                        FactoryFinder.getFactory(FACES_CONTEXT_FACTORY)
                        is called.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>

            <xsd:element name="facelet-cache-factory"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "facelet-cache-factory" element contains the
                        fully qualified class name of the concrete
                        FaceletCacheFactory implementation class that will
                        be called when
                        FactoryFinder.getFactory(FACELET_CACHE_FACTORY)
                        is called.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>

            <xsd:element name="partial-view-context-factory"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "partial-view-context-factory" element contains the
                        fully qualified class name of the concrete
                        PartialViewContextFactory implementation class that will
                        be called when FactoryFinder.getFactory
                        (FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY) is called.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>

            <xsd:element name="lifecycle-factory"
                        type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "lifecycle-factory" element contains the fully
                        qualified class name of the concrete LifecycleFactory
                        implementation class that will be called when
                        FactoryFinder.getFactory(LIFECYCLE_FACTORY) is called.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="view-declaration-language-factory"
                        type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "view-declaration-language-factory" element contains
                        the fully qualified class name of the concrete
                        ViewDeclarationLanguageFactory
                        implementation class that will be called when
                        FactoryFinder.getFactory(VIEW_DECLARATION_FACTORY) is called.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="tag-handler-delegate-factory"
                        type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "tag-handler-delegate-factory" element contains
                        the fully qualified class name of the concrete
                        ViewDeclarationLanguageFactory
                        implementation class that will be called when
                        FactoryFinder.getFactory(TAG_HANDLER_DELEGATE_FACTORY) is called.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="render-kit-factory"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "render-kit-factory" element contains the fully
                        qualified class name of the concrete RenderKitFactory
                        implementation class that will be called when
                        FactoryFinder.getFactory(RENDER_KIT_FACTORY) is
                        called.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="visit-context-factory"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "visit-context-factory" element contains the fully
                        qualified class name of the concrete VisitContextFactory
                        implementation class that will be called when
                        FactoryFinder.getFactory(VISIT_CONTEXT_FACTORY) is
                        called.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="factory-extension"
                         type="javaee:faces-config-factory-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:attribute name = "id" type = "xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name = "faces-config-factory-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for factory.  It may contain
                implementation specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>


    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-attributeType">
        <xsd:annotation>
            <xsd:documentation>

                The "attribute" element represents a named, typed, value
                associated with the parent UIComponent via the generic
                attributes mechanism.

                Attribute names must be unique within the scope of the parent
                (or related) component.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="attribute-name"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                        The "attribute-name" element represents the name under
                        which the corresponding value will be stored, in the
                        generic attributes of the UIComponent we are related
                        to.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="attribute-class"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "attribute-class" element represents the Java type
                        of the value associated with this attribute name.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="default-value"
                         type="javaee:faces-config-default-valueType"
                         minOccurs="0"/>
            <xsd:element name="suggested-value"
                         type="javaee:faces-config-suggested-valueType"
                         minOccurs="0"/>
            <xsd:element name="attribute-extension"
                         type="javaee:faces-config-attribute-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name = "id" type = "xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name = "faces-config-attribute-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for attribute.  It may contain
                implementation specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-componentType">
        <xsd:annotation>
            <xsd:documentation>

                The "component" element represents a concrete UIComponent
                implementation class that should be registered under the
                specified type identifier, along with its associated
                properties and attributes.  Component types must be unique
                within the entire web application.

                Nested "attribute" elements identify generic attributes that
                are recognized by the implementation logic of this component.
                Nested "property" elements identify JavaBeans properties of
                the component class that may be exposed for manipulation
                via tools.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="component-type"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                        The "component-type" element represents the name under
                        which the corresponding UIComponent class should be
                        registered.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="component-class"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "component-class" element represents the fully
                        qualified class name of a concrete UIComponent
                        implementation class.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="facet"
                         type="javaee:faces-config-facetType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
            <xsd:element name="attribute"
                         type="javaee:faces-config-attributeType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
            <xsd:element name="property"
                         type="javaee:faces-config-propertyType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
            <xsd:element name="component-extension"
                         type="javaee:faces-config-component-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-component-extensionType">
        <xsd:annotation>
            <xsd:documentation>
                Extension element for component.  It may contain
                implementation specific content.
            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-default-localeType">
        <xsd:annotation>
            <xsd:documentation>

                The "default-locale" element declares the default locale
                for this application instance.

                It must be specified as :language:[_:country:[_:variant:]]
                without the colons, for example "ja_JP_SJIS".  The
                separators between the segments may be '-' or '_'.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:extension base="javaee:faces-config-localeType">
                <xsd:attribute name="id" type="xsd:ID"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>

    <!-- **************************************************** -->


    <xsd:complexType name="faces-config-default-valueType">
        <xsd:annotation>
            <xsd:documentation>

                The "default-value" contains the value for the property or
                attribute in which this element resides.  This value differs
                from the "suggested-value" in that the property or attribute
                must take the value, whereas in "suggested-value" taking the
                value is optional.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:restriction base="javaee:string">
                <xsd:attribute name="id" type="xsd:ID"/>
            </xsd:restriction>
        </xsd:simpleContent>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:simpleType name="faces-config-el-expressionType">
        <xsd:annotation>
            <xsd:documentation>

                EL expressions present within a faces config file
                must start with the character sequence of '#{' and
                end with '}'.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="#\{.*\}"/>
        </xsd:restriction>
    </xsd:simpleType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-facetType">
        <xsd:annotation>
            <xsd:documentation>

                Define the name and other design-time information for a facet
                that is associated with a renderer or a component.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="facet-name"
                         type="javaee:java-identifierType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "facet-name" element represents the facet name
                        under which a UIComponent will be added to its parent.
                        It must be of type "Identifier".

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="facet-extension"
                         type="javaee:faces-config-facet-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-facet-extensionType">
         <xsd:annotation>
            <xsd:documentation>

                Extension element for facet.  It may contain implementation
                specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-from-view-idType">
        <xsd:annotation>
            <xsd:documentation>

                The value of from-view-id must contain one of the following
                values:

                  - The exact match for a view identifier that is recognized
                    by the the ViewHandler implementation being used (such as
                    "/index.jsp" if you are using the default ViewHandler).

                  - A proper prefix of a view identifier, plus a trailing
                    "*" character.  This pattern indicates that all view
                    identifiers that match the portion of the pattern up to
                    the asterisk will match the surrounding rule.  When more
                    than one match exists, the match with the longest pattern
                    is selected.

                  - An "*" character, which means that this pattern applies
                    to all view identifiers.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:restriction base="javaee:string">
                <xsd:attribute name="id" type="xsd:ID"/>
            </xsd:restriction>
        </xsd:simpleContent>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-from-actionType">
        <xsd:annotation>
            <xsd:documentation>

                The "from-action" element contains an action reference
                expression that must have been executed (by the default
                ActionListener for handling application level events)
                in order to select the navigation rule.  If not specified,
                this rule will be relevant no matter which action reference
                was executed (or if no action reference was executed).

            </xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:extension base="javaee:faces-config-el-expressionType">
                <xsd:attribute name="id" type="xsd:ID"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-ifType">
        <xsd:annotation>
            <xsd:documentation>

                The "if" element defines a condition that must resolve
                to true in order for the navigation case on which it is
                defined to be matched, with the existing match criteria
                (action method and outcome) as a prerequiste, if present.
                The condition is defined declaratively using a value
                expression in the body of this element. The expression is
                evaluated at the time the navigation case is being matched.
                If the "from-outcome" is omitted and this element is
                present, the navigation handler will match a null outcome
                and use the condition return value to determine if the
                case should be considered a match.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:extension base="javaee:faces-config-el-expressionType">
                <xsd:attribute name="id" type="xsd:ID"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-converterType">
        <xsd:annotation>
            <xsd:documentation>

                The "converter" element represents a concrete Converter
                implementation class that should be registered under the
                specified converter identifier.  Converter identifiers must
                be unique within the entire web application.

                Nested "attribute" elements identify generic attributes that
                may be configured on the corresponding UIComponent in order
                to affect the operation of the Converter.  Nested "property"
                elements identify JavaBeans properties of the Converter
                implementation class that may be configured to affect the
                operation of the Converter.  "attribute" and "property"
                elements are intended to allow component developers to
                more completely describe their components to tools and users.
                These elements have no required runtime semantics.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:choice>
                <xsd:element name="converter-id"
                             type="javaee:string">
                    <xsd:annotation>
                        <xsd:documentation>

                            The "converter-id" element represents the
                            identifier under which the corresponding
                            Converter class should be registered.

                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>

                <xsd:element name="converter-for-class"
                             type="javaee:fully-qualified-classType">
                    <xsd:annotation>
                        <xsd:documentation>

                            The "converter-for-class" element represents the
                            fully qualified class name for which a Converter
                            class will be registered.

                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:choice>

            <xsd:element name="converter-class"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "converter-class" element represents the fully
                        qualified class name of a concrete Converter
                        implementation class.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="attribute"
                         type="javaee:faces-config-attributeType"
                         minOccurs="0"
                         maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>

                       Nested "attribute" elements identify generic
                       attributes that may be configured on the
                       corresponding UIComponent in order to affect the
                       operation of the Converter.  This attribute is
                       primarily for design-time tools and is not
                       specified to have any meaning at runtime.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="property"
                         type="javaee:faces-config-propertyType"
                         minOccurs="0"
                         maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>

                       Nested "property" elements identify JavaBeans
                       properties of the Converter implementation class
                       that may be configured to affect the operation of
                       the Converter.  This attribute is primarily for
                       design-time tools and is not specified to have
                       any meaning at runtime.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="converter-extension"
                         type="javaee:faces-config-converter-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name = "faces-config-converter-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for converter.  It may contain
                implementation specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>



    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-lifecycleType">
        <xsd:annotation>
            <xsd:documentation>

                The "lifecycle" element provides a mechanism to specify
                modifications to the behaviour of the default Lifecycle
                implementation for this web application.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:element name="phase-listener"
                         type="javaee:fully-qualified-classType"
                         minOccurs="0"
                         maxOccurs="unbounded">

                <xsd:annotation>
                    <xsd:documentation>

                        The "phase-listener" element contains the fully
                        qualified class name of the concrete PhaseListener
                        implementation class that will be registered on
                        the Lifecycle.

                    </xsd:documentation>
            </xsd:annotation>
            </xsd:element>
            <xsd:element name="lifecycle-extension"
                         type="javaee:faces-config-lifecycle-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>

        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>

    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name = "faces-config-lifecycle-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for lifecycle.  It may contain
                implementation specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>


    <!-- **************************************************** -->

    <xsd:simpleType name="faces-config-localeType">
        <xsd:annotation>
            <xsd:documentation>

                The localeType defines valid locale defined by ISO-639-1
                and ISO-3166.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:restriction base="xsd:string">
            <xsd:pattern value="([a-z]{2})[_|\-]?([\p{L}]{2})?[_|\-]?(\w+)?"/>
        </xsd:restriction>
  </xsd:simpleType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-locale-configType">
        <xsd:annotation>
            <xsd:documentation>

                The "locale-config" element allows the app developer to
                declare the supported locales for this application.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:element name="default-locale"
                         type="javaee:faces-config-default-localeType"
                         minOccurs="0">
            </xsd:element>
            <xsd:element name="supported-locale"
                         type="javaee:faces-config-supported-localeType"
                         minOccurs="0"
                         maxOccurs="unbounded">
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-default-validatorsType">
        <xsd:annotation>
            <xsd:documentation>

                The "default-validators" element allows the app developer to
                register a set of validators, referenced by identifier, that
                are automatically assigned to any EditableValueHolder component
                in the application, unless overridden or disabled locally.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:element name="validator-id"
                         type="javaee:string"
                         minOccurs="0"
                         maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>

                        The "validator-id" element represents the identifier
                        of a registered validator.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-managed-beanType">
        <xsd:annotation>
            <xsd:documentation>

                The "managed-bean" element represents a JavaBean, of a
                particular class, that will be dynamically instantiated
                at runtime (by the default VariableResolver implementation)
                if it is referenced as the first element of a value binding
                expression, and no corresponding bean can be identified in
                any scope.  In addition to the creation of the managed bean,
                and the optional storing of it into the specified scope,
                the nested managed-property elements can be used to
                initialize the contents of settable JavaBeans properties of
                the created instance.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="managed-bean-name"
                         type="javaee:java-identifierType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "managed-bean-name" element represents the
                        attribute name under which a managed bean will
                        be searched for, as well as stored (unless the
                        "managed-bean-scope" value is "none").

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="managed-bean-class"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "managed-bean-class" element represents the fully
                        qualified class name of the Java class that will be
                        used`to instantiate a new instance if creation of the
                        specified`managed bean is requested.

                        The specified class must conform to standard JavaBeans
                        conventions.  In particular, it must have a public
                        zero-arguments constructor, and zero or more public
                        property setters.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element
                name="managed-bean-scope"
                type="javaee:faces-config-managed-bean-scopeOrNoneType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "managed-bean-scope" element represents the scope
                        into which a newly created instance of the specified
                        managed bean will be stored (unless the value is
                        "none").

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:choice>
                <xsd:element name="managed-property"
                             type="javaee:faces-config-managed-propertyType"
                             minOccurs="0"
                             maxOccurs="unbounded"/>
                <xsd:element name="map-entries"
                             type="javaee:faces-config-map-entriesType"/>
                <xsd:element name="list-entries"
                             type="javaee:faces-config-list-entriesType"/>
            </xsd:choice>
            <xsd:element name="managed-bean-extension"
                         type="javaee:faces-config-managed-bean-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="eager"
                       type="xsd:boolean"
                       use="optional">
            <xsd:annotation>
                <xsd:documentation>

                    This attribute is only considered when associated with
                    an application-scoped managed bean. If the value of the eager
                    attribute is true the runtime must instantiate this class
                    and store the instance within the application scope when the
                    application starts.

                    If eager is unspecified or is false, the default "lazy"
                    instantiation and scoped storage of the managed bean
                    will occur.

                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name = "faces-config-managed-bean-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for managed-bean.  It may contain
                implementation specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>


    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-managed-bean-scopeOrNoneType">
        <xsd:annotation>
            <xsd:documentation>

                <![CDATA[
                Defines the legal values for the <managed-bean-scope>
                element's body content, which includes all of the scopes
                normally used in a web application, plus the "none" value
                indicating that a created bean should not be stored into
                any scope.  Alternatively, an EL expression may be used
                as the value of this element.  The result of evaluating this
                expression must by of type java.util.Map.
                ]]>

            </xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:restriction base="javaee:string">
            <xsd:pattern value="view|request|session|application|none|#\{.*\}"/>
            </xsd:restriction>
        </xsd:simpleContent>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-managed-propertyType">
        <xsd:annotation>
            <xsd:documentation>

                The "managed-property" element represents an individual
                property of a managed bean that will be configured to the
                specified value (or value set) if the corresponding
                managed bean is automatically created.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="property-name"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                        The "property-name" element represents the JavaBeans
                        property name under which the corresponding value may
                        be stored.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="property-class"
                         type="javaee:java-typeType"
                         minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>

                        The "property-class" element represents the Java type
                        of the value associated with this property name.
                        If not specified, it can be inferred from existing
                        classes; however, this element should be specified
                        if the configuration file is going to be the source
                        for generating the corresponding classes.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:choice>
                <xsd:element name="map-entries"
                             type="javaee:faces-config-map-entriesType"/>
                <xsd:element name="null-value"
                             type="javaee:faces-config-null-valueType">
                </xsd:element>
                <xsd:element name="value"
                             type="javaee:faces-config-valueType"/>
                <xsd:element name="list-entries"
                             type="javaee:faces-config-list-entriesType"/>
            </xsd:choice>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-map-entryType">
        <xsd:annotation>
            <xsd:documentation>

                The "map-entry" element reprsents a single key-entry pair
                that will be added to the computed value of a managed
                property of type java.util.Map.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="key"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                        The "key" element is the String representation of a
                        map key that will be stored in a managed property of
                        type java.util.Map.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:choice>
                <xsd:element name="null-value"
                             type="javaee:faces-config-null-valueType"/>
                <xsd:element name="value"
                             type="javaee:faces-config-valueType"/>
            </xsd:choice>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-map-entriesType">
        <xsd:annotation>
            <xsd:documentation>

                The "map-entries' element represents a set of key-entry pairs
                that will be added to the computed value of a managed property
                of type java.util.Map.  In addition, the Java class types
                of the key and entry values may be optionally declared.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:element name="key-class"
                         type="javaee:fully-qualified-classType"
                         minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>

                        The "key-class" element defines the Java type to which
                        each "key" element in a set of "map-entry" elements
                        will be converted to.  If omitted, "java.lang.String"
                        is assumed.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="value-class"
                         type="javaee:faces-config-value-classType"
                         minOccurs="0"/>
            <xsd:element name="map-entry"
                         type="javaee:faces-config-map-entryType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-navigation-caseType">
        <xsd:annotation>
            <xsd:documentation>

                The "navigation-case" element describes a particular
                combination of conditions that must match for this case to
                be executed, and the view id of the component tree that
                should be selected next.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="from-action"
                         type="javaee:faces-config-from-actionType"
                         minOccurs="0">
            </xsd:element>
            <xsd:element name="from-outcome"
                         type="javaee:string" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>

                        The "from-outcome" element contains a logical outcome
                        string returned by the execution of an application
                        action method selected via an "actionRef" property
                        (or a literal value specified by an "action" property)
                        of a UICommand component.  If specified, this rule
                        will be relevant only if the outcome value matches
                        this element's value.  If not specified, this rule
                        will be relevant if the outcome value is non-null
                        or, if the "if" element is present, will be relevant
                        for any outcome value, with the assumption that the
                        condition specified in the "if" element ultimately
                        determines if this rule is a match.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="if"
                         type="javaee:faces-config-ifType"
                         minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>

                       Please see section JSF.7.4.2 for the specification of this element.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="to-view-id"
                         type="javaee:faces-config-valueType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "to-view-id" element contains the view identifier
                        of the next view that should be displayed if this
                        navigation rule is matched. If the contents is a
                        value expression, it should be resolved by the
                        navigation handler to obtain the view identifier.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element
                name="redirect"
                type="javaee:faces-config-redirectType" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-navigation-ruleType">
        <xsd:annotation>
            <xsd:documentation>

                The "navigation-rule" element represents an individual
                decision rule that will be utilized by the default
                NavigationHandler implementation to make decisions on
                what view should be displayed next, based on the
                view id being processed.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="from-view-id"
                         type="javaee:faces-config-from-view-idType"
                         minOccurs="0"/>
            <xsd:element name="navigation-case"
                         type="javaee:faces-config-navigation-caseType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
            <xsd:element
                name="navigation-rule-extension"
                type="javaee:faces-config-navigation-rule-extensionType"
                minOccurs="0"
                maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name = "faces-config-navigation-rule-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for navigation-rule.  It may contain
                implementation specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>


    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-null-valueType">
        <xsd:annotation>
            <xsd:documentation>

                The "null-value" element indicates that the managed
                property in which we are nested will be explicitly
                set to null if our managed bean is automatically
                created.  This is different from omitting the managed
                property element entirely, which will cause no
                property setter to be called for this property.

                The "null-value" element can only be used when the
                associated "property-class" identifies a Java class,
                not a Java primitive.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-propertyType">
        <xsd:annotation>
            <xsd:documentation>

                The "property" element represents a JavaBean property of the
                Java class represented by our parent element.

                Property names must be unique within the scope of the Java
                class that is represented by the parent element, and must
                correspond to property names that will be recognized when
                performing introspection against that class via
                java.beans.Introspector.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="property-name"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                        The "property-name" element represents the JavaBeans
                        property name under which the corresponding value
                        may be stored.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="property-class"
                         type="javaee:java-typeType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "property-class" element represents the Java type
                        of the value associated with this property name.
                        If not specified, it can be inferred from existing
                        classes; however, this element should be specified if
                        the configuration file is going to be the source for
                        generating the corresponding classes.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="default-value"
                         type="javaee:faces-config-default-valueType"
                         minOccurs="0"/>
            <xsd:element name="suggested-value"
                         type="javaee:faces-config-suggested-valueType"
                         minOccurs="0"/>
            <xsd:element name="property-extension"
                         type="javaee:faces-config-property-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>

    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-property-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for property.  It may contain
                implementation specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-redirectType">
        <xsd:annotation>
            <xsd:documentation>

                    The "redirect" element indicates that navigation to the
                    specified "to-view-id" should be accomplished by
                    performing an HTTP redirect rather than the usual
                    ViewHandler mechanisms.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="view-param"
                         type="javaee:faces-config-redirect-viewParamType"
                         minOccurs="0" maxOccurs="unbounded"/>
            <xsd:element name="redirect-param"
                         type="javaee:faces-config-redirect-redirectParamType"
                         minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
        <xsd:attribute name="include-view-params" type="xsd:boolean" use="optional"/>

    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-redirect-viewParamType">
        <xsd:annotation>
            <xsd:documentation>

                    This element was introduced due to a specification
                    error, and is now deprecated.  The correct name for
                    this element is "redirect-param" and its meaning is
                    documented therein.  The "view-param" element is
                    maintained to preserve backwards compatibility.
                    Implementations must treat this element the same as
                    "redirect-param".

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="name"
                         type="javaee:string"
                         minOccurs="1" maxOccurs="1"/>
            <xsd:element name="value"
                         type="javaee:string"
                         minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>

    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-redirect-redirectParamType">
        <xsd:annotation>
            <xsd:documentation>

                    The "redirect-param" element, only valid within
                    a "redirect" element, contains child "name"
                    and "value" elements that must be included in the
                    redirect url when the redirect is performed.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="name"
                         type="javaee:string"
                         minOccurs="1" maxOccurs="1"/>
            <xsd:element name="value"
                         type="javaee:string"
                         minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>

    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-referenced-beanType">
        <xsd:annotation>
            <xsd:documentation>

                The "referenced-bean" element represents at design time the
                promise that a Java object of the specified type will exist at
                runtime in some scope, under the specified key.  This can be
                used by design time tools to construct user interface dialogs
                based on the properties of the specified class.  The presence
                or absence of a referenced bean element has no impact on the
                JavaServer Faces runtime environment inside a web application.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="referenced-bean-name"
                         type="javaee:java-identifierType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "referenced-bean-name" element represents the
                        attribute name under which the corresponding
                        referenced bean may be assumed to be stored, in one
                        of 'request', 'session', 'view', 'application'
                        or a custom scope.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="referenced-bean-class"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "referenced-bean-class" element represents the
                        fully qualified class name of the Java class
                        (either abstract or concrete) or Java interface
                        implemented by the corresponding referenced bean.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-render-kitType">
        <xsd:annotation>
            <xsd:documentation>

                The "render-kit" element represents a concrete RenderKit
                implementation that should be registered under the specified
                render-kit-id.  If no render-kit-id is specified, the
                identifier of the default RenderKit
                (RenderKitFactory.DEFAULT_RENDER_KIT) is assumed.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="render-kit-id"
                         type="javaee:string"
                         minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>

                        The "render-kit-id" element represents an identifier
                        for the RenderKit represented by the parent
                        "render-kit" element.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="render-kit-class"
                         type="javaee:fully-qualified-classType"
                         minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>

                        The "render-kit-class" element represents the fully
                        qualified class name of a concrete RenderKit
                        implementation class.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="renderer"
                         type="javaee:faces-config-rendererType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
            <xsd:element name="client-behavior-renderer"
                         type="javaee:faces-config-client-behavior-rendererType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
            <xsd:element name="render-kit-extension"
                         type="javaee:faces-config-render-kit-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-client-behavior-rendererType">
        <xsd:annotation>
            <xsd:documentation>

                The "client-behavior-renderer" element represents a concrete
                ClientBehaviorRenderer implementation class that should be
                registered under the specified behavior renderer type identifier,
                in the RenderKit associated with the parent "render-kit"
                element.  Client Behavior renderer type must be unique within the RenderKit
                associated with the parent "render-kit" element.

                Nested "attribute" elements identify generic component
                attributes that are recognized by this renderer.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:element name="client-behavior-renderer-type"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                        The "client-behavior-renderer-type" element represents a renderer type
                        identifier for the Client Behavior Renderer represented by the parent
                        "client-behavior-renderer" element.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="client-behavior-renderer-class"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "client-behavior-renderer-class" element represents the fully
                        qualified class name of a concrete Client Behavior Renderer
                        implementation class.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <xsd:complexType name="faces-config-rendererType">
        <xsd:annotation>
            <xsd:documentation>

                The "renderer" element represents a concrete Renderer
                implementation class that should be registered under the
                specified component family and renderer type identifiers,
                in the RenderKit associated with the parent "render-kit"
                element.  Combinations of component family and
                renderer type must be unique within the RenderKit
                associated with the parent "render-kit" element.

                Nested "attribute" elements identify generic component
                attributes that are recognized by this renderer.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="component-family"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                        The "component-family" element represents the
                        component family for which the Renderer represented
                        by the parent "renderer" element will be used.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="renderer-type"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                        The "renderer-type" element represents a renderer type
                        identifier for the Renderer represented by the parent
                        "renderer" element.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="renderer-class"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "renderer-class" element represents the fully
                        qualified class name of a concrete Renderer
                        implementation class.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="facet"
                         type="javaee:faces-config-facetType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
            <xsd:element name="attribute"
                         type="javaee:faces-config-attributeType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
            <xsd:element name="renderer-extension"
                         type="javaee:faces-config-renderer-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-renderer-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for renderer.  It may contain implementation
                specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-render-kit-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for render-kit.  It may contain
                implementation specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>


    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-suggested-valueType">
        <xsd:annotation>
            <xsd:documentation>

                The "suggested-value" contains the value for the property or
                attribute in which this element resides.  This value is
                advisory only and is intended for tools to use when
                populating pallettes.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:restriction base="javaee:string"/>
        </xsd:simpleContent>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-supported-localeType">
        <xsd:annotation>
            <xsd:documentation>

                The "supported-locale" element allows authors to declare
                which locales are supported in this application instance.

                It must be specified as :language:[_:country:[_:variant:]]
                without the colons, for example "ja_JP_SJIS".  The
                separators between the segments may be '-' or '_'.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:extension base="javaee:faces-config-localeType">
                <xsd:attribute name="id" type="xsd:ID"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-behaviorType">
        <xsd:annotation>
            <xsd:documentation>

                The "behavior" element represents a concrete Behavior
                implementation class that should be registered under the
                specified behavior identifier.  Behavior identifiers must
                be unique within the entire web application.

                Nested "attribute" elements identify generic attributes that
                may be configured on the corresponding UIComponent in order
                to affect the operation of the Behavior.  Nested "property"
                elements identify JavaBeans properties of the Behavior
                implementation class that may be configured to affect the
                operation of the Behavior.  "attribute" and "property"
                elements are intended to allow component developers to
                more completely describe their components to tools and users.
                These elements have no required runtime semantics.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="behavior-id"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                        The "behavior-id" element represents the identifier
                        under which the corresponding Behavior class should
                        be registered.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="behavior-class"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "behavior-class" element represents the fully
                        qualified class name of a concrete Behavior
                        implementation class.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="attribute"
                         type="javaee:faces-config-attributeType"
                         minOccurs="0"
                         maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>

                       Nested "attribute" elements identify generic
                       attributes that may be configured on the
                       corresponding UIComponent in order to affect the
                       operation of the Behavior.  This attribute is
                       primarily for design-time tools and is not
                       specified to have any meaning at runtime.

                    </xsd:documentation>
                </xsd:annotation>

            </xsd:element>
            <xsd:element name="property"
                         type="javaee:faces-config-propertyType"
                         minOccurs="0"
                         maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>

                       Nested "property" elements identify JavaBeans
                       properties of the Behavior implementation class
                       that may be configured to affect the operation of
                       the Behavior.  This attribute is primarily for
                       design-time tools and is not specified to have
                       any meaning at runtime.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="behavior-extension"
                         type="javaee:faces-config-behavior-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name = "faces-config-behavior-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for behavior.  It may contain
                implementation specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-validatorType">
        <xsd:annotation>
            <xsd:documentation>

                The "validator" element represents a concrete Validator
                implementation class that should be registered under the
                specified validator identifier.  Validator identifiers must
                be unique within the entire web application.

                Nested "attribute" elements identify generic attributes that
                may be configured on the corresponding UIComponent in order
                to affect the operation of the Validator.  Nested "property"
                elements identify JavaBeans properties of the Validator
                implementation class that may be configured to affect the
                operation of the Validator.  "attribute" and "property"
                elements are intended to allow component developers to
                more completely describe their components to tools and users.
                These elements have no required runtime semantics.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:group ref="javaee:descriptionGroup"/>
            <xsd:element name="validator-id"
                         type="javaee:string">
                <xsd:annotation>
                    <xsd:documentation>

                        The "validator-id" element represents the identifier
                        under which the corresponding Validator class should
                        be registered.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="validator-class"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "validator-class" element represents the fully
                        qualified class name of a concrete Validator
                        implementation class.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="attribute"
                         type="javaee:faces-config-attributeType"
                         minOccurs="0"
                         maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>

                       Nested "attribute" elements identify generic
                       attributes that may be configured on the
                       corresponding UIComponent in order to affect the
                       operation of the Validator.  This attribute is
                       primarily for design-time tools and is not
                       specified to have any meaning at runtime.

                    </xsd:documentation>
                </xsd:annotation>

            </xsd:element>
            <xsd:element name="property"
                         type="javaee:faces-config-propertyType"
                         minOccurs="0"
                         maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>

                       Nested "property" elements identify JavaBeans
                       properties of the Validator implementation class
                       that may be configured to affect the operation of
                       the Validator.  This attribute is primarily for
                       design-time tools and is not specified to have
                       any meaning at runtime.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="validator-extension"
                         type="javaee:faces-config-validator-extensionType"
                         minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name = "faces-config-validator-extensionType">
        <xsd:annotation>
            <xsd:documentation>

                Extension element for validator.  It may contain
                implementation specific content.

            </xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:any namespace="##any"
                     processContents="lax"
                     minOccurs="0"
                     maxOccurs="unbounded" />
         </xsd:sequence>
         <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:simpleType name="faces-config-valueType">
        <xsd:annotation>
            <xsd:documentation>

                The "value" element is the String representation of
                a literal value to which a scalar managed property
                will be set, or a value binding expression ("#{...}")
                that will be used to calculate the required value.
                It will be converted as specified for the actual
                property type.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:union
            memberTypes="javaee:faces-config-el-expressionType xsd:string"/>
    </xsd:simpleType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-value-classType">
        <xsd:annotation>
            <xsd:documentation>

                The "value-class" element defines the Java type to which each
                "value" element's value will be converted to, prior to adding
                it to the "list-entries" list for a managed property that is
                a java.util.List, or a "map-entries" map for a managed
                property that is a java.util.Map.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:restriction base="javaee:fully-qualified-classType">
                <xsd:attribute name="id" type="xsd:ID"/>
            </xsd:restriction>
        </xsd:simpleContent>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-list-entriesType">
        <xsd:annotation>
            <xsd:documentation>

                The "list-entries" element represents a set of initialization
                elements for a managed property that is a java.util.List or an
                array.  In the former case, the "value-class" element can
                optionally be used to declare the Java type to which each
                value should be converted before adding it to the Collection.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="value-class"
                         type="javaee:faces-config-value-classType"
                         minOccurs="0"/>
            <xsd:choice minOccurs="0" maxOccurs="unbounded">
                <xsd:element name="null-value"
                             type="javaee:faces-config-null-valueType"/>
                <xsd:element name="value"
                             type="javaee:faces-config-valueType"/>
            </xsd:choice>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:complexType name="faces-config-system-event-listenerType">
        <xsd:annotation>
            <xsd:documentation>

                The presence of this element within the "application" element in
                an application configuration resource file indicates the
                developer wants to add an SystemEventListener to this
                application instance.  Elements nested within this element allow
                selecting the kinds of events that will be delivered to the
                listener instance, and allow selecting the kinds of classes that
                can be the source of events that are delivered to the listener
                instance.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="system-event-listener-class"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "system-event-listener-class" element contains
                        the fully qualified class name of the concrete
                        SystemEventListener implementation class that will be
                        called when events of the type specified by the
                        "system-event-class" are sent by the runtime.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="system-event-class"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "system-event-class" element contains the fully
                        qualified class name of the SystemEvent subclass for
                        which events will be delivered to the class whose fully
                        qualified class name is given by the
                        "system-event-listener-class" element.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="source-class" minOccurs="0"
                         type="javaee:fully-qualified-classType">
                <xsd:annotation>
                    <xsd:documentation>

                        The "source-class" element, if present, contains the
                        fully qualified class name of the class that will be the
                        source for the event to be delivered to the class whose
                        fully qualified class name is given by the
                        "system-event-listener-class" element.

                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

    <!-- **************************************************** -->

    <xsd:simpleType name="faces-config-versionType">
        <xsd:annotation>
            <xsd:documentation>

                This type contains the recognized versions of
                faces-config supported.

            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:token">
            <xsd:enumeration value="2.1"/>
        </xsd:restriction>
    </xsd:simpleType>

    <!-- **************************************************** -->

</xsd:schema>
