i. Abstract
The OGC CF-netCDF data model supports multi-dimensional gridded data and multi-dimensional multi-point data, representing space and time-varying phenomena. In particular, this extension standard is limited to multi-point, and regular and warped grids.
This standard specifies the CF-netCDF data model encoding using the OGC GML 3.2.1 coverage application schema, as well as CF-netCDF data exchange format and protocol encoding.
This standard specifies: (a) the CF-netCDF GML encoding to be used by OGC standards; (b) the CF-netCDF data format exchanged using OGC standards; (c) the Internet protocol characteristics to effectively exchange CF-netCDF data.
As per the GML 3.3. standard, GML 3.3 imports the 3.2 schema. The canonical location of the 3.2 all components schema document for 3.3 is http://schemas.opengis.net/gml/3.2.1/gml.xsd
ii. Keywords
The following are keywords to be used by search engines and document catalogues.
ogcdoc, netcdf, cf-netcf, encoding extension, multi-dimensional, gml, data format.
iii. Preface
This standard describes an extension of the CF-netCDF 3.0 data model [OGC 11-165r02].
This extension is required to encode CF-netCDF 3.0 datasets using the “OGC Implementation Schema for Coverages” specification [OGC 09-146r2] and to exchange CF-netCDF datasets.
Suggested additions, changes, and comments on this draft standard are welcome and encouraged. Such suggestions may be submitted by email message or by making suggested changes in an edited copy of this document.
Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium shall not be held responsible for identifying any or all such patent rights.
Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation.
iv. Submitting organizations
The following organizations submitted this Document to the Open Geospatial Consortium (OGC):
- The University Corporation for Atmospheric Research (UCAR);
- The Italian National Research Council, Institute of Atmospheric Pollution Research (CNR-IIA, Florence Dept.).
v. Submitters
All questions regarding this submission should be directed to the editor or the submitters.
Name | Representing | OGC Member |
---|---|---|
Stefano Nativi |
CNR-IIA/ESSI-lab |
YES |
Ben Domenico |
UCAR/Unidata |
YES |
1 Scope
This document specifies the CF-netCDF model encoding using the GML 3.2.1 Application Schema –Coverage entities. Besides, it specifies the data format and Internet protocol characteristics to serve CF-netCDF data in an effective and usable way.
GML 3.2.1 has not been deprecated. As per the GML 3.3. standard, GML 3.3 imports the 3.2 schema. The canonical location of the 3.2 all components schema document for 3.3 is http://schemas.opengis.net/gml/3.2.1/gml.xsd.
This CF-netCDF 3.0 extension allows discovery and access services to exchange CF-netCDF data –e.g. encoded in GML. In fact, this specification introduces a set of requirements which a WxS implementation must fulfil to describe and exchange CF-netCDF 3.0 datasets from server to client using the coverage extension of the GML 3.2.1 encoding format.
This standard specifies: (a) the CF-netCDF GML encoding to be used by OGC standards; (b) the CF-netCDF data format exchanged using OGC standards; (c) the Internet protocol characteristics to effectively exchange CF-netCDF data.
CF-netCDF encoding format is netCDF conforming to the Climate and Forecast (CF) conventions (CF-netCDF). It consists of either a binary, XML, or ASCII format which encodes the CF-netCDF data model.
CF-netCDF 3.0 has emerged as a well-supported data model and encoding for several different domains, including: atmospheric science, oceanography, climatology, meteorology, hydrology, etc.
This specification deals with multi-dimensional discrete coverage data and multi-dimensional multi-point data.
2 Conformance
Standardization target is the encoding of netCDF-CF datasets returned by any WxS implementation (currently: servers).
In particular, this standard defines three standardization targets: (a) CF-netCDF GML implementations (currently encodings); (b) CF-netCDF data format (currently encodings); (c) CF-netCDF data format (currently encodings) returned by multiple part messages.
This document establishes three requirements classes, one for each standardization target:
1. CF-netCDF-1.6 GML encoding, of http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding -for the standardization target (a);
2. CF-netCDF-1.6 data format, of http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format -for the standardization target (b);
3. CF-netCDF-1.6 multipart data encoding, of http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Multipart-encoding -for the standardization target (c);
and three corresponding pertaining conformance class, CF-netCDF-1.6, with URIs:
1. http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding
2. http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format
3. http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Multipart-encoding
Requirements and conformance test URIs defined in this document are relative to http://www.opengis.net/spec/netCDF_data-model/.
Annex A lists the conformance tests which shall be exercised on any software artifact claiming to implement an CF-netCDF 3.0 extension for GML 3.2.1 encoding.
3 References
The following normative documents contain provisions that, through reference in this text, constitute provisions of this document. For dated references, subsequent amendments to, or revisions of, any of these publications do not apply. For undated references, the latest edition of the normative document referred to applies.
-
OGC 10-090, NetCDF Core version 1.0
-
Conformance classes used:
- core
-
OGC 10-092, NetCDF Binary Encoding Extension Standard: NetCDF Classic and 64-bit Offset Format version 1.0
-
Conformance classes used:
- netCDF classic
- netCDF 64-bit
-
OGC 11-165r2, CF-netCDF Data Model extension specification, version 2.0.1
-
Conformance classes used:
- CF-netCDF core
- CF-netCDF Discrete Sampling
- CF-netCDF Mapping onto ISO 19123
-
OGC 07-036, Geography Markup Language (GML) Encoding Standard, version 3.2.1
-
Conformance classes used:
- GML writing
-
OGC 09-146r1, OGC® Implementation Schema for Coverages, version 1.0
-
Conformance classes used:
- gml-coverage
4 Terms and Definitions
This document uses the terms defined in Sub-clause 5.3 of [OGC 06-121r8], which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this standard.
For the purposes of this document, the following additional terms and definitions apply.
- 4.1 Coverage
Feature that acts as a function to return values from its range for any direct position within its spatiotemporal domain [OGC 07-111]
- 4.2 Data Model
-
A description of the organization of data in a manner that reflects an information structure [ISO/IEC 11179-1 Specification and standardization of data elements – Part 1: Framework]
NOTE: netCDF literature reports the following definition for data model: a way of thinking about scientific data by applying a data model theory. It is an abstraction that describes how datasets are represented and used. In computer terms, a data model can be thought of as equivalent to an abstract object model in Object Oriented Programming in that an abstract data model describes data objects and what methods can be used on them.
- 4.3 Feature
-
abstraction of real world phenomena [5].
NOTE A feature may occur as a type or an instance.
- 4.4 GMLCOV
Note that OGC Coverage Implementation Schema 1.1 supersedes its predecessor version, GML 3.2.1 Application Schema – Coverages version 1.0.1, nicknamed GMLCOV, in a backwards compatible way. Instead of naming the new version GMLCOV 1.1, the standard has been renamed to Coverage Implementation Schema (CIS) 1.1 to remedy misunderstandings caused by the initial title, such as that only a GML encoding is defined here (whereas in fact a format-independent implementable coverage model is established).
For simplicity, the GMLCOV shorthand is used throughout this specification.
- 4.5 Grid
Network composed of two or more sets of curves in which the members of each set intersect the members of the other sets in a algorithmic way [5]
NOTE: the curves partition a space into grid cells.
- 4.6 MIME
MIME (Multi-Purpose Internet Mail Extensions) is an extension of the original Internet e-mail protocol that lets people use the protocol to exchange different kinds of data files on the Internet: audio, video, images, application programs, and other kinds, as well as the ASCII text handled in the original protocol, the Simple Mail Transfer Protocol (SMTP).
- 4.7 Multipart messages
Through the use of the multipart type, MIME allows mail messages to have parts arranged in a tree structure where the leaf nodes are any non-multipart content type and the non-leaf nodes are any of a variety of multipart types.
- 4.8 Multi-point coverage
A discrete coverage which is characterized by a finite domain consisting of points. Generally, the domain is a set of irregularly distributed points.
A set of hydrographic soundings is an example of a discrete point coverage.
- 4.9 NetCDF
NetCDF is a standard for data on complex grids –curvilinear in XY; sigma and density-related in Z; climatological and artificial calendars in T; and heading towards “tile mosaics” and 5D forecast ensembles in the near future.
- 4.10 Web address
For purposes of this document, Web address is an HTTP URL that allows applications to access remote (optionally, time-aggregated collections of) netCDF-CF files (virtual datasets – often terabyte sized) through netCDF API –as if they were local netCDF files.
5 Conventions
5.1 Namespace prefix conventions
The following namespaces are used in this document. The prefix abbreviations used constitute conventions used here, but are notnormative. The namespaces to which the prefixes refer are normative, however.
Prefix | Namespace URI | Description |
---|---|---|
GML |
GML 3.2.1 |
|
GMLCOV |
GML Application Schema for Coverages 1.0 |
|
ncml |
ncML schema |
|
xsd |
XML Schema |
5.2 CF-netCDF data model
This document does not contain inline a formal specification of the CF-netCDF data model. In fact, it is available as an OGC specification [OGC 11-165r2]. This specification formalizes the CF-netCDF data model mapping onto the ISO 19123 coverage geometry model.
For reader’s convenience, the CF-netCDF data model is shown in Figure 1, Figure 2, and Figure 3. An example of CF-netCDF dataset is reported in the Annex B.
5.3 Web address
For the scope of this document, a Web address is a transparent mechanism by which an application can use netCDF API calls on a remote file. Thus, for any netCDF subset that may be derived from a WxS server, there may be a Web URL that is an indirect reference to that same subset.
Essentially, the netCDF file is just a de-referencing of this URL. Any application program that can utilize a netCDF file can (in principal) utilize the URL equivalently.
NetCDF Community applications commonly make use of Web addresses (i.e. HTTP URLs) to access remote (optionally, time-aggregated collections of) netCDF-CF files (virtual datasets – often terabyte sized) through netCDF API –as if they were local netCDF files.
6 CF-NetCDF dataset encoding with GML 3.2.1 – application schema – Coverages
GML 3.2.1 Application Schema -Coverage data model [OGC 09-146r1] introduces the concept of Coverage (i.e. GMLCOV:Coverage). For the reader’s convenience the data model is depicted in Figure 4 and Figure 5.
The related GML:DomainSet and GML:RangeSet entities are defined in [7]; while, SWE Common:DataRecord is defined in [8].
6.1 GML 3.2.1 Coverage types
Since CF-netCDF dataset realizes the ISO19123:CV_DiscreteCoverage type [4], the following GML 3.2.1 coverage types are considered for the mapping (see Figure 4): GMLCOV:GridCoverage type, GMLCOV:RectifiedGridCoverage type, GMLCOV:ReferenceableGridCoverage type, or GMLCOV:MultiPointCoverage –i.e. ISO 19123:CV_DiscretePointCoverage.
6.2 Encoding rules for CF-netCDF dataset
Considering the mapping between the GMLCOV:Coverage object and property names to the corresponding class names and their attributes in ISO 19123 (see Table D.8 of [7] and the constraints introduced by [OGC 09-146r1]), and the mapping between the CF-netCDF dataset object and property names to the corresponding class names and their attributes in ISO 19123 (see OGC 11-165r2 [4]), Table 1 defines the mapping between the CF-netCDF dataset object and property names to the corresponding GMLCOV:Coverage object and property names. Figure 6 and Figure 7 depict these mapping rules.
CF-netCDF entity |
ISO Grid Coverage entity |
Encoding Cardinality |
GMLCOV:Coverage entity |
Rule |
---|---|---|---|---|
CF_Dataset and sub-types (e.g. MultidimensionalArray and RaggedArray entities) |
CV_DiscreteCoverage (CV_DiscreteGridPointCoverage or CV_DiscretePointCoverage ) |
1 to 0..n |
GML:Coverage implemented as: GMLCOV:GridCoverage | GMLCOV:RectifiedGridCoverage | GMLCOV:ReferenceableGridCoverage | GMLCOV:MultiPointCoverage |
1 |
CF_Variable(s) and sub-types related to a CoordinateSystem |
CV_CoverageFunction |
1 to 0..1 |
coverageFunction, domainSet, rangeType, rangeSet implemented as, respectively: GML:CoverageFunction GML:Grid | GML:RectifiedGrid | GML:ReferenceableGrid | GML:MultiPoint SWE:DataRecord GML:RangeSet (see Table 2) |
-- |
CoordinateSystem |
CS_CRS |
1 to 1 |
boundedBy implemented as GML:Envelope or the subtype GML:EnvelopeWithTimePeriod (GML:Envelope attributes: srsName and axisLabels must be instantiated) (see Table 3) |
-- |
FeatureCollection
|
CV_CoverageFunction |
1 to 0..1 |
coverageFunction, domainSet, rangeType, rangeSet implemented as, respectively: GML:CoverageFunction GML:Grid | GML:RectifiedGrid | GML:ReferenceableGrid | GML:MultiPoint SWE:DataRecord GML:RangeSet (see Table 4) |
-- |
Requirement 1: CF-dataset |
/req/CF-netCDF-1.6-GML-encoding/CF-dataset |
CF-netCDF datasets, its subtypes and its realizations CF-netCDF RaggedArray and CF-netCDF MultidimensionalArray shall realize one of the following GMLCOV:Coverage subtypes: GMLCOV:GridCoverage, GMLCOV:RectifiedGridCoverage, GMLCOV:ReferenceableGridCoverage, GMLCOV:MultiPointCoverage. Additionally, the GML:DomainSet is implemented as one of the following subtypes: GML:Grid, GML:RectifiedGrid, GML:ReferenceableGrid, GML:MultiPoint (see Figure 5). |
6.3 Encoding rules for CF-Variables
CF-netCDF entity |
ISO Coverage entity |
Encoding Cardinality |
GMLCOV entity |
GML 3.2.1 entity |
rule |
---|---|---|---|---|---|
CF_CoordinateVariable a (Valid subtypes are: LatitudeCoordinateLongitudeCoordinate, VerticalCoordinate, TimeCoordinate) or Spatial/ |
ISO19123:CV_DiscreteGridPointCoverage.CV_GridValueMatrix.CV_GridPoint.gridCoord |
1 to 1 |
GMLCOV:GridCoverage.domainSet | GMLCOV:RectifiedGridCoverage.domainSet | GMLCOV:ReferenceableGridCoverage.domainSet |
GML:DomainSet realized as: GML:Grid or its subtypes: GML:RectifiedGrid | GML:ReferenceableGrid |
2, 3 |
ISO19123:CV_DiscretePointCoverage.CV_PointValuePair.geometry.GM_Point |
1 to 1 |
GMLCOV:MultiPointCoverage.domainSet |
GML:DomainSet realized as: GML:MultiPoint |
2, 3 |
|
ISO19123:CV_DiscreteGridPointCoverage.CV_GridValueMatrix.sequencingRule |
1 to 0..1 |
GMLCOV:Coverage. coverageFunction |
GML:CoverageFunction.GridFunction |
4, 5 |
|
ISO19123:CV_DiscreteGridPointCoverage.CV_GridValueMatrix.startSequence |
|||||
ISO19123:CV_DiscretePointCoverage.CoverageFunctione |
1 to 0..1 |
GMLCOV:Coverage. coverageFunction |
GML:CoverageFunction.CoverageMappingRule |
4, 5 |
|
data CF_Variablec or non Spatial/temporal CF_AuxiliaryCoordinateVariablee |
ISO19123:CV_DiscreteGridPointCoverage.CV_GridValuesMatrix.values |
1 to 1 |
GMLCOV: Coverage.rangeSet |
GML:RangeSet
|
6, 8 |
ISO19123:CV_DiscretePointCoverage. CV_PointValuePair.value f |
1 to 1 |
GMLCOV: Coverage.rangeSet |
GML:RangeSet |
6, 8 |
|
data CF_Variabled or non spatial/temporal CF_AuxiliaryCoordinateVariablee |
ISO19123:CV_DiscreteGridPointCoverage.RangeType.AttributesType entry (i.e. AttributeName, TypeName) |
1 to 1 |
GMLCOV: Coverage.rangeType |
SWE:DataRecord
|
7, 9 |
CV_DiscretePointCoverage.RangeType.AttributesType entry (i.e. AttributeName, TypeName) |
1 to 1 |
GMLCOV: Coverage.rangeType |
SWE:DataRecord |
7, 9 |
|
a The set of spatial/temporal coordinate variables (shared by a group of CF_Variables) maps to the coverage domain, whose geometry is represented by a single grid (ISO19123:CV_Grid) or point value pairs (ISO19123:CV_PointValuePair). b The set of spatial/temporal auxiliary coordinate variables (shared by a group of CF_Variables) maps to the coverage domain, whose geometry is represented by a single grid (ISO19123:CV_Grid) or point value pairs (ISO19123:CV_PointValuePair). The CF_Variables must define a coordinates attribute identifying the auxiliary coordinate variables. This is the case implemented by CF_FeatureCollection variables. c The set of CF_Variables
comprising the group that shares a common Coordinate System (i.e. set of
spatial/temporal CF_CoordinateVariables or
CF_AuxiliaryCoordinateVariables). The CF_Variable
data values generate the grid value matrix record values: CV_GridValueMatrix.values.record entry (i.e. AttributeName, Any). d The range of each CV_DiscreteGridPointCoverage is a list of records with an attribute for every related CF-netCDF variable and for every CF_AuxiliaryCoordinateVariable that is not allowed in a coverage domain/CRS (i.e. parametric dimension axes). e Parametric dimensions;
examples are: pressure, salinity, density. f In a gml:MultiPointCoverage the mapping from the domain to the range is straightforward. · For gml:DataBlock encodings, the points of the gml:MultiPoint are mapped in document order to the tuples of the data block. · For gml:CompositeValue encodings, the points of the gml:MultiPoint are mapped to the members of the composite value in document order. · For gml:File encodings, the points of the gml:MultiPoint are mapped to the records of the file in sequential order. CF_RaggedArray representations of a CF_Dataset should use such encodings |
Requirement 2: Dataset.domainSet#1 |
/req/CF-netCDF-1.6-GML-encoding/Dataset.domainSet#1 |
The set of spatial/temporal CF_CoordinateVariable (comprised of a common coordinate system) that characterize a CF-netCDF dataset, shall realize a GML:Coverage.domainSet property, implemented as: GML:MultiPoint, GML:Grid object or its subtypes: GML:RectifiedGrid, GML:ReferenceableGrid. |
Requirement 3: Dataset.domainSet#2 |
/req/CF-netCDF-1.6-GML-encoding/Dataset.domainSet#2 |
if the spatial/temporal domain is defined by auxiliary variables, the set of spatial/temporal CF_AuxiliaryCoordinateVariable that characterizes a CF-netCDF Variable, shall realize a GML:Coverage.domainSet property, implemented as: GML:MultiPoint, GML:Grid object or its subtypes: GML:RectifiedGrid, GML:ReferenceableGrid. |
Requirement 4: Dataset.coverageFunction#1 |
/req/CF-netCDF-1.6-GML-encoding/Dataset.coverageFunction#1 |
if the mapping from the domain to the range of the coverage is not characterized by the default values for GML:Coverage (see [7]), the set of spatial/temporal CF_CoordinateVariable (comprised of a common coordinate system) that characterizes a CF-netCDF dataset shall realize a GML:Coverage.coverageFunction property, implemented as either a GML:CoverageFunction.GridFunction or a GML:CoverageFunction.CoverageMappingRule object. |
Requirement 5: Dataset.coverageFunction#2 |
/req/CF-netCDF-1.6-GML-encoding/Dataset.coverageFunction#2 |
if the spatial/temporal domain is defined by auxiliary variables, the set of spatial/temporal CF_AuxiliaryCoordinateVariable that characterizes one or more CF-netCDF Variables shall realize a GML:Coverage.coverageFunction property, implemented as either a GML:CoverageFunction.GridFunction or a GML:CoverageFunction.CoverageMappingRule object. |
Requirement 6: Dataset.rangeSet |
/req/CF-netCDF-1.6-GML-encoding/Dataset.rangeSet |
The set of CF-netCDF CF_Variable that shares a common spatial/temporal coordinate system, shall realize a GML:Coverage.rangeSet property, implemented as a GML:RangeSet object. |
Requirement 7: Dataset.rangeType |
/req/CF-netCDF-1.6-GML-encoding/Dataset.rangeType |
The set of CF-netCDF CF_Variable that shares a common spatial/temporal coordinate system, shall realize a GML:Coverage.rangeType property, implemented as a SWE:DataRecord object. |
Requirement 8: Dataset.parametric-rangeSet |
/req/CF-netCDF-1.6-GML-encoding/Dataset.parametric-rangeSet |
The set of CF_AuxiliaryCoordinateVariable, which are not space or time dimension, shall contribute to realize a GML:Coverage.rangeSet property, implemented as a GML:RangeSet object. |
Requirement 9: Dataset.parametric-rangeType |
/req/CF-netCDF-1.6-GML-encoding/Dataset.parametric-rangeType |
the set of CF_AuxiliaryCoordinateVariable, which are not space or time dimension, shall contribute to realize a GML:Coverage.rangeType property, implemented as a SWE:DataRecord object. |
6.4 Encoding rules for CF-netCDF CoordinateSystem
CF-netCDF entity |
ISO Coverage entity |
Encoding Cardinality |
GML 3.2.1 entity |
Rule |
---|---|---|---|---|
Spatial/temporal Coordinate System a |
CV_DiscreteGridPointCoverage.SC_CRS.SC_CoordinateSystem | CV_DiscretePointCoverage.SC_CRS.SC_CoordinateSystem |
1 to 1 |
GML:Envelope or the subtype GML:EnvelopeWithTimePeriod |
10 |
CF_CoordinateVariable b
or
spatial/temporal CF_AuxiliaryCoordinateVariable d
|
CV_DiscreteGridPointCoverage.SC_CRS.SC_CoordinateSystem.SC_CoordinateSystemAxis |
1 to 1
|
GML:Envelope.axisLabels or GML:EnvelopeWithTimePeriod.axisLabels |
11, 12 |
CV_DiscretePointCoverage.SC_CRS.SC_CoordinateSystem.SC_CoordinateSystemAxis |
1 to 1
|
|||
GridMappingVariable |
CV_DiscreteGridPointCoverage.SC_CRS.SC_CoordinateSystem.type | CV_DiscretePointCoverage.SC_CRS.SC_CoordinateSystem.type |
1 to 0..1 |
the subype of GML_AbstractCRS pointed by the GML:Envelope.srsName attributec |
13 |
a Parametric coordinate systems are allowed in
CF-netCDF but not in CRS[1]. A coordinate system is of
type parametric if a physical or material property is used as a dimension
[21]; valuable examples are pressure in meteorology and density in
oceanography. It is possible that a CoordinateSystem entity does not contain
any axes allowed in coverage CRS (i.e. only parametric dimension axes). b A CF-netCDF spatial/temporal CoordinateVariable shared by a group of CF-Variables. Valid subtypes are: LatitudeCoordinate LongitudeCoordinate, VerticalCoordinate, TimeCoordinate, CoordinateSystem.CoordinateAxis ( with axis type attribute equal to: Lat, Lon, Height, GeoX, GeoY, GeoZ, RadialAzimuth, RadialElevation, RadialDistance, time). c Wherever a GML object is associated with a Coordinate Reference System, this is implemented by an attribute (srsName) pointing to a GML:AbstractCRS element [7]. d The set of spatial/temporal auxiliary coordinate variables (shared by a group of CF_Variables) maps to the coverage domain, whose geometry is represented by a single grid (ISO19123:CV_Grid) or point value pairs (ISO19123:CV_PointValuePair). |
Requirement 10: Dataset.boundedBy |
/req/CF-netCDF-1.6-GML-encoding/Dataset.boundedBy |
The spatial/temporal CoordinateSystem, which is comprised of either spatial and temporal CF_CoordinateVariable objects or spatial and temporal CF_AuxiliaryCoordinateVariable objects, shall realize a GML:Coverage.boundedBy property, implemented as a GML:Envelope object or its subtype GML:EnvelopeWithTimePeriod. |
Requirement 11: Dataset.boundedBy.axisLabels#1 |
/req/CF-netCDF-1.6-GML-encoding/Dataset.boundedBy.axisLabels#1 |
The set of spatial/temporal CF_CoordinateVariable comprised of a CoordinateSystem object, shall realize a GML:Envelope.axisLabels object or its subtype GML:EnvelopeWithTimePeriod.axisLabels. |
Requirement 12: Dataset.boundedBy.axisLabels#2 |
/req/CF-netCDF-1.6-GML-encoding/Dataset.boundedBy.axisLabels#2 |
The set of spatial/temporal CF_Auxiliary CoordinateVariable, comprised of a CoordinateSystem object related to CF_Variables, shall realize a GML:Envelope.axisLabels object or its subtype GML:EnvelopeWithTimePeriod.axisLabels. |
Requirement 13: Dataset.boundedBy.CRS |
/req/CF-netCDF-1.6-GML-encoding/Dataset.boundedBy.CRS |
The CF-netCDF GridMappingVariable, shall determine the subype of GML_AbstractCRS pointed by the GML:Envelope.srsName attribute. |
6.5 Encoding rules for CF-netCDF DiscreteSamplingGeometry
CF-netCDF entity |
ISO Coverage entity |
Encoding. Cardinality |
GMLCOV entity |
GML 3.2.1 entity |
Rule |
---|---|---|---|---|---|
Spatial/temporal CF_InstanceVariablea
|
CV_DiscreteGridPointCoverage.SC_CRS.SC_CoordinateSystem.SC_CoordinateSystemAxis or CV_DiscretePointCoverage.SC_CRS.SC_CoordinateSystem.SC_CoordinateSystemAxis |
1 to 1 |
-- |
GML:Envelope.axisLabels or GML:EnvelopeWithTimePeriod.axisLabels |
14 (12) |
ISO19123:CV_DiscreteGridPointCoverage.CV_GridValueMatrix.CV_GridPoint.gridCoord |
1 to 1 |
GMLCOV:GridCoverage.domainSet | GMLCOV:RectifiedGridCoverage.domainSet | GMLCOV:ReferenceableGridCoverage.domainSet |
GML:DomainSet realized as: GML:Grid or its subtypes: GML:RectifiedGrid | GML:ReferenceableGrid |
14 (3) |
|
ISO19123:CV_DiscretePointCoverage.CV_PointValuePair.geometry.GM_Point |
1 to 1 |
GMLCOV:MultiPointCoverage.domainSet |
GML:DomainSet realized as: GML:MultiPoint |
14 (3) |
|
ISO19123:CV_DiscreteGridPointCoverage.CV_GridValueMatrix.sequencingRule |
1 to 0..1 |
GMLCOV:Coverage.coverageFunction |
GML:CoverageFunction.GridFunction |
14 (5) |
|
ISO19123:CV_DiscreteGridPointCoverage.CV_GridValueMatrix.startSequence |
1 to 0..1 |
GML:CoverageFunction.CoverageMappingRule |
14 (5) |
||
ISO19123:CV_DiscretePointCoverage.CoverageFunction e |
|||||
CF_MultidimensionalArray.InstanceDimension b |
ISO19123:CV_DiscreteGridPointCoverage.CV_GridValuesMatrix.values |
1 to 0..1 |
GMLCOV: Coverage.rangeSet |
GML:RangeSet |
15 |
ISO19123:CV_DiscretePointCoverage. CV_PointValuePair.valuef |
1 to 0..1 |
||||
ISO19123:CV_DiscreteGridPointCoverage.RangeType.AttributesType entry (i.e. AttributeName, TypeName) |
1 to 0..1 |
GMLCOV: Coverage.rangeType |
SWE:DataRecord |
16 |
|
CV_DiscretePointCoverage.RangeType.AttributesType entry (i.e. AttributeName, TypeName) |
1 to 0..1 |
||||
CF_RaggedArray.SampleDimension
and
CF_IndexVariable c or CF_CountVariable c |
ISO19123:CV_DiscreteGridPointCoverage.CV_GridValuesMatrix.values |
1 to 0..1 |
GMLCOV: Coverage.rangeSet |
GML:RangeSet |
17 |
ISO19123:CV_DiscretePointCoverage. CV_PointValuePair.value f |
1 to 0..1 |
||||
ISO19123:CV_DiscreteGridPointCoverage.RangeType.AttributesType entry (i.e. AttributeName, TypeName) |
1 to 0..1 |
GMLCOV: Coverage.rangeType |
SWE:DataRecord |
18 |
|
CV_DiscretePointCoverage.RangeType.AttributesType entry (i.e. AttributeName, TypeName) |
1 to 0..1 |
||||
CF_Point FeatureCollection domain d |
ISO19123:CV_DiscreteCoverage.domainExtent and CV_DiscreteCoverage.SC_CRS.SC_CoordinateSystem.SC_CoordinateSystemAxis
|
1 to 1 |
GMLCOV: Coverage.domainSet
|
GML:EnvelopeWithTimePeriod.axisLabels = "x y t" | "lat lon t" | "lon lat t" |
19 |
CF_TimeSerie FeatureCollection domain e |
ISO19123:CV_DiscreteCoverage.domainExtent |
1 to 1 |
GMLCOV: Coverage.domainSet |
GML:EnvelopeWithTimePeriod.axisLabels = "x y t" | "lat lon t" | "lon lat t" |
20 |
CF_Trajectory FeatureCollection domain f |
ISO19123:CV_DiscreteCoverage.domainExtent |
1 to 1 |
GMLCOV: Coverage.domainSet |
GML:EnvelopeWithTimePeriod.axisLabels = "x y t" | "lat lon t" | "lon lat t" |
21 |
CF_Profile FeatureCollection domain g |
ISO19123:CV_DiscreteCoverage.domainExtent |
1 to 1 |
GMLCOV: Coverage.domainSet |
GML:EnvelopeWithTimePeriod.axisLabels = "x y z t" | "lat lon z t" | "lon lat z t" |
22 |
CF_TimeSeriesProfile FeatureCollection |
ISO19123:CV_DiscreteCoverage.domainExtent |
1 to 1 |
GMLCOV: Coverage.domainSet |
GML:EnvelopeWithTimePeriod.axisLabels = "x y z t" | "lat lon z t" | "lon lat z t" |
23 |
CF_TrajectoryProfile FeatureCollection |
ISO19123:CV_DiscreteCoverage.domainExtent |
1 to 1 |
GMLCOV: Coverage.domainSet |
GML:EnvelopeWithTimePeriod.axisLabels = "x y z t" | "lat lon z t" | "lon lat z t" |
24 |
a spatial/temporal CF_AuxiliaryCooridnateVariable
which has as only dimension the "instance" dimension; it is used to
differentiate the Feature instances comprised of a Feature Collection -e.g.
X(station), lat(profile), etc. b CF_MultidimensionalArray instance dimension(s) may be used to generate an instance dimensionality for the coverage range-set. c CF_RaggedArray sample dimension(s) and variables used to index the observation elements (i.e. either CF_IndexVariable or CF_CountVariable) may be used to generate an instance dimensionality for the coverage range-set. d Point Feature Collection has the following mandatory space-time coordinates x(i) y(i) t(i); i=collection instance. e TimeSerie Feature Collection has the following mandatory space-time coordinates x(i) y(i) t(i,o); i=collection instance; o=observation. f Trajectory Feature Collection has the following mandatory space-time coordinates x(i,o) y(i,o) t(i,o); i=collection instance; o=observation. g Profile Feature Collection has the following mandatory space-time coordinates x(i) y(i) z(i,o) t(i); i=collection instance; o=observation. h TimeSerieProfile Feature Collection has the following mandatory space-time coordinates x(i) y(i) z(i,p,o) t(i,p); i=collection instance; p=profile; o=observation. i TrajectoryProfile Feature Collection has the following mandatory space-time coordinates x(i,p) y(i,p) z(i,p,o) t(i,p); i=collection instance; p=profile; o=observation. |
Requirement 14: InstanceVariable |
/req/CF-netCDF-1.6-GML-encoding/InstanceVariable |
each CF_InstanceVariable object shall be encoded as a spatial/temporal CF_AuxiliaryCooridnateVariable which has as only dimension the “instance” dimension. |
Requirement 15: RangeInstanceDimension#1 |
/req/CF-netCDF-1.6-GML-encoding/RangeInstanceDimension#1 |
each CF_MultidimensionalArray.InstanceDimension object shall contribute to realize a GML:Coverage.rangeSet property, implemented as a GML:RangeSet object. |
Requirement 16: RangeInstanceDimension#2 |
/req/CF-netCDF-1.6-GML-encoding/RangeInstanceDimension#2 |
each CF_MultidimensionalArray.InstanceDimension object shall contribute to realize a GML:Coverage.rangeType property, implemented as a SWE:DataRecord object. |
Requirement 17: RangeInstanceDimension#3 |
/req/CF-netCDF-1.6-GML-encoding/RangeInstanceDimension#3 |
each CF_RaggedArray.SampleDimension object along with associated CF_IndexVariable or CF_CountVariable shall contribute to realize a GML:Coverage.rangeSet property, implemented as a GML:RangeSet object. |
Requirement 18: RangeInstanceDimension#4 |
/req/CF-netCDF-1.6-GML-encoding/RangeInstanceDimension#4 |
each CF_RaggedArray.SampleDimension object along with associated CF_IndexVariable or CF_CountVariableshall contribute to realize a GML:Coverage.rangeType property, implemented as a SWE:DataRecord object. |
Requirement 19: PointFeatureCollection.axisLabels |
/req/CF-netCDF-1.6-GML-encoding/PointFeatureCollection.axisLabels |
each CF_Point FeatureCollection shall realize a GML:EnvelopeWithTimePeriod.axisLabels with value equal to “x y t” | “lat lon t” | “lon lat t”. |
Requirement 20: TimeSerieFeatureCollection.axisLabels |
/req/CF-netCDF-1.6-GML-encoding/TimeSerieFeatureCollection.axisLabels |
each CF_TimeSerie FeatureCollection shall realize a GML:EnvelopeWithTimePeriod.axisLabels with value equal to “x y t” | “lat lon t” | “lon lat t”. |
Requirement 21: TrajectoryFeatureCollection.axisLabels |
/req/CF-netCDF-1.6-GML-encoding/TrajectoryFeatureCollection.axisLabels |
each CF_Trajectory FeatureCollection shall realize a GML:EnvelopeWithTimePeriod.axisLabels with value equal to “x y t” | “lat lon t” | “lon lat t”. |
Requirement 22: ProfileFeatureCollection.axisLabels |
/req/CF-netCDF-1.6-GML-encoding/ProfileFeatureCollection.axisLabels |
each CF_Profile FeatureCollection shall realize a GML:EnvelopeWithTimePeriod.axisLabels with value equal to “x y z t” | “lat lon z t” | “lon lat z t”. |
Requirement 23: TimeSeriesProfileFeatureCollection.axisLabels |
/req/CF-netCDF-1.6-GML-encoding/TimeSeriesProfileFeatureCollection.axisLabels |
each CF_TimeSeriesProfile FeatureCollection shall realize a GML:EnvelopeWithTimePeriod.axisLabels with value equal to “x y z t” | “lat lon z t” | “lon lat z t”. |
Requirement 24: TrajectoryProfileFeatureCollection.axisLabels |
/req/CF-netCDF-1.6-GML-encoding/TrajectoryProfileFeatureCollection.axisLabels |
each CF_TrajectoryProfile FeatureCollection shall realize a GML:EnvelopeWithTimePeriod.axisLabels with value equal to “x y z t” | “lat lon z t” | “lon lat z t”. |
7 Service operation response returning a CF-netCDF dataset
7.1 Concrete coverage types
For WxS, the GML encoding is generally used for the purpose of defining response semantics. A server may deliver a result dataset in some other format –e.g. CF-netCDF. However, it is required that result datasets, regardless of what the encoding chosen is, have a content which is consistent with the GML specification [OGC 09-146r1].
Requirement 25: ServiceOperationResponse |
/req/CF-netCDF-1.6-Data-format/ServiceOperationResponse |
any service operation response returning successfully a CF-netCDF dataset, shall return a concrete sub-type of the GMLCOV:Coverage class, as showed in Figure 4. |
7.2 Concrete CF-netCDF data format
The schema depicted in Figure 8 introduces the concrete CF-netCDF data format used to return requested datasets.
Requirement 26: coverageFormat-structure |
/req/CF-netCDF-1.6-Data-format/coverageFormat-structure |
The CF-netCDF data format used to return requested GMLCOV:Coverages shall adhere to Figure 8. |
7.3 GridCoverageFile class
The response to a successful operation requesting a CF-netCDF dataset is a concrete sub-type of GMLCOV:Coverage which is encoded as a GridCoverageFile, an abstract entity which has three valuation subclasses: BinaryFile, XMLDocument, and Web address.
NOTE: a CF-netCDF BinaryFile may be accessed directly or can be referenced by: (a) an XMLDocument object (e.g. an ncML dataset); (b) an Web address object.
7.4 BinaryFile class
BinaryFile class has two concrete sub-types: CF-netCDF-File and CF-netCDF-64bit-File. They represent a netCDF ver. 3.0 binary file, complying with the CF ver. 1.1 conventions. These binary encodings are based on the “OGC NetCDF Binary Encoding Extension Standard: NetCDF Classic and 64-bit Offset Format” [9].
MIME type string used to refer to CF-netCDF binary encoding is:
application/CF-netCDF
Note: the only MIME type in use presently is “application/x-netcdf” and it is not officially registered. Thus, the MIME types discussed below are new and application for registration will be made to IANA.
7.5 XMLDataset class
XMLDataset class has three concrete sub-types: NcML-Dataset, GML-3.2.1-Coverage, and NcML-G-Dataset.
7.5.1 NcML-Dataset
NcML-Dataset represents a ncML ver. 1.0 document [10]. A ncML document provides the XML encoding of one or more CF-netCDF files. For performances sake, a ncML document generally encodes only the CF-netCDF coverage metadata leaving the data values in the binary format and providing pointers (i.e. references) to those.
A ncML document may point to data values: (a) directly –i.e. referencing a CF-netCDF binary file; (b) including an Web address (i.e. HTTP URL)–which in turn reference a CF-netCDF file.
MIME type string used to refer to ncML-G dataset encoding is:
application/ncML+xml
This xml media type is still unregistered.
7.5.2 GML-3.2.1-Coverage
GML-3.2.1-Coveragerepresents the GML-based coverage encoding as specified by [OGC 09-146r1]. Such a document is generated applying the requirements contained in clause 6 and summarized in Table 1, Table 2, and Table 3.
MIME type string used to refer to GML coverage encoding is [OGC 09-144r1]:
application/gml+xml
7.5.3 NCML-G-Dataset
NcML-G-Datasetrepresents a ncML-G ver. 1.0 document [10]. A ncML-G document extends a ncML-Dataset by including a GML Coverage element generated from the ncML dataset itself. In fact, this language was conceived to explicitly encode the two data models mapping. This may be very useful to fully support both GIS and netCDF applications.
MIME type string used to refer to ncML-G dataset encoding is:
application/ncML+xml
This xml media type is still unregistered.
7.6 Web address class
This class realizes a well-adopted online reference to a CF-netCDF file. In fact, Web address is a relatively simple approach (i.e. an HTTP URL) that allows applications to access remote (optionally, time-aggregated collections of) netCDF-CF files (virtual datasets –often terabyte sized) through netCDF API –as if they were local netCDF files.
A Web address may also be contained by any concrete XMLDataset object to reference a CF-netCDF binary file.
Web address may be encoded using one of the following options: i) a specific MIME type for a well-known address syntax; ii) an HTML document containing a HTTP URL; iii) a simple text –semantically, this is a very dull solution, and is deprecated.
NOTE: Result coverages, regardless of what the encoding chosen is, have a contents which is consistent with the GMLCOV:Coverage specification –see clause 6 and Table 1, Table 2, and Table 3.
Requirement 27: coverages-format |
/req/CF-netCDF-1.6-Data-format/coverages-format |
For a WxS service implementing this extension, the contents of the response to a successful GetCoveragerequest shall be encoded in one of the following coverage encoding formats: CF-netCDF-File, CF-netCDF-64bit-File, ncML-Dataset, GML-3.2.1-Coverage, ncML-G-Dataset, Web-address. |
Requirement 28: binaryFile-MIME-type |
/req/CF-netCDF-1.6-Data-format/binaryFile-MIME-type |
WxS server implementing this specification shall use the following MIME type string to refer to CF-netCDF binary encoding: “application/CF-netCDF”. |
Requirement 29: ncML-Dataset-MIME-type |
/req/CF-netCDF-1.6-Data-format/ncML-Dataset-MIME-type |
WxS server implementing this specification shall use the following MIME type string to refer to ncML-Dataset encoding:“application/ncML+xml”. |
Requirement 30: Web-address-reference |
/req/CF-netCDF-1.6-Data-format/Web-address-reference |
WxS server implementing this specification shall use a MIME type string to refer to a well-known Web address syntax” |
Requirement 31: Web-address-encoding |
/req/CF-netCDF-1.6-Data-format/Web-address-encoding |
In a service operation successful response, a coverage returned as a generic Web address shall be encoded as an HTML document containing the HTTP URL. |
7.7 WxS operation response: ncML-Dataset document structure
The netCDF community makes use of ncML to encode complex netCDF data structures. In fact, it is possible to use ncML elements to define a virtual netCDF dataset which consists of one or more netCDF data files.
In a service operation response returning a ncML document, the discrete coverage values are encoded and returned according to one or more of the following options:
(i) XML encoded values conforming to the ncML schema: this ncML section encodes the content of a CF-netCDF binary file.
(ii) CF-NetCDF binary files (i.e. BinaryFile objects) attached to an ncML document.
(iii) Web address encoded in the ncML schema: actually, this ncML section references the content of a CF-netCDF binary file.
In any case, the coverage metadata section is encoded in the ncML document as elements conforming to the ncML schema.
For instance, Figure 9 depicts a complex ncML-Dataset (and optionally ncML-G-Dataset) structure transferred as a successful WxS operation response.
This type of encoding allows to return very complex data packages. As to the considered example, the returned coverage (i.e. dataset) values are encoded as: (a) two ncML DataBlocks elements (encoding values defined in a couple of CF-netCDF binary files); (b) a Web address pointing to the values defined in a third CF-netCDF file; (c) binary attachments –i.e. the data values defined in a fourth and fifth CF-netCDF binary file enclosed as ncML binary attachments.
For ncML-Dataset, coverage metadata are encoded as ncML elements. Besides, the ncML-G-Dataset extension adds a related grid coverage description using the GML elements (see Figure 9); thus, the metadata elements mapping is explicitly reported.
8 WxS operation response message: Multipart data encoding
Multipart data encoding is a technique for transferring multiple contents inside a single HTTP (or HTTPS) Response. In the context of WxS operation response it can be adopted whenever a binary content must be transferred.
Different strategies should be adopted for the different possible protocol bindings and encoding formats. Table 5 shows the two possibilities:
Case |
Request |
Target |
Possible Responses |
Specification |
---|---|---|---|---|
#1 |
SOAP |
ncML-Dataset |
SOAP with ncML Attachment |
SOAP Messages with Attachments 1.2 / MTOM-XOP |
#2 |
HTTP (GET or POST) |
ncML-Dataset |
MIME Multipart with ncML parts |
MIME multipart/related |
The WxS operation response can be encoded in a Multipart message. The encoding strategy is different depending on the use of SOAP or HTTP binding.
For multipart encoding of ncML-Dataset in SOAP responses, the MTOM-XOP specification is adopted according to the OGC “Web Services Common Standard” (OGC 06-121r9).
For multipart encoding of ncML-Dataset in HTTP responses the MIME Multipart/related standard is adopted.
Requirement 32: HTTP-multipart-encoding |
/req/CF-netCDF-1.6-Data-format/HTTP-multipart-encoding |
In a service operation successful response, a coverage returned in a HTTP (or HTTPS) multipart message shall be encoded as MIME Multipart/Related (RFC 2045, RFC 2046) |
8.1 Case #1and #2: SOAP or HTTP Response returning ncML data
In case of ncML data the response can refer to a local or remote document. Local resources are always attached to the message, while remote resources can be attached as a copy to avoid multiple access. The HTTP or SOAP response must be encoded along with its attachments in a MIME Multipart/Related message using the rules described in Table 5. At least one multipart section will contain XML data instead of binary data.
Requirement 33: SOAP-ncMLdata-multipart-encoding |
/req/CF-netCDF-1.6-Data-format/SOAP-ncMLdata-multipart-encoding |
In a service operation successful response, a coverage returned as ncML data in a SOAP multipart message shall be encoded with the SOAP Envelope section in the root part of the multipart message. |
Requirement 34: HTTP-ncMLdata-multipart-encoding |
/req/CF-netCDF-1.6-Data-format/HTTP-ncMLdata-multipart-encoding |
In a service operation successful response, a coverage returned as ncML data in a HTTP (or HTTPS) multipart message shall be encoded with the ncML metadata section in the root part of the multipart message. |
An ncML dataset include either coverage data values or a pointer to them –i.e. a pointer to one or more netCDF binary files.
Therefore, returned ncML documents may directly encode coverage data values or point to one or more netCDF binary files. Example B.3.3 shows a response returning an ncML document which points to a netCDF binary file, which is included in the MIME Multipart/Related message. Both ncML and netCDF binary are remote resources referred by the SOAP document.
Examples B.3.1 and B.3.2 describe responses returning ncML documents which encode coverage data values.
Example B.3.3: SOAP Response returning an ncML document referring a netCDF binary file included in the message.
MIME-Version: 1.0
Content-Type:
multipart/related;
boundary="----=_NextPart_000_0000_93251752.3C5526C0"
------=_NextPart_000_0000_93251752.3C5526C0
Content-Type:
application/xml; charset="UTF-8"
<?xml
version="1.0" encoding="UTF-8"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope">
<soap:Header/>
<soap:Body>
<Coverages
xmlns="http://www.opengis.net/wcs/1.1/ows"
xmlns:ows="http://www.opengis.net/ows"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:schemaLocation="http://www.opengis.net/wcs/1.1/ows ../owsCoverages.xsd
http://www.opengis.net/ows ../../../ows/1.0.0/ows19115subset.xsd">
<Coverage>
<ows:Title>Example</ows:Title>
<ows:Abstract>Example of
coverage</ows:Abstract>
<Identifier>Example</Identifier>
<Reference
href="cid:bfa8e8ac@example.net" />
<Reference
href="http://example.net/data/CoverageDataValues.nc" />
<Reference
href="http://example.net/data/Dataset.ncml" />
</Coverage>
</Coverages>
</soap:Body>
</soap:Envelope>
------=_NextPart_000_0000_93251752.3C5526C0
Content-Type: application/xml
Content-ID:
<bfa8e8ac@example.net>
...(metadata content)...
------=_NextPart_000_0000_93251752.3C5526C0
Content-Type:
application/CF-netCDF
Content-Transfer-Encoding:
base64
Content-ID: <c3499c27@example.net>
Content-Location:
http://example.net/data/CoverageDataValues.nc……
...(netCDF binary data
content, pointed by the ncML dataset)...
------=_NextPart_000_0000_93251752.3C5526C0
Content-Type:
application/ncML+xml
Content-Transfer-Encoding:
base64
Content-ID:
<1324bc12@example.net>
Content-Location:
http://example.net/data/Dataset.ncml
…..
...( ncML dataset
content)...
------=_NextPart_000_0000_93251752.3C5526C0--
NcML documents may contain coverage data values encoded as binary sections in base64 encoding. They can be left enclosed in the ncML document or, for efficiency purposes, they can be extracted and encoded in a format other than base64. Such improvement can be obtained serializing the ncML values element using nested multipart messages according to the MTOM/XOP specifications.
The following two encoding examples report multipart sections for ncML with binary data included and extracted using XOP, respectively.
Requirement 35: ncMLdata-binary-multipart-encoding |
/req/CF-netCDF-1.6-Data-format/ncMLdata-binary-multipart-encoding |
In a service operation successful response, a coverage returned as ncML data in a multipart message shall encode binary values either as XML MIME inline content or as XOP section. |
8.1.1 Binary data included
Example 8.1.1: Response excerpt showing a ncML dataset containing coverage data values encoded as a binary section in base64 encoding.
multipart section containing a ncML dataset with binary data
included (section outlined by a pale blue background)
------=_NextPart_000_0000_93251752.3C5526C0
Content-Type:
application/CF-netCDF
Content-ID:
<1324bc12@example.net>
Content-Location:
http://example.net/data/data2.ncml
<?xml version="1.0" encoding="UTF-8"?>
<netcdf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">
<dimension name="longitude" length="96"/>
<dimension name="bounds_axis" length="2"/>
<dimension name="latitude" length="73"/>
<dimension name="air_pressure" length="15"/>
<dimension name="time" length="140"/>
<attribute name="Conventions" type="string" value="CF-1.1"/>
<attribute name="source" type="string" value="Data from model run ABC123"/>
<variable name="longitude" shape="longitude" type="double">
<attribute name="standard_name" type="string" value="longitude"/>
<attribute name="units" type="string" value="degrees_east"/>
<attribute name="bounds" type="string" value="bound_longitude"/>
<attribute name="axis" type="string" value="X"/>
<values increment="3.75" npts="96" start="0.0"/>
</variable>
<variable name="bound_longitude" shape="longitude bounds_axis" type="double"> </variable>
<variable name="latitude" shape="latitude" type="double">
<attribute name="standard_name" type="string" value="latitude"/>
<attribute name="units" type="string" value="degrees_north"/>
<attribute name="bounds" type="string" value="bound_latitude"/>
<attribute name="axis" type="string" value="Y"/>
<values increment="-2.5" npts="73" start="90.0"/>
</variable>
<variable name="bound_latitude" shape="latitude bounds_axis" type="double"> </variable>
<variable name="air_pressure" shape="air_pressure" type="float">
<attribute name="standard_name" type="string" value="air_pressure"/>
<attribute name="units" type="string" value="hPa"/>
<attribute name="axis" type="string" value="Z"/>
<attribute name="positive" type="string" value="down"/>
<values increment="70.71429" npts="15" start="10.0"/>
</variable>
<variable name="time" shape="time" type="double">
<attribute name="calendar" type="string" value="360_day"/>
<attribute name="standard_name" type="string" value="time"/>
<attribute name="units" type="string" value="days since 2289-1-1"/>
<attribute name="bounds" type="string" value="bound_time"/>
<attribute name="axis" type="string" value="T"/>
<values increment="360.0" npts="140" start="510.0"/>
</variable>
<variable name="bound_time" shape="time bounds_axis" type="double">
</variable>
<variable name="air_temperature" shape="time air_pressure latitude longitude" type="float">
<attribute name="standard_name" type="string" value="air_temperature"/>
<attribute name="units" type="string" value="Kir_temperature"/>
<attribute name="long_name" type="string" value="temperature on pressure level"/>
<attribute name="cell_methods" type="string" value="longitude: latitude: mean time: mean (interval: 4 h)"/>
<attribute name="_FillValue" type="float" value="-1.073742e+09"/>
<values
xm:xmlmime="binary/octet-stream">Li4uKGJhc2U2NCBlbmNvZGVkIGRhdGEpLi4u...(base64
encoded data)...BlbmNvZGVkIGRhdGEpLi4u==</values>
</variable>
</netcdf>
------=_NextPart_000_0000_93251752.3C5526C0--
8.1.2 Binary extracted using XOP
Example 8.1.2: HTTP Multipart/Related response showing a ncML dataset containing coverage data values extracted and encoded in a format other than base64 by serializing the <values> element using nested multipart messages according to the MTOM/XOP specifications.
multipart section containing a ncML
dataset with binary data extracted using XOP
(section outlined by a pale blue background)
------=_NextPart_000_0000_93251752.3C5526C0
MIME-Version: 1.0
Content-Type:
Multipart/Related;boundary=MIME_boundary;
type="application/xop+xml";
start="<12dea45c@example.net >";
startinfo="application/ncML+xml”;
--MIME_boundary
Content-Type: application/xop+xml; charset=UTF-8;
type="application/ncML+xml; action=\"ProcessData\""
Content-ID: <12dea45c@example.net>
Content-Location: http://example.net/data/data2.ncml
<?xml version="1.0" encoding="UTF-8"?>
<netcdf
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">
<dimension name="longitude" length="96"/>
<dimension name="bounds_axis" length="2"/>
<dimension name="latitude" length="73"/>
<dimension name="air_pressure" length="15"/>
<dimension name="time" length="140"/>
<attribute name="Conventions" type="string" value="CF-1.1"/>
<attribute name="source" type="string" value="Data from model run ABC123"/>
<variable name="longitude" shape="longitude" type="double">
<attribute name="standard_name" type="string" value="longitude"/>
<attribute name="units" type="string" value="degrees_east"/>
<attribute name="bounds" type="string" value="bound_longitude"/>
<attribute name="axis" type="string" value="X"/>
<values increment="3.75" npts="96" start="0.0"/>
</variable>
<variable name="bound_longitude" shape="longitude bounds_axis" type="double"> </variable>
<variable name="latitude" shape="latitude" type="double">
<attribute name="standard_name" type="string" value="latitude"/>
<attribute name="units" type="string" value="degrees_north"/>
<attribute name="bounds" type="string" value="bound_latitude"/>
<attribute name="axis" type="string" value="Y"/>
<values increment="-2.5" npts="73" start="90.0"/>
</variable>
<variable name="bound_latitude" shape="latitude bounds_axis" type="double"> </variable>
<variable name="air_pressure" shape="air_pressure" type="float">
<attribute name="standard_name" type="string" value="air_pressure"/>
<attribute name="units" type="string" value="hPa"/>
<attribute name="axis" type="string" value="Z"/>
<attribute name="positive" type="string" value="down"/>
<values increment="70.71429" npts="15" start="10.0"/>
</variable>
<variable name="time" shape="time" type="double">
<attribute name="calendar" type="string" value="360_day"/>
<attribute name="standard_name" type="string" value="time"/>
<attribute name="units" type="string" value="days since 2289-1-1"/>
<attribute name="bounds" type="string" value="bound_time"/>
<attribute name="axis" type="string" value="T"/>
<values increment="360.0" npts="140" start="510.0"/>
</variable>
<variable name="bound_time" shape="time bounds_axis" type="double">
</variable>
<variable name="air_temperature" shape="time air_pressure latitude longitude" type="float">
<attribute name="standard_name" type="string" value="air_temperature"/>
<attribute name="units" type="string" value="Kir_temperature"/>
<attribute name="long_name" type="string" value="temperature on pressure level"/>
<attribute name="cell_methods" type="string" value="longitude: latitude: mean time: mean (interval: 4 h)"/>
<attribute name="_FillValue" type="float" value="-1.073742e+09"/>
<values xm:xmlmime="binary/octet-stream"><xop:Include
xmlns:xop='http://www.w3.org/2004/08/xop/include'
href='cid:bd43gh2y@example.net'/>
</values>
</variable>
</netcdf>
--MIME_boundary
Content-Type:
application/octet-stream
Content-Transfer-Encoding:
binary
Content-ID:
<bd43gh2y@example.net>
….
...(binary encoded data)...
--MIME_boundary--
------=_NextPart_000_0000_93251752.3C5526C0--
8.2 Content-ID generation
The RFC 2045 and RFC 2046 describe the use of the Content-ID header to identify the different sections of a multipart message. It allows cross-reference of sections, but since it is not required for all the usages, it is specified as optional. In some cases the Content-Location header can be used for the same objective. For netCDF datasets the cross-reference between sections (e.g. between metadata and binary section) is required, therefore the presence of the Content-ID is considered mandatory.
Requirement 36: netCDF-multipart-encoding-id |
/req/CF-netCDF-1.6-Data-format/netCDF-multipart-encoding-id |
In a service operation successful response, a coverage returned as multipart message shall identify each multipart section with a valid “Content-ID” header. |
According to [RFC 2045] “Content-ID values must be generated to be world-unique”. In WxS operation responses it is suggested that Content-ID has the following format:
Content-ID : = Local “@” Domain
where Local is a locally unique identifier and Domain is an Internet domain administered by the coverages provider. The domain names assignment process assures the unicity. The locally unique identifier is opaque, meaning that no semantics is associated to the local name. For example it could be generated with a hashing function from coverages metadata.
8.3 OWS Common Manifest
According to the OGC “Web Services Common Standard” (OGC 06-121r9), if the coverage dataset is provided with a Manifest the message can be encoded as Multipart/Related. In such case the manifest is in the root part, while the netCDF coverage is encoded in other sections. Exploiting the recursive structure of multipart messages, the netCDF sections can be structured as explained above in SOAP or HTTP multipart sub-messages.
Annex : Conformance Class Abstract Test Suite (Normative)
A CF-netCDF 3.0 encoding using GML 3.2.1 Coverage application schema must satisfy the following system characteristics to be conformant with this specification.
A.1 Conformance Test Classes: CF-netCDF-1.6
This document establishes three conformance classes CF-netCDF ver 1.6 GML encoding instance, with URIs:
1. http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding
2. http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format
3. http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Multipart-encoding
A.2 CF-netCDF-1.6-GML-encoding conformance class
This is the GML encoding conformance class for this standard.
There is a dependency on: CF-netCDF Data Model extension specification (OGC 11-165r2), Geography Markup Language (GML) Encoding Standard, version 3.2.1 (OGC 07-036), and OGC® GML Application Schema for Coverages (OGC 09-146r1)
The following clauses relate to the conformance class identified with the URI: http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding
Conformance Class |
|
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding |
|
Requirements |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding |
Dependency |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-ISOMapping Geography Markup Language (GML) Encoding Standard, version 3.2.1 (OGC 07-036) OGC® GML Application Schema for Coverages (OGC 09-146r1) |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/CF-dataset |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/CF-dataset |
Test purpose |
CF-netCDF datasets, its subtypes and its realizations CF-netCDF RaggedArray and CF-netCDF MultidimensionalArray shall realize one of the following GMLCOV:Coverage subtypes: GMLCOV:GridCoverage, GMLCOV:RectifiedGridCoverage, GMLCOV:ReferenceableGridCoverage, GMLCOV:MultiPointCoverage. |
Test method |
verify that the CF-netCDF datasets, its subtypes and its realizations (i.e. CF-netCDF RaggedArray and CF-netCDF MultidimensionalArray) realize one of the following GMLCOV:Coverage subtypes: GMLCOV:GridCoverage, GMLCOV:RectifiedGridCoverage, GMLCOV:ReferenceableGridCoverage, GMLCOV:MultiPointCoverage. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/Dataset.domainSet#1 |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/Dataset.domainSet#1 |
Test purpose |
The set of spatial/temporal CF_CoordinateVariable (comprised of a common coordinate system) that characterize a CF-netCDF dataset, shall realize a GML:Coverage.domainSet property, implemented as: GML:MultiPoint, GML:Grid object or its subtypes: GML:RectifiedGrid, GML:ReferenceableGrid. |
Test method |
Verify that the set of spatial/temporal CF_CoordinateVariable (comprised of a common coordinate system) that characterize a CF-netCDF dataset, realize a GML:Coverage.domainSet property, implemented as: GML:MultiPoint, GML:Grid object or its subtypes: GML:RectifiedGrid, GML:ReferenceableGrid |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/Dataset.domainSet#2 |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/Dataset.domainSet#2 |
Test purpose |
If the spatial/temporal domain is defined by auxiliary variables, the set of spatial/temporal CF_AuxiliaryCoordinateVariable that characterizes a CF-netCDF Variable, shall realize a GML:Coverage.domainSet property, implemented as: GML:MultiPoint, GML:Grid object or its subtypes: GML:RectifiedGrid, GML:ReferenceableGrid. |
Test method |
If the spatial/temporal domain is defined by auxiliary variables, verify that the set of spatial/temporal CF_AuxiliaryCoordinateVariable that characterizes a CF-netCDF Variable, realizes a GML:Coverage.domainSet property, implemented as: GML:MultiPoint, GML:Grid object or its subtypes: GML:RectifiedGrid, GML:ReferenceableGrid. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/Dataset.coverageFunction#1 |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/Dataset.coverageFunction#1 |
Test purpose |
If the mapping from the domain to the range of the coverage is not characterized by the default values for GML:Coverage (see [7]), the set of spatial/temporal CF_CoordinateVariable (comprised of a common coordinate system) that characterizes a CF-netCDF dataset shall realize a GML:Coverage.coverageFunction property, implemented as either a GML:CoverageFunction.GridFunction or a GML:CoverageFunction.CoverageMappingRule object. |
Test method |
If the mapping from the domain to the range of the coverage is not characterized by the default values for GML:Coverage (see [7]), verify that the set of spatial/temporal CF_CoordinateVariable (comprised of a common coordinate system) that characterizes a CF-netCDF dataset realizes a GML:Coverage.coverageFunction property, implemented as either a GML:CoverageFunction.GridFunction or a GML:CoverageFunction.CoverageMappingRule object. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/Dataset.coverageFunction#2 |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/Dataset.coverageFunction#2 |
Test purpose |
If the spatial/temporal domain is defined by auxiliary variables, the set of spatial/temporal CF_AuxiliaryCoordinateVariable that characterizes one or more CF-netCDF Variables shall realize a GML:Coverage.coverageFunction property, implemented as either a GML:CoverageFunction.GridFunction or a GML:CoverageFunction.CoverageMappingRule object. |
Test method |
If the spatial/temporal domain is defined by auxiliary variables, verify that the set of spatial/temporal CF_AuxiliaryCoordinateVariable that characterizes one or more CF-netCDF Variables realizes a GML:Coverage.coverageFunction property, implemented as either a GML:CoverageFunction.GridFunction or a GML:CoverageFunction.CoverageMappingRule object. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/Dataset.rangeSet |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/Dataset.rangeSet |
Test purpose |
The set of CF-netCDF CF_Variable that share a common spatial/temporal coordinate system, shall realize a GML:Coverage.rangeSet property, implemented as a GML:RangeSet object. |
Test method |
Verify that the set of CF-netCDF CF_Variable that shares a common spatial/temporal coordinate system, realizes a GML:Coverage.rangeSet property, implemented as a GML:RangeSet object. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/Dataset.rangeType |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/Dataset.rangeType |
Test purpose |
The set of CF-netCDF CF_Variable that share a common spatial/temporal coordinate system, shall realize a GML:Coverage.rangeType property, implemented as a SWE:DataRecord object. |
Test method |
Verify that the set of CF-netCDF CF_Variable that shares a common spatial/temporal coordinate system, realizes a GML:Coverage.rangeType property, implemented as a SWE:DataRecord object. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/Dataset.parametric-rangeSet |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/Dataset.parametric-rangeSet |
Test purpose |
The set of CF_AuxiliaryCoordinateVariable, which are not space or time dimension, shall contribute to realize a GML:Coverage.rangeSet property, implemented as a GML:RangeSet object. |
Test method |
Verify that the set of CF_AuxiliaryCoordinateVariable, which are not space or time dimension, contribute to realize a GML:Coverage.rangeSet property, implemented as a GML:RangeSet object. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/Dataset.parametric-rangeType |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/Dataset.parametric-rangeType |
Test purpose |
The set of CF_AuxiliaryCoordinateVariable, which are not space or time dimension, shall contribute to realize a GML:Coverage.rangeType property, implemented as a SWE:DataRecord object. |
Test method |
Verify that the set of CF_AuxiliaryCoordinateVariable, which are not space or time dimension, contribute to realize a GML:Coverage.rangeType property, implemented as a SWE:DataRecord object. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/Dataset.boundedBy |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/Dataset.boundedBy |
Test purpose |
The spatial/temporal CoordinateSystem, which is comprised of either spatial and temporal CF_CoordinateVariable objects or spatial and temporal CF_AuxiliaryCoordinateVariable objects, shall realize a GML:Coverage.boundedBy property, implemented as a GML:Envelope object or its subtype GML:EnvelopeWithTimePeriod.
Additionally, the attribute GML:Envelope.srsName shall have a value. |
Test method |
Verify that the spatial/temporal CoordinateSystem, which is comprised of either spatial and temporal CF_CoordinateVariable objects or spatial and temporal CF_AuxiliaryCoordinateVariable objects, realizes a GML:Coverage.boundedBy property, implemented as a GML:Envelope object or its subtype GML:EnvelopeWithTimePeriod.
Additionally, verify that the attribute GML:Envelope.srsName has a value. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/Dataset.boundedBy.axisLabels#1 |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/Dataset.boundedBy.axisLabels#1 |
Test purpose |
The set of spatial/temporal CF_CoordinateVariable comprised of a CoordinateSystem object, shall realize a GML:Envelope.axisLabels object or its subtype GML:EnvelopeWithTimePeriod.axisLabels. |
Test method |
Verify that the set of spatial/temporal CF_CoordinateVariable comprised of a CoordinateSystem object, realizes a GML:Envelope.axisLabels object or its subtype GML:EnvelopeWithTimePeriod.axisLabels. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/Dataset.boundedBy.axisLabels#2 |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/Dataset.boundedBy.axisLabels#2 |
Test purpose |
The set of spatial/temporal CF_Auxiliary CoordinateVariable, comprised of a CoordinateSystem object related to CF_Variables, shall realize a GML:Envelope.axisLabels object or its subtype GML:EnvelopeWithTimePeriod.axisLabels. |
Test method |
Verify that the set of spatial/temporal CF_Auxiliary CoordinateVariable, comprised of a CoordinateSystem object related to CF_Variables, realizes a GML:Envelope.axisLabels object or its subtype GML:EnvelopeWithTimePeriod.axisLabels. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/Dataset.boundedBy.CRS |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/Dataset.boundedBy.CRS |
Test purpose |
The CF-netCDF GridMappingVariable shall determine the subype of GML_AbstractCRS pointed by the GML:Envelope.srsName attribute. |
Test method |
Verify that the CF-netCDF GridMappingVariable determines the subype of GML_AbstractCRS pointed by the GML:Envelope.srsName attribute. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/InstanceVariable |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/InstanceVariable |
Test purpose |
Each CF_InstanceVariable object shall be encoded as a spatial/temporal CF_AuxiliaryCooridnateVariable which has as only dimension the "instance" dimension. |
Test method |
Verify that each CF_InstanceVariable object is encoded as a spatial/temporal CF_AuxiliaryCooridnateVariable which has as only dimension the "instance" dimension. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/RangeInstanceDimension#1 |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/RangeInstanceDimension#1 |
Test purpose |
Each CF_MultidimensionalArray.InstanceDimension object shall contribute to realize a GML:Coverage.rangeSet property, implemented as a GML:RangeSet object. |
Test method |
Verify that each CF_MultidimensionalArray.InstanceDimension object contributes to realize a GML:Coverage.rangeSet property, implemented as a GML:RangeSet object. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/RangeInstanceDimension#2 |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/RangeInstanceDimension#2 |
Test purpose |
Each CF_MultidimensionalArray.InstanceDimension object shall contribute to realize a GML:Coverage.rangeType property, implemented as a SWE:DataRecord object. |
Test method |
Verify that each CF_MultidimensionalArray.InstanceDimension object contributes to realize a GML:Coverage.rangeType property, implemented as a SWE:DataRecord object. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/ RangeInstanceDimension#3 |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/ RangeInstanceDimension#3 |
Test purpose |
Each CF_RaggedArray.SampleDimension object along with associated CF_IndexVariable or CF_CountVariable shall contribute to realize a GML:Coverage.rangeSet property, implemented as a GML:RangeSet object. |
Test method |
Verify that each CF_RaggedArray.SampleDimension object along with associated CF_IndexVariable or CF_CountVariable contributes to realize a GML:Coverage.rangeSet property, implemented as a GML:RangeSet object. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/RangeInstanceDimension#4 |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/RangeInstanceDimension#4 |
Test purpose |
Each CF_RaggedArray.SampleDimension object along with associated CF_IndexVariable or CF_CountVariable shall contribute to realize a GML:Coverage.rangeType property, implemented as a SWE:DataRecord object. |
Test method |
Verify that each CF_RaggedArray.SampleDimension object along with associated CF_IndexVariable or CF_CountVariable contributes to realize a GML:Coverage.rangeType property, implemented as a SWE:DataRecord object. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/PointFeatureCollection.axisLabels |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/PointFeatureCollection.axisLabels |
Test purpose |
Each CF_Point FeatureCollection shall realize a GML:EnvelopeWithTimePeriod.axisLabels with value equal to "x y t" | "lat lon t" | "lon lat t". |
Test method |
Verify that each CF_Point FeatureCollection realizes a GML:EnvelopeWithTimePeriod.axisLabels with value equal to "x y t" | "lat lon t" | "lon lat t". |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/TimeSerieFeatureCollection.axisLabels |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/TimeSerieFeatureCollection.axisLabels |
Test purpose |
Each CF_TimeSerie FeatureCollection shall realize a GML:EnvelopeWithTimePeriod.axisLabels with value equal to "x y t" | "lat lon t" | "lon lat t". |
Test method |
Verify that each CF_TimeSerie FeatureCollection realizes a GML:EnvelopeWithTimePeriod.axisLabels with value equal to "x y t" | "lat lon t" | "lon lat t". |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/TrajectoryFeatureCollection.axisLabels |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/TrajectoryFeatureCollection.axisLabels |
Test purpose |
Each CF_Trajectory FeatureCollection shall realize a GML:EnvelopeWithTimePeriod.axisLabels with value equal to "x y t" | "lat lon t" | "lon lat t". |
Test method |
Verify that each CF_Trajectory FeatureCollection realizes a GML:EnvelopeWithTimePeriod.axisLabels with value equal to "x y t" | "lat lon t" | "lon lat t". |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/ProfileFeatureCollection.axisLabels |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/ProfileFeatureCollection.axisLabels |
Test purpose |
Each CF_Profile FeatureCollection shall realize a GML:EnvelopeWithTimePeriod.axisLabels with value equal to "x y z t" | "lat lon z t" | "lon lat z t". |
Test method |
Verify that each CF_Profile FeatureCollection realizes a GML:EnvelopeWithTimePeriod.axisLabels with value equal to "x y z t" | "lat lon z t" | "lon lat z t". |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/TimeSeriesProfileFeatureCollection.axisLabels |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/TimeSeriesProfileFeatureCollection.axisLabels |
Test purpose |
Each CF_TimeSeriesProfile FeatureCollection shall realize a GML:EnvelopeWithTimePeriod.axisLabels with value equal to "x y z t" | "lat lon z t" | "lon lat z t". |
Test method |
Verify that each CF_TimeSeriesProfile FeatureCollection realizes a GML:EnvelopeWithTimePeriod.axisLabels with value equal to "x y z t" | "lat lon z t" | "lon lat z t". |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding/TrajectoryProfileFeatureCollection.axisLabels |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-GML-encoding/TrajectoryProfileFeatureCollection.axisLabels |
Test purpose |
Each CF_TrajectoryProfile FeatureCollection shall realize a GML:EnvelopeWithTimePeriod.axisLabels with value equal to "x y z t" | "lat lon z t" | "lon lat z t". |
Test method |
Verify that each CF_TrajectoryProfile FeatureCollection realizes a GML:EnvelopeWithTimePeriod.axisLabels with value equal to "x y z t" | "lat lon z t" | "lon lat z t". |
A.3 CF-netCDF-1.6-Data-format conformance class
This is the data format conformance class for this standard.
There is a dependency on the GML encoding conformance class of this standard (see A.2).
The following clauses relate to the conformance class identified with the URI: http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format
Conformance Class |
|
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format |
|
Requirements |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format |
Dependency |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-GML-encoding |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format/ServiceOperationResponse |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format/ServiceOperationResponse |
Test purpose |
Any service operation response returning successfully a CF-netCDF dataset, shall return a concrete sub-type of the GMLCOV:Coverage class, as showed in Figure 4. |
Test method |
Verify that any service operation response returning successfully a CF-netCDF dataset, returns a concrete sub-type of the GMLCOV:Coverage class, as showed in Figure 4. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format/coverageFormat-structure |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format/coverageFormat-structure |
Test purpose |
The CF-netCDF data format used to return requested GMLCOV:Coverages shall adhere to Figure 8. |
Test method |
Verify that the CF-netCDF data format used to return requested GMLCOV:Coverages adheres to Figure 8. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format/coverages-format |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format/coverages-format |
Test purpose |
For a WxS service implementing this extension, the contents of the response to a successful GetCoverage request shall be encoded in one of the following coverage encoding formats: CF-netCDF-File, CF-netCDF-64bit-File, ncML-Dataset, GML-3.2.1-Coverage, ncML-G-Dataset, Web-address. |
Test method |
Verify that for any WxS service implementing this extension, the content of the response to a successful GetCoverage request is encoded in one of the following coverage encoding formats: CF-netCDF-File, CF-netCDF-64bit-File, ncML-Dataset, GML-3.2.1-Coverage, ncML-G-Dataset, Web-address. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format/binaryFile-MIME-type |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format/binaryFile-MIME-type |
Test purpose |
WxS server implementing this specification shall use the following MIME type string to refer to CF-netCDF binary encoding: “application/CF-netCDF”. |
Test method |
Verify that any WxS server implementing this specification uses the following MIME type string to refer to CF-netCDF binary encoding: “application/CF-netCDF”. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format/ncML-Dataset-MIME-type |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format/ncML-Dataset-MIME-type |
Test purpose |
WxS server implementing this specification shall use the following MIME type string to refer to ncML-Dataset encoding: “application/ncML+xml”. |
Test method |
Verify that any WxS server implementing this specification uses the following MIME type string to refer to ncML-Dataset encoding: “application/ncML+xml”. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format/Web-address-reference |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format/Web-address-reference |
Test purpose |
WxS server implementing this specification shall use a MIME type string to refer to a well-known Web address syntax”. |
Test method |
Verify that any WxS server implementing this specification uses a MIME type string to refer to a well-known Web address syntax”. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format/Web-address-encoding |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format/Web-address-encoding |
Test purpose |
In a service operation successful response, a coverage returned as a generic Web address shall be encoded as an HTML document containing the HTTP URL. |
Test method |
Verify that in a service operation successful response, a coverage returned as a generic Web address is encoded as an HTML document containing the HTTP URL. |
A.4 CF-netCDF-1.6-Multipart-encoding conformance class
This is the multipart data encodingconformance class for this standard.
There is a dependency on the data formatconformance class of this standard (see A.3).
The following clauses relate to the conformance class identified with the URI: http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Multipart-encoding
Conformance Class |
|
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Multipart-encoding |
|
Requirements |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Multipart-encoding |
Dependency |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format/HTTP-multipart-encoding |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format/HTTP-multipart-encoding |
Test purpose |
In a service operation successful response, a coverage returned in a HTTP (or HTTPS) multipart message shall be encoded as MIME Multipart/Related (RFC 2045, RFC 2046). |
Test method |
Verify that in a service operation successful response, a coverage returned in a HTTP (or HTTPS) multipart message is encoded as MIME Multipart/Related (RFC 2045, RFC 2046). |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format/SOAP-ncMLdata-multipart-encoding |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format/SOAP-ncMLdata-multipart-encoding |
Test purpose |
In a service operation successful response, a coverage returned as ncML data in a SOAP multipart message shall be encoded with the SOAP Envelope section in the root part of the multipart message. |
Test method |
Verify that in a service operation successful response, a coverage returned as ncML data in a SOAP multipart message is encoded with the SOAP Envelope section in the root part of the multipart message. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format/HTTP-ncMLdata-multipart-encoding |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format/HTTP-ncMLdata-multipart-encoding |
Test purpose |
In a service operation successful response, a coverage returned as ncML data in a HTTP multipart message shall be encoded with the ncML metadata section in the root part of the multipart message. |
Test method |
Verify that in a service operation successful response, a coverage returned as ncML data in a HTTP (or HTTPS) multipart message is encoded with the ncML metadata section in the root part of the multipart message. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format/ncMLdata-binary-multipart-encoding |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format/ncMLdata-binary-multipart-encoding |
Test purpose |
In a service operation successful response, a coverage returned as ncML data in a multipart message shall encode binary values either as XML MIME inline content or as XOP section. |
Test method |
Verify that in a service operation successful response, a coverage returned as ncML data in a multipart message encodes binary values either as XML MIME inline content or as XOP section. |
Test |
http://www.opengis.net/spec/netCDF_data-model/conf/CF-netCDF-1.6-Data-format/netCDF-multipart-encoding-id |
Requirement |
http://www.opengis.net/spec/netCDF_data-model/req/CF-netCDF-1.6-Data-format/netCDF-multipart-encoding-id |
Test purpose |
In a service operation successful response, a coverage returned as multipart message shall identify each multipart section with a valid “Content-ID” header. |
Test method |
Verify that in a service operation successful response, a coverage returned as multipart message identifies each multipart section with a valid “Content-ID” header. |
Annex : Examples (informative)
The following paragraphs collect the examples used and explained throughout the document.
B.1. Example: netCDF ver. 3 with CF1.1 convention dataset
netcdf air_temperature {
dimensions:
longitude = 96 ;
bounds_axis = 2 ;
latitude = 73 ;
air_pressure = 15 ;
time = 140 ;
variables:
double longitude(longitude) ;
longitude:standard_name = “longitude” ;
longitude:units = “degrees_east” ;
longitude:bounds = “bound_longitude” ;
longitude:axis = “X” ;
double bound_longitude(longitude, bounds_axis) ;
double latitude(latitude) ;
latitude:standard_name = “latitude” ;
latitude:units = “degrees_north” ;
latitude:bounds = “bound_latitude” ;
latitude:axis = “Y” ;
double bound_latitude(latitude, bounds_axis) ;
float air_pressure(air_pressure) ;
air_pressure:standard_name = “air_pressure” ;
air_pressure:units = “hPa” ;
air_pressure:axis = “Z” ;
air_pressure:positive = “down” ;
double time(time) ;
time:calendar = “360_day” ;
time:standard_name = “time” ;
time:units = “days since 2289-1-1” ;
time:bounds = “bound_time” ;
time:axis = “T” ;
double bound_time(time, bounds_axis) ;
float air_temperature(time, air_pressure, latitude, longitude) ;
air_temperature:standard_name = “air_temperature” ;
air_temperature:units = “K” ;
air_temperature:long_name = “temperature on pressure levels” ;
air_temperature:cell_methods = “longitude: latitude: mean time: mean (interval: 4 h)” ;
air_temperature:_FillValue = -1.073742e+09f ;
// global attributes:
:Conventions = “CF-1.1” ;
:source = “Data from model run ABC123” ;
data:
longitude = 0, 3.75, 7.5, 11.25, 15, 18.75, 22.5, 26.25, 30, 33.75, 37.5,
41.25, 45, 48.75, 52.5, 56.25, 60, 63.75, 67.5, 71.25, 75, 78.75, 82.5,
86.25, 90, 93.75, 97.5, 101.25, 105, 108.75, 112.5, 116.25, 120, 123.75,
127.5, 131.25, 135, 138.75, 142.5, 146.25, 150, 153.75, 157.5, 161.25,
165, 168.75, 172.5, 176.25, 180, 183.75, 187.5, 191.25, 195, 198.75,
202.5, 206.25, 210, 213.75, 217.5, 221.25, 225, 228.75, 232.5, 236.25,
240, 243.75, 247.5, 251.25, 255, 258.75, 262.5, 266.25, 270, 273.75,
277.5, 281.25, 285, 288.75, 292.5, 296.25, 300, 303.75, 307.5, 311.25,
315, 318.75, 322.5, 326.25, 330, 333.75, 337.5, 341.25, 345, 348.75,
352.5, 356.25 ;
B.2. Example for an ncML dataset
<?xml version=“1.0” encoding=“UTF-8”?>
<netcdf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">
<dimension name=“longitude” length=“96”/>
<dimension name=“bounds_axis” length=“2”/>
<dimension name=“latitude” length=“73”/>
<dimension name=“air_pressure” length=“15”/>
<dimension name=“time” length=“140”/>
<attribute name=“Conventions” type=“string” value=“CF-1.1”/>
<attribute name=“source” type=“string” value=“Data from model run ABC123”/>
<variable name=“longitude” shape=“longitude” type=“double”>
<attribute name=“standard_name” type=“string” value=“longitude”/>
<attribute name=“units” type=“string” value=“degrees_east”/>
<attribute name=“bounds” type=“string” value=“bound_longitude”/>
<attribute name=“axis” type=“string” value=“X”/>
<values increment=“3.75” npts=“96” start=“0.0”/>
</variable>
<variable name=“bound_longitude” shape=“longitude bounds_axis” type=“double”> </variable>
<variable name=“latitude” shape=“latitude” type=“double”>
<attribute name=“standard_name” type=“string” value=“latitude”/>
<attribute name=“units” type=“string” value=“degrees_north”/>
<attribute name=“bounds” type=“string” value=“bound_latitude”/>
<attribute name=“axis” type=“string” value=“Y”/>
<values increment=“-2.5” npts=“73” start=“90.0”/>
</variable>
<variable name=“bound_latitude” shape=“latitude bounds_axis” type=“double”> </variable>
<variable name=“air_pressure” shape=“air_pressure” type=“float”>
<attribute name=“standard_name” type=“string” value=“air_pressure”/>
<attribute name=“units” type=“string” value=“hPa”/>
<attribute name=“axis” type=“string” value=“Z”/>
<attribute name=“positive” type=“string” value=“down”/>
<values increment=“70.71429” npts=“15” start=“10.0”/>
</variable>
<variable name=“time” shape=“time” type=“double”>
<attribute name=“calendar” type=“string” value=“360_day”/>
<attribute name=“standard_name” type=“string” value=“time”/>
<attribute name=“units” type=“string” value=“days since 2289-1-1”/>
<attribute name=“bounds” type=“string” value=“bound_time”/>
<attribute name=“axis” type=“string” value=“T”/>
<values increment=“360.0” npts=“140” start=“510.0”/>
</variable>
<variable name=“bound_time” shape=“time bounds_axis” type=“double”> </variable>
<variable name=“air_temperature” shape=“time air_pressure latitude longitude” type=“float”>
<attribute name=“standard_name” type=“string” value=“air_temperature”/>
<attribute name=“units” type=“string” value=“Kir_temperature”/>
<attribute name=“long_name” type=“string” value=“temperature on pressure level”/>
<attribute name=“cell_methods” type=“string” value=“longitude: latitude: mean time: mean (interval: 4 h)”/>
<attribute name=“_FillValue” type=“float” value=“-1.073742e+09”/>
</variable>
</netcdf>
B.3. GetCoverage response encoding examples
This section details examples of GetCoverage response encodings based on SOAP and Multipart-related technology. -
B.3.1. SOAP Response returning an ncML document referring a netCDF binary file included in the message
MIME-Version:
1.0
Content-Type:
multipart/related;
boundary="----=_NextPart_000_0000_93251752.3C5526C0"
------=_NextPart_000_0000_93251752.3C5526C0
Content-Type:
application/xml; charset="UTF-8"
<?xml
version="1.0" encoding="UTF-8"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope">
<soap:Header/>
<soap:Body>
<Coverages xmlns="http://www.opengis.net/wcs/1.1/ows"
xmlns:ows="http://www.opengis.net/ows"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:schemaLocation="http://www.opengis.net/wcs/1.1/ows
../owsCoverages.xsd http://www.opengis.net/ows
../../../ows/1.0.0/ows19115subset.xsd">
<Coverage>
<ows:Title>Example</ows:Title>
<ows:Abstract>Example of
coverage</ows:Abstract>
<Identifier>Example</Identifier>
<Reference
href="cid:bfa8e8ac@example.net" />
<Reference
href="http://example.net/data/CoverageDataValues.nc" />
<Reference
href="http://example.net/data/Dataset.ncml" />
</Coverage>
</Coverages>
</soap:Body>
</soap:Envelope>
------=_NextPart_000_0000_93251752.3C5526C0
Content-Type:
application/xml
Content-ID:
<bfa8e8ac@example.net>
...(metadata
content)...
------=_NextPart_000_0000_93251752.3C5526C0
Content-Type:
application/CF-netCDF
Content-Transfer-Encoding:
base64
Content-ID: <c3499c27@example.net>
Content-Location:
http://example.net/data/CoverageDataValues.nc……
...(netCDF
binary data content, pointed by the ncML dataset)...
------=_NextPart_000_0000_93251752.3C5526C0
Content-Type:
application/ ncML+xml
Content-Transfer-Encoding:
base64
Content-ID:
<1324bc12@example.net>
Content-Location:
http://example.net/data/Dataset.ncml
…..
...(
ncML dataset content)...
------=_NextPart_000_0000_93251752.3C5526C0--
B.3.2. C.3.4 Multipart section containing ncML with binary data included
------=_NextPart_000_0000_93251752.3C5526C0
Content-Type:
application/CF-netCDF
Content-Transfer-Encoding:
base64
Content-ID:
<1324bc12@example.net>
Content-Location:
http://example.net/data/data2.ncml
<?xml
version="1.0" encoding="UTF-8"?>
<netcdf
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">
<dimension name="longitude"
length="96"/>
<dimension
name="bounds_axis" length="2"/>
<dimension name="latitude"
length="73"/>
<dimension name="air_pressure" length="15"/>
<dimension name="time"
length="140"/>
<attribute
name="Conventions" type="string"
value="CF-1.1"/>
<attribute name="source"
type="string" value="Data from model run ABC123"/>
<variable name="longitude"
shape="longitude" type="double">
<attribute
name="standard_name" type="string"
value="longitude"/>
<attribute name="units"
type="string" value="degrees_east"/>
<attribute name="bounds"
type="string" value="bound_longitude"/>
<attribute name="axis"
type="string" value="X"/>
<values increment="3.75"
npts="96" start="0.0"/>
</variable>
<variable
name="bound_longitude" shape="longitude bounds_axis"
type="double"> </variable>
<variable name="latitude"
shape="latitude" type="double">
<attribute
name="standard_name" type="string"
value="latitude"/>
<attribute name="units"
type="string" value="degrees_north"/>
<attribute name="bounds"
type="string" value="bound_latitude"/>
<attribute name="axis"
type="string" value="Y"/>
<values increment="-2.5"
npts="73" start="90.0"/>
</variable>
<variable
name="bound_latitude" shape="latitude bounds_axis"
type="double"> </variable>
<variable name="air_pressure"
shape="air_pressure" type="float">
<attribute
name="standard_name" type="string"
value="air_pressure"/>
<attribute name="units"
type="string" value="hPa"/>
<attribute name="axis"
type="string" value="Z"/>
<attribute
name="positive" type="string" value="down"/>
<values
increment="70.71429" npts="15"
start="10.0"/>
</variable>
<variable name="time"
shape="time" type="double">
<attribute
name="calendar" type="string"
value="360_day"/>
<attribute
name="standard_name" type="string"
value="time"/>
<attribute name="units"
type="string" value="days since 2289-1-1"/>
<attribute name="bounds"
type="string" value="bound_time"/>
<attribute name="axis"
type="string" value="T"/>
<values
increment="360.0" npts="140" start="510.0"/>
</variable>
<variable name="bound_time"
shape="time bounds_axis" type="double">
</variable>
<variable
name="air_temperature" shape="time air_pressure latitude
longitude" type="float">
<attribute
name="standard_name" type="string"
value="air_temperature"/>
<attribute name="units"
type="string" value="Kir_temperature"/>
<attribute
name="long_name" type="string" value="temperature on
pressure level"/>
<attribute
name="cell_methods" type="string" value="longitude:
latitude: mean time: mean (interval: 4 h)"/>
<attribute
name="_FillValue" type="float"
value="-1.073742e+09"/>
<values
xm:xmlmime="binary/octet-stream">Li4uKGJhc2U2NCBlbmNvZGVkIGRhdGEpLi4u...(base64
encoded data)...BlbmNvZGVkIGRhdGEpLi4u==</values>
</variable>
</netcdf>
------=_NextPart_000_0000_93251752.3C5526C0--
B.3.3. C.3.5 Multipart section containing ncML with binary data extracted using XOP
------=_NextPart_000_0000_93251752.3C5526C0
MIME-Version:
1.0
Content-Type:
Multipart/Related;boundary=MIME_boundary;
type="application/xop+xml";
start="<12dea45c@example.net
>";
startinfo="application/ncML+xml”;
--MIME_boundary
Content-Type: application/xop+xml;
charset=UTF-8;
type="application/ncML+xml;
action=\"ProcessData\""
Content-ID: <12dea45c@example.net>
Content-Location:
http://example.net/data/data2.ncml
<?xml version="1.0"
encoding="UTF-8"?>
<netcdf
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">
<dimension name="longitude"
length="96"/>
<dimension
name="bounds_axis" length="2"/>
<dimension name="latitude"
length="73"/>
<dimension name="air_pressure"
length="15"/>
<dimension name="time"
length="140"/>
<attribute
name="Conventions" type="string"
value="CF-1.1"/>
<attribute name="source"
type="string" value="Data from model run ABC123"/>
<variable name="longitude"
shape="longitude" type="double">
<attribute
name="standard_name" type="string"
value="longitude"/>
<attribute name="units"
type="string" value="degrees_east"/>
<attribute name="bounds"
type="string" value="bound_longitude"/>
<attribute name="axis"
type="string" value="X"/>
<values increment="3.75"
npts="96" start="0.0"/>
</variable>
<variable
name="bound_longitude" shape="longitude bounds_axis"
type="double"> </variable>
<variable name="latitude"
shape="latitude" type="double">
<attribute
name="standard_name" type="string"
value="latitude"/>
<attribute name="units"
type="string" value="degrees_north"/>
<attribute name="bounds"
type="string" value="bound_latitude"/>
<attribute name="axis"
type="string" value="Y"/>
<values increment="-2.5"
npts="73" start="90.0"/>
</variable>
<variable
name="bound_latitude" shape="latitude bounds_axis"
type="double"> </variable>
<variable
name="air_pressure" shape="air_pressure"
type="float">
<attribute
name="standard_name" type="string"
value="air_pressure"/>
<attribute name="units"
type="string" value="hPa"/>
<attribute name="axis"
type="string" value="Z"/>
<attribute
name="positive" type="string" value="down"/>
<values
increment="70.71429" npts="15"
start="10.0"/>
</variable>
<variable name="time"
shape="time" type="double">
<attribute
name="calendar" type="string" value="360_day"/>
<attribute
name="standard_name" type="string"
value="time"/>
<attribute name="units"
type="string" value="days since 2289-1-1"/>
<attribute name="bounds"
type="string" value="bound_time"/>
<attribute name="axis"
type="string" value="T"/>
<values
increment="360.0" npts="140" start="510.0"/>
</variable>
<variable name="bound_time"
shape="time bounds_axis" type="double">
</variable>
<variable
name="air_temperature" shape="time air_pressure latitude longitude"
type="float">
<attribute
name="standard_name" type="string"
value="air_temperature"/>
<attribute name="units"
type="string" value="Kir_temperature"/>
<attribute
name="long_name" type="string" value="temperature on
pressure level"/>
<attribute
name="cell_methods" type="string" value="longitude:
latitude: mean time: mean (interval: 4 h)"/>
<attribute
name="_FillValue" type="float"
value="-1.073742e+09"/>
<values
xm:xmlmime="binary/octet-stream"><xop:Include
xmlns:xop='http://www.w3.org/2004/08/xop/include'
href='cid:bd43gh2y@example.net'/>
</values>
</variable>
</netcdf>
--MIME_boundary
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <bd43gh2y@example.net>
...(binary
encoded data)...
--MIME_boundary--
------=_NextPart_000_0000_93251752.3C5526C0--
Annex : Revision history
Date |
Release |
Author |
Paragraph modified |
Description |
---|---|---|---|---|
2010-08-09 |
0.1.0 |
Stefano Nativi |
All |
Created |
2010-09-12 |
0.1.1 |
Ben Domenico |
Comments |
Updated |
2011-02-19 |
1.0.0 |
Stefano Nativi |
All –added Multi-pointCoverage data |
Updated |
2011-08-27 |
1.0.0 |
Stefano Nativi |
CF ver. 1.6 |
Updated |
2013-02-06 |
1.1.0 |
Stefano Nativi |
Recommendations from WCS 2.0 SWG |
Document split up into three parts |
2013-21-27 |
0.3 |
Stefano Nativi |
New specification document extending CF-netCDF1.6 data model |
Created |
2014-01-03 |
0.3.1 |
Paolo Mazzetti |
Requirements on Multipart |
Updated |
2014-10-19 |
1.0 |
Stefano Nativi |
Removal of OPeNDAP and introduction of Web address. From discussion paper to International Standard |
Created the IS draft |
2015-04-13 |
2.0 |
Stefano Nativi |
Addressed recommendations from OAB
Creation of the Abstract test suite |
Updated |
2015-14-15 |
2.0 |
Scott Simmons |
Updated format to latest Standards template and minor corrections throughout document. |
Updated |
Annex : Bibliography
- [1] OGC 11-165r2, CF-netCDF3 Data Model Extension standard, version 3.1, March 2013.
- [2] ISO/TC 211, IS 19123:2005 Geographic information — Schema for coverage geometry and functions, ISO/IS 19123:2005
- [3] OGC 07-036, OGC® Geography Markup Language (GML) Encoding Standard, version 3.2.1.
- [4] OGC 08-094, OGC® SWE Common Data Model Encoding Standard, version 2.0.0.
- [5] OGC 10-092, NetCDF Binary Encoding Extension Standard: NetCDF Classic and 64-bit Offset Format, version 1.0.
- [6] S. Nativi, J. Caron, E. Davis and B. Domenico, “Design and implementation of netCDF Markup Language (NcML) and Its GML-based extension (NcML-GML)”, Computers & Geosciences Journal, Volume 31, Issue 9, November 2005, Pages 1104-1118, Elsevier Publication. http://linkinghub.elsevier.com/retrieve/pii/S0098300405001019
http://www.unidata.ucar.edu/software/netcdf/ncml/v2.2/AnnotatedSchema.html - [7] S Nativi, J Caron, B Domenico, L Bigagli, 2008, Unidata’s common data model mapping to the ISO 19123 data model, Earth Science Informatics, vol.1 n. 2, pp. 59-78
- [8] Domenico, B.; Caron, J.; Davis, E.; Nativi, S.; Bigagli, L., “GALEON: Standards-based Web Services for Interoperability among Earth Sciences Data Systems,” Geoscience and Remote Sensing Symposium, 2006. IGARSS 2006. IEEE International Conference on , vol., no., pp.313,316, July 31 2006-Aug. 4 2006. doi: 10.1109/IGARSS.2006.85
- [9] NASA Community Standard, ESDS-RFC-004: The Data Access Protocol – DAP 2.0 available at: http://www.esdswg.org/spg/rfc/ese-rfc-004
- [10] NASA ESDS–RFC-021 Technical Working Group Final Report.
- [11] NASA ESDS-RFC-021v0.02, CF Metadata Conventions, April 2010.
- [12] IETF RFC 2045, Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies
- [13] IETF RFC 2046, Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types
- [14] OGC 06-121r9, OGC Web Services Common Standard
- [15] IETF RFC 2387, The MIME Multipart/Related Content-type
- [16] W3C, SOAP Message Transmission Optimization Mechanism
- [17] W3C, XML-binary Optimized Packaging
[1] Future extension to ISO 19111 (see ISO/CD19111-2) may permit parametric CRS, that would accommodate the pressure axis.