DAP4 Attribute Model: Difference between revisions

From OPeNDAP Documentation
⧼opendap2-jumptonavigation⧽
Line 200: Line 200:
* '''<aURL />''' - Represents a URL valued Attribute.
* '''<aURL />''' - Represents a URL valued Attribute.
* '''<AttContainer />''' - Represents a Container Attribute.
* '''<AttContainer />''' - Represents a Container Attribute.
* '''<OtherXML />''' - Represents an Attribute object that may hold any XML not in the DAP namespaces and identifies it as an Attribute. (Assuming we want to wrap foreign XML in an Attribute tag)
* '''<IsA />''' - Represents an Attribute object that may hold any XML not in the DAP namespaces and identifies it as an Attribute. This element indicates that is contents are in essence an alternate semantic rpresentation of the <IsA> elements parent.
* '''<HasA />''' - Represents an Attribute object that may hold any XML not in the DAP namespaces and identifies it as an Attribute. This element indicates that is contents are contained/held/propertyof  the <HasA> elements parent.


===== DAP4 Schema Prototype =====
===== DAP4 Schema Prototype =====

Revision as of 18:54, 27 January 2009

Add a DAP Attribute with type xml.

Goal

Provide a mechanism for including any XML markup from namespaces other than the DAP namespaces as metadata associated with any DAP variable.

Background

In order to create a more flexible metadata channel for the DAP we will add a new type of Attribute object the DAP Attribute data model. This new Attribute type, called xml, will be allowed to contain any XML from a non DAP namespace. For example, XML content from the GML or WCS namespaces could be included here. Even an Open Office document describing the content would be legal.

Design

In the DAP2 DDX schema this change would be made by adding a new value to the DataType type enumeration used by the dap:Attribute element's type attribute:

   <xs:simpleType name="DataType">
       <xs:restriction base="xs:string">
           <xs:enumeration value="Byte"/>
           <xs:enumeration value="Int16"/>
           <xs:enumeration value="UInt16"/>
           <xs:enumeration value="Int32"/>
           <xs:enumeration value="UInt32"/>
           <xs:enumeration value="Float32"/>
           <xs:enumeration value="Float64"/>
           <xs:enumeration value="String"/>
           <xs:enumeration value="URL"/>
           <xs:enumeration value="Container"/>
           <xs:enumeration value="hasA"/>
           <xs:enumeration value="isA"/>
       </xs:restriction>
   </xs:simpleType>

However, in the DAP2 schema no content rules are available for the Attribute elements. This makes it easy to add the new type, but doesn't provide any functional information about it's content.

Since this change is taking place in conjunction with re-factoring the XML representation of DAP Attribute objects this new Attribute type will be included those sections.

