<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->

<xsd:schema targetNamespace="http://geronimo.apache.org/xml/ns/naming-1.2"
    xmlns:gernaming="http://geronimo.apache.org/xml/ns/naming-1.2"
    xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    attributeFormDefault="unqualified" version="1.0">

    <xsd:annotation>
        <xsd:documentation>
            This is a partial XML Schema Definition for common naming elements
            for resolving EJB, Web, services, or resource references. This
            schema will never be used directly but its elements are used in
            geronimo-application-client-2.0.xsd, geronimo-connector-1.2.xsd,
            geronimo-web-2.0.1.xsd, geronimo-tomcat-2.0.1.xsd, and
            geronimo-jetty-2.0.2.xsd. All the schema's or plans using elements of
            this schema must specify the top level element with one of the
            namespace specified as
            "http://geronimo.apache.org/xml/ns/naming-1.2". The default
            location for this document is
            http://geronimo.apache.org/xml/ns/naming-1.2
        </xsd:documentation>
    </xsd:annotation>

    <xsd:import namespace="http://geronimo.apache.org/xml/ns/deployment-1.2"
        schemaLocation="geronimo-module-1.2.xsd">
        <xsd:annotation>
            <xsd:documentation>
                Import Geronimo Services deployment plans, the imported plan
                includes complex types like moduleType, environmentType,
                dependenciesType, etc. required by this plan schema.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:import>

    <xsd:element name="env-entry" type="gernaming:env-entryType">
        <xsd:annotation>
            <xsd:documentation>
                The element env-entry is used to override env-entry
                values supplied in the JavaEE deployment descriptor
                or annotations.  There must be an env-entry with the
                same name in the deployment descriptor.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="ejb-ref" type="gernaming:ejb-refType">
        <xsd:annotation>
            <xsd:documentation>
                The element ejb-ref is used to map EJB references to EJB's in
                other applications using remote home and remote interface. The
                application which contains the EJB being referenced should
                either be in same EAR or should be included in dependency list
                of this application. Also note as the EJB's referenced are in a
                different JVM all the Client interfaces should also be included
                in current application.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="ejb-local-ref" type="gernaming:ejb-local-refType">
        <xsd:annotation>
            <xsd:documentation>
                The element ejb-local-ref is used to map EJB references to EJB's
                in other applications using local home and local interface. The
                application which contains the EJB being referenced should
                either be in same EAR or should be included in dependency list
                of this application. Also note as the EJB's referenced are in a
                different JVM all the Client interfaces should also be included
                in current application.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="service-ref" type="gernaming:service-refType">
        <xsd:annotation>
            <xsd:documentation>
                The element service-ref is used to map service references to
                service's in other applications. The application which contains
                the EJB being referenced should either be in same EAR or should
                be included in dependency list of this application.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="resource-ref" type="gernaming:resource-refType">
        <xsd:annotation>
            <xsd:documentation>
                The element resource-ref is used to map resource references to
                resources's like JDBC resources, JMS resources, etc. configured
                outside the current application.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="resource-env-ref"
        type="gernaming:resource-env-refType">
        <xsd:annotation>
            <xsd:documentation>
                The element resource-env-ref is used to map resource references
                to administrative objects deployed as a part of connectors.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <xsd:element name="message-destination"
        type="gernaming:message-destinationType">
        <xsd:annotation>
            <xsd:documentation>
                The element message-destination is used to configure a JMS queue
                or topic which act like a destination for the messages
                delivered.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <xsd:group name="jndiEnvironmentRefsGroup">
        <xsd:annotation>
            <xsd:documentation>
                This group keeps the usage of the contained JNDI environment
                reference elements consistent across J2EE deployment
                descriptors.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element ref="gernaming:abstract-naming-entry" minOccurs="0"
                maxOccurs="unbounded" />
            <xsd:element name="env-entry" type="gernaming:env-entryType"
                minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>
                        The element env-entry is used to override env-entry
                        values supplied in the JavaEE deployment descriptor
                        or annotations.  There must be an env-entry with the
                        same name in the deployment descriptor.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="ejb-ref" type="gernaming:ejb-refType"
                minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>
                        The element ejb-ref is used to map EJB references to
                        EJB's in other applications using remote home and remote
                        interface. The application which contains the EJB being
                        referenced should either be in same EAR or should be
                        included in dependency list of this application. Also
                        note as the EJB's referenced are in a different JVM all
                        the Client interfaces should also be included in current
                        application.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="ejb-local-ref" type="gernaming:ejb-local-refType"
                minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>
                        The element ejb-local-ref is used to map EJB references
                        to EJB's in other applications using local home and
                        local interface. The application which contains the EJB
                        being referenced should either be in same EAR or should
                        be included in dependency list of this application. Also
                        note as the EJB's referenced are in a different JVM all
                        the Client interfaces should also be included in current
                        application.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="service-ref" type="gernaming:service-refType"
                minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>
                        The element service-ref is used to map service
                        references to service's in other applications. The
                        application which contains the EJB being referenced
                        should either be in same EAR or should be included in
                        dependency list of this application.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="resource-ref" type="gernaming:resource-refType"
                minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>
                        The element resource-ref is used to map resource
                        references to resources's like JDBC resources, JMS
                        resources, etc. configured outside the current
                        application.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="resource-env-ref"
                type="gernaming:resource-env-refType" minOccurs="0"
                maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>
                        The element resource-env-ref is used to map resource
                        references to administrative objects deployed as a part
                        of connectors.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:group>

    <xsd:element name="abstract-naming-entry" abstract="true"
        type="gernaming:abstract-naming-entryType">
        <xsd:annotation>
            <xsd:documentation>
                The element abstract-naming-entry is an abstract element used as
                a generic element for all the references.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <xsd:complexType name="abstract-naming-entryType" abstract="true">
        <xsd:sequence></xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="env-entryType">
        <xsd:sequence>
            <xsd:element name="env-entry-name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The element env-entry-name is used to identify this env-entry.
                        This name should be unique in a module and
                        will be used by application as a part of JNDI name for
                        the environment entry. The JNDI name used will be
                        "java:/comp/env/env-entry-name. It must be identical to the
                        "env-entry-name" provided in the deployment descriptor.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="env-entry-value" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The element env-entry-value supplies the value
                        for the environment entry to be used instead of
                        the value provided in the deployment descriptor
                        or annotation.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>

    <!--ejb-link acts like ejb-link in spec descriptors-->
    <!--resource-link contains the name of the outbound-connectionfactory-instance -->
    <!--message-destination-link acts like message-destination-link in spec descriptors-->
    <!--url in resource-ref contains the url for URL typed resource refs-->
    <!--Possibly the external-uri element should be revived to connect to other naming systems-->
    <!--when server to server communication exists we will need an element in ejb-ref to specify the geronimo server
        we wish to talk to.  It might be possible to use the objectName server element for this depending on what we decide it means-->
    <!--otherwise you can supply the entire object name using the gbean-nameGroup-->

    <xsd:complexType name="ejb-refType">
        <xsd:sequence>
            <xsd:element name="ref-name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The element ref-name is used to identify this remote ejb
                        reference. This name should be unique in a module and
                        will be used by application as a part of JNDI name for
                        the referenced ejb. The JNDI name used will be
                        "java:/comp/env/ref-name. It should map to the
                        "ejb-ref-name" provided in deployment descriptor.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:choice>
                <xsd:element name="pattern" type="gernaming:patternType">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element pattern is used to provide additional
                            selection criterion for remote ejbs if multiple ejbs
                            with same ejb-link exists in EAR or dependency
                            modules. The pattern mapped should result in single
                            remote EJB.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:group ref="gernaming:corbaNameGroup">
                    <xsd:annotation>
                        <xsd:documentation>
                            Reference to corbaNameGroup defined later in this
                            schema. This group defines the EJB using CORBA as
                            communication protocol.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:group>
                <xsd:element name="ejb-link" type="xsd:string">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element ejb-link is used to identify the remote
                            ejb specified in same EAR or dependency modules.
                            This name should match the ejb-name defined in EJB
                            deployment descriptor. If the name is not unique the
                            pattern element will be used to uniquely identify
                            this remote ejb.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="ejb-local-refType">
        <xsd:sequence>
            <xsd:element name="ref-name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The element ref-name is used to identify this local ejb
                        reference. This name should be unique in a module and
                        will be used by application to as a part of JNDI name
                        for the referenced ejb. The JNDI name used will be
                        "java:/comp/env/ref-name. It should map to the
                        "ejb-ref-name" provided in deployment descriptor.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:choice>
                <xsd:element name="pattern" type="gernaming:patternType">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element pattern is used to provide additional
                            selection criterion for local ejb's if multiple
                            local ejb's with same ejb-link exists in EAR or
                            dependency modules. The pattern mapped should result
                            in single local EJB.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="ejb-link" type="xsd:string">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element ejb-link is used to identify the local
                            ejb specified in same EAR or dependency modules.
                            This name should match the ejb-name defined in EJB
                            deployment descriptor. If the name is not unique the
                            pattern element will be used to uniquely identify
                            this local ejb.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="resource-refType">
        <xsd:sequence>
            <xsd:element name="ref-name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The element ref-name is used to identify this resource
                        reference. This name should be unique in a module and
                        will be used by application to as a part of JNDI name
                        for the referenced resource. The JNDI name used will be
                        "java:/comp/env/ref-name. It should map to the
                        "resource-ref-name" provided in deployment descriptor.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:choice>
                <xsd:element name="pattern" type="gernaming:patternType">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element pattern is used to provide additional
                            selection criterion for resources if multiple
                            resources with same resource-link or URI exists
                            dependency modules. The pattern mapped should result
                            in single resource.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="resource-link" type="xsd:string">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element resource-link is used to identify the
                            JDBC, JMS, or JavaMail resource specified in all the
                            dependency modules. This name should match the
                            connectiondefination-instance/name defined in
                            resource adapter deployment descriptor. If the name
                            is not unique the pattern element will be used to
                            uniquely identify this resource.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="url" type="xsd:string">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element url is used to identify the resources of
                            type java.net.URL deployed in all the dependency
                            modules. If the url doesn't map to unique resource
                            the pattern element will be used to uniquely
                            identify this resource.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="gbean-ref" type="gernaming:gbean-refType"
        substitutionGroup="gernaming:abstract-naming-entry">
        <xsd:annotation>
            <xsd:documentation>
                The element gbean-ref is used to map gbean references to gbeans
                configured outside the current module.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <xsd:complexType name="gbean-refType">
        <xsd:complexContent>
            <xsd:extension base="gernaming:abstract-naming-entryType">
                <xsd:sequence>
                    <xsd:element name="ref-name" type="xsd:string">
                        <xsd:annotation>
                            <xsd:documentation>
                                The element ref-name is used to identify this
                                gbean reference. This name should be unique in a
                                module and will be used by application to as a
                                part of JNDI name for the referenced gbean. The
                                JNDI name used will be "java:/comp/env/ref-name.
                                It should map to the "ref-name" provided in
                                deployment descriptor.
                            </xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="ref-type" type="xsd:string" minOccurs="0"
                        maxOccurs="unbounded">
                        <xsd:annotation>
                            <xsd:documentation>
                                The element ref-type is used to specify the
                                interface implemented by GBean being referenced.
                            </xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:choice minOccurs="0" maxOccurs="unbounded">
                        <xsd:element name="pattern"
                            type="gernaming:patternType">
                            <xsd:annotation>
                                <xsd:documentation>
                                    The element pattern is used to provide
                                    additional selection criterion for gbeans if
                                    multiple gbeans with same name exists in
                                    dependency modules. The pattern mapped
                                    should result in single gbean.
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                    </xsd:choice>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:element name="persistence-unit-ref"
        type="gernaming:persistence-unit-refType"
        substitutionGroup="gernaming:abstract-naming-entry">
        <xsd:annotation>
            <xsd:documentation>
                The element persistence-unit-ref is used to map persistence unit
                references to persistence units configured outside the current
                module.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <xsd:complexType name="persistence-unit-refType">
        <xsd:complexContent>
            <xsd:extension base="gernaming:abstract-naming-entryType">
                <xsd:sequence>
                    <xsd:element name="persistence-unit-ref-name"
                        type="xsd:string">
                        <xsd:annotation>
                            <xsd:documentation>
                                The element persistence-unit-ref-name is used to
                                identify this persistence unit reference. This
                                name should be unique in a module and will be
                                used by application as a part of JNDI name for
                                the referenced persistence unit. The JNDI name
                                used will be "java:/comp/env/ref-name. It should
                                map to the "ref-name" provided in deployment
                                descriptor.
                            </xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:choice>
                        <xsd:element name="persistence-unit-name"
                            type="xsd:string">
                            <xsd:annotation>
                                <xsd:documentation>
                                    The element persistence-unit-name is used to
                                    identify persistence unit specified in any
                                    of the dependency modules. This name should
                                    match the persistence-unit-name defined in
                                    deployment descriptor. If the name is not
                                    unique the pattern element will be used to
                                    uniquely identify this persistence unit.
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="pattern"
                            type="gernaming:patternType">
                            <xsd:annotation>
                                <xsd:documentation>
                                    The element pattern is used to provide
                                    additional selection criterion for
                                    persistence units if multiple persistence
                                    units with same persistence-unit-name exists
                                    in dependency modules. The pattern mapped
                                    should result in single persistence unit.
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                    </xsd:choice>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:element name="persistence-context-ref"
        type="gernaming:persistence-context-refType"
        substitutionGroup="gernaming:abstract-naming-entry">
        <xsd:annotation>
            <xsd:documentation>
                The element entity-manager-factory-ref is used to map
                persistence context references to persistence contexts
                configured outside the current module.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <xsd:complexType name="persistence-context-refType">
        <xsd:complexContent>
            <xsd:extension base="gernaming:abstract-naming-entryType">
                <xsd:sequence>
                    <xsd:element name="persistence-context-ref-name"
                        type="xsd:string">
                        <xsd:annotation>
                            <xsd:documentation>
                                The element ref-name is used to identify this
                                persistence context reference. This name should
                                be unique in a module and will be used by
                                application as a part of JNDI name for the
                                referenced persistence context. The JNDI name
                                used will be "java:/comp/env/ref-name. It should
                                map to the "ref-name" provided in deployment
                                descriptor.
                            </xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:choice>
                        <xsd:element name="persistence-unit-name"
                            type="xsd:string">
                            <xsd:annotation>
                                <xsd:documentation>
                                    The element persistence-unit-name is used to
                                    identify persistence context specified in
                                    any of the dependency modules. This name
                                    should match the persistence-unit-name
                                    defined in deployment descriptor. If the
                                    name is not unique the pattern element will
                                    be used to uniquely identify this
                                    persistence unit.
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="pattern"
                            type="gernaming:patternType">
                            <xsd:annotation>
                                <xsd:documentation>
                                    The element pattern is used to provide
                                    additional selection criterion for
                                    persistence context's if multiple
                                    persistence context's with same
                                    persistence-unit-name exists in dependency
                                    modules. The pattern mapped should result in
                                    single persistence context.
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                    </xsd:choice>
                    <xsd:element name="persistence-context-type"
                        type="gernaming:persistence-context-typeType"
                        minOccurs="0">
                        <xsd:annotation>
                            <xsd:documentation>
                                The element persistence-context-type is used to
                                provide transaction features if persistence
                                context reference. It can have value of
                                transaction-scoped or extended.
                            </xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="property" type="gernaming:propertyType"
                        minOccurs="0" maxOccurs="unbounded">
                        <xsd:annotation>
                            <xsd:documentation>
                                The element property is used to provide vendor
                                specific properties for persistence context
                                reference.
                            </xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:simpleType name="persistence-context-typeType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="Transactional" />
            <xsd:enumeration value="Extended" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="propertyType">
        <xsd:sequence>
            <xsd:element name="key" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The element key provides the key identifying this
                        property.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="value" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The element value provides the value for this property.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>

    <!-- used by openejb cmp datasource specification -->
    <xsd:element name="cmp-connection-factory"
        type="gernaming:resource-locatorType">
        <xsd:annotation>
            <xsd:documentation>
                The element cmp-connection-factory defines the connection pool
                which will be used by CMP entity beans to connect to datasource.
                This element will be used by openejb specifications.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <!-- used by openejb mdb resource adapter specification -->
    <xsd:element name="resource-adapter"
        type="gernaming:resource-locatorType">
        <xsd:annotation>
            <xsd:documentation>
                The element resource-adapter defines the JMS destination which
                will be used by MDB to connect to destination. This element will
                be used by openejb specifications.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <xsd:complexType name="resource-locatorType">
        <xsd:sequence>
            <xsd:choice>
                <xsd:element name="pattern" type="gernaming:patternType">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element pattern is used to provide additional
                            selection criterion for resources if multiple
                            resources with same resource-name exists in
                            dependency modules. The pattern mapped should result
                            in single resource.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="resource-link" type="xsd:string">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element resource-link is used to identify the
                            JDBC, JMS, or JavaMail resource specified in all the
                            dependency modules. This name should match the
                            connectiondefination-instance/name defined in
                            resource adapter deployment descriptor. If the name
                            is not unique the pattern element will be used to
                            uniquely identify this resource.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="url" type="xsd:string">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element url is used to identify the resources of
                            type java.net.URL deployed in all the dependency
                            modules. If the url doesn't map to unique resource
                            the pattern element will be used to uniquely
                            identify this resource.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="resource-env-refType">
        <xsd:sequence>
            <xsd:element name="ref-name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The element ref-name is used to identify this resource
                        reference. This name should be unique in a module and
                        will be used by application as a part of JNDI name for
                        the referenced resource. The JNDI name used will be
                        "java:/comp/env/ref-name. It should map to the
                        "res-ref-name" provided in deployment descriptor.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:choice>
                <xsd:element name="pattern" type="gernaming:patternType">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element pattern is used to provide additional
                            selection criterion for admin object's if multiple
                            admin object's with same admin-object-link exists in
                            dependency modules. The pattern mapped should result
                            in single admin object.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="message-destination-link"
                    type="xsd:string">
                    <xsd:annotation>
                        <xsd:documentation>
                            This element is deprecated and should not be used.
                            Use admin-object-link instead. That is effectively a
                            renamed version of this.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:sequence>
                    <xsd:element name="admin-object-module" type="xsd:string"
                        minOccurs="0" />
                    <xsd:element name="admin-object-link" type="xsd:string">
                        <xsd:annotation>
                            <xsd:documentation>
                                The element admin-object-link is used to
                                identify the admin object resource specified in
                                any of the dependency modules. This name should
                                match the message-definition-name defined in
                                admin object section of deployment descriptor.
                                If the name is not unique the pattern element
                                will be used to uniquely identify this admin
                                object resource.
                            </xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                </xsd:sequence>
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="message-destinationType">
        <xsd:sequence>
            <xsd:element name="message-destination-name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The element message-destination-name is used to identify
                        this message destination reference. This name should be
                        unique in a module and will be used by application to as
                        a part of JNDI name for the message destination. The
                        JNDI name used will be "java:/comp/env/ref-name. It
                        should map to the "message-destination-name" provided in
                        deployment descriptor.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:choice>
                <xsd:element name="pattern" type="gernaming:patternType">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element pattern is used to provide additional
                            selection criterion for JMS destination's if
                            multiple destination's with same admin-object-link
                            exists in dependency modules. The pattern mapped
                            should result in single destination.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:sequence>
                    <xsd:element name="admin-object-module" type="xsd:string"
                        minOccurs="0" />
                    <xsd:element name="admin-object-link" type="xsd:string">
                        <xsd:annotation>
                            <xsd:documentation>
                                The element admin-object-link is used to
                                identify the admin object resource specified in
                                any of the dependency modules. This name should
                                match the message-definition-name defined in
                                admin object section of deployment descriptor.
                                If the name is not unique the pattern element
                                will be used to uniquely identify this admin
                                object resource.
                            </xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                </xsd:sequence>
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>

    <!-- used by resource adapter -->
    <xsd:element name="workmanager" type="gernaming:gbean-locatorType">
        <xsd:annotation>
            <xsd:documentation>
                The element workmanager defines the work manager implementation
                used by resource adapter. This element will be used by resource
                adapter plan.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <!-- used by web apps/builders -->
    <xsd:element name="web-container" type="gernaming:gbean-locatorType">
        <xsd:annotation>
            <xsd:documentation>
                The element web-container defines the binding between web
                application and web container instance. It specifies which
                container application should be deployed to.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <xsd:complexType name="gbean-locatorType">
        <xsd:sequence>
            <xsd:choice>
                <xsd:element name="pattern" type="gernaming:patternType">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element pattern is used to provide additional
                            selection criterion for gbean's if multiple gbean's
                            with same name exists in dependency modules. The
                            pattern mapped should result in single gbean.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="gbean-link" type="xsd:string">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element gbean-link is used to identify the gbean
                            deployed in any of the dependency modules. This name
                            should match the gbean-name defined in deployment
                            plane. If the name is not unique the pattern element
                            will be used to uniquely identify this gbean.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="patternType">
        <xsd:sequence>
            <xsd:element name="groupId" type="xsd:string" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>
                        The name for group containing module to match. By
                        default is it considered wild card '*'.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="artifactId" type="xsd:string" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>
                        The name for module in a specified group to be matched.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="version" type="xsd:string" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>
                        The version number for the module formatted by dot
                        separated numbers. If no version is provided it will be
                        defaulted latest available version matching other
                        criterions.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="module" type="xsd:string" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>
                        The value specified here should match the file name of
                        the module referenced.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The name element to identify the referenced GBean by
                        name.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:group name="serverGroup">
        <xsd:annotation>
            <xsd:documentation>
                This group contains the protocol, address, and port for a server
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="protocol" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The protocol element is used to specify the network
                        protocol used for connection. This could be http or
                        https.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="host" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The host element is used to specify the network host to
                        connect.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="port" type="xsd:int">
                <xsd:annotation>
                    <xsd:documentation>
                        The port element is used to specify the network port to
                        connect.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:group>

    <xsd:complexType name="portType">
        <xsd:sequence>
            <xsd:element name="port-name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The port-name element provides the name to identify the
                        port to connect.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:group ref="gernaming:serverGroup" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>
                        Reference to serverGroup defined later in this schema.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:group>
            <xsd:element name="uri" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The uri element provides the path to particular resource
                        once connection is established.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="credentials-name" type="xsd:string"
                minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>
                        The credentials-name element provides the credentials
                        name to identify the credentials used for secure
                        connections.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="property" type="gernaming:portPropertyType" 
                         minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="portPropertyType">
        <xsd:simpleContent>
            <xsd:extension base="xsd:string">
                <xsd:attribute name="name" type="xsd:string" use="required"/>
            </xsd:extension>
         </xsd:simpleContent>    
    </xsd:complexType>
    
    <xsd:complexType name="service-refType">
        <xsd:sequence>
            <xsd:element name="service-ref-name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The element service-ref-name is used to identify this
                        service reference. This name should be unique in a
                        module and will be used by application to as a part of
                        JNDI name for the web service. The JNDI name used will
                        be "java:/comp/env/ref-name. It should map to the
                        "service-ref-name" provided in service-ref of deployment
                        descriptor.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:choice>
                <xsd:element name="service-completion"
                    type="gernaming:service-completionType">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element service-completion is used to provide
                            missing information for web service. If this element
                            doesn't exist all the information should be
                            available in WSDL.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="port" type="gernaming:portType"
                    maxOccurs="unbounded">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element port defines the ports available though
                            service reference. If this element doesn't exist the
                            port information should be available in WSDL.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="service-completionType">
        <xsd:sequence>
            <xsd:element name="service-name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The element service-name provides the name of the
                        service missing in service block of WSDL.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="port-completion"
                type="gernaming:port-completionType" maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>
                        The element port-completion provides the port
                        information missing in WSDL.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="port-completionType">
        <xsd:sequence>
            <xsd:element name="port" type="gernaming:portType">
                <xsd:annotation>
                    <xsd:documentation>
                        The element port provides the port used for web services
                        connection.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="binding-name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The element binding-name is used to provide the name for
                        binding for a port and URL.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:group name="corbaNameGroup">
        <xsd:annotation>
            <xsd:documentation>
                This group contains the location of the CORBA name server, the
                name, and the client security server used to make interop calls.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="ns-corbaloc" type="xsd:anyURI">
                <xsd:annotation>
                    <xsd:documentation>
                        The corbaloc used to access the CORBA name server.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        The name of the object in the name server.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:choice>
                <xsd:element name="css" type="gernaming:patternType">
                    <xsd:annotation>
                        <xsd:documentation>
                            The element css provides the gbean name to identify
                            the client security service used.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="css-link" type="xsd:string">
                    <xsd:annotation>
                        <xsd:documentation>
                            The css-link identify the client security service by
                            its name.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:choice>
        </xsd:sequence>
    </xsd:group>

</xsd:schema>
