License Agreement

Permission is hereby granted by the Open Geospatial Consortium, ("Licensor"), free of charge and subject to the terms set forth below, to any person obtaining a copy of this Intellectual Property and any associated documentation, to deal in the Intellectual Property without restriction (except as set forth below), including without limitation the rights to implement, use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Intellectual Property, and to permit persons to whom the Intellectual Property is furnished to do so, provided that all copyright notices on the intellectual property are retained intact and that each person to whom the Intellectual Property is furnished agrees to the terms of this Agreement.

If you modify the Intellectual Property, all copies of the modified Intellectual Property must include, in addition to the above copyright notice, a notice that the Intellectual Property includes modifications that have not been approved or adopted by LICENSOR.

THIS LICENSE IS A COPYRIGHT LICENSE ONLY, AND DOES NOT CONVEY ANY RIGHTS UNDER ANY PATENTS THAT MAY BE IN FORCE ANYWHERE IN THE WORLD.

THE INTELLECTUAL PROPERTY IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE DO NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE INTELLECTUAL PROPERTY WILL MEET YOUR REQUIREMENTS OR THAT THE OPERATION OF THE INTELLECTUAL PROPERTY WILL BE UNINTERRUPTED OR ERROR FREE. ANY USE OF THE INTELLECTUAL PROPERTY SHALL BE MADE ENTIRELY AT THE USER’S OWN RISK. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ANY CONTRIBUTOR OF INTELLECTUAL PROPERTY RIGHTS TO THE INTELLECTUAL PROPERTY BE LIABLE FOR ANY CLAIM, OR ANY DIRECT, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM ANY ALLEGED INFRINGEMENT OR ANY LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR UNDER ANY OTHER LEGAL THEORY, ARISING OUT OF OR IN CONNECTION WITH THE IMPLEMENTATION, USE, COMMERCIALIZATION OR PERFORMANCE OF THIS INTELLECTUAL PROPERTY.

This license is effective until terminated. You may terminate it at any time by destroying the Intellectual Property together with all copies in any form. The license will also terminate if you fail to comply with any term or condition of this Agreement. Except as provided in the following sentence, no such termination of this license shall require the termination of any third party end-user sublicense to the Intellectual Property which is in force as of the date of notice of such termination. In addition, should the Intellectual Property, or the operation of the Intellectual Property, infringe, or in LICENSOR’s sole opinion be likely to infringe, any patent, copyright, trademark or other right of a third party, you agree that LICENSOR, in its sole discretion, may terminate this license without any compensation or liability to you, your licensees or any other party. You agree upon termination of any kind to destroy or cause to be destroyed the Intellectual Property together with all copies in any form, whether held by you or by any third party.

Except as contained in this notice, the name of LICENSOR or of any other holder of a copyright in all or part of the Intellectual Property shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Intellectual Property without prior written authorization of LICENSOR or such copyright holder. LICENSOR is and shall at all times be the sole entity that may authorize you or any third party to use certification marks, trademarks or other special designations to indicate compliance with any LICENSOR standards or specifications. This Agreement is governed by the laws of the Commonwealth of Massachusetts. The application to this Agreement of the United Nations Convention on Contracts for the International Sale of Goods is hereby expressly excluded. In the event any provision of this Agreement shall be deemed unenforceable, void or invalid, such provision shall be modified so as to make it valid and enforceable, and as so modified the entire Agreement shall remain in full force and effect. No decision, action or inaction by LICENSOR shall be construed to be a waiver of any rights or remedies available to it.


 

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.

 

Namespace mappings
Prefix Namespace URI Description

GML

http://www.opengis.net/gml/3.2

GML 3.2.1

GMLCOV

http://www.opengis.net/gmlcov/1.0

GML Application Schema for Coverages 1.0

ncml

http://unidata.ucar.edu/ncml

ncML schema

xsd

http://www.w3.org/2001/XMLSchema

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.

 

Description: CF-netCDF 1.6 Data Model Overview.png
Figure: : CF-netCDF data model: Dataset and Variable elements [OGC 11-165r2]

 

Description: CF-netCDF 1.6 data Model Coordinate Variables.png
Figure: : CF-netCDF data model: Coordinate Variable and Coordinate System elements [OGC 11-165r2]

 

Description: Discrete Sampling Geometries Overview.png
Figure: : CF-netCDF data model: Discrete Sampling Geometry elements [OGC 11-165r2]

 

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].

 

Description: GML 3
Figure: : GML 3.2.1 Coverage structure [OGC 09-146r1]

 

Description: GML-DomainSet implementations
Figure: : GML:DomainSet implementations [OGC 09-146r1]

 

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.

 

Table 1.  Encoding rules for CF-netCDF dataset

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

Table 2. Encoding rules for CF_Variable.

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/
temporal CF_AuxiliaryCoordinateVariable b

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).
The range of each CV_DiscreteGridPointCoverage is a list of records with an attribute for every related CF-netCDF variable and for every CF_CoordinateVariable –of the shared CoordinateSystem- that is not allowed in a coverage CRS (i.e. parametric dimension axes). Thus, the CF_Variable properties (i.e. name and type) realize the CV_DiscreteGridPointCoverage.RangeType.AttributesType entry (i.e. AttributeName, TypeName).

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.
These coordinate variables do not behave like a discrete coverage domain axis; on the contrary, they behave like a discrete coverage range axis.

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

 

Table 3. 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).
Only spatial and temporal coordinates in a CF-netCDF CoordinateSystem become part of a coverage CRS, whereas parametric dimension axes are mapped to compound range set components.

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.

Additionally, the attribute GML:Envelope.srsName shall have a value.

 

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

 

Table 4 - 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
domain h

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
domain i

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.
This mapping was already formalized by Requirement 3, Requirement 5, Requirement 8and Requirement 12.

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”.

 

CF-netCDF dataset mapping to GMLCOV data model
Figure: : CF-netCDF dataset mapping to GMLCOV data model

 

CF-netCDF discrete sampling geometries mapping to GMLCOV data model
Figure: : CF-netCDF discrete sampling geometries mapping to GMLCOV data model

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.

 

Supported CF-netCDF Coverage encodings
Figure: : Supported CF-netCDF Coverage encodings

 

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.

An example of service operation response returning a complex <em>ncML-Dataset</em>
Figure: : An example of service operation response returning a complex ncML-Dataset

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:

Table 5.Multipart possible strategies

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.