Example Document

    <?xml version="1.0" encoding="UTF-8"?>
    <Dataset name="200803061600_HFRadar_USEGC_6km_rtv_SIO.nc"
    xmlns="http://xml.opendap.org/ns/DAP/3.3#"
    xmlns:dap="http://xml.opendap.org/ns/DAP/3.3#"
    dap_version="3.3"
    xmlns:xml="http://www.w3.org/XML/1998/namespace"
    xml:base="http://localhost:8080/opendap/coverage/200803061600_HFRadar_USEGC_6km_rtv_SIO.nc.ddx"


        <Attribute name="wcsStuff" type="isA">
            <CoverageDescription xmlns="http://www.opengis.net/wcs/1.1" xmlns:ows="http://www.opengis.net/ows/1.1"
                                 xmlns:owcs="http://www.opengis.net/wcs/1.1/ows"
                                 xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xlink="http://www.w3.org/1999/xlink"
                                 >
                <ows:Title>Near-Real Time Surface Ocean Velocity</ows:Title>
                <ows:Abstract>CoverageDescription generated by OPeNDAP WCS UseCase 2.0</ows:Abstract>
                <Identifier>coverage/200803061600_HFRadar_USEGC_6km_rtv_SIO.nc</Identifier>
                <Domain>
                    <SpatialDomain>
                        <ows:BoundingBox crs="urn:ogc:def:crs:EPSG::4326">
                            <ows:LowerCorner>-97.8839 21.736</ows:LowerCorner>
                            <ows:UpperCorner>-57.2312 46.4944</ows:UpperCorner>
                        </ows:BoundingBox>
                    </SpatialDomain>
                    <TemporalDomain>
                        <gml:timePosition>2008-03-27T16:00:00.000Z</gml:timePosition>
                    </TemporalDomain>
                </Domain>
                <Range>
                </Range>
                <SupportedCRS>urn:ogc:def:crs:EPSG::4326</SupportedCRS>
                <SupportedFormat>netcdf-cf1.0</SupportedFormat>
                <SupportedFormat>dap2.0</SupportedFormat>
            </CoverageDescription>
        </Attribute>

        <Grid name="u">
            <Attribute name="wcsStuff" type="isA">
                <Field xmlns="http://www.opengis.net/wcs/1.1" xmlns:ows="http://www.opengis.net/ows/1.1"
                                 xmlns:owcs="http://www.opengis.net/wcs/1.1/ows"
                                 xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xlink="http://www.w3.org/1999/xlink"
                                 >
                    <ows:Title>surface_eastward_sea_water_velocity</ows:Title>
                    <ows:Abstract>Eastward component of a 2D sea surface velocity vector.</ows:Abstract>
                    <Identifier>u</Identifier>
                    <Definition>
                        <ows:AnyValue/>
                    </Definition>
                    <NullValue>-32768</NullValue>
                    <owcs:InterpolationMethods>
                        <owcs:DefaultMethod>nearest</owcs:DefaultMethod>
                    </owcs:InterpolationMethods>
                </Field>
            </Attribute>
            <Array name="u">
                <Int16/>
                <dimension name="time" size="1"/>
                <dimension name="lat" size="460"/>
                <dimension name="lon" size="701"/>
            </Array>
            <Map name="time">
                <Int32/>
                <dimension name="time" size="1"/>
            </Map>
            <Map name="lat">
                <Float32/>
                <dimension name="lat" size="460"/>
            </Map>
            <Map name="lon">
                <Float32/>
                <dimension name="lon" size="701"/>
            </Map>
        </Grid>

    </Dataset>






While this works to include foreign xml in the DAP, I think we would be better off if we had some stronger semantics than "attribute" availabe. In particular, I think we need to say in this particular example that the XML enclosed is an alternate description of the node in question, i.e. a dataset is an wcs CoverageDescription and a Grid is a wcs:Field. We need that connection in order to build the code that moves data from one representation to another, e.g. build a WCS response from DAP data.

One possibility would be a property dap:alsoKnownAs.

--BennoBlumenthal 08:03, 25 January 2009 (PST)

Re-factoring the representation of DAP Attribute objects.

Goals

Provide an improved XML representation of the DAP Attributes.

Background

The original DDX represented Attribute objects as a single XML element dap:Attribute. The type of the DAP Attribute was represented as the value of an XML attribute names type. For example:

   <Attribute name="bears" type="Container">
       <Attribute name="act" type="String">
           <value>text string\\012\\011123</value>
       </Attribute>
       <Attribute name="acs" type="Int16">
           <value>-40</value>
       </Attribute>
   </Attribute>

This is unlike the scheme for variables in which each one is represented by an XML element whose name reflects the type of the variable:

       <String name="satellite"/>
       <Int32 name="year"/>

A more parallel representation can be achieved by creating a separate namespace for the DAP Attribute data model. This way the two representations can more closely resemble each other, and they can be easily filtered and manipulated using namespace aware processing (which really is a key component of the XML use model).

Additionally, the way that our current Attribute semantics cannot be expressed in XML Schema 1.0, as they require "conditional type assignment" which is only available in (the as yet to released) XML Schema 1.1

Design

There are two design candidates. One in which we use separate namespaces for DAP variables and DAP Attribute. The other simply provides a second set of specific Attribute types separate from the DAP variable types.


