<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://xml.sandre.eaufrance.fr/scenario/metadonnees/1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" targetNamespace="http://xml.sandre.eaufrance.fr/scenario/metadonnees/1" elementFormDefault="qualified" attributeFormDefault="unqualified" finalDefault="" blockDefault="">
    <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="19139_FR/xlink/xlinks.xsd"/>
    <xs:element name="SandreMetadata_Capabilities" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Retourne la liste des métadonnées suite à une requête GetCapabilities.</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="Service" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="Capability" minOccurs="1" maxOccurs="1" nillable="false"/>
            </xs:sequence>
            <xs:attribute name="version" type="xs:string" fixed="1.0.0" use="optional"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="Name" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="LayerName" type="xs:string" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Le code de la couche connue par le service.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="Title" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="Abstract" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="KeywordList" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Liste de mots clés</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="Keyword" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Keyword" type="xs:string" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Un mot clé</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="OnlineResource" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Une adresse URL HTTP. L'URL est placée dans un attribut xlink:href, et la valeur "simple" est placées dans l'attribut xlink:type.</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:attributeGroup ref="xlink:simpleLink"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="Format" type="xs:string" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Format MIME.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="Service" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Service Sandre:Metadata.</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element name="Name" minOccurs="1" maxOccurs="1" nillable="false">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="Sandre:Metadata"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element ref="Title" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="Abstract" minOccurs="0" maxOccurs="1" nillable="false"/>
                <xs:element ref="KeywordList" minOccurs="0" maxOccurs="1" nillable="false"/>
                <xs:element ref="OnlineResource" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="ContactInformation" minOccurs="0" maxOccurs="1" nillable="false"/>
                <xs:element ref="Fees" minOccurs="0" maxOccurs="1" nillable="false"/>
                <xs:element ref="AccessConstraints" minOccurs="0" maxOccurs="1" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ContactInformation" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Un contact pour obtenir des informations sur le service.</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="ContactPersonPrimary" minOccurs="0" maxOccurs="1" nillable="false"/>
                <xs:element ref="ContactPosition" minOccurs="0" maxOccurs="1" nillable="false"/>
                <xs:element ref="ContactAddress" minOccurs="0" maxOccurs="1" nillable="false"/>
                <xs:element ref="ContactVoiceTelephone" minOccurs="0" maxOccurs="1" nillable="false"/>
                <xs:element ref="ContactFacsimileTelephone" minOccurs="0" maxOccurs="1" nillable="false"/>
                <xs:element ref="ContactElectronicMailAddress" minOccurs="0" maxOccurs="1" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ContactPersonPrimary" nillable="false" abstract="false">
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="ContactPerson" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="ContactOrganization" minOccurs="1" maxOccurs="1" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ContactPerson" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="ContactOrganization" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="ContactPosition" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="ContactAddress" nillable="false" abstract="false">
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="AddressType" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="Address" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="City" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="StateOrProvince" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="PostCode" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="Country" minOccurs="1" maxOccurs="1" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="AddressType" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="Address" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="City" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="StateOrProvince" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="PostCode" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="Country" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="ContactVoiceTelephone" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="ContactFacsimileTelephone" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="ContactElectronicMailAddress" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="Fees" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="AccessConstraints" type="xs:string" nillable="false" abstract="false"/>
    <xs:element name="Capability" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Une liste des fonctions disponibles au niveau de ce service.</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="Request" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="Exception" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="Layers" minOccurs="0" maxOccurs="1" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Request" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Requêtes disponibles au niveau du service</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="GetCapabilities" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="GetMetaDataSandre" minOccurs="1" maxOccurs="1" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="GetCapabilities" type="OperationType" nillable="false" abstract="false"/>
    <xs:element name="GetMetaDataSandre" type="OperationType" nillable="false" abstract="false"/>
    <xs:complexType name="OperationType" mixed="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Pour chaque opération, indiquer le format de sortie et l'URI</xs:documentation>
        </xs:annotation>
        <xs:sequence minOccurs="1" maxOccurs="1">
            <xs:element ref="Format" maxOccurs="unbounded" minOccurs="1" nillable="false"/>
            <xs:element ref="DCPType" maxOccurs="unbounded" minOccurs="1" nillable="false"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="DCPType" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Distributed Computing Platforms (DCPs) disponibles. Seules les méthodes HTTP post et get sont définies.</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="HTTP" minOccurs="1" maxOccurs="1" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="HTTP" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Méthodes HTTP supportées.  Au moins "Get".</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="Get" minOccurs="1" maxOccurs="1" nillable="false"/>
                <xs:element ref="Post" minOccurs="0" maxOccurs="1" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Get" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Le préfixe de l'URL pour HTTP "Get".</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="OnlineResource" minOccurs="1" maxOccurs="1" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Post" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Le préfixe de l'URL pour HTTP "Post".</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="OnlineResource" minOccurs="1" maxOccurs="1" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Exception" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Format pour les exceptions</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="Format" maxOccurs="unbounded" minOccurs="1" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Layers" nillable="false" abstract="false">
        <xs:annotation>
            <xs:documentation>Liste des couches disponibles.</xs:documentation>
        </xs:annotation>
        <xs:complexType mixed="false">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="LayerName" maxOccurs="unbounded" minOccurs="1" nillable="false"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>