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

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

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<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>
      <![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>

            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>