Candidate 1: Attributes In A Separate Namespace

Each type of DAP Attribute type will have its own XML element representation in the DAP Attribute namespace: http://xml.opendap.org/ns/DAP/3.3/att#

  • xmlns:att="http://xml.opendap.org/ns/DAP/3.3/att#" Using the att prefix to identify the DAP Attribute namespace.
  • <att:Byte /> - Represents a byte valued Attribute.
  • <att:Int16 /> - Represents a 16 bit integer valued Attribute.
  • <att:UInt16 /> - Represents an unsigned 16 bit integer valued Attribute.
  • <att:Int32 /> - Represents a 32 bit integer valued Attribute.
  • <att:UInt32 /> - Represents an unsigned 32 bit integer valued Attribute.
  • <att:Float32 /> - Represents a 32 bit floating point valued Attribute.
  • <att:Float64 /> - Represents a 64 bit floating point valued Attribute.
  • <att:String /> - Represents a String valued Attribute.
  • <att:URL /> - Represents a URL valued Attribute.
  • <att:Container /> - Represents a Container Attribute.
  • <att:XML /> - Represents an Attribute object that may hold any XML not in the DAP namespaces and identifies it as an Attribute. (Assuming we want to wrap foreign XML in an Attribute tag)
Schema

Here is the prototype schema for the DAP4 namespace

  • This schema document is made much simpler due to moving the DAP Attributes to their own schema.

