<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Artifactory is a binaries repository manager.
  ~ Copyright (C) 2010 JFrog Ltd.
  ~
  ~ Artifactory is free software: you can redistribute it and/or modify
  ~ it under the terms of the GNU Lesser General Public License as published by
  ~ the Free Software Foundation, either version 3 of the License, or
  ~ (at your option) any later version.
  ~
  ~ Artifactory is distributed in the hope that it will be useful,
  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  ~ GNU Lesser General Public License for more details.
  ~
  ~ You should have received a copy of the GNU Lesser General Public License
  ~ along with Artifactory.  If not, see <http://www.gnu.org/licenses/>.
  -->

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"
           targetNamespace="http://artifactory.jfrog.org/xsd/1.4.5"
           xmlns="http://artifactory.jfrog.org/xsd/1.4.5"
           elementFormDefault="qualified">

    <xs:element name="config" type="CentralConfigType"/>

    <xs:complexType name="CentralConfigType">
        <xs:sequence>
            <xs:element name="serverName" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        A name uniquely identifying this artifactory server instance across the network.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="offlineMode" type="xs:boolean" default="false" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        If set to true, Artifactory will never try to fetch artifacts remotely.
                        Only cached and local artifacts will be served.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="fileUploadMaxSizeMb" type="xs:int" default="100" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        The maximum size in megabytes for uploaded artifact files. Set to '0' for unlimited size.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="dateFormat" type="xs:string" default="dd-MM-yy HH:mm:ss z" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        The format used for displaying dates.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="addons" type="AddonsType" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Addons related configuration.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="mailServer" type="MailServerType" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Mail server related configuration.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="security" type="SecurityType" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Security related configuration used in authentication and authorization.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="backups" type="BackupsType" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        A set of backup configurations.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="indexer" type="IndexerType" minOccurs="0"/>
            <xs:element name="localRepositories" type="LocalRepositoriesType">
                <xs:annotation>
                    <xs:documentation source="description">
                        A set of locally installed repositories.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="remoteRepositories" type="RemoteRepositoriesType" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        A set of remote proxied (normally cached) repositories.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="virtualRepositories" type="VirtualRepositoriesType" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        A set of virtual repositories wrapping regular local and remote
                        repositories.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="proxies" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        A set of reusable proxy definitions. Proxies can be used by remote repositories by assocating a
                        proxy definition with a remote repository.
                    </xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="proxy" type="ProxyType" maxOccurs="unbounded" minOccurs="0"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="propertySets" type="PropertySetsType" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Define property sets to group together properties of the same category (e.g. QA). Then, define
                        properties and their respective possible values (e.g. performance:{poor,acceptable,good} and
                        qaStaffComment:[any]).
                        Once property sets and their properties are defined, you may associate them with repositories,
                        in order to be able to easily set, update and search for predefined property values on hosted
                        repository items.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="urlBase" type="xs:string" default="" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        A hard-coded URL prefix used by Artifactory for calculating relative URLs.
                        Use this only if you need to override the default URL base (equals to the Servlet context URL
                        - e.g. http://myhost.com/artifactory).
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="logo" type="xs:string" default="" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        A remote URL of a logo image.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="footer" type="xs:string" default="" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Additional custom text to appear on the page footer.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="LocalRepositoriesType">
        <xs:sequence>
            <xs:element name="localRepository" type="LocalRepoType" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="LocalRepoType">
        <xs:complexContent>
            <xs:extension base="RealRepoType">
                <xs:sequence>
                    <xs:element name="snapshotVersionBehavior" default="non-unique" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Whether to use time-based version numbers for the name of SNAPSHOTs,
                                or to use a non-unique, self-overriding naming pattern of
                                artifactId-version-SNAPSHOT.type (the default), or to respect the
                                deployer settings coming from the Maven client.
                            </xs:documentation>
                        </xs:annotation>
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="deployer"/>
                                <xs:enumeration value="non-unique"/>
                                <xs:enumeration value="unique"/>
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                    <xs:element name="localRepoChecksumPolicyType" default="client-checksums" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Checksum policy determines how Artifactory behaves when a client checksum for a deployed
                                resource is missing or conflicts with the locally calculated checksum (bad checksum).
                                Checksum checking effectively verifies the integrity of the deployed resource.
                                The options are:
                                (1) Verify against client checksums (default) - Until a client has sent a valid checksum
                                for a deployed artifact that matches the server's locally calculated checksum, the
                                artifact will not be available and will return 404 (not found). If the client has sent a
                                checksum that conflicts with the one calculated on the server a 409 (conflict) will be
                                returned until a valid checksum is deployed.
                                (2) Trust server generated checksums - Do not verify against checksums sent by clients
                                and trust the ones store server's locally calculated checksums. An uploaded artifact
                                will be available for consumption immediately, but integrity might be compromised.
                            </xs:documentation>
                        </xs:annotation>
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="client-checksums"/>
                                <xs:enumeration value="server-generated-checksums"/>
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="RealRepoType" abstract="true">
        <xs:complexContent>
            <xs:extension base="RepoType">
                <xs:sequence>
                    <xs:element name="blackedOut" type="xs:boolean" default="false" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Whether the repository is blacked-out. A blacked-out repository does not
                                participate in artifact resolution, nor does its local cache.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="handleReleases" type="xs:boolean" default="true" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Whether the repository handles release artifacts.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="handleSnapshots" type="xs:boolean" default="true" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Whether the repository handles snapshot artifacts.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="maxUniqueSnapshots" type="xs:int" default="0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                The maximum number unique snapshots (of the same artifact) to store.
                                Any number of snapshots above the max will be automatically removed by age.
                                A value of 0 (the default) means no limits on unique snapshots number (thus
                                no automatic cleanup).
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="suppressPomConsistencyChecks" type="xs:boolean" default="false" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Whether the repository should suppress pom consistency checks.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="propertySets" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                The property sets that users will be able to use of items hosted under this repository.
                                As property sets are purely assistive and not enforcing, setting this on a repository
                                only affects the list of predefined properties in the user interface properties tab for
                                items under the repository. You will still be able to attach arbitrary properties to
                                repository items.
                            </xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="propertySetRef" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded">
                                    <xs:annotation>
                                        <xs:documentation source="description">
                                            A property set usable by this repository.
                                        </xs:documentation>
                                    </xs:annotation>
                                </xs:element>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="RepoType" abstract="true">
        <xs:sequence>
            <xs:element name="key" type="xs:ID">
                <xs:annotation>
                    <xs:documentation source="description">
                        Repository unique id.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="description" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Textual description of the repository.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="notes" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Optional notes about this repository.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="type" default="maven2" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        The type of the repository, which normally also reflects on its layout and behavior.
                    </xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="maven2"/>
                        <xs:enumeration value="maven1"/>
                        <xs:enumeration value="obr"/>
                        <xs:enumeration value="raw"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="includesPattern" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Comma-separated list of artifact patterns to include when evaluating
                        artifact requests, in the form of x/y/**/z/*. When used, only requests
                        matching one the include patterns will be served.
                        By default all artifacts are included (**/*).
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="excludesPattern" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Comma-separated list of artifact patterns to exclude when evaluating
                        artifact requests, in the form of x/y/**/z/*.
                        By default no artifacts are excluded.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="RemoteRepositoriesType">
        <xs:sequence>
            <xs:element name="remoteRepository" type="RemoteRepoType"
                        minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="RemoteRepoType">
        <xs:complexContent>
            <xs:extension base="RemoteRepoBaseType">
                <xs:sequence>
                    <xs:element name="username" type="xs:string" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                HTTP authentication username.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="password" type="xs:string" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                HTTP authentication password.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="socketTimeoutMillis" type="xs:int" default="15000"
                                minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Network timeout in milliseconds to use both for connection
                                establishment and for unanswered requests.
                                Timing out on a network operation is considered as a retrieval
                                failure.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="localAddress" type="xs:string" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                The local address to be used when creating connections.
                                Useful for specifying the interface to use on multi-homed systems.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="proxyRef" type="xs:IDREF" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Network proxy reference.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="RemoteRepoBaseType" abstract="true">
        <xs:complexContent>
            <xs:extension base="RealRepoType">
                <xs:sequence>
                    <xs:element name="url" type="xs:string">
                        <xs:annotation>
                            <xs:documentation source="description">
                                The url for the remote repository. Currently only HTTP urls are
                                supported.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="offline" type="xs:boolean" default="false" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                When set to true only already-cached artifacts will be retrieved and
                                fetching remote artifacts will not be attempted.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="hardFail" type="xs:boolean" default="false" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Whether failing to communicate with this repository will return an
                                error to the client that will fail the build.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="storeArtifactsLocally" type="xs:boolean" default="true" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Whether the repository should store cached artifacts locally or not. When not storing
                                artifacts locally direct repository-to-client streaming is used. This can be useful for
                                multi-server setups over a high-speed LAN, with one Artifactory caching certain data
                                on a central storage and streaming it directly to satellite pass-though Artifactory
                                servers.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="fetchJarsEagerly" type="xs:boolean" default="true" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                When selected, the repository will attempt to eagerly fetch the jar in the background
                                each time a pom is requested.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="fetchSourcesEagerly" type="xs:boolean" default="true" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                When selected, the repository will attempt to eagerly fetch the source jar in the
                                background each time a jar is requested.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="retrievalCachePeriodSecs" type="xs:long" default="43200" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                The number of seconds to cache artifact lookup results.
                                A value of 0 means no caching.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="failedRetrievalCachePeriodSecs" type="xs:long" default="30" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                The number of seconds to cache artifact retrieval failures
                                (resulting in comm. errors).
                                A value of 0 means no caching.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="missedRetrievalCachePeriodSecs" type="xs:long" default="7200" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                The number of seconds to cache artifact retrieval misses (artifact
                                not found).
                                A value of 0 means no caching.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="remoteRepoChecksumPolicyType" default="generate-if-absent" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Checksum policy determines how Artifactory behaves when a checksum for a remote resource
                                is missing or conflicts with the locally calculated checksum (bad checksum).
                                Checksum checking effectively verifies the integrity of the remote resource.
                                The options are:
                                (1) Generate if absent (the default) - A bad remote checksum will fail the resource
                                request. If, however, a remote checksum could not be found Artifactory will
                                automatically generate one.
                                (2) Fail: A bad or missing remote checksum will fail the resource request.
                                (3) Ignore and generate: Artifactory will locally generate a checksum for both bad or
                                missing remote checksum. Remote resource retrieval will never fail, but integrity might
                                be compromised.
                                (4) Pass-thru: Artifactory will store and pass-thorugh all remote checksums including
                                bad ones and will locally generate a checksum for a missing remote checksum cannot be
                                found. Remote resource retrieval will never fail, but integrity might be compromised and
                                client-side checksum validation (such as the one done by Maven) will fail.
                            </xs:documentation>
                        </xs:annotation>
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="generate-if-absent"/>
                                <xs:enumeration value="fail"/>
                                <xs:enumeration value="ignore-and-generate"/>
                                <xs:enumeration value="pass-thru"/>
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                    <xs:element name="unusedArtifactsCleanupEnabled" type="xs:boolean" default="false" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Whether or not to enable automatic cleanup of cached artifacts that were not used for
                                over a predefined period of time.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="unusedArtifactsCleanupPeriodHours" type="xs:int" default="0" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                The numbers of hours to wait before an artifact is deemed "unused" and eligible for
                                cleanup from the repository.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="shareConfiguration" type="xs:boolean" default="false" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Whether or not the configuration details of this remote repository can be publicly
                                shared with remote clients, such as other Artifactory servers.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="synchronizeProperties" type="xs:boolean" default="false" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Whether to synchronize properties of artifacts retrieved from a remote instance of
                                Artifactory.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="VirtualRepositoriesType">
        <xs:sequence>
            <xs:element name="virtualRepository" type="VirtualRepoType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="VirtualRepoType">
        <xs:complexContent>
            <xs:extension base="RepoType">
                <xs:sequence>
                    <xs:element name="artifactoryRequestsCanRetrieveRemoteArtifacts" type="xs:boolean" minOccurs="0"
                                default="false">
                        <xs:annotation>
                            <xs:documentation source="description">
                                Determines whether artifact requests coming from other Artifactories
                                can be fulfilled by accessing this virtual repository's remote repositories
                                or by only accessing its caches (the default).
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="repositories" type="RepositoryRefsType" maxOccurs="1" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                A set of local and remote repository references to include in a
                                virtual repository.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="keyPair" type="xs:string" minOccurs="0" maxOccurs="1">
                        <xs:annotation>
                            <xs:documentation source="description">
                                A named key-pair to use for automatically signing artifacts.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="pomRepositoryReferencesCleanupPolicy" default="discard_active_reference"
                                minOccurs="0">
                        <xs:annotation>
                            <xs:documentation source="description">
                                (1) Discard Active References - Will removes repository elements that are declared
                                directly
                                under project or under a profile in the same pom that is activeByDefault.
                                (2)Discard Any References - Will removes all repository elements regardless of whether
                                they are
                                included in an active profile or not.
                                (3)Nothing - Don't removes any repository elements declared in the POM.
                            </xs:documentation>
                        </xs:annotation>
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="discard_active_reference"/>
                                <xs:enumeration value="discard_any_reference"/>
                                <xs:enumeration value="nothing"/>
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="RepositoryRefsType">
        <xs:sequence>
            <xs:element name="repositoryRef" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation source="description">
                        Local, remote or virtual repository reference (key).
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ProxyType">
        <xs:sequence>
            <xs:element name="key" type="xs:ID">
                <xs:annotation>
                    <xs:documentation source="description">
                        Proxy unique id.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="host" type="xs:string">
                <xs:annotation>
                    <xs:documentation source="description">
                        Proxy host.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="port" type="xs:int">
                <xs:annotation>
                    <xs:documentation source="description">
                        Proxy port number.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="username" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Proxy username.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="password" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Proxy password.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="ntHost" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        The computer name of this machine (the one connecting to the NTLM proxy).
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="domain" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Proxy domain/realm name.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="defaultProxy" type="xs:boolean" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Make this proxy the default for new remote repositories and for internal HTTP requests.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="BackupsType">
        <xs:sequence>
            <xs:element name="backup" type="BackupType" maxOccurs="unbounded" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="BackupType">
        <xs:sequence>
            <xs:element name="key" type="xs:ID">
                <xs:annotation>
                    <xs:documentation source="description">
                        Backup unique id.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="enabled" type="xs:boolean" minOccurs="0" default="true">
                <xs:annotation>
                    <xs:documentation source="description">
                        Determines whether this backup is enabled or disabled.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="dir" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        The directory to which backup local repository data as files.
                        The default is $ARTIFACTORY_HOME/backup/[backup_key]
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="cronExp" type="xs:string">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        The cron expression by which backup frequency is determined.  <a href="http://www.opensymphony.com/quartz/wikidocs/TutorialLesson6.html" target="_blank">More Info...</a>
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="retentionPeriodHours" type="xs:int" default="168" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        The maximum number of hours to keep old backups in the destination dir.
                        Checking the "Incremental" checkbox, means that backups will be incrementally (delta only)
                        written to the same directory: ${backupDir}/current. This "in place" backup type is suitable
                        for file-system based backup support, and cleanup of old backups is inactive in this mode.
                        The default is 168 hours = 7 days.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="createArchive" type="xs:boolean" minOccurs="0" default="false">
                <xs:annotation>
                    <xs:documentation source="description">
                        Determines whether the backup output should be a zip archive or a
                        directory (the default).
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="excludedRepositories" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        A set of repository references to exclude from backup.
                    </xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="repositoryRef" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded">
                            <xs:annotation>
                                <xs:documentation source="description">
                                    Local or remote repository reference (key).
                                </xs:documentation>
                            </xs:annotation>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="sendMailOnError" type="xs:boolean" minOccurs="0" default="true">
                <xs:annotation>
                    <xs:documentation source="description">
                        Send email notifications to admin users if errors were encountered during the backup process
                        (requires properly configured email settings and valid email addresses for admin users).
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="IndexerType">
        <xs:annotation>
            <xs:documentation source="description">
                Configuration for the indexer creating (Nexus) indexes downloadable by IDEs.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="enabled" type="xs:boolean" default="false" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Determines whether the indexer service is enabled and should be run.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="indexingIntervalHours" type="xs:int" default="24" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        The indexing frequency, in hours, at which to recalculate new Nexus indexes on selected
                        repositories.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:element name="excludedRepositories" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        A set of repository references to exclude from indexing.
                    </xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="repositoryRef" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded">
                            <xs:annotation>
                                <xs:documentation source="description">
                                    Repository reference (key).
                                </xs:documentation>
                            </xs:annotation>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="AddonsType">
        <xs:sequence>
            <xs:element name="showAddonsInfo" type="xs:boolean" minOccurs="0" maxOccurs="1" default="true">
                <xs:annotation>
                    <xs:documentation source="description">
                        When selected, info about available add-ons will show up in the Artifactory user interface.
                        Enabling add-ons info display will reset any user-specific info-hiding preference.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="showAddonsInfoCookie" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        A variable used for calculating the path for a user cookie storing his personal add-on
                        info showing preferences.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="MailServerType">
        <xs:sequence>
            <xs:element name="host" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        The host name of the mail server.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="port" type="xs:int" default="25" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        The mail server's port.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="username" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        The authentication username.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="password" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        The authentication password.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="from" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        The "from" address header to use in all outgoing mails. Can be left blank.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="subjectPrefix" type="xs:string" minOccurs="0" default="[Artifactory]">
                <xs:annotation>
                    <xs:documentation source="description">
                        A prefix to use for the subject of all outgoing mails.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="tls" type="xs:boolean" minOccurs="0" default="false">
                <xs:annotation>
                    <xs:documentation source="description">
                        Determines whether to use transport layer security when connecting to the mail server.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="ssl" type="xs:boolean" minOccurs="0" default="false">
                <xs:annotation>
                    <xs:documentation source="description">
                        Determines whether to use SSL when connecting to the mail server.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="SecurityType">
        <xs:sequence>
            <xs:element name="anonAccessEnabled" type="xs:boolean" minOccurs="0" default="true">
                <xs:annotation>
                    <xs:documentation source="description">
                        Determines whether anonymous access to the repository and the UI is permitted.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="hideUnauthorizedResources" type="xs:boolean" minOccurs="0" default="false">
                <xs:annotation>
                    <xs:documentation source="description">
                        When checked, Artifactory will hide the existence of unauthorized resources by sending a 404
                        response (not found) to requests for resources that are not accessible by the user. Otherwise,
                        the response will imply that the resource exists but is protected - by requesting authentication
                        for anonymous requests (401) or by denying an authenticated request for unauthorized users.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="passwordSettings" type="PasswordSettingsType" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        Password policy settings (credentials encryption etc.).
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="ldapSettings" type="LdapSettingsType" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        Security settings specific to LDAP.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="ldapGroupSettings" type="LdapGroupSettingsType" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        Security settings specific to LDAP Groups.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="httpSsoSettings" type="HttpSsoSettingsType" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        Security settings specific to HTTP SSO.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="crowdSettings" type="CrowdSettingsType" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        Security settings specific to Atlassian Crowd.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PasswordSettingsType">
        <xs:sequence>
            <xs:element name="encryptionPolicy" default="supported" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        Determines the password requirements from users identified to Artifactory from a remote
                        client, such as Maven.
                        The options are:
                        (1) Supported (the default) - Users can authenticate using both secure encrypted
                        passwords or clear-text passwords.
                        (2) Required: Users need to authenticate using secure encrypted passwords. Clear-text
                        authentication will fail.
                        (3) Unsupported: Only clear-text passwords can be used for authentication.
                    </xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="supported"/>
                        <xs:enumeration value="required"/>
                        <xs:enumeration value="unsupported"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="HttpSsoSettingsType">
        <xs:sequence>
            <xs:element name="httpSsoProxied" type="xs:boolean" minOccurs="0" default="false">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                                When checked, Artifactory will trust incoming requests and will reuse the remote user originally set on the
request by the SSO of the HTTP server.

This is extremely useful if you wish to use exiting enterprise SSO integrations, such as the powerful authentication
schemes provided by Apache (mod_auth_ldap, mod_auth_ntlm, mod_auth_kerb, etc.).

When Artifactory is deployed as a webapp on Tomcat behind Apache:
If using mod_proxy_ajp, make sure to set tomcatAuthentication="false" on the AJP connector.
If using mod_jk, make sure to use the "JkEnvVar REMOTE_USER" directive in Apache's config.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="noAutoUserCreation" type="xs:boolean" minOccurs="0" default="false">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        When automatic user creation is off, authenticated users will not be automatically created
                        inside Artifactory. Instead, for every request from a SSO user, the user will be temporarily
                        associated with default groups (if such groups are defined), and the permissions for these
                        groups will apply.
                        Without auto user creation, you will need to manually create the user inside Artifactory in
                        order to manage user permissions that are not attached to his default groups.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="remoteUserRequestVariable" type="xs:string" minOccurs="0" default="REMOTE_USER">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                                The name of the HTTP request variable to use for extracting the user identity.
                                Default is: REMOTE_USER.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="CrowdSettingsType">
        <xs:sequence>
            <xs:element name="enableIntegration" type="xs:boolean" minOccurs="0" default="false">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                                Enable security integration with Atlassian Crowd.
                                ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="serverUrl" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                                The full URL of the Crowd server to use.
                                ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="applicationName" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                                The application name that was configured for Artifactory in Crowd.
                                ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                                The application password that was configured for Artifactory in Crowd.
                                ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="sessionValidationInterval" type="xs:long" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                                The time window in which the session does not need to be revalidated.
                                ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="useDefaultProxy" type="xs:boolean" minOccurs="0" default="false">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        If true, and a default proxy definition exists, it will be used to pass through to the Crowd Server.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="noAutoUserCreation" type="xs:boolean" minOccurs="0" default="false">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        When automatic user creation is off, authenticated users will not be automatically created
                        inside Artifactory. Instead, for every request from a Crowd user, the user will be temporarily
                        associated with default groups (if such groups are defined), and the permissions for these
                        groups will apply.
                        Without auto user creation, you will need to manually create the user inside Artifactory in
                        order to manage user permissions that are not attached to his default groups.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="LdapSettingsType">
        <xs:sequence>
            <xs:element name="ldapSetting" type="LdapSettingType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="LdapGroupSettingsType">
        <xs:sequence>
            <xs:element name="ldapGroupSetting" type="LdapGroupSettingType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="LdapSettingType">
        <xs:sequence>
            <xs:element name="key" type="xs:ID">
                <xs:annotation>
                    <xs:documentation source="description">
                        Ldap setting unique id.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="enabled" type="xs:boolean" minOccurs="0" default="true">
                <xs:annotation>
                    <xs:documentation source="description">
                        Determines whether this ldap is enabled or disabled.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="ldapUrl" type="xs:string" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        Location of the ldap server in the form of:
                        ldap://myserver:myport/dc=sampledomain,dc=com
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="userDnPattern" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        A DN pattern that can be used to directly login users to LDAP.
                        This pattern is used for creating a DN string for 'direct' user
                        authentication, where the pattern is relative to the base DN in the ldapUrl.
                        The pattern argument {0} will be replaced with the username.
                        This will work only if anonymous binding is allowed and a direct user DN can
                        be used, which is not the default case for Active Directory (use User DN
                        search filter instead).
                        Example: uid={0},ou=People
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="search" type="SearchType" minOccurs="0" maxOccurs="1"/>
            <xs:element name="autoCreateUser" type="xs:boolean" minOccurs="0" default="true">
                <xs:annotation>
                    <xs:documentation source="description">
                        Determines whether users should be auto-created when using LDAP, otherwise they are transient
                        and associated with auto-join groups defined in Artifactory.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="LdapGroupSettingType">
        <xs:sequence>
            <xs:element name="name" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        Ldap group setting search base.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="groupBaseDn" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        Ldap group setting search base.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="groupNameAttribute" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        The Group name attribute.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="groupMemberAttribute" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        The group member attribute
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="subTree" type="xs:boolean" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        Flag whether to check the full subtree when searching
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="filter" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        The filter to search in the group
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="descriptionAttribute" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        The group description
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="strategy" default="STATIC" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        The group description
                    </xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="HIERARCHICAL"/>
                        <xs:enumeration value="STATIC"/>
                        <xs:enumeration value="DYNAMIC"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="enabledLdap" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        A reference to the LDAP setting to retrieve this group.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="SearchType">
        <xs:annotation>
            <xs:documentation source="description">
                <![CDATA[
                An authentication pattern can include either a userDnPattern for "direct"
                authentication or searchFilter for user "search" (after binding with a manager DN)
                and then authentication of the found user.
                The managerDn and managerPassword are not used for "direct" DN authentication.
                ]]>
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="searchFilter" type="xs:string" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        A filter expression used to search for the user DN that will be used in LDAP
                        authentication.
                        This is a LDAP search filter (as defined in 'RFC 2254') with optional
                        arguments. In this case, the username is the only argument, denoted by '{0}'.
                        Possible examples are:
                        (uid={0}) - this would search for a username match on the uid attribute.
                        Authentication to LDAP will be done from the DN found if successful.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="searchBase" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        Context name to search in, relative to the base DN in the ldapUrl.
                        This parameter is optional.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="searchSubTree" type="xs:boolean" minOccurs="0" maxOccurs="1" default="true">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        Enables deep search through the sub tree of the ldapUrl + searchBase. True by default.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="managerDn" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        Used only with "search" authentication method.
                        It is the DN of the user who will bind to the LDAP server to perform the search.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="managerPassword" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation source="description">
                        <![CDATA[
                        Used only with "search" authentication method.
                        It is the password of the user who will bind to the LDAP server to perform the search.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PropertySetsType">
        <xs:sequence>
            <xs:element name="propertySet" type="PropertySetType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PropertySetType">
        <xs:sequence>
            <xs:element name="name" type="xs:ID">
                <xs:annotation>
                    <xs:documentation source="description">
                        A unique name identifying the property set.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="visible" type="xs:boolean">
                <xs:annotation>
                    <xs:documentation source="description">
                        Whether this property set will be visible in the properties management user interface, or is
                        intended for internal use.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="properties" type="PropertiesType" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        The list of properties grouped under this property set.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PropertiesType">
        <xs:sequence>
            <xs:element name="property" type="PropertyType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PropertyType">
        <xs:sequence>
            <xs:element name="name" type="xs:string">
                <xs:annotation>
                    <xs:documentation source="description">
                        A unique name identifying the property.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="closedPredefinedValues" type="xs:boolean">
                <xs:annotation>
                    <xs:documentation source="description">
                        Whether the values of the property should come from a predefined closed list of values.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="multipleChoice" type="xs:boolean">
                <xs:annotation>
                    <xs:documentation source="description">
                        Whether the property supports multiple values.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="predefinedValues" type="PredefinedValuesType" minOccurs="0">
                <xs:annotation>
                    <xs:documentation source="description">
                        A list of predefined values to select from for the property value(s).
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PredefinedValuesType">
        <xs:sequence>
            <xs:element name="predefinedValue" type="PredefinedValueType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PredefinedValueType">
        <xs:sequence>
            <xs:element name="value" type="xs:string">
                <xs:annotation>
                    <xs:documentation source="description">
                        The actual value.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="defaultValue" type="xs:boolean">
                <xs:annotation>
                    <xs:documentation source="description">
                        Whether or not this value is a default/pre-selected one (multiple choice properties support
                        multiple default values).
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>