Open GIS Consortium

Request for Comment - OpenGIS Web Coverage Service
From: http://www.opengis.org/techno/02-024r1.pdf


Annex A (normative)
XML Schemas

A.1 WCS Capabilities Schema

The full listing of the WCS schema follows. It imports the GML schema from
http://gws.pcigeomatics.com/OWS/WCS/geometry.xsd

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.3 U (http://www.xmlspy.com)
by Stephane Fellah (PCI Geomatics) and John D Evans (Global Science & Technology, Inc) -->
<xs:schema targetNamespace="http://www.opengis.net/wcs"
xmlns="http://www.opengis.net/wcs"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xlinks="http://www.opengis.net/gml"
xmlns:gml="http://www.opengis.net/gml"
elementFormDefault="qualified" version="0.2">
<xs:annotation>
<xs:appinfo>wcs.xsd v0.7 2002-04-05</xs:appinfo>
<xs:documentation xml:lang="en"> This schema defines the common type and elements used by the OGC
web coverage server.</xs:documentation>
</xs:annotation>
<!-- ==============================================================
includes and imports
============================================================== -->
<xs:import namespace="http://www.opengis.net/gml"
schemaLocation="http://gws.pcigeomatics.com/OWS/WCS/geometry.xsd"/>
<!-- ==============================================================
Definition of coverage layer complex types
============================================================== -->
<!--CoverageLayerList definition-->
<xs:element name="CoverageLayerList" type="CoverageLayerListType"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="description" type="xs:string"/>
<xs:complexType name="CoverageLayerListType">
<xs:annotation>
<xs:documentation>Describe the list of coverage layers served by the WCS. Use for the capabilities</
xs:documentation>
</xs:annotation>
<xs:choice maxOccurs="unbounded">
<xs:element ref="GridCoverageLayer" minOccurs="0"/>
<xs:element ref="TINCoverageLayer" minOccurs="0"/>
<xs:element ref="MultiPointCoverageLayer" minOccurs="0"/>
<xs:element ref="SegmentedCurveCoverageLayer" minOccurs="0"/>
<xs:element ref="ThiessenPolygonCoverageLayer" minOccurs="0"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="AbstractCoverageLayerType" abstract="true">
<xs:annotation>
<xs:documentation>This abstract class is the base class used to describe coverages provided by a
WCS.</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="LayerType">
<xs:sequence minOccurs="0">
<xs:element ref="SupportedInterpolationList">
<xs:annotation>
<xs:documentation>In case of discrete coverage, NONE must be
used.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="GridCoverageLayerType">
<xs:annotation>
<xs:documentation>This type describe a layer serving a grid coverage </xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="AbstractCoverageLayerType">
<xs:sequence>
<xs:element ref="GridExtentDescription"/>
<xs:element name="RangeSetDescription">
<xs:complexType>
<xs:sequence>
<xs:element ref="GridRangeDescription" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="TINCoverageLayerType">
<xs:annotation>
<xs:documentation>This type describes a layer serving a TIN coverage </xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="AbstractCoverageLayerType">
<xs:sequence>
<xs:element ref="TINExtentDescription"/>
<xs:element ref="RangeSetDescription"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="MultipointCoverageLayerType">
<xs:annotation>
<xs:documentation>This type describes a layer serving a multipoint coverage </xs:documentation>
<xs:documentation>To do</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="AbstractCoverageLayerType">
<xs:sequence>
<xs:element ref="MultiPointExtentDescription"/>
<xs:element ref="RangeSetDescription"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SegmentedCurveCoverageLayerType">
<xs:annotation>
<xs:documentation>This type describe a layer serving a segmented curve coverage
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="AbstractCoverageLayerType">
<xs:sequence>
<xs:element ref="SegmentedCurveExtentDescription"/>
<xs:element ref="RangeSetDescription"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ThiessenCoverageLayerType">
<xs:annotation>
<xs:documentation>This type describe a layer serving a thiessen coverage </xs:documentation>
<xs:documentation>To do</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="AbstractCoverageLayerType">
<xs:sequence>
<xs:element ref="ThiessenPolygonExtentDescription"/>
<xs:element ref="RangeSetDescription"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--Coverage Layer Global elements-->
<xs:element name="GridCoverageLayer" type="GridCoverageLayerType">
<xs:annotation>
<xs:documentation>Grid coverage layer element</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TINCoverageLayer" type="TINCoverageLayerType"/>
<xs:element name="ThiessenPolygonCoverageLayer" type="ThiessenCoverageLayerType"/>
<xs:element name="MultiPointCoverageLayer" type="MultipointCoverageLayerType"/>
<xs:element name="SegmentedCurveCoverageLayer" type="SegmentedCurveCoverageLayerType"/>
<!--Complex type for WCS requests -->
<xs:complexType name="CoverageRequestType">
<xs:sequence>
<xs:element ref="LayerID"/>
<xs:element name="DomainSubset" type="DomainObjectType"/>
<xs:element name="RangeSubset" type="RangeSubsetType"/>
<xs:element ref="InterpolationMethod"/>
<xs:element name="Output">
<xs:complexType>
<xs:sequence>
<xs:element name="SRS" type="xs:string" minOccurs="0"/>
<xs:element name="Format" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="version" type="xs:string" fixed="1.0.0"/>
</xs:complexType>
<xs:complexType name="GridCoverageRequestType">
<xs:complexContent>
<xs:restriction base="CoverageRequestType">
<xs:sequence>
<xs:element ref="LayerID"/>
<xs:element name="DomainSubset">
<xs:complexType>
<xs:complexContent>
<xs:restriction base="DomainObjectType">
<xs:sequence>
<xs:choice>
<xs:element ref="GriddedBox">
<xs:annotation>
<xs:documentation>Used for georeferenced coverage</
xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="RectifiedGrid"/>
</xs:choice>
<xs:element name="Elevation" type="ExtentType" minOccurs="0"/>
<xs:element name="Time" type="ExtentType" minOccurs="0"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="RangeSubset">
<xs:complexType>
<xs:complexContent>
<xs:extension base="RangeSubsetType"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element ref="InterpolationMethod"/>
<xs:element name="Output">
<xs:complexType>
<xs:sequence>
<xs:element name="SRS" type="xs:string" minOccurs="0"/>
<xs:element name="Format" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<!--Global elements for WCS requests-->
<xs:element name="CoverageRequest" type="CoverageRequestType" abstract="true"/>
<xs:element name="GridCoverageRequest" type="GridCoverageRequestType"/>
<!--Common types and elements-->
<!--DomainSetExtentDescription elements-->
<xs:element name="DomainSetExtentDescription" type="DomainSetExtentDescriptionType"/>
<xs:element name="GridExtentDescription" type="GridExtentDescriptionType" substitution-
Group="DomainSetExtentDescription"/>
<xs:element name="MultiPointExtentDescription" type="MultiPointExtentDescriptionType" substitution-
Group="DomainSetExtentDescription"/>
<xs:element name="TINExtentDescription" type="TINExtentDescriptionType" substitution-
Group="DomainSetExtentDescription"/>
<xs:element name="SegmentedCurveExtentDescription" type="SegmentedCurveExtentDescriptionType"
substitutionGroup="DomainSetExtentDescription"/>
<xs:element name="ThiessenPolygonExtentDescription" type="ThiessenPolygonExtentDescriptionType" substitutionGroup="
DomainSetExtentDescription"/>
<!--Complex types for DomainSetExtentDescription-->
<xs:complexType name="DomainSetExtentDescriptionType">
<xs:annotation>
<xs:documentation>Description of the native domain set of the coverage</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="SpatialExtent"/>
<xs:element ref="TemporalExtent" minOccurs="0">
<xs:annotation>
<xs:documentation>Use for temporal slices. The slices needs to be ordered from the lowest to
the highest </xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="ElevationExtent" minOccurs="0">
<xs:annotation>
<xs:documentation>Use for elevation slices</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="temporal" type="xs:boolean" use="optional"/>
<xs:attribute name="dimension" type="xs:positiveInteger" use="optional"/>
</xs:complexType>
<xs:complexType name="GridExtentDescriptionType">
<xs:annotation>
<xs:documentation>Describe the domain of a grid coverage</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="DomainSetExtentDescriptionType">
<xs:sequence>
<xs:element name="GridAxisDescription">
<xs:complexType>
<xs:sequence>
<xs:element ref="GridAxis" minOccurs="2" maxOccurs="4"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GridSpacing" minOccurs="0">
<xs:annotation>
<xs:documentation>Grid spacing is provided for convenience in order to avoid computation
from the offset vectors or spatial extent. It is only used when the grid is rectified.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:annotation>
<xs:documentation>Order of resolution needs to appears in the same order
than the GridAxis and in unit defined in SRS</xs:documentation>
</xs:annotation>
<xs:element name="resolution" type="xs:double" minOccurs="2" maxOccurs="4"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:choice>
<xs:element ref="Grid"/>
<xs:element ref="RectifiedGrid"/>
</xs:choice>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="MultiPointExtentDescriptionType">
<xs:annotation>
<xs:documentation>Describe the domain of a multipoint coverage</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="DomainSetExtentDescriptionType">
<xs:sequence>
<xs:element name="Envelope" minOccurs="0">
<xs:complexType>
<xs:complexContent>
<xs:restriction base="gml:GeometryAssociationType">
<xs:sequence>
<xs:element ref="gml:MultiPolygon"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="PointCount" type="xs:positiveInteger" minOccurs="0">
<xs:annotation>
<xs:documentation>Indicates the number of points in the coverage</
xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="TINExtentDescriptionType">
<xs:annotation>
<xs:documentation>Describe the domain of a TIN coverage</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="DomainSetExtentDescriptionType">
<xs:sequence>
<xs:element name="Envelope" minOccurs="0">
<xs:complexType>
<xs:complexContent>
<xs:restriction base="gml:GeometryAssociationType">
<xs:sequence>
<xs:element ref="gml:MultiPolygon"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="PointCount" type="xs:positiveInteger" minOccurs="0"/>
<xs:element name="BreakLineCount" type="xs:positiveInteger" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SegmentedCurveExtentDescriptionType">
<xs:annotation>
<xs:documentation>Describe the domain of segemented curve coverage</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="DomainSetExtentDescriptionType">
<xs:sequence>
<xs:element ref="gml:MultiCurve" minOccurs="0"/>
<xs:element name="CurveCount" type="xs:positiveInteger" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ThiessenPolygonExtentDescriptionType">
<xs:annotation>
<xs:documentation>Describe the domain of a thiessen polygon coverage</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="DomainSetExtentDescriptionType">
<xs:sequence>
<xs:element name="ClipArea" minOccurs="0">
<xs:annotation>
<xs:documentation>Describes the extent of the ThiessenPolygon coverage.Its boundary
determines the boundaries of the outermost polygons in the network, which would otherwise be unbounded</
xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:restriction base="gml:GeometryAssociationType">
<xs:sequence>
<xs:element ref="gml:MultiPolygon"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="PolygonCount" type="xs:positiveInteger" minOccurs="0">
<xs:annotation>
<xs:documentation>Number of polygon or center in the coverage</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--Common types for describing extent-->
<xs:element name="_DomainExtent" type="DomainExtentType" abstract="true"/>
<xs:element name="SpatialExtent" type="SpatialExtentType" substitutionGroup="_DomainExtent"/>
<xs:element name="TemporalExtent" substitutionGroup="_DomainExtent">
<xs:complexType>
<xs:complexContent>
<xs:extension base="ExtentType">
<xs:sequence minOccurs="0">
<xs:element name="Default" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="ElevationExtent" substitutionGroup="_DomainExtent">
<xs:complexType>
<xs:complexContent>
<xs:extension base="ExtentType">
<xs:sequence minOccurs="0">
<xs:element name="Default"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="DomainExtentType" abstract="true">
<xs:annotation>
<xs:documentation>Asbtract type to define a domain extent</xs:documentation>
</xs:annotation>
</xs:complexType>
<xs:complexType name="SpatialExtentType">
<xs:annotation>
<xs:documentation>Describes the spatial extent of a coverage</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="DomainExtentType">
<xs:sequence>
<xs:element name="XExtent" type="IntervalType"/>
<xs:element name="YExtent" type="IntervalType"/>
<xs:element name="ZExtent" type="IntervalType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="srsName" type="xs:anyURI" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ElevationExtentType">
<xs:annotation>
<xs:documentation>Describes explicitly the elevation extent of the coverage</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="DomainExtentType">
<xs:choice>
<xs:element name="ElevationInterval" type="ElevationIntervalType" minOccurs="0" maxOccurs="
unbounded"/>
<xs:element name="ElevationSeries" type="ElevationSeriesType" minOccurs="0" maxOccurs="
unbounded"/>
<xs:element name="defaultElevation" type="xs:double" minOccurs="0"/>
</xs:choice>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ExtentType">
<xs:annotation>
<xs:documentation>Describes explicitly the elevation extent of the coverage</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="Interval" type="IntervalType"/>
<xs:element name="SingleValue" type="xs:string"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="uom" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="IntervalType">
<xs:annotation>
<xs:documentation>Define an interval along an axis</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="min" type="xs:string"/>
<xs:element name="max" type="xs:string"/>
<xs:element name="res" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ElevationIntervalType">
<xs:annotation>
<xs:documentation>Describe a serie of elevations at regular interval</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="minZ" type="xs:double"/>
<xs:element name="maxZ" type="xs:double"/>
<xs:element name="resZ" type="xs:double"/>
</xs:sequence>
<xs:attribute name="uom" type="xs:string"/>
</xs:complexType>
<xs:complexType name="ElevationSeriesType">
<xs:annotation>
<xs:documentation>Describes a series of elevations</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="Elevation" type="xs:double" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="uom" type="xs:string"/>
</xs:complexType>
<xs:complexType name="TemporalExtentType">
<xs:annotation>
<xs:documentation>Describe explicitely the temporal extent of the coverage</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="DomainExtentType">
<xs:choice maxOccurs="unbounded">
<xs:element name="TimeInterval" type="TimeIntervalType" minOccurs="0" maxOccurs="
unbounded"/>
<xs:element name="TimeSeries" type="TimeSeriesType" minOccurs="0" maxOccurs="
unbounded"/>
<xs:element name="defaultTimeInstant" type="xs:dateTime" minOccurs="0">
<xs:annotation>
<xs:documentation>If multiple temporal coverage, this tag is required</
xs:documentation>
</xs:annotation>
</xs:element>
</xs:choice>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="TimeSeriesType">
<xs:annotation>
<xs:documentation>Describe a series of time instant</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="TimeInstant" type="xs:dateTime" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TimeIntervalType">
<xs:annotation>
<xs:documentation>Describe a series of time instant at regular interval</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="minT" type="xs:dateTime"/>
<xs:element name="maxT" type="xs:dateTime"/>
<xs:element name="resT" type="xs:duration" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!--RangeSet related types and elements-->
<xs:element name="RangeSetDescription" type="RangeSetDescriptionType"/>
<xs:element name="RangeComponentDescription" type="RangeComponentDescriptionType"/>
<xs:complexType name="RangeSetDescriptionType">
<xs:annotation>
<xs:documentation>Describe all the component of range set</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="RangeComponentDescription" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>This describes the range provided by a coverage. </xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="RangeComponentDescriptionType">
<xs:annotation>
<xs:documentation>Describe a range set component</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="RangeID"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="description" type="xs:string" minOccurs="0"/>
<xs:element ref="Observable" minOccurs="0"/>
<xs:element ref="RangeAxis" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="RangeID" type="xs:string"/>
<xs:complexType name="RangeSubsetType">
<xs:annotation>
<xs:documentation>Use for requesting a range subset in GetCoverage</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice>
<xs:sequence maxOccurs="unbounded">
<xs:element ref="RangeID"/>
<xs:element name="Parameter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:complexContent>
<xs:extension base="ExtentType">
<xs:attribute name="name" type="xs:QName" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:element name="Parameter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:complexContent>
<xs:extension base="ExtentType">
<xs:attribute name="name" type="xs:QName" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:sequence>
</xs:complexType>
<!--Domain set related types-->
<xs:complexType name="DomainObjectType">
<xs:annotation>
<xs:documentation>Describe a spatio temporal object. The spatial and time are separed for the moment.
Temporal needs to be integrated in the geometry in the future. See introduction of ISO
19108</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="gml:_Geometry"/>
<xs:element ref="xlinks:MultiPolygon"/>
<xs:element ref="gml:ArcString"/>
<xs:element name="Elevation" type="ExtentType" minOccurs="0"/>
<xs:element name="Time" type="ExtentType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!--Interpolation related types-->
<xs:element name="SupportedInterpolationList" type="SupportedInterpolationListType"/>
<xs:element name="InterpolationMethod" type="InterpolationMethodType"/>
<xs:simpleType name="InterpolationMethodType">
<xs:annotation>
<xs:documentation>List of codes that identifies interpolation methods for coverages.</
xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="nearest neighbor"/>
<xs:enumeration value="linear"/>
<xs:enumeration value="bilinear"/>
<xs:enumeration value="bicubic"/>
<xs:enumeration value="lost area"/>
<xs:enumeration value="barycentric"/>
<xs:enumeration value="piecewise constant"/>
<xs:enumeration value="none"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="SupportedInterpolationListType">
<xs:sequence>
<xs:element ref="InterpolationMethod" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="default" type="xs:string" use="optional" default="nearest neighbor"/>
</xs:complexType>
<!--Grid axis definition-->
<xs:element name="GridAxis" type="GridAxisType"/>
<xs:complexType name="GridAxisType">
<xs:sequence>
<xs:element name="Name" type="xs:string"/>
<xs:element name="description" type="xs:string" minOccurs="0"/>
<xs:element name="orientation">
<xs:annotation>
<xs:documentation>This is the orientation of the grid axis. Natural orientation are right,
up,front</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="up"/>
<xs:enumeration value="down"/>
<xs:enumeration value="left"/>
<xs:enumeration value="right"/>
<xs:enumeration value="back"/>
<xs:enumeration value="front"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<!--Common types that needs to be put in a upper schema and be shared by other geospatial data services-->
<xs:element name="LayerID" type="xs:string"/>
<xs:element name="KeywordList" type="KeywordListType"/>
<xs:element name="Keyword" type="KeywordType"/>
<xs:element name="MetadataURL" type="MetadataURLType"/>
<xs:element name="SupportedFormatList" type="SupportedFormatListType"/>
<xs:element name="Format" type="FormatType"/>
<xs:element name="FormatName" type="xs:string">
<xs:annotation>
<xs:documentation>This element provides an identifier for the format in which a layer can be requested
from a service</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="SupportedSRSList" type="SupportedSRSListType"/>
<xs:element name="SupportedSRS" type="SupportedSRSType"/>
<xs:element name="LatLonBoundingBox" type="LatLonBoundingBoxType"/>
<xs:element name="SRS" type="xs:string">
<xs:annotation>
<xs:documentation>Use as the identifier of the SRS in the request</xs:documentation>
</xs:annotation>
</xs:element>
<xs:simpleType name="LayerName">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:complexType name="LayerType">
<xs:annotation>
<xs:documentation>This abstract class provides the common attributes for a layer. I could be reused
by WMS, WCS and probably by WFS (despite this notion does not exist in the latest). A layer describes the underlying
data and the processing performed by the service on this data (formatting, reprojection,...)</
xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="LayerID"/>
<xs:element name="Title" type="xs:string"/>
<xs:element name="Abstract" type="xs:string" minOccurs="0"/>
<xs:element ref="KeywordList" minOccurs="0"/>
<xs:element ref="MetadataURL" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="LatLonBoundingBox">
<xs:annotation>
<xs:documentation>This type is provided mainly to define the (approximate if necessary)
long/lat bounding box of the underlying data of a layer. This is mainly used for catalog search </xs:documentation>
</xs:annotation>
</xs:element>
<xs:choice>
<xs:element ref="SRS" maxOccurs="unbounded"/>
<xs:sequence>
<xs:element name="QuerySRS">
<xs:complexType>
<xs:sequence>
<xs:element ref="SRS" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ResponseSRS">
<xs:complexType>
<xs:sequence>
<xs:element ref="SRS" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:choice>
<xs:element ref="SupportedFormatList"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LatLonBoundingBoxType">
<xs:attribute name="minx" type="xs:double" use="required"/>
<xs:attribute name="miny" type="xs:double" use="required"/>
<xs:attribute name="maxx" type="xs:double" use="required"/>
<xs:attribute name="maxy" type="xs:double" use="required"/>
</xs:complexType>
<xs:complexType name="KeywordListType">
<xs:annotation>
<xs:documentation>A thesaurus can be associated with the list of keywords. It is optional. Mixed of
thesaurus can be done by attributing the thesaurus for each keyword</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="Keyword" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="thesaurus" type="xs:anyURI" use="optional"/>
</xs:complexType>
<xs:complexType name="KeywordType">
<xs:annotation>
<xs:documentation>A keyword can be associated with a thesaurus (RDF schema) providing the semantics
definition. The value of the keyword will corresponds to the identifier of a ressource</xs:documentation>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="thesaurus" type="xs:anyURI" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="MetadataURLType">
<xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
<xs:attribute name="metadataType" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="TC211"/>
<xs:enumeration value="FGDC"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="SupportedFormatListType">
<xs:sequence>
<xs:element ref="Format" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="nativeFormat" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="FormatType">
<xs:annotation>
<xs:documentation>Describe the format from which the content can be retrieved</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="FormatName"/>
<xs:element name="description" type="xs:string" minOccurs="0"/>
<xs:element name="MIMEType" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SupportedSRSListType">
<xs:sequence>
<xs:element name="SupportedSRS" type="SupportedSRSType" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="nativeSRS" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="SupportedSRSType">
<xs:annotation>
<xs:documentation>Describe the identifier for the supported SRS (used by request) and the associated
spatial extent</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="SRS"/>
<xs:element ref="SpatialExtent"/>
</xs:sequence>
</xs:complexType>
<!--This schema redefines grid geometries from coverage solving some inconsistencies-->
<!--Global elements definition-->
<xs:element name="Grid" type="GridType"/>
<xs:element name="RectifiedGrid">
<xs:complexType>
<xs:complexContent>
<xs:extension base="RectifiedGridType">
<xs:attribute name="srsName" type="xs:anyURI" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="RectifiableGrid" type="RectifiableGridType">
<xs:annotation>
<xs:documentation>Not fully defined, waiting for MathTransform definition from CT workgroup</
xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="GriddedBox" type="SpatialExtentType"/>
<xs:element name="GridCoord" type="GridCoordType"/>
<xs:element name="GridCoordinate" type="GridCoordinateType"/>
<xs:element name="GridRange" type="GridRangeType"/>
<!--Complex types-->
<xs:complexType name="GridType">
<xs:annotation>
<xs:documentation>Implicitly defines an unrectified grid, which is a network composed of two or more
sets of equally spaced parallel lines in which the members of each set intersect the members of the other sets at
right angles.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="GridRange"/>
</xs:sequence>
<xs:attribute name="dimension" type="xs:positiveInteger" use="required"/>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="post"/>
<xs:enumeration value="centre"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="RectifiedGridType">
<xs:annotation>
<xs:documentation>A rectified grid has an origin and vectors that define its post locations in the projection
defined by the grid coverage</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="GridType">
<xs:sequence>
<xs:element name="origin">
<xs:annotation>
<xs:documentation>Origin is the translation to apply to the grid point (0,0) in the SRS
indicated in the RectifiedGrid</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="X" type="xs:double"/>
<xs:element name="Y" type="xs:double"/>
<xs:element name="Z" type="xs:double" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="offsets">
<xs:annotation>
<xs:documentation>Offset appears in the same order the axis
names</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="offset" minOccurs="2" maxOccurs="3">
<xs:complexType>
<xs:sequence>
<xs:element name="endX" type="xs:double"/>
<xs:element name="endY" type="xs:double"/>
<xs:element name="endZ" type="xs:double" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="RectifiableGridType">
<xs:annotation>
<xs:documentation>This type will be used to handle polynomial, rational functions,...</
xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="GridType">
<xs:sequence>
<xs:element name="MathTransform" type="MathTransformType">
<xs:annotation>
<xs:documentation>Will be defined by CT workgroup in the future.</
xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="MathTransformType">
<xs:annotation>
<xs:documentation>To be defined by CT WG</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="class">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Polynomial"/>
<xs:enumeration value="Rational"/>
<xs:enumeration value="Affine"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GridCoordType">
<xs:annotation>
<xs:documentation>Represents a coordinate in a point grid. The coordinates must be integers.The
ordering of the coordinate values must be the same as that of the elements of GridAxis.The coordinates values
represents the number of offsets from the origin in the direction of a specific axis.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="ordinate" type="xs:int" minOccurs="2" maxOccurs="4"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GridCoordinateType">
<xs:annotation>
<xs:documentation>Represents a coordinate in a point grid as a string. The coordinates must be integers.
The ordering of the coordinate values must be the same as that of the elements of GridAxis.The coordinates
values represents the number of offsets from the origin in the direction of a specific axis. Coordinates can be included
in a single string, but there is no facility for validating string content. The value of the 'cs' attribute is the
separator for coordinate values, and the value of the 'ts' attribute gives the tuple separator (a single space by
default); the default values may be changed to reflect local usage.
</xs:documentation>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="decimal" type="xs:string" default="."/>
<xs:attribute name="cs" type="xs:string" default=","/>
<xs:attribute name="ts" type="xs:string" default="&#x20;"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="GridRangeType">
<xs:annotation>
<xs:documentation>Provides grid coordinate values for the diametrically opposed corners of an envelope
that bounds a section of grid. The order of the ordinates are the same than the axis described in the Grid-
Geometry</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="low" type="GridCoordType"/>
<xs:element name="high" type="GridCoordType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GriddedBoxType">
<xs:annotation>
<xs:documentation>Complex type to describe more intuitively a non rotated rectified
grid</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="minX" type="xs:double"/>
<xs:element name="maxX" type="xs:double"/>
<xs:element name="minY" type="xs:double"/>
<xs:element name="maxY" type="xs:double"/>
<xs:element name="minZ" type="xs:double" minOccurs="0"/>
<xs:element name="maxZ" type="xs:double" minOccurs="0"/>
<xs:element name="resX">
<xs:simpleType>
<xs:restriction base="xs:double">
<xs:minExclusive value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="resY">
<xs:simpleType>
<xs:restriction base="xs:double">
<xs:minExclusive value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="resZ" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:double">
<xs:minExclusive value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="srsName" type="xs:anyURI" use="required"/>
</xs:complexType>
<!-- Grid Band description -->
<xs:element name="CategoryList" type="CategoryListType"/>
<xs:element name="Category" type="CategoryType" abstract="true"/>
<xs:element name="NominalCategory" type="NominalCategoryType" substitutionGroup="Category"/>
<xs:element name="OrdinalCategory" type="OrdinalCategoryType" substitutionGroup="Category"/>
<xs:element name="IntervalCategory" type="IntervalCategoryType" substitutionGroup="Category"/>
<xs:element name="UnitOfMeasure" type="UnitOfMeasureType"/>
<xs:element name="PseudoColorTable" type="PseudoColorTableType"/>
<xs:element name="Observable" type="ObservableType"/>
<xs:element name="Count" type="CountType"/>
<xs:element name="Histogram" type="HistogramType"/>
<xs:element name="ColorInterpretation" type="ColorInterpretationType"/>
<xs:element name="SampleEncoding" type="SampleEncodingType"/>
<!--Pseudo Color Table definition-->
<xs:element name="GrayEntry">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PCTEntryType">
<xs:attribute name="gray" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="CMYKEntry">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PCTEntryType">
<xs:attributeGroup ref="CMYK"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="RGBAEntry">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PCTEntryType">
<xs:attributeGroup ref="RGBA"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="HLSEntry">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PCTEntryType">
<xs:attributeGroup ref="HLS"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="PseudoColorTableType">
<xs:choice>
<xs:sequence>
<xs:element ref="RGBAEntry" maxOccurs="unbounded"/>
</xs:sequence>
<xs:sequence>
<xs:element ref="HLSEntry" maxOccurs="unbounded"/>
</xs:sequence>
<xs:sequence>
<xs:element ref="CMYKEntry" maxOccurs="unbounded"/>
</xs:sequence>
<xs:sequence>
<xs:element ref="GrayEntry" maxOccurs="unbounded"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
<xs:complexType name="PCTEntryType" abstract="true">
<xs:attribute name="index" type="xs:integer" use="required"/>
</xs:complexType>
<xs:attributeGroup name="RGBA">
<xs:attribute name="red" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="green" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="blue" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="alpha" use="optional" default="0">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<xs:attributeGroup name="CMYK">
<xs:attribute name="cyan" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="magenta" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="yellow" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="black" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<xs:attributeGroup name="HLS">
<xs:attribute name="hue" use="required">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="360"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="saturation" use="required">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="lightness" use="required">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<!--Histogram definition-->
<xs:complexType name="HistogramType">
<xs:sequence>
<xs:element ref="Count" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="min" type="xs:decimal" use="optional"/>
<xs:attribute name="max" type="xs:decimal" use="optional"/>
<xs:attribute name="stddev" type="xs:decimal" use="optional"/>
<xs:attribute name="mean" type="xs:decimal" use="optional"/>
<xs:attribute name="median" type="xs:decimal" use="optional"/>
<xs:attribute name="totalCount" type="xs:nonNegativeInteger" use="required"/>
</xs:complexType>
<xs:complexType name="CountType">
<xs:attribute name="index" type="xs:decimal" use="required"/>
<xs:attribute name="count" type="xs:integer" use="required"/>
<xs:attribute name="percent" use="optional">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:simpleType name="ColorInterpretationType">
<xs:restriction base="xs:string">
<xs:enumeration value="redBand"/>
<xs:enumeration value="greenBand"/>
<xs:enumeration value="blueBand"/>
<xs:enumeration value="cyanBand"/>
<xs:enumeration value="magentaBand"/>
<xs:enumeration value="yellowBand"/>
<xs:enumeration value="blackBand"/>
<xs:enumeration value="hueBand"/>
<xs:enumeration value="saturationBand"/>
<xs:enumeration value="lightnessBand"/>
<xs:enumeration value="alphaBand"/>
<xs:enumeration value="undefined"/>
<xs:enumeration value="grayIndex"/>
<xs:enumeration value="paletteIndex"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SampleEncodingType">
<xs:restriction base="xs:string">
<xs:enumeration value="1BIT"/>
<xs:enumeration value="2BIT"/>
<xs:enumeration value="4BIT"/>
<xs:enumeration value="8BIT_U"/>
<xs:enumeration value="8BIT_S"/>
<xs:enumeration value="16BIT_U"/>
<xs:enumeration value="16BIT_S"/>
<xs:enumeration value="32BIT_U"/>
<xs:enumeration value="32BIT_S"/>
<xs:enumeration value="32BIT_REAL"/>
<xs:enumeration value="64BIT_REAL"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="ObservableType">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="description" type="xs:string" minOccurs="0"/>
<xs:element name="docURL" type="xs:anyURI" minOccurs="0">
<xs:annotation>
<xs:documentation>Binds the measurand to a value from a ObservableType registry. This
should be described in a RDF file</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="referenceSystem" minOccurs="0">
<xs:annotation>
<xs:documentation>Binds the measurand to a specific reference system. (can be a unit of
measure, ordinal, nominal categories).</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="ReferenceSystemType">
<xs:choice>
<xs:element ref="UnitOfMeasure"/>
<xs:element ref="CategoryList"/>
</xs:choice>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GridRangeDescriptionType">
<xs:complexContent>
<xs:extension base="RangeComponentDescriptionType">
<xs:sequence>
<xs:element ref="ColorInterpretation" minOccurs="0"/>
<xs:element ref="SampleEncoding" minOccurs="0"/>
<xs:element ref="PseudoColorTable" minOccurs="0"/>
<xs:element ref="Histogram" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="GridRangeDescription" type="GridRangeDescriptionType"/>
<!--Reference System definition-->
<xs:complexType name="ReferenceSystemType"/>
<xs:complexType name="CategoryType" abstract="true">
<xs:sequence>
<xs:element name="categoryID" type="xs:string"/>
<xs:element ref="title"/>
<xs:element ref="description" minOccurs="0"/>
<xs:element name="docURL" type="xs:anyURI" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="NominalCategoryType">
<xs:complexContent>
<xs:extension base="CategoryType">
<xs:sequence>
<xs:element name="toNumericValue" type="xs:decimal">
<xs:annotation>
<xs:documentation>Value used to represent the category. The order is not significant.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="OrdinalCategoryType">
<xs:complexContent>
<xs:extension base="CategoryType">
<xs:sequence>
<xs:element name="toNumericValue" type="xs:decimal">
<xs:annotation>
<xs:documentation>Value used to represent the category. The order is significant</
xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="IntervalCategoryType">
<xs:complexContent>
<xs:extension base="CategoryType">
<xs:sequence>
<xs:element name="lower" type="xs:decimal">
<xs:annotation>
<xs:documentation>InclusiveLoweValue</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="upper" type="xs:decimal">
<xs:annotation>
<xs:documentation>ExclusiveUpperValue</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="toValue" type="ConversionType" minOccurs="0">
<xs:annotation>
<xs:documentation>conversion from sample to true value</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="uom" type="xs:anyURI" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ConversionType">
<xs:choice>
<xs:element name="affine">
<xs:complexType>
<xs:sequence>
<xs:element name="valueScale" type="xs:decimal"/>
<xs:element name="valueOffset" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="logarithmic">
<xs:complexType>
<xs:sequence>
<xs:element name="valueScale" type="xs:decimal"/>
<xs:element name="valueOffset" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:complexType name="CategoryListType">
<xs:choice>
<xs:annotation>
<xs:documentation>Note that mixed category are autorized (oceanography for example use mixed
qualititative and quantitative classification)</xs:documentation>
</xs:annotation>
<xs:element ref="NominalCategory" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="OrdinalCategory" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="IntervalCategory" minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="UnitOfMeasureType">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="shortName" type="xs:string" minOccurs="0"/>
<xs:element name="description" type="xs:string" minOccurs="0"/>
<xs:element name="docURL" type="xs:anyURI" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="RangeAxis">
<xs:annotation>
<xs:documentation>Set of values AT WHICH obervable is measured, or BY WHICH it is aggregated</
xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="ObservableType">
<xs:sequence>
<xs:element name="RangeExtent">
<xs:annotation>
<xs:documentation>Points or intervals along the axis where values are available
(e.g., bands or age brackets)</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="ExtentType">
<xs:sequence minOccurs="0">
<xs:element name="Default" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="DescribeCoverageLayer">
<xs:complexType>
<xs:sequence>
<xs:element ref="LayerID" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="version" type="xs:string" use="optional" fixed="0.7"/>
</xs:complexType>
</xs:element>
</xs:schema>

A.2 Sample WMS Capabilities XML
Here is an example Capabilities XML file that complies with the above Schema document.
(to be inserted)

A.3 Service Exception Schema (Normative)
This annex contains the Service Exception Schema corresponding to this version of the
WCS specification. This section also summarizes the defined exception codes and their
meanings.

<?xml version="1.0" encoding="UTF-8"?>
<!--W3C Schema generated by XML Spy v4.2 U (http://www.xmlspy.com)-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="ServiceExceptionReport">
<xs:complexType>
<xs:sequence>
<xs:element name="ServiceException" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="code">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="InvalidFormat"/>
<xs:enumeration value="InvalidSRS"/>
<xs:enumeration value="LayerNotDefined"/>
<xs:enumeration value="CurrentUpdateSequence"/>
<xs:enumeration value="InvalidUpdateSequence"/>
<xs:enumeration value="MissingDimensionValue"/>
<xs:enumeration value="InvalidDimensionValue"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="version" type="xs:string" fixed="0.5.1"/>
</xs:complexType>
</xs:element>
</xs:schema>

Table A.1 - Exception codes defined by this specification

Exception Code Meaning
InvalidFormat Request contains a Format not offered by the service instance.
InvalidSRS Request contains an SRS not offered by the service instance for one or more of
the Layers in the request.
LayerNotDefined Request is for a Layer not offered by the service instance.
CurrentUpdateSequence Value of (optional) UpdateSequence parameter in GetCapabilities request is
equal to current value of Capabilities XML update sequence number.
InvalidUpdateSequence Value of (optional) UpdateSequence parameter in GetCapabilities request is
greater than current value of Capabilities XML update sequence number.
MissingDimensionValue Request does not include a sample dimension value, and the service instance
did not declare a default value for that dimension.
InvalidDimensionValue Request contains an invalid sample dimension value.

A.4 Sample Service Exception XML (Informative)

As an aid to understanding and a guide for implementation, this Annex contains example
XML which is valid according to the DTD in Annex A.3. Implementers should consult
the main body of the specification document and the DTD to ensure compliance rather
than editing this XML without full understanding.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ServiceExceptionReport xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:noNamespaceSchemaLocation="ServiceException.xsd" version="0.5.1">
<ServiceException>
Plain text message about an error.
</ServiceException>
<ServiceException code="InvalidUpdateSequence">
Another error message, this one with an exception code supplied.
</ServiceException>
<ServiceException>
<![CDATA[
Error in module <foo.c>, line 42
A message that includes angle brackets in text must be enclosed in a Character Data Section
as in this example. All XML-like markup is ignored except for this sequence of three
closing characters:
]]>
</ServiceException>
<ServiceException>
<![CDATA[
<Module>foo.c</Module>
<Error>An error occurred</Error>
<Explanation>Similarly, actual XML can be enclosed in a CDATA section. A generic parser will ignore that
XML, but application-specific software may choose to process it.</Explanation>
]]>
</ServiceException>
</ServiceExceptionReport>