Here is the prototype schema for the DAP4 Attribute namespace This schema needs a few changes/corrections:

  1. The AttributeUrlType Allows the URL type to contain any URI. We need to modifiy the schema so that it it is restricted to any URL. Or we might wish to relax the DAP definition of the URL Attribute type to become a URI.
  2. The AttributeXMLType - Allows any XML not in the DAP Attribute namespace. We should try to make this any XML not in the DAP or the DAP Attribute namespaces (IE: XML not in http://xml.opendap.org/ns/DAP/3.3/att# or http://xml.opendap.org/ns/DAP/3.3/dap#)

Candidate 2: Separate Attribute Types In The Same Namespace

Each type of DAP Attribute type will have its own XML element representation in the DAP Attribute namespace: http://xml.opendap.org/ns/DAP/3.3/att#

  • xmlns:att="http://xml.opendap.org/ns/DAP/3.5/dap#"
  • <aByte /> - Represents a byte valued Attribute.
  • <aInt16 /> - Represents a 16 bit integer valued Attribute.
  • <aUInt16 /> - Represents an unsigned 16 bit integer valued Attribute.
  • <aInt32 /> - Represents a 32 bit integer valued Attribute.
  • <aUInt32 /> - Represents an unsigned 32 bit integer valued Attribute.
  • <aFloat32 /> - Represents a 32 bit floating point valued Attribute.
  • <aFloat64 /> - Represents a 64 bit floating point valued Attribute.
  • <aString /> - Represents a String valued Attribute.
  • <aURL /> - Represents a URL valued Attribute.
  • <AttContainer /> - Represents a Container Attribute.
  • <IsA /> - Represents an Attribute object that may hold any XML not in the DAP namespaces and identifies it as an Attribute. This element indicates that is contents are in essence an alternate semantic rpresentation of the <IsA> elements parent.
  • <HasA /> - Represents an Attribute object that may hold any XML not in the DAP namespaces and identifies it as an Attribute. This element indicates that is contents are contained/held/propertyof the <HasA> elements parent.
DAP4 Schema Prototype

DAP4 Variables Schema

   <?xml version="1.0" encoding="UTF-8"?>
   <xs:schema targetNamespace="http://xml.opendap.org/ns/DAP/3.5/dap#"
       xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dap="http://xml.opendap.org/ns/DAP/3.5/dap#"
       xmlns="http://xml.opendap.org/ns/DAP/3.5/dap#" elementFormDefault="qualified"
       attributeFormDefault="unqualified">
   
   
   
       <xs:include schemaLocation="dapAtt_3.5.xsd"/>
   
       <xs:element name="Dataset" type="DAP_Dataset"/>
       <xs:element name="Map" type="Array"/>
       <xs:element name="Byte" type="BaseType"/>
       <xs:element name="Int16" type="BaseType"/>
       <xs:element name="UInt16" type="BaseType"/>
       <xs:element name="Int32" type="BaseType"/>
       <xs:element name="UInt32" type="BaseType"/>
       <xs:element name="Float32" type="BaseType"/>
       <xs:element name="Float64" type="BaseType"/>
       <xs:element name="String" type="BaseType"/>
       <xs:element name="Url" type="BaseType"/>
       <xs:element name="Array" type="Array"/>
       <xs:element name="Grid" type="Grid"/>
       <xs:element name="Structure" type="Structure"/>
       <xs:element name="Sequence" type="Sequence"/>
   
       <xs:group name="allDapTypes">
           <xs:annotation>
               <xs:documentation>Reusable Content Model for Complex DODS types</xs:documentation>
           </xs:annotation>
           <xs:choice>
               <xs:element ref="Byte" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="Int16" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="UInt16" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="Int32" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="UInt32" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="Float32" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="Float64" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="String" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="Url" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="Array" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="Grid" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="Structure" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="Sequence" minOccurs="0" maxOccurs="unbounded"/>
           </xs:choice>
       </xs:group>
       <xs:complexType name="DAP_Dataset">
           <xs:annotation>
               <xs:documentation>This is the XML representation of a DODS DDS
                   object.</xs:documentation>
           </xs:annotation>
           <xs:sequence>
               <xs:group ref="allAttributeTypes" minOccurs="0" maxOccurs="unbounded"/>
               <xs:group ref="allDapTypes" minOccurs="0" maxOccurs="unbounded"/>
           </xs:sequence>
           <xs:attribute name="name" type="xs:string" use="required"/>
       </xs:complexType>
   
       <xs:complexType name="BaseType">
           <xs:annotation>
               <xs:documentation>DODS Base Type</xs:documentation>
           </xs:annotation>
           <xs:sequence>
               <xs:group ref="allAttributeTypes" minOccurs="0" maxOccurs="unbounded"/>
           </xs:sequence>
           <xs:attribute name="name" type="xs:string"/>
       </xs:complexType>
       <xs:complexType name="Array">
           <xs:complexContent>
               <xs:extension base="BaseType">
                   <xs:sequence>
                       <xs:choice minOccurs="1" maxOccurs="1">
                           <xs:element ref="Byte"/>
                           <xs:element ref="Int16"/>
                           <xs:element ref="UInt16"/>
                           <xs:element ref="Int32"/>
                           <xs:element ref="UInt32"/>
                           <xs:element ref="Float32"/>
                           <xs:element ref="Float64"/>
                           <xs:element ref="String"/>
                           <xs:element ref="Url"/>
                           <xs:element ref="Grid"/>
                           <xs:element ref="Structure"/>
                           <xs:element ref="Sequence"/>
                       </xs:choice>
                       <xs:element name="dimension" type="dap:ArrayDimension" minOccurs="1"
                           maxOccurs="unbounded"/>
                   </xs:sequence>
               </xs:extension>
           </xs:complexContent>
       </xs:complexType>
       <xs:complexType name="ArrayDimension">
           <xs:attribute name="name" type="xs:string"/>
           <xs:attribute name="size" type="xs:integer" use="required"/>
       </xs:complexType>
       <xs:complexType name="Grid">
           <xs:complexContent>
               <xs:extension base="dap:BaseType">
                   <xs:sequence>
                       <xs:element ref="Array" minOccurs="1" maxOccurs="1"/>
                       <xs:element ref="Map" minOccurs="1" maxOccurs="unbounded"/>
                   </xs:sequence>
               </xs:extension>
           </xs:complexContent>
       </xs:complexType>
       <xs:complexType name="Structure">
           <xs:complexContent>
               <xs:extension base="BaseType">
                   <xs:group ref="allDapTypes" minOccurs="1" maxOccurs="unbounded"/>
               </xs:extension>
           </xs:complexContent>
       </xs:complexType>
       <xs:complexType name="Sequence">
           <xs:complexContent>
               <xs:extension base="BaseType">
                   <xs:group ref="allDapTypes" minOccurs="1" maxOccurs="unbounded"/>
               </xs:extension>
           </xs:complexContent>
       </xs:complexType>
   
   </xs:schema>


DAP4 Attributes Schema

   <?xml version="1.0" encoding="UTF-8"?>
   <xs:schema targetNamespace="http://xml.opendap.org/ns/DAP/3.5/dap#"
       xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dap="http://xml.opendap.org/ns/DAP/3.5/dap#"
       xmlns="http://xml.opendap.org/ns/DAP/3.5/dap#" elementFormDefault="qualified"
       attributeFormDefault="unqualified">
   
       <xs:element name="aByte" type="AttributeByteType"/>
       <xs:element name="aInt16" type="AttributeInt16Type"/>
       <xs:element name="aUInt16" type="AttributeUInt16Type"/>
       <xs:element name="aInt32" type="AttributeInt32Type"/>
       <xs:element name="aUInt32" type="AttributeUInt32Type"/>
       <xs:element name="aFloat32" type="AttributeFloat32Type"/>
       <xs:element name="aFloat64" type="AttributeFloat64Type"/>
       <xs:element name="aString" type="AttributeStringType"/>
       <xs:element name="aUrl" type="AttributeUrlType"/>
       <xs:element name="AttContainer" type="AttributeContainerType"/>
       <xs:element name="OtherXml" type="AttributeXmlType"/>
   
       <xs:group name="allAttributeTypes">
           <xs:annotation>
               <xs:documentation>Reusable Content Model for Containers of Attribute types</xs:documentation>
           </xs:annotation>
           <xs:choice>
               <xs:element ref="aByte" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="aInt16" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="aUInt16" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="aInt32" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="aUInt32" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="aFloat32" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="aFloat64" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="aString" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="aUrl" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="AttContainer" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="OtherXml" minOccurs="0" maxOccurs="unbounded"/>
           </xs:choice>
       </xs:group>
   
   
       <xs:complexType name="AttributeBase" abstract="true">
           <xs:attribute name="name" type="xs:string" use="required"/>
       </xs:complexType>
   
       <xs:complexType name="AttributeContainerType">
           <xs:annotation>
               <xs:documentation>DAP Attribute Container Type</xs:documentation>
           </xs:annotation>
           <xs:complexContent>
               <xs:extension base="AttributeBase">
                   <xs:choice>
                       <xs:group ref="allAttributeTypes" minOccurs="1" maxOccurs="unbounded"/>
                   </xs:choice>
               </xs:extension>
           </xs:complexContent>
       </xs:complexType>
   
       <xs:complexType name="AttributeByteType">
           <xs:annotation>
               <xs:documentation>DAP Attribute Byte Type</xs:documentation>
           </xs:annotation>
           <xs:choice>
               <xs:element name="value" type="xs:unsignedByte" minOccurs="1" maxOccurs="unbounded"/>
           </xs:choice>
           <xs:attribute name="name" type="xs:string" use="required"/>
       </xs:complexType>
   
       <xs:complexType name="AttributeInt16Type">
           <xs:annotation>
               <xs:documentation>DAP Attribute Int16 Type</xs:documentation>
           </xs:annotation>
           <xs:choice>
               <xs:element name="value" type="xs:short" minOccurs="1" maxOccurs="unbounded"/>
           </xs:choice>
           <xs:attribute name="name" type="xs:string" use="required"/>
       </xs:complexType>
   
       <xs:complexType name="AttributeUInt16Type">
           <xs:annotation>
               <xs:documentation>DAP Attribute UInt16 Type</xs:documentation>
           </xs:annotation>
           <xs:choice>
               <xs:element name="value" type="xs:unsignedShort" minOccurs="1" maxOccurs="unbounded"/>
           </xs:choice>
           <xs:attribute name="name" type="xs:string" use="required"/>
       </xs:complexType>
   
       <xs:complexType name="AttributeInt32Type">
           <xs:annotation>
               <xs:documentation>DAP Attribute Int32 Type</xs:documentation>
           </xs:annotation>
           <xs:choice>
               <xs:element name="value" type="xs:int" minOccurs="1" maxOccurs="unbounded"/>
           </xs:choice>
           <xs:attribute name="name" type="xs:string" use="required"/>
       </xs:complexType>
   
       <xs:complexType name="AttributeUInt32Type">
           <xs:annotation>
               <xs:documentation>DAP Attribute UInt32 Type</xs:documentation>
           </xs:annotation>
           <xs:choice>
               <xs:element name="value" type="xs:unsignedInt" minOccurs="1" maxOccurs="unbounded"/>
           </xs:choice>
           <xs:attribute name="name" type="xs:string" use="required"/>
       </xs:complexType>
   
   
       <xs:complexType name="AttributeFloat32Type">
           <xs:annotation>
               <xs:documentation>DAP Attribute Float32 Type</xs:documentation>
           </xs:annotation>
           <xs:choice>
               <xs:element name="value" type="xs:float" minOccurs="1" maxOccurs="unbounded"/>
           </xs:choice>
           <xs:attribute name="name" type="xs:string" use="required"/>
       </xs:complexType>
   
       <xs:complexType name="AttributeFloat64Type">
           <xs:annotation>
               <xs:documentation>DAP Attribute Float64 Type</xs:documentation>
           </xs:annotation>
           <xs:choice>
               <xs:element name="value" type="xs:double" minOccurs="1" maxOccurs="unbounded"/>
           </xs:choice>
           <xs:attribute name="name" type="xs:string" use="required"/>
       </xs:complexType>
       <xs:complexType name="AttributeStringType">
           <xs:annotation>
               <xs:documentation>DAS Attribute String Type</xs:documentation>
           </xs:annotation>
           <xs:choice>
               <xs:element name="value" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
           </xs:choice>
           <xs:attribute name="name" type="xs:string" use="required"/>
   
       </xs:complexType>
       <xs:complexType name="AttributeUrlType">
           <xs:annotation>
               <xs:documentation>DAS Attribute URL Type</xs:documentation>
           </xs:annotation>
           <xs:choice>
               <xs:element name="value" type="xs:anyURI" minOccurs="1" maxOccurs="unbounded"/>
           </xs:choice>
           <xs:attribute name="name" type="xs:string" use="required"/>
   
       </xs:complexType>
       <xs:complexType name="AttributeXmlType">
           <xs:annotation>
               <xs:documentation>DAS Attribute XML Type</xs:documentation>
           </xs:annotation>
           <xs:choice>
               <xs:any namespace="##other" minOccurs="1" maxOccurs="unbounded" processContents="skip"/>
           </xs:choice>
           <xs:attribute name="name" type="xs:string" use="required"/>
   
       </xs:complexType>
   </xs:schema>

Example Document

<?xml version="1.0" encoding="UTF-8"?>
<Dataset name="200803061600_HFRadar_USEGC_6km_rtv_SIO.nc"
         xmlns="http://xml.opendap.org/ns/DAP/3.5#"
         xmlns:dap="http://xml.opendap.org/ns/DAP/3.5#"
         dap_version="3.3"
         xmlns:xml="http://www.w3.org/XML/1998/namespace"
         xml:base="http://localhost:8080/opendap/coverage/200803061600_HFRadar_USEGC_6km_rtv_SIO.nc.ddx">


    <IsA>
        <CoverageDescription xmlns="http://www.opengis.net/wcs/1.1" xmlns:ows="http://www.opengis.net/ows/1.1"
                             xmlns:owcs="http://www.opengis.net/wcs/1.1/ows" xmlns:gml="http://www.opengis.net/gml/3.2"
                             xmlns:xlink="http://www.w3.org/1999/xlink"
                >
            <ows:Title>Near-Real Time Surface Ocean Velocity</ows:Title>
            <ows:Abstract>CoverageDescription generated by OPeNDAP WCS UseCase 2.0</ows:Abstract>
            <Identifier>coverage/200803061600_HFRadar_USEGC_6km_rtv_SIO.nc</Identifier>
            <Domain>
                <SpatialDomain>
                    <ows:BoundingBox crs="urn:ogc:def:crs:EPSG::4326">
                        <ows:LowerCorner>-97.8839 21.736</ows:LowerCorner>
                        <ows:UpperCorner>-57.2312 46.4944</ows:UpperCorner>
                    </ows:BoundingBox>
                </SpatialDomain>
                <TemporalDomain>
                    <gml:timePosition>2008-03-27T16:00:00.000Z</gml:timePosition>
                </TemporalDomain>
            </Domain>
            <Range>
            </Range>
            <SupportedCRS>urn:ogc:def:crs:EPSG::4326</SupportedCRS>
            <SupportedFormat>netcdf-cf1.0</SupportedFormat>
            <SupportedFormat>dap2.0</SupportedFormat>
        </CoverageDescription>

    </IsA>

    <AttContainer name="NC_GLOBAL" >
        <aString name="title" >
            <avalue>Near-Real Time Surface Ocean Velocity</avalue>
        </aString>
        <aString name="institution">
            <avalue>Scripps Institution of Oceanography</avalue>
        </aString>
        <aString name="source">
            <avalue>Surface Ocean HF-Radar</avalue>
        </aString>
        <aString name="history" >
            <avalue>12-Mar-2008 22:26:19: NetCDF file created</avalue>
        </aString>
        <aString name="references">
            <avalue>Terrill, E. et al., 2006. Data Management and Real-time\\012Distribution in the HF-Radar National
                Network. Proceedings\\012of the MTS/IEEE Oceans 2006 Conference, Boston MA,\\012September 2006.
            </avalue>
        </aString>
    </AttContainer>

    <Grid name="u">
        <HasA>
            <foo xmlns="http://www.opengis.net/WxS />
        </HasA >
        <IsA>
            <Field xmlns="http://www.opengis.net/wcs/1.1" xmlns:ows="http://www.opengis.net/ows/1.1"
                             xmlns:owcs="http://www.opengis.net/wcs/1.1/ows" xmlns:gml="http://www.opengis.net/gml/3.2"
                             xmlns:xlink="http://www.w3.org/1999/xlink"
                >
                <ows:Title>surface_eastward_sea_water_velocity</ows:Title>
                <ows:Abstract>Eastward component of a 2D sea surface velocity vector.</ows:Abstract>
                <Identifier>u</Identifier>
                <Definition>
                    <ows:AnyValue/>
                </Definition>
                <NullValue>-32768</NullValue>
                <owcs:InterpolationMethods>
                    <owcs:DefaultMethod>nearest</owcs:DefaultMethod>
                </owcs:InterpolationMethods>
            </Field>
        </IsA>
        <aString name="standard_name" >
            <value>surface_eastward_sea_water_velocity</value>
        </aString>
        <aString name="units" >
            <value>m s-1</value>
        </aString>
        <aInt16 name="_FillValue" >
            <value>-32768</value>
        </aInt16>
        <aFloat32 name="scale_factor" >
            <value>0.009999999776</value>
        </aFloat32>
        <aString name="ancillary_variables">
            <value>DOPx</value>
        </aString>
        <Array name="u">
            <Int16/>
            <dimension name="time" size="1"/>
            <dimension name="lat" size="460"/>
            <dimension name="lon" size="701"/>
        </Array>
        <Map name="time">
            <Int32/>
            <dimension name="time" size="1"/>
        </Map>
        <Map name="lat">
            <Float32/>
            <dimension name="lat" size="460"/>
        </Map>
        <Map name="lon">
            <Float32/>
            <dimension name="lon" size="701"/>
        </Map>
    </Grid>

</Dataset>