# Presentation: 491191

## Earth Science Data Types

**Earth Science Data Types**
**(ESDTs)**

**Kemal Oflus**
**koflus@eos.hitc.com**
**Jon Pals**
**jon@eos.hitc.com**
**March 2003**

## Topics

**What are Metadata?**
**Overview: Role of ESDTs**
**Descriptor File**
**Descriptor File Components**
**Object Description Language**
**Collection Metadata Groups**
**Granule-Level Metadata**
**Multiple Values:  Containers and Arrays**
**Product Specific Attributes**

## Topics (Cont.)

**Group = SERVICES**
**Group = STRUCTURE**
**Group = EVENT**
**An Example Descriptor File**
**Metadata Configuration File**
**An Example MCF**
**Metadata File**
**An Example .met File**
**Summary**

## What are Metadata? 

**Metadata are descriptive information about the data, employing a common set of terms and definitions**
**An Earth Science Data Type (ESDT) is the interface between the science data and the ECS system**

## How are Metadata Used in ECS?

**Search and access of data**
**Inventory searches submitted by users via the ECS Client**
**Collection discovery via the Advertising Service**** **
**Other uses**
**Subscriptions based on metadata**
**Staging of input files based on metadata for Data Processing ****(e.g., time, location, version) **

## Representation of data products from the Earth Scientist’s perspective
Earth Science Data Types (ESDTs) embody the core science data knowledge for data products contained in the EOS Data and Information System (EOSDIS)
Mechanism used to inform the Science Data Server about 
Core and product-specific metadata attribute values for each collection and data granule
EOSDIS Core System (ECS) Data Server services (e.g., Insert, Search, Acquire) which can be invoked for the collection

**Earth Science Data Types (ESDTs) embody the core science data knowledge for data products contained in the EOS Data and Information System (EOSDIS)**
**Mechanism used to inform the Science Data Server about **
**Core and product-specific metadata attribute values for each collection and data granule**
**EOSDIS Core System (ECS) Data Server services (e.g., Insert, Search, Acquire) which can be invoked for the collection**

**Overview:  Role of ESDTs**

## Overview:  Role of ESDTs (Cont.)

**One ESDT per collection**
**Before a new collection can be added to ECS**
**An ESDT must be created and submitted to Science Data Server (SDSRV), a component of the Data Server Subsystem (DSS)**

## Overview:  Role of ESDTs (Cont.)

**An ESDT, added to the SDSRV, defines to the ECS subsystems**
**Collection level metadata attributes and values **
**Granule metadata attributes, source of attribute values and attribute valid values**
**Product-Specific attributes and their valid values and ranges**
**Subscribable events**
**Services**

## Overview:  Role of ESDTs (Cont.)

**Each ESDT consists of two components**
**Descriptor file**
**ASCII file in Object Description Language (ODL) format describing metadata and services**
**ODL is an object-based language with “keyword = value” (keyword/value) statements that allows the class and attributes of an entity to be specified**
**ODL is used to convey relations between attributes and their characteristics within the descriptor files**
**Dynamic Link Library  (DLL)**
**Shared object file coded in C++ **
**Handles the implementation of the specified services on each collection described in the Descriptor file**

## Descriptor File

**All collection-level attributes are known ahead of time so their values can be specified in the descriptor file**
**The ESDT descriptor has six basic sections:**
**Collection level metadata information**
**Granule/Inventory level metadata information**
**Unparsed/Archive metadata information**
**Structure information which holds the CSDT (Computer Science Data Type) mapping - (the actual physical file organization and storage implementation)**
**ESDT service descriptions**
**ESDT supported event handlers**

**Notes:**
Collection Level Metadata section - contains collection level metadata attributes and values for those attributes 
Granule Level Metadata section - contains granule level metadata attributes and either values for those attributes or pointers to where the values come from. 
Valids section - contains granule attribute valids and ranges 
Services section - contains the list of services (e.g., Insert, Search, Acquire) that apply to the collection (the services are only listed here; they are implemented via a DLL) 

## File Naming Convention

**For ESDTs **
**Descriptor Files**
**Have a prefix of “DsESDT”,  followed by instrument abbreviation and then collection Short Name and 3 digit Version ID**
**MUST end in ".desc"**
**Examples -- DsESDTMoMOD10_L2.001.desc, DsESDTOmOMI_L1b.001.desc**

## File Naming Convention (Cont.)

**For ESDTs **
**DLL Files**
**Have a prefix of “libDsESDT”, followed by instrument abbreviation, and collection Short Name and 3 digit Version ID**
**MUST end in "Sh.so"**
**Examples -- libDsESDTLsL70R.001Sh.so, libDsESDTSyBASIC.001Sh.so,             libDsESDTSyLgPoly.001Sh.so**

## Descriptor File Components

**Group = METADATA**
**	****Specifies the attributes for the ESDT forming the COLLECTIONMETADATA and INVENTORYMETADATA groups. **
**	****The**** ****UNPARSEDMETADATA group specifies the non-inventory attributes to be set by a PGE.  The correct format (ODL— described later) must be used, however.**
**Group = SERVICE**
**	****The purpose of this group is to hold the list of services which will be available for this ESDT**

## Descriptor File Components                   (Cont.)

**Group = STRUCTURE**
**	****The STRUCTURE group contains objects which indicate the granule file structure, or CSDT of the ESDT.**
**Group = EVENT**
**	****The EVENT group specifies which services, when invoked, signal to other ECS subsystems that an event has occurred.  The event signature includes the attributes whose values are to be included in the event message.**

## Object Description Language (ODL)

- •	**ECS software to read and write ODL-encoded metadata descriptions uses a public domain license ODL Library obtained from the JPL Planetary Data Systems group.**
**•****	****Example ODL:**
- 		**GROUP = ECSDataGranule**
**	****	****    ****OBJECT = ProductionDateTime**
**            ****	****        ****Data_Location = "TK"**
**            ****	****        ****Mandatory = "TRUE"**
**            ****	****        ****TYPE = "DATETIME"**
**            ****	****        ****NUM_VAL = 1**
**        ****	****    ****END_OBJECT = ProductionDateTime**
**	****	****END_GROUP = ECSDataGranule**

## Description Elements

**The order********* of the description elements for each Object in a Descriptor File is as follows:**
**Data_Location = **Required for all, but set to Metadata Configuration File(MCF)
- 		for all Collection-level Attributes
**Mandatory =****       **Required for all.  Used by SDP Toolkit :				     = TRUE, error message is issued if the value is not set			     =FALSE, no error message is issued if the value is not 			     set
**Class =****	****	**Only used for Container Objects
**TYPE =****	****	**Used only for Granule-level attributes to put into the 				MCF File for use by the SDP Toolkit
**NUM_VAL =****	****	**The maximum number of values to be set for the 				attribute
**Value = ****	****	**Used only when Data_Location = MCF

- *  The actual order of elements in an object description is not important, except for visual consistency.

## Description Elements: Data_Location settings

**The Location indicates the source of the metadata value:**
**	****MCF- the descriptor file, or metadata configuration file**
**	****PGE - Science Software program**
**	****TK - SDP Toolkit**
**	****DSS - set after processing by the Data Server**
**	****DAAC - set after processing by the DAAC**
**	****DP - set after processing by the Data Provider**

## Collection-Level MetadataDescribed in 420-TP-023-001, “ Release 6B Implementation Earth Science Data Model for the ECS Project”, dated October 2002. The applicable valid values for each attribute are also given there. 

**B.0 Science Data Model Used in ECS**

## Spectrum of Metadata Coveragein ESDTs

_**Minima**_**l - number of attributes needed by the system to insert a granule (e.g., non-science or system collections)**
_**Limited**_** - includes the Minimal attributes plus other attributes needed to identify the science content of the collection to the Global Change Master Directory (GCMD)  **
**Data Providers may supply metadata above and beyond this level as desired or as necessary to uniquely identify data granules**
_**Intermediate**_** - for products generated outside of EOSDIS but used within or distributed by EOSDIS (e.g., ancillary, Level 0, Landsat-7, SAGE III) **
_**Ful**_**l - for Standard Products generated within EOSDIS**

## Optionality of 	Collection Metadata Groups

**               **_**Attribute**_**	****	****              ****	****             **_**Cardinality**_**      **_**Minimal**_**         **_**Limited**_**     **_**Intermediate**_**      **_**Full**_
**CollectionDescriptionClass****	****	****1****	****R****	****R****	****R****	****R **
**ECSCollection ****	****	****	****  ****	****1****	****R****	****R****	****R****	****R**
**  ****ECSCollectionGuide****	****	****	****                  0-1****	****O****	****O****	****O****	****O**
**  ****MiscellaneousInformation****	****                  0-1****	****O****	****O****	****O****	****O**
**SingleTypeCollection****	****	****	****                  0-1****	****O****	****O****	****R****	****R**
**Spatial****	****	****	****                  0-1****	****O****	****O****	****R****	****R**
**  ****SpatialCoverageType  ****	****	****               [   1 ****	****R****	****R****	****R****	****R    ] ****†**** **
**  ****SpatialDomainContainer ****	****               [   1 ****	****R****	****R****	****R****	****R    ] ****†**** **
**  ****VerticalCoordinateSystemContainer                [   0-n****	****O****	****O****	****O****	****O   ] ****†**** **
**  ****HorizontalCoordinateSystemContainer           [    1****	****R****	****R****	****R****	****R    ] ****†**** **
**Temporal****	****	****	****                  0-1****	****O****	****O****	****R****	****R**
**RegularPeriodic****	****	**
**   ****or MultipleDateTimePeriod**
**          ****or SingleDateTime**
**                ****orRangeDateTime****	****                    1****	****O****	****O****	****R****	****R**
**Contact****	****	****	****                 0-1****	****O****	****R****	****R****	****R**
**  ****ContactPerson                                                 [   0-n****	****R****	****R****	****R****	****R    ] ****†**** **
**  ****ContactOrganization ****	****                                 [    1-n****	****R****	****R****	****R****	****R    ] ****†**** **
**DisciplineTopicParameters****	****                 0-n****	****O****	****R****	****R****	****R**
**TemporalKeywordClass****	****	****                 0-n****	****O****	****O****	****O****	****O**
**SpatialKeywordClass****	****	****	****                 0-n****	****O****	****O****	****O****	****O**
**ProcessingLevel****	****	****	****                 0-1****	****O****	****O****	****O****	****R**
**Locality****	****	****	****                 0-1****	****O****	****O****	****O****	****O**
**	****	****†**** ****optionality applicable only if parent group is used    (R = required, O = optional)**

## Optionality of Collection Metadata Groups (Cont.)

**               **_**Attribute**_**	****	****              **_**Cardinality**_**      **_**Minimal**_**         **_**Limited**_**     **_**Intermediate**_**      **_**Full**_
**Platform ****	****	****	****0-n****	****O****	****O****	****O****	****O**
** ****PlatformCharacteristic ****	****                [ ****	****0-n****	****O****	****O****	****O****	****O   ] ****†**** **
**  ****Instrument ****	****	****                [****	****0-n****	****O****	****O****	****O****	****O   ] ****†**** **
**    ****OperationModeClass                   [   ****	****0-n****	****O****	****O****	****O****	****O   ] ****†**** **
**    ****InstrumentCharacteristic             [****	****0-n****	****O****	****O****	****O****	****O   ] ****†**** **
**    ****Sensor ****	****	****                [****	****0-n****	****O****	****O****	****O****	****O   ] ****†**** **
**      ****SensorCharacteristic                 [****	****0-n****	****O****	****O****	****O****	****O   ] ****†**** **
**AnalysisSource ****	****	****	****0-n****	****O****	****O****	****O****	****O**
**Campaign ****	****	****	****0-n****	****O****	****O****	****O****	****O**
**CollectionAssociation ****	****	****0-n****	****O****	****O****	****O****	****O**
**Review ****	****	****	****0-n****	****O****	****O****	****O****	****O**
**CSDTDescription ****	****	****	****0-1****	****O****	****O****	****O****	****O**
**AdditionalAttributes ****	****	****	****0-n****	****O****	****O****	****O****	****O**
**  ****PhysicalParameterDetails             [ ****	****0-1****	****O****	****O****	****O****	****O   ] ****†**** **
**  ****InformationContent ****	****                     [ ****	****0-1****	****O****	****O****	****O****	****O   ] ****†**** StorageMediumClass ****	****	****	****0-n****	****O****	****O****	****O****	****O**
**type****	****	****	****0-1****	****O****	****O****	****O****	****O**
**DLL Name****	****	****	**** 1****	****R****	****R****	****R****	****R**
**GranuleTimeDuration****	****	****	****0-1****	****O****	****O****	****O****	****O**
**SpatialSearchType****	****	****	****0-1****	****O****	****O****	****O****	****O**
**	****	****†**** ****optionality applicable only if parent group is used    (R = required, O = optional)**

## Absent From Descriptor File

**The Document Module has not been included since Documents are handled by the Document Data Server which has not been currently implemented**
**The Delivered Algorithm Package attributes (if applicable) are populated separately following successful Science Software Integration and Test (SSI&T)**
**All pointer attributes have been excluded; viz.., Browse, QualityTextComment, ValidationDocument, and UserCommentDocument**
**These values are not known at the ESDT installation time**

## For the Slides which follow:

- •**  ****The Type values for the attributes are abbreviated:**
**	**VA - variable length string
- 	A - fixed length string  (Defined in the Data Base this way for attributes with small string lengths, but are actually VA for population purposes)
- 	I - integer (32 bit)
- 	SI - Short Integer (8 bit)
- 	F - float
- 	LF - long float, or double
- 	D - date
- 	T - time
- 	DT - datetime
- •**  ****All Collection-level Attributes have Data_Location set to MCF, since all Collection-level metadata values must be set in the Descriptor File**
**	****(“MCF” here is a legacy.  The Descriptor file was originally referred to by Data Server developers as a metadata control file, but this name was too easily confused with the SDP Toolkit Metadata Configuration File, however.)**
- •**  ****A value of “R” for attributes within optional Groups means that “if any  attribute within that group are to be set, then the attribute(s) indicated with R must also be set”**

## CollectionDescription Group
Attributes	Type/Size Location  Required 

ShortName		 A8	MCF	R
LongName		VA80	MCF	R
CollectionDescription  VA255	MCF	R

VersionID		  I 	MCF	R

_**Attributes**__**	**__**Type/Size**_** **_**Location**_**  **_**Required**_** **
- ShortName		 A8	MCF	R
- LongName		VA80	MCF	R
- CollectionDescription  VA255	MCF	R
- VersionID		  I 	MCF	R

- ShortName and VersionID uniquely identify the collection.
- An attribute VersionDescription has been added to provide an explanation of how the version is different from other versions.

**The CollectionDescriptionClass Group**

## The ECSCollection Group

**ECSCollection Group**
_**Attributes**__**	**_**             **_**Type/Size**_**  **_**Location**_**  **_**Required**_
- RevisionDate		              	D	MCF	R
- SuggestedUsage		        	VA500	MCF	O
- ProcessingCenter	         	VA20	MCF	O
- ArchiveCenter		         	VA20	MCF	R
- VersionDescription	       	VA255	MCF	R
- DataSetDisclaimerPointer	VA200	MCF	O

**Date of Descriptor File Revision**

## The ECSCollectionGuide and MiscellaneousInformation Groups

**ECSCollectionGuide Group**
_**Attributes**__**	**__**	**__**	**_**	****        **_**Type/Size**_**  **_**Location**_**  **_**Required**_
- ECSCollectionGuidePointer    			VA200	MCF	O
- ECSCollectionGuidePointerComment		VA255	MCF	O
**MiscellaneousInformation Group**
_**Attributes**__**	**_**         ****	****          ****	****        **_**Type/Size**_**  **_**Location**_**  **_**Required**_
- MiscellaneousInformationPointer 		VA200	MCF	O
- MiscellaneousInformationPointerComment	VA255	MCF	O

## The SingleTypeCollection Group

**SingleTypeCollection Group**
_**Attributes**__**	**_** **_**Type/Size**_** **_**Location**_**  **_**Required**_
- AccessConstraints	    VA255	MCF	O
- CitationforExternalPublication	    VA255	MCF	O
- CollectionState	     A10	MCF	R
- MaintenanceandUpdateFrequency	    VA80	MCF	R

## The Spatial Groups (1 of 5)

**Spatial Group**
_**Attributes**__**	**_**             **_**Type/Size**_** **_**Location**_**  **_**Required**_
- SpatialCoverageType           A10	MCF	R
**HorizontalSpatialDomainContainer Group**
_**Attributes**__**	**_**             **_**Type/Size**_** **_**Location**_**  **_**Required**_ ZoneIdentifier		             VA64	MCF	O
**GPolygonContainer**
_**Attributes**__**	**_**            **_**Type/Size**_** **_**Location**_**  **_**Required**_ ExclusionGRingFlag               A1	MCF	R
- GRingPointLatitude	               LF	MCF	R
- GRingPointLongitude             LF	MCF	R
- GRingPointSequenceNo	I	MCF	R

**The spatial extent of a collection is indicated by setting only 1 of GPolygon, BoundingRectangle, Point or Circle **
**A GPolygon must have at least 3 unique points clockwise order with the interior to the right in going from one point to the next.**
**Multiple GRings may be specified using multiple containers.  **

## The Spatial Groups (2 of 5)

**or**
**BoundingRectangle Group**
_**Attributes**__**	**_**             **_**Type/Size**_** **_**Location**_**  **_**Required**_ WestBoundingCoordinate 	LF	MCF	R
- NorthBoundingCoordinate 	LF	MCF	R
- EastBoundingCoordinate 	LF	MCF	R
- SouthBoundingCoordinate 	LF	MCF	R
**or**
**Point Group**
_**Attributes**_**                         **_**Type/Size**_** **_**Location**_**  **_**Required**_
- PointLongitude		                    LF	MCF	R
- PointLatitude		                    LF	MCF	R
**or**
**Circle Group**
_**Attributes**_**                         **_**Type/Size**_** **_**Location**_**  **_**Required**_
- CenterLatitude		                   LF	MCF	R
- CenterLongitude		                   LF	MCF	R
- RadiusValue		                   LF	MCF	R
- RadiusUnits		                   LF	MCF	R

## The Spatial Groups (3 of 5)

**AltitudeSystemDefinition Group**
_**Attributes**_**                        **_**Type/Size**_** **_**Location**_**  **_**Required**_
- AltitudeDatumName        VA40	MCF	R
- AltitudeDistanceUnits      VA20	MCF	R
- AltitudeEncodingMethod  VA255	MCF	R
- AltitudeResolution	F	MCF	R
**DepthSystemDefinition Group**
_**Attributes**_**                        **_**Type/Size**_** **_**Location**_**  **_**Required**_
- DepthDatumName           VA80	MCF	R
- DepthDistanceUnits         VA20	MCF	R
- DepthEncodingMethod   VA255	MCF	R
- DepthResolution 	               F	MCF	R

- The AltitudeSystemDefinition Group is optional, with cardinality of 0-1.
- Only one value can be set, use finest resolution.
- The DepthSystemDefinition Group is optional, with cardinality of  0-1.
- Only one value can be set, use finest resolution.

## The Spatial Groups (4 of 5)

**GeodeticModel Group**
_**Attributes**_**                          **_**Type/Size**_** **_**Location**_**  **_**Required**_
- EllipsoidName	   VA255	MCF	R
- SemiMajorAxis		   F 	MCF	R
- DenominatorofFlatteningRatio    F 	MCF	R
- HorizontalDatumName	   VA30	MCF	O
**GeographicCoordinateSystem Group**
_**Attributes**_                         _**Type/Size**_** **_**Location**_**  **_**Required**_
- LatitudeResolution		  F	MCF	R
- LongitudeResolution		  F	MCF	R
- GeographicCoordinateUnits		A80	MCF	R

- The GeodeticModel Group is optional, with cardinality of 0-1.
- If the HorizontalCoordinateSystemContainer group is used, then one of GeographicCoordinateSystem, PlanarCoordinateSystemContainer or LocalCoordinateSystemContainer must be used.
- The GeographicCoordinateSystem is used with most Level 3 products on a regular Latitude-Longitude grid.

## The Spatial Groups (5 of 5)

**PlanarCoordinateSystemContainer Group**
_**Attributes**__**	**_**                 **_**Type/Size**_** **_**Location**_**  **_**Required**_
- [Details skipped because of group complexity,
- 	see 420-TP-015-002 ]
**LocalCoordinateSystemContainer Group**
_**Attributes**__**	**_**                 **_**Type/Size**_** **_**Location**_**  **_**Required**_
- LocalCoordinateSystemDescription
- 			VA255	MCF	R
- LocalGeoreferenceInformation
- 			VA255	MCF	R
**VerticalSpatialDomain Group**
_**Attributes**__**	**_**                 **_**Type/Size**_** **_**Location**_**  **_**Required**_
- VerticalSpatialDomainType	VA20	MCF	R
- VerticalSpatialDomainValue	VA20	MCF	R

**If the HorizontalCoordinateSystemContainer group is used, then one of GeographicCoordinateSystem, PlanarCoordinateSystemContainer or LocalCoordinateSystemContainer must be used.**
**A “roll-your-own” coordinate system.**
**Multiple VerticalSpatialDomains are declared using containers**

## The Time Groups (1 of 3)

**Temporal Group**
_**Attributes**__**	**_**               **_**Type/Size**_** **_**Location**_**  **_**Required**_
- TimeType			A10	MCF	R
- DateType			A10	MCF	R
- TemporalRangeType	VA30	MCF	R
- PrecisionofSeconds		  I	MCF	R
- EndsatPresentFlag		A1	MCF	R
**RegularPeriodic Group**
- _Attributes__	_               _**Type/Size**_** **_**Location**_**  **_**Required**_
- PeriodName		               VA30	MCF	R
- Period1stDate		                  D	MCF	R
- Period1stTime		                  T	MCF	R
- PeriodCycleDurationUnit        VA15	MCF	R
- PeriodCycleDurationValue	  F	MCF	R
- PeriodDurationUnit	               VA15	MCF	R
- PeriodDurationValue	  F	MCF	R

- The EndsatPresentFlag is used to indicate if the collection is open (i.e., granules are still being added) or closed.
- The RegularPeriodic group is optional, with cardinality of 0-n; multiples are defined using containers.

## The Time Groups (2 of 3)

**or**
**MultipleDateTimePeriod Group**
_**Attributes**__**	**_**              **_**Type/Size**_** **_**Location**_**  **_**Required**_
- MultipleDateTimeName         VA30	MCF	R
**or**
**SingleDateTime Group**
_**Attributes**_**                         **_**Type/Size**_** **_**Location**_**  **_**Required**_
- TimeofDay		                 T	MCF	R
- CalendarDate		                 D	MCF	R
**or**

**The MultipleDateTimePeriod group is optional, with cardinality of 0-n.  The MultipleDateTimePeriod requires 2 or more SingleDateTime groups associated with it.**
**Only 1 DateTime Group can be set.**
**Dates and Times are set separately:**
**Date Format:**
**	****YYYY-MM-DD**
**or****	****YYYY-DOY**
**Time Format:**
**	****HH:MM:SS.ddddddZ**
**where Z indicates UTC. **
**Decimal places d are not required, but the SDP Toolkit limits to 6 (soon 7) decimal places**

## The Time Groups (3 of 3)

**RangeDateTime Group**
_**Attributes**__**	**_**              **_**Type/Size**_** **_**Location**_**  **_**Required**_
- RangeBeginningTime 	 T	MCF	R
- RangeEndingTime		 T	MCF	R
- RangeBeginningDate	 D	MCF	R
- RangeEndingDate		 D	MCF	R

## The Contact Groups (1 of 4)

**ContactPerson Group**
_**Attributes**__**	**_**              **_**Type/Size**_** **_**Location**_**  **_**Required**_
- Role		             VA20	MCF	R
- HoursofService		             VA255	MCF	O
- ContactInstructions	             VA255	MCF	O
- ContactJobPosition	             VA255	MCF	O
- ContactFirstName	             VA255	MCF	R
- ContactMiddleName             VA255	MCF	O
- ContactLastName	             VA255	MCF	R
**ContactPersonAddress Group**
_**Attributes**__**	**_**              **_**Type/Size**_** **_**Location**_**  **_**Required**_ StreetAddress		              VA80	MCF	R
- City		              VA30	MCF	R
- StateProvince		              VA30	MCF	R
- PostalCode		              VA20	MCF	R
- Country		              VA10	MCF	R

- ContactPersonAddress is optional, with multiples expressed as container objects.

## The Contact Groups (2 of 4)

**Telephone Group**
_**Attributes**__**	**_**            **_**Type/Size**_** **_**Location**_**  **_**Required**_ TelephoneNumber	            VA23	MCF	R
- TelephoneNumberType        A10	MCF	O
**Email Group**
_**Attributes**__**	**_**           **_**Type/Size**_** **_**Location**_**  **_**Required**_
- ElectronicMailAddress        VA255	MCF	R

- Telephone is optional, with multiples expressed as container objects.
- Email is optional, with cardinality of 0-1.

## The Contact Groups (3 of 4)

**ContactOrganization Group**
_**Attributes**__**	**_**             **_**Type/Size**_** **_**Location**_**  **_**Required**_
- Role		             VA20	MCF	R
- HoursofService		             VA255	MCF	O
- ContactInstructions	             VA255	MCF	O
- ContactOrganizationName   VA255	MCF	R
**ContactOrganizationAddress Group**
_**Attributes**__**	**_**             **_**Type/Size**_** **_**Location**_**  **_**Required**_ StreetAddress		             VA80	MCF	R
- City		             VA30	MCF	R
- StateProvince		             VA30	MCF	R
- PostalCode		             VA20	MCF	R
- Country		             VA10	MCF	R

**ContactOrganizationAddress is optional, with multiples expressed as container objects**

## The Contact Groups (4 of 4)

**OrganizationTelephone Group**
_**Attributes**__**	**_**               **_**Type/Size**_** **_**Location**_**  **_**Required**_ TelephoneNumber	               VA23	MCF	R
- TelephoneNumberType           A10	MCF	O
**OrganizationEmail Group**
_**Attributes**__**	**_**               **_**Type/Size**_** **_**Location**_**  **_**Required**_
- ElectronicMailAddress           VA255	MCF	R

**OrganizationTelephone is optional, with multiples expressed as container objects.**
**OrganizationEmail is optional, with cardinality of 0-1.**

## The Keyword Groups

**DisciplineTopicParameters Group**
_**Attributes**__**	**_**               **_**Type/Size**_** **_**Location**_**  **_**Required**_** **
- ECSDisciplineKeyword          VA24	MCF	R
- ECSTopicKeyword	              VA32	MCF	R
- ECSTermKeyword	              VA50	MCF	R
- ECSVariableKeyword            VA80	MCF	R
- ECSParameterKeyword         VA80	MCF	O
**TemporalKeywordClass Group**
_**Attributes**__**	**_**               **_**Type/Size**_** **_**Location**_**  **_**Required**_
- TemporalKeyword	               VA40	MCF	R
**SpatialKeywordClass Group**
_**Attributes**__**	**_**               **_**Type/Size**_** **_**Location**_**  **_**Required**_
- SpatialKeyword		               VA40	MCF	R

**The DisciplineTopicParametersgroup may have multiple sets of keywords, conforming to the GCMD keywords;  multiples are expressed as container objects.**
**ECSParameterKeyword has a cardinality of 0-n**
**TemporalKeywordClass is optional, with cardinality of 0-n.**
**SpatialKeywordClass is optional, with cardinality of 0-n.**

## The ProcessingLevel Group

**ProcessingLevel Group**
_**Attributes**__**	**_**                **_**Type/Size**_** **_**Location**_**  **_**Required**_
- ProcessingLevelDescription	VA80	MCF	R
- ProcessingLevelID		  A6	MCF	R

## The Platform, Instrument and Sensor Groups  (1 of 3)

**Platform Group**
_**Attributes**__**	**__**Type/Size**_** **_**Location**_**  **_**Required**_
- PlatformShortName	    VA20	MCF	R
- PlatformLongName	    VA80	MCF	R
- PlatformType	    VA20	MCF	R
- PlatformCharacteristicName	    VA40	MCF	R
- PlatformCharacteristicDescription	    VA80	MCF	R
- PlatformCharacteristicDataType	      A8	MCF	R
- PlatformCharacteristicUnit	    VA20	MCF	O
- PlatformCharacteristicValue	    VA20	MCF	R

**Multiple Platforms are specified using containers.**
**PlatformCharacteristics have a cardinality of 0-n.**
**Multiple PlatformCharacteristics are specified using containers.**

## The Platform, Instrument and Sensor Groups (2 of 3)

**Instrument Group**
_**Attributes**__**	**_**T**_**ype/Size**_** **_**Location**_**  **_**Required**_
- InstrumentShortName	   VA20	MCF	R
- InstrumentLongName	   VA80	MCF	O
- InstrumentTechnique	   VA80	MCF	O
- NumberofSensors	       I	MCF	O
- OperationMode	   VA20	MCF	O
- InstrumentCharacteristicName	   VA40	MCF	R
- InstrumentCharacteristicDescription	   VA80	MCF	R
- InstrumentCharacteristicUnit	   VA20	MCF	O
- InstrumentCharacteristicDataType	     A8	MCF	R
- InstrumentCharacteristicValue	   VA15	MCF	R

**Multiple Instruments are specified using containers.**
**OperationMode has a cardinality of 0-n.**
**InstrumentCharacteristics have a cardinality of 0-n.**
**Multiple InstrumentCharacteristics are specified using containers.**

## The Platform, Instrument and Sensor Groups (3 of 3)

**Sensor Group**
_**Attributes**__**	**__**Type/Size**_** ****	**_**Location**_**  **_**Required**_
- SensorShortName		VA20	MCF	R
- SensorLongName		VA80	MCF	O
- SensorTechnique		VA80	MCF	O
- SensorCharacteristicName		VA40	MCF	R
- SensorCharacteristicDescription	VA80	MCF	R
- SensorCharacteristicDataType  	  A8	MCF	R
- SensorCharacteristicUnit		VA20	MCF	O
- SensorCharacteristicValue		VA80	MCF	R

**Multiple Sensors are specified using containers.**
**SensorCharacteristics have a cardinality of 0-n.**
**Multiple SensorCharacteristics are specified using containers.**

## Misc. Groups (1 of 4)

**AnalysisSource Group**
_**Attribute**_                      _**Type/Size**_** **_**Location**_**  **_**Required**_
- AnalysisShortName	VA20	MCF	R
- AnalysisLongName	VA80	MCF	O
- AnalysisTechnique	VA80	MCF	O
- AnalysisType	VA20	MCF	R
**Campaign Group**
_**Attributes**_**                    **_**Type/Size**_** **_**Location**_**  **_**Required**_
- CampaignShortName	VA20	MCF	R
- CampaignLongName	VA80	MCF	O
- CampaignStartDate		  D	MCF	O
- CampaignEndDate		  D	MCF	O

**Multiple AnalysisSource groups are specified using containers.**
**Multiple Campaign groups are specified using containers.**

## Misc. Groups (2 of 4)

**CollectionAssociation Group**
_**Attributes**_**                          **_**Type/Size**_**  **_**Location**_**  **_**Required**_ CollectionType	    VA20	MCF	R
- CollectionUse	   VA500	MCF	R
- ShortName	     A8	MCF	R
- VersionID	     SI	MCF	R
**Review Group**
_**Attributes**__**	**__**Type/Size**_**  **_**Location**_**  **_**Required**_ ScienceReviewDate	       D	MCF	R
- ScienceReviewStatus	   VA20	MCF	R
- FutureReviewDate	       D	MCF	O
**CSDTDescription Group**
_**Attributes**_**                          **_**Type/Size**_**   **_**Location**_**  **_**Required**_ PrimaryCSDT	   VA30	MCF	R
- IndirectReference	  VA100	MCF	O
- Implementation	  VA100	MCF	R
- CSDTComments	  VA255	MCF	O

**Multiple AnalysisSource groups are specified using containers.**
**These are the ShortName and VersionID of the associated collection.**
**Multiple Review groups are specified using containers.**

## Misc. Groups (3 of 4)

**AdditionalAttributes Group**
_**Attributes**__**	**__**Type/Size**_**	**_**Location**_**	**_**Required**_
- AdditionalAttributeDatatype	     A10	MCF	R
- AdditionalAttributeDescription	  VA255	MCF	R
- AdditionalAttributeName	   VA40	MCF	R
- ParameterUnitsofMeasurement	   VA20	MCF	O
- ParameterRangeBegin	   VA40	MCF	O
- ParameterRangeEnd	   VA40	MCF	O
- ParameterValueAccuracy	   VA30	MCF	O
- ParameterValueAccuracyExplanation	  VA255	MCF	O
- ParameterMeasurementResolution	   VA30	MCF	O
- ParameterValue	  VA255	MCF	O
**StorageMediumClass Group**
_**Attributes**__**	**__**Type/Size**_**	**_**Location**_** **_**Required**_
- StorageMedium	   VA30	MCF	R

**Multiple AdditionalAttributess are specified using containers.**
**If a Parameter Range is to be specified, the both ParameterRangeBegin and ParameterRangeEnd must be provided.**
**StorageMedium has a cardinality of 0-n.**

## Misc. Groups (4 of 4)

**Locality Group**
_**Attributes**__**	**__**Type/Size**_**	**_**Location**_**     **_**Required**_
- LocalityType                       VA20                MCF             R
- LocalityDescription             VA255              MCF             R
_**Attributes**__**	**__**Type/Size**_**	**_**Location**_**     **_**Required**_
- type	   VA20	   MCF	        O
- DLLName	  VA255	   MCF	        R
- SpatialSearchType	   VA40	   MCF	        O
- GranuleTimeDuration	       I	   MCF	        O

## Described in 420-TP-023-001, “Release 6B Implementation Earth Science Data Model for the ECS Project”, dated October 2002.The applicable valid values for each attribute are also given there.

**Granule-Level Metadata**

## Pointers in Descriptor File

**In the Inventory Metadata Group, only those pointer attributes that are set by the Science Software have been included**
**Viz. InputPointer, AncillaryInputPointer, and OrbitParametersPointer**
**Only these pointers are known at the time a data granule produced by a PGE is inserted in the Science Data Server**
**      **note: ECS is discouraging the use of AncillaryInputPointer and OrbitParametersPointer.
-                InputPointer should be used instead.

## Optionality of Inventory Metadata               Groups (1 of 2)

**               **_**Attribute**_**	****	****              **_**Cardinality**_**      **_**Minimal**_**         **_**Limited**_**     **_**Intermediate**_**      **_**Full**_
**CollectionDescriptionClass****	**** 1****	****R****	****R****	****R****	****R **
**ECSDataGranule****	****	****	****0-1****	****O****	****O****	****R****	****R**
**MeasuredParameter****	****	****	****0-n ****	****O****	****O****	****O****	****O**
**   ****QAFlags****	****	****	**** 1              [****	****R****	****R****	****R****	****R   ]**** †**
**   ****QAStats ****	****	****	****0-1            [ ****	****O****	****O****	****O****	****O   ]**** †**** **
**OrbitCalculatedSpatialDomain}****	****0-n ****	****O****	****O****	****O****	****O**
**InputGranule****	****	****	****0-n ****	****O****	****O****	****O****	****O**
**SpatialDomainContainer****	****	****0-1 ****	****O****	****O****	****O****	****O**
**   ****GranuleLocality****	****	****	****0-1            [   O****	****O****	****O****	****O   ] ****†**
**   ****ZoneIdentifierClass****	****	****	****0-1            [ ****	****O****	****O****	****O****	****O   ]**** †**
**   ****VerticalSpatialDomain****	****	****0-n            [ ****	****O****	****O****	****O****	****O   ]**** †**
**   ****HorizontalSpatialDomainContainer****	**** 1              [****	****R****	****R****	****R****	****R   ]**** †**
**	****†**** ****optionality applicable only if parent group is used    (R = required, O = optional)**

## Optionality of Inventory Metadata Groups (2 of 2)

_**Attribute**_**	****	****                                  **_**Cardinality**_**      **_**Minimal**_**         **_**Limited**_**     **_**Intermediate**_**      **_**Full**_
**RangeDataTime or SingleDateTime****	****	****0-1****	****O****	****O****	****O****	****O**
**PGEVersionClass****	****	****	****0-1 ****	****O****	****O****	****O****	****O**
**AncillaryInputGranule****	****	****	****0-n ****	****O****	****O****	****O****	****O**
**Review****	****	****	****	****0-n ****	****O****	****O****	****O****	****O**
**ProcessingQA****	****	****	****0-n ****	****O****	****O****	****O****	****O**
**OrbitParametersGranule****	****	****	****0-n ****	****O****	****O****	****O****	****O**
**StorageMediumClass****	****	****	****0-n ****	****O****	****O****	****O****	****O**
**AnalysisSource****	****	****	****0-n ****	****O****	****O****	****O****	****O**
**Campaign****	****	****	****	****0-n ****	****O****	****O****	****O****	****O**
**SensorCharacteristic****	****	****	****0-n ****	****O****	****O****	****O****	****O**
**AssociatedPlatformInstrumentSensor****	****	****0-n ****	****O****	****O****	****O****	****O**
**ProductSpecificMetadata****	****	****	****0-n ****	****O****	****O****	****O****	****O**
**	****	****†**** ****optionality applicable only if parent group is used    (R = required, O = optional)**

## For the Slides which follow:

**•  ****The Type values for the attributes are abbreviated:**
**	****VA - variable length string**
**	****A - fixed length string**
**	****I - integer (32 Bit)**
**	****SI - Short Integer (8 Bit)**
**	****F - float**
**	****LF - long float, or double**
**	****D - date**
**	****T - time**
**	****DT - datetime**

## CollectionDescription Group
Attributes	            Type/Size Location  Required 

ShortName	                  A8           MCF          R

VersionID		             SI 	          MCF          R

_**Attributes**__**	**_**            **_**Type/Size**_** **_**Location**_**  **_**Required**_** **
**ShortName****	****                  A8           MCF          R**
**VersionID****	****	****             SI ****	****          MCF          R**

- These attributes uniquely identify the collection to which the granule belongs.  The values in the MCF file are supplied by the Data Server, and must not be overwritten by the PGE.

**The CollectionDescriptionClass Group (Granule-level)**

## The ECSDataGranule Group

- ECSDataGranule Group
_**Attributes**__**	**_**               **_**Type/Size**_** **_**Location**_**  **_**Required**_
- SizeMBECSDataGranule	F10	DSS	R
- ReprocessingPlanned            VA20	PGE	O
- ReprocessingActual	               VA45	PGE	O
- LocalGranuleID		               VA80	PGE	O
- DayNightFlag		                 A5	PGE	O
- ProductionDateTime	 DT	TK	R
- LocalVersionID		               VA60	PGE	O

**Size as Archived**
**These attributes are included in Descriptor Files only at the request of the Data Provider**
**The File Name of the granule supplied by the Data Provider**
**Scene illumination condition**
**Time when Inventory metadata is written using PGS_MET_WRITE**
**Granule Version number designated by Data Provider**

## The MeasuredParameter Group

**MeasuredParameter Group**
_**Attributes**__**	**_**                **_**Type/Size**_** **_**Location**_**  **_**Required**_
- ParameterName		                VA40	PGE	R
**QAFlags Group**
_**Attributes**__**	**_**                **_**Type/Size**_** **_**Location**_**  **_**Required**_
- AutomaticQualityFlag	VA64	PGE	R
-           ...	Explanation	VA255	PGE	R
- OperationalQualityFlag	VA20	PGE	O
-           ...	Explanation	VA255	PGE	O
- ScienceQualityFlag		VA20	DP	O
-           ...	Explanation	VA255	DP	O
**QAStats Group**
_**Attributes**__**	**_**                **_**Type/Size**_** **_**Location**_**  **_**Required**_
- QAPercentInterpolatedData	    I	PGE	O
- QAPercentMissingData	    I	PGE	R
- QAPercentOutofBoundsData	    I	PGE	O
- QAPercentCloudCover	    I	PGE	O

- Multiple MeasuredParameters declared using containers
- Parameter Name identifies the set of QAFlags and QAStats.  If subsetting by parameter is to be allowed, then the value of ParameterName must be identical to the name of the parameter as it appears in the structural metadata for the HDF-EOS granule.
- The QAStats group is optional

## TheOrbitCalculatedSpatialDomain

**OrbitCalculatedSpatialDomain Group**
_**Attributes**__**	**_**                **_**Type/Size**_** **_**Location**_**  **_**Required**_
- OrbitalModelName	                VA80	PGE	O
- OrbitNumber		                   I	PGE	O
- StartOrbitNumber 		   I	PGE	O
- StopOrbitNumber 		   I	PGE	O
- EquatorCrossingLongitude	 LF	PGE	R
- EquatorCrossingTime 	  T	PGE	R
- EquatorCrossingDate 	  D	PGE	R

- Multiple OrbitalCalculatedSpatialDomains are declared using containers.
- OrbitalModelName might be dropped from the data model.
- Only set either OrbitNumber or
-     StartOrbitNumber/StopOrbitNumber

## The Input Pointers

**InputGranule Group**
_**Attributes**__**	**__**Type/Size**_**  **_**Location**_**   **_**Required**_ InputPointer	   VA255         PGE         R
**AncillaryInputGranule Group**
_**Attributes**_**	**_**Type/Size**_**  **_**Location**_**   **_**Required**_ AncillaryInputType	    VA20          PGE         R
- AncillaryInputPointer 	   VA255         PGE         R
**OrbitParametersGranule Group**
_**Attributes**_**   ****	**_**Type/Size**_**  **_**Location**_**   **_**Required**_ OrbitParametersPointer	   VA255         PGE         R

- Multiple InputPointers are set using an array.  _All_ inputs (except for one special type described below) are set using InputPointer.  These are URs or file names transferred from the Process Control File(PCF).
- Multiple AncillaryInputPointers are set using a container. These attributes are used only to specify inputs files that are necessary in order to interpret the data in the product granule.  For example, if the geolocation is in a separate file, then the AncillaryInputType is set to “Geolocation”.  The pointer is a UR transferred from the PCF.
- Multiple OrbitParametersPointers are set using an array. This pointer is to the orbital ephemeris file used in the geolocation of the Level 1 products. The pointer is a UR transferred from the PCF.

## The SpatialDomainContainer Group

**ZoneIdentifierClass**
_**Attributes**__**	**_**              ****	**_**Type/Size**_**  **_**Location**_**  **_**Required**_
- ZoneIdentifier		                    VA64	 PGE	    O
**GPolygonContainer**
_**Attributes**__**	**_**                      **_**Type/Size **_**  **_**Location**_**  **_**Required**_ ExclusionGRingFlag		     A1	  PGE	    R
- GRingPointLatitude		     LF	  PGE	    R
- GRingPointLongitude		     LF	  PGE	    R
- GRingPointSequenceNo	      I	  PGE	    R
**or**
**BoundingRectangle Group**
_**Attributes**__**	**_**                      **_**Type/Size**_**   **_**Location**_**  **_**Required**_ WestBoundingCoordinate 	      LF	    PGE	    R
- NorthBoundingCoordinate 	      LF	    PGE	    R
- EastBoundingCoordinate 	      LF	    PGE	    R
- SouthBoundingCoordinate 	      LF	    PGE	    R

- If present, only one value
- The spatial extent of a granule is indicated by setting only 1 of GPolygon, BoundingRectangle, Point or Circle.
- A GPolygon must have at least 3 unique points clockwise order with the interior to the right in going from one point to the next.
- Multiple GRings may be specified using multiple containers.

## The SpatialDomainContainer Group (Cont.)

**or**
**Point Group**
_**Attributes**_**                            **_**Type/Size**_** **_**Location**_**  **_**Required**_
- PointLongitude		                   LF	PGE	  R
- PointLatitude		                   LF	PGE	  R
**or**
**Circle Group**
_**Attributes**_**                            **_**Type/Size**_** **_**Location**_**  **_**Required**_
- CenterLatitude		                   LF	PGE	  R
- CenterLongitude		                   LF	PGE	  R
- RadiusValue		                   LF	PGE	  R
- RadiusUnits		                   LF	PGE	  R

- At present, the Radius must only be expressed in meters

## The VerticalSpatialDomain Group

**Granule Locality Group**
_**Attributes**_**                         **_**Type/Size**_** **_**Location**_**  **_**Required**_
- LocalityValue		              VA80	PGE	R
**VerticalSpatialDomain Group**
_**Attributes**_**                        **_**Type/Size**_**  **_**Location**_**  **_**Required**_
- VerticalSpatialDomainType   VA20	PGE	R
- VerticalSpatialDomainValue  VA20	PGE	R

- Multiple VerticalSpatialDomains are declared using containers
- The vertical extent of data in a granule is indicated by designating one container with a VerticalSpatialDomainType of “Minimum Altitude” and corresponding value, and another container with a VerticalSpatialDomainType of “Maximum Altitude” and corresponding value.

## The Time Groups

**SingleDateTime Group**
_**Attributes**_**                         **_**Type/Size**_** **_**Location**_**  **_**Required**_
- TimeofDay		                 T	PGE	R
- CalendarDate		                 D	PGE	R
**or**
**RangeDateTime Group**
_**Attributes**_**                          **_**Type/Size**_** **_**Location**_**  **_**Required**_
- RangeBeginningTime 	 T	PGE	 R
- RangeEndingTime		 T	PGE	 R
- RangeBeginningDate	 D	PGE	 R
- RangeEndingDate		 D	PGE	 R

- Only 1 DateTime Group can be set.
- Dates and Times are set separately:
- Date Format:
-                               YYYY-MM-DD
- or                           YYYY-DOY
- Time Format:
- 	HH:MM:SS.ddddddZ
- where Z indicates UTC.
- Decimal places d are not required, but the SDP Toolkit limits to 6 (soon 7) decimal places

## Miscellaneous Groups

**PGEVersionClass**
_**Attributes**_**                        **_**Type/Size**_** **_**Location**_**  **_**Required**_ PGEVersion		              A10	PGE	R
**Review Group**
_**Attributes**__**	**_**             **_**Type/Size**_** **_**Location**_**  **_**Required**_ ScienceReviewDate		 D	PGE	R
- ScienceReviewStatus           VA20	PGE	R
- FutureReviewDate		 D	PGE	O
**ProcessingQA Group**
_**Attributes**__**	**_**             **_**Type/Size**_** **_**Location**_**  **_**Required**_ ProcessingQADescription     VA255	PGE	R
- ProcessingQAAttribute          VA80	PGE	R

**The Review Group is not being used at present, since this information is unknown at the time of PGE execution.**
- Multiple ProcessingQA groups are declared using containers**.  This group is intended to indicate the quality of the metadata values.  It is not normally used at present.**

## Miscellaneous Groups (Cont.)

**StorageMediumClass Group**
_**Attributes**_**                            **_**Type/Size**_** **_**Location**_**  **_**Required**_ StorageMedium		                VA30	PGE	R
**AnalysisSource Group**
_**Attributes**_**                            **_**Type/Size**_** **_**Location**_**  **_**Required**_ AnalysisShortName		VA20	PGE	R
**Campaign Group**
_**Attributes**_**                            **_**Type/Size**_** **_**Location**_**  **_**Required**_ CampaignShortName	VA20	PGE	R

- StorageMedium is not normally known by the PGEs, therefore not usually set. Multiple StorageMedium values are declared using arrays.
- MultipleAnalysisShortNames are declared using arrays.
- MultipleCampaignShortNames are declared using arrays.

## Platform, Instrument, Sensor

**SensorCharacteristic Group**
_**Attributes**_**                         ****	**_**Type/Size**_** **_**Location**_**  **_**Required**_ PlatformShortName	    VA20         PGE	R
- InstrumentShortName	    VA20         PGE	R
- SensorShortName	    VA20	   PGE	R
- SensorCharacteristicName	    VA40	   PGE	R
- SensorCharacteristicValue	    VA80	   PGE	R
**AssociatedPlatformInstrumentSensor**
_**Attributes**_**                        ****	**_**Type/Size**_** **_**Location**_**  **_**Required**_ AssociatedPlatformShortName	    VA20	   PGE	R
- AssociatedInstrumentShortName	    VA20	   PGE	R
- AssociatedSensorShortName	    VA20	   PGE	R
- OperationMode	    VA20	   PGE	O

- The SensorCharacteristicGroup is used only when there is a SensorCharacteristicValue to be set for the granule.
- Multiple SensorCharacteristicGroups are declared using containers.
- The SensorCharacteristicName must be identical with one indicated in the Collection Metadata.
- The AssociatedPlatformInstrumentSensor is used where the granules may vary by Platform, Instrument, Sensor, or OperationMode.
- Multiple AssociatedPlatformInstrumentSensor groups are declared using containers.

## For ECS to work:		The Bare Bones

**ShortName**** and ****VersionID**** are used throughout the system as the unique identifiers for collections (2)**
**LongName**** and ****CollectionDescription**** serve further to describe the collection.  They are required so that someone besides the data producer can get some sense of what the collection is  (2)**
**RevisionDate****  to identify when the collection was established or modified  (1)**

## For ECS to work:          The Bare Bones (Cont.)

**Contact name****, either a person or an organization, plus an attribute defining the role of this entity  (2)**
**ArchiveCenter**** to indicate where collection is held  (1)**
**Discipline, Topic****, ****Term**** and Variable Keywords are descriptive information needed for GCMD compatibility  (3)**
**Processing Level ****and a description of the processing level  (2)**
**Platform ****ShortName, LongName, and Type, plus an Instrument ShortName and Sensor ShortName  (5)**

## Why Do More?

**Data can be inserted and retrieved with a minimum of metadata, so why bother with more?  **
**To make it easier to find**
**By the time of Aura launch, ECS will have 60,000,000 granules in its archive.**
**ECS uses metadata to provide efficient searching of large, distributed archives**
**Metadata can also be used in production rules (locate and/or choose between input data)**** **
**To allow users to quickly determine if a collection is suitable for their needs**
**To point users to locations for further information**

## B.0 ESDT Descriptor Template

**The B.0 Descriptor File Template represents an interface between:**
**	****	****Data Modeling**
**	****	****Science Data Server**
**	****	****SDP Toolkit**
**	****	****Descriptor File Creators**
**Changes to the B.0 Descriptor File Template are made through the CCR/CCB Process**
**The Template contains the ODL representation of every Group and Object that might appear within a Descriptor File.  However, no single descriptor file can employ all of these groups and objects.**

## Expressing Multiple Values: 		Containers and Arrays

**When an individual attribute can have multiple values, an array is used to specify these**
**In the descriptor, those individual attributes that have multiple values must have NUM_VAL set to the maximum possible number of values**
**Example:  NUM_VAL = 3**
- Value = (“value_1”, “value_2”, “value_3”)
**When a group containing two or more attributes is to be set multiple times, then a container object is used.  Within each container object, an identifier <Class = > is declared for each attribute and set to the same number. **

## Expressing Multiple Values:Containers and Arrays              (Cont.)

**Different container objects must have different Class numbers**
**In general, Container objects are not classes or attributes, but objects holding classes and attributes that are related to one another**

## Expressing Multiple Values: 		Containers and Arrays(Cont.)

**- Example:**
**      **GROUP = VerticalSpatialDomain
-             OBJECT = VerticalSpatialDomainContainer
-                  Data_Location = "NONE"
-                  Mandatory = "TRUE"
-                  Class = ”1"
-                  OBJECT = VerticalSpatialDomainType
-                      Data_Location = "MCF"
-                      Mandatory = "TRUE"
-                      Class = ”1"
-                      NUM_VAL = 1
-                      Value = "Minimum Altitude"
-                  END_OBJECT = VerticalSpatialDomainType
-                  OBJECT = VerticalSpatialDomainValue
-                      Data_Location = "MCF"
-                      Mandatory = "TRUE"
-                      Class = ”1"
-                      NUM_VAL = 1
-                      Value = "SFC"
-                  END_OBJECT = VerticalSpatialDomainValue
-              END_OBJECT = VerticalSpatialDomainContainer

-        OBJECT = VerticalSpatialDomainContainer
-                  Data_Location = "NONE"
-                  Mandatory = "TRUE"
-                  Class = ”2"
-                  OBJECT = VerticalSpatialDomainType
-                      Data_Location = "MCF"
-                      Mandatory = "TRUE"
-                      Class = ”2"
-                      NUM_VAL = 1
-                      Value = "Maximum Altitude"
-                  END_OBJECT = VerticalSpatialDomainType
-                  OBJECT = VerticalSpatialDomainValue
-                      Data_Location = "MCF"
-                      Mandatory = "TRUE"
-                      Class = ”2"
-                      NUM_VAL = 1
-                      Value = "TOA"
-                  END_OBJECT = VerticalSpatialDomainValue
-              END_OBJECT = VerticalSpatialDomainContainer
-         END_GROUP = VerticalSpatialDomain

## Product Specific Attributes

**Optional Additional Attributes or Characteristics which the data provider makes available to further describe the Collection or Granule, e.g.,**
**NodeType**
**ASTERMapProjection**
**GroundStationID**
- note: A listing of the PSAs defined by other Instruments can be found at the following URL: http://ecsinfo.gsfc.nasa.gov/ECS_metadata/PSA/

## Product Specific Attributes (Cont.)

**In the Descriptor File, **
- GROUP = ProductSpecificMetadata
-     OBJECT = Example_String
-         Data_Location = "PGE"
-         Mandatory = "TRUE"
-         TYPE = STRING
-         LENGTH = "10"
-         MAXOCCURRENCES = "1"
-         VALIDRULE = "Match(valid_1, valid_2)"
-     END_OBJECT = Example_String
- OBJECT = Example_Float
-         Data_Location = "PGE"
-         Mandatory = "TRUE"
-         TYPE = FLOAT
-         MAXOCCURRENCES = "1"
-         VALIDRULE = "Range(0.0, 100.0)"
-     END_OBJECT = Example_Float
- END_GROUP = ProductSpecificMetadata

- Each AdditionalAttribute from the Collection-level must be defined at the Granule-level as well.

## Product Specific Attributes (Cont.)

**In the Metadata Configuration File (MCF) used**
**    ****by the PGE, **
- GROUP = AdditionalAttributes
-     OBJECT = AdditionalAttributesContainer
-         Data_Location = "NONE"
-         Class = "M"
-         Mandatory = "TRUE"
-         OBJECT = AdditionalAttributeName
-              Data_Location = "PGE"
-              Mandatory = "TRUE"
-              Class = "M"
-              TYPE = "STRING"
-              NUM_VAL = 1
-         END_OBJECT = AdditionalAttributeName
-         GROUP = InformationContent
-              Class = "M"
-              OBJECT = ParameterValue
-                  Data_Location = "PGE"
-                  Mandatory = "TRUE"
-                  TYPE = "STRING"
-                  NUM_VAL = 1
-              END_OBJECT = ParameterValue
-         END_GROUP = InformationContent
-     END_OBJECT = AdditionalAttributesContainer
- END_GROUP = AdditionalAttributes

- This block of ODL is automatically constructed by the Science Data Server when an MCF is requested.
- The SDP Toolkit uses the same block of ODL in setting each Product Specific Attribute (PSA).  The data types for each PSA are defined in the Collection Metadata, and can be any of int, float, varchar, date, time or datetime.  Since a single ODL block cannot have multiple data types for the ParameterValue, all PSAs must be set as STRING.

## Group = SERVICES (1 of 3)

**The **_**ACQUIRE**_ **object specifies the characteristics of the Acquire service**
**Acquire service allows users to retrieve data granules**
**The **_**INSERT**_** object specifies the characteristics of the Insert service**
**The Insert service is used to store data granules in the archive**
**The **_**UPDATEMETADATA**_** object allows changing of already inserted values with new values**
**The **_**BROWSE**_** object allows access to browse images associated with a particular granule**
**The **_**GETQUERYABLEPARAMETERS**_** object allows access to a list of collection and inventory attributes defined within the ESDT descriptor file**

## Group = SERVICES (2 of 3)

**The **_**INSPECT**_** object allows users to look at values from the Inventory metadata attributes**
**The **_**INSPECTCL**_** object allows users to look at values from the Collection metadata attributes**
**The **_**DELETE**_** object allows the removal of granules from the archive as well as the metadata**
**The **_**DELETEFROMARCHIVE**_** object allows the deletion of data granules from the archive but does not delete the associated metadata**

## Group = SERVICES (3 of 3)

**Subsetting services are included as applicable for extracting information by:**
**Altitude (only)**
**Area (only) by bounding box**
**Area (only) by WRS Row, Path**
**Parameter (only)**
**Time (only)**
**Rows (Swath products only)**
**multiple means, area by WRS Row, Path**
**multiple means, area by Bounding Box**
**Apply Mask**
**Extract Narrow**

## Group = Structure

**GROUP = STRUCTURE**
**   ****OBJECT = STRUCTURE**
**       ****CSDTType = "Projected Grid"**
**       ****CSDTInterfaceType = Conformant**
**       ****CSDTImplementation = “HDF-EOS”**
**   ****END_OBJECT = STRUCTURE**
**END_GROUP = STRUCTURE**
**    **

**CSDTType must be the same as the Collection-level attribute PrimaryCSDT**
**CSDTInterfaceType equals either Conformant or NonConformant**
**CSDT Implementation must agree with the Collection-level attribute Implementation.  (HDF-EOS must be enclosed with in quotes, since a “-” is not allowed in an ODL identifier)**

## Group = Event

**Three events**
**Delete, Insert, UpdateMetadata**
**Triggered when corresponding services are executed**
**Insert and UpdateMetadata events are triggerable on corresponding service execution or only when inventory metadata attributes have particular values**
**A subscriber can be notified when a granule is inserted or when the metadata for a granule is updated**
**A subscriber can be notified when a granule is inserted with a particular metadata value or when the metadata is updated to a particular value**

## An Example Descriptor File for	OMI_L1b (1 of 19)

- GROUP = METADATA
-     GROUP = COLLECTIONMETADATA
-         GROUPTYPE = MASTERGROUP
-         OBJECT = DLLName
-             Data_Location = "MCF"
-             Mandatory = "TRUE"
-             NUM_VAL = 1
-             Value = "libDsESDTSyBASIC.001Sh.so"
-         END_OBJECT = DLLName
-         OBJECT = SpatialSearchType
-             Data_Location = "MCF"
-             Mandatory  = "TRUE"
-             NUM_VAL = 1
-             Value = "GPolygon"
-         END_OBJECT = SpatialSearchType
-         GROUP = CollectionDescriptionClass
-             OBJECT = ShortName
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "OMI_L1b"
-             END_OBJECT = ShortName
-             OBJECT = LongName
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1

-                 Value = "OMI/Aura Level 1b"
-             END_OBJECT = LongName
-             OBJECT = CollectionDescription
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "This Level 1b data collection contains digitized counts for 460 OMI visible and ultraviolet wavelength bands and raw instrument engineering and spacecraft ancillary data."
-             END_OBJECT = CollectionDescription
-             OBJECT = VersionID
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = 1
-             END_OBJECT = VersionID
-         END_GROUP = CollectionDescriptionClass
-         GROUP = ECSCollection
-             OBJECT = RevisionDate
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "2000-05-15"
-             END_OBJECT = RevisionDate
-             OBJECT = SuggestedUsage
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"

## An Example Descriptor File for	OMI_L1b (2 of 19)

-                 NUM_VAL = 1
-                 Value = "Science Research"
-             END_OBJECT = SuggestedUsage
-             OBJECT = ProcessingCenter
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "GSFC"
-             END_OBJECT = ProcessingCenter
-             OBJECT = ArchiveCenter
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "GSFC"
-             END_OBJECT = ArchiveCenter
-             OBJECT = VersionDescription
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "Initial Version."
-             END_OBJECT = VersionDescription
-         END_GROUP = ECSCollection
-         GROUP = SingleTypeCollection
-             OBJECT = CitationforExternalPublication
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"

-                 NUM_VAL = 1
-                 Value = "OMI data contained herein were obtained through joint  research between the Netherlands (NIVR/KNMI), Finland (FMI) and the U.S. (NASA) in the Earth Observing System (EOS) Chemistry Mission."
-             END_OBJECT = CitationforExternalPublication
-             OBJECT = CollectionState
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "In Work"
-             END_OBJECT = CollectionState
-             OBJECT = MaintenanceandUpdateFrequency
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "As Needed"
-             END_OBJECT = MaintenanceandUpdateFrequency
-             OBJECT = AccessConstraints
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "None"
-             END_OBJECT = AccessConstraints
-         END_GROUP = SingleTypeCollection
-         GROUP = Spatial
-             OBJECT = SpatialCoverageType

## An Example Descriptor File for	OMI_L1b (3 of 19)

-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "Horizontal"
-             END_OBJECT = SpatialCoverageType
-             GROUP = SpatialDomainContainer
-                 GROUP = HorizontalSpatialDomainContainer
-                    GROUP = ZoneIdentifierClass
-                         OBJECT = ZoneIdentifier
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             NUM_VAL = 1
-                             Value   = "Universal Transverse Mercator (UTM)"
-                         END_OBJECT = ZoneIdentifier
-                     END_GROUP = ZoneIdentifierClass
-                     GROUP = BoundingRectangle
-                         OBJECT = WestBoundingCoordinate
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             NUM_VAL = 1
-                             Value = -180.0
-                         END_OBJECT = WestBoundingCoordinate
-                         OBJECT = NorthBoundingCoordinate
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             NUM_VAL = 1

-                             Value = 90.0
-                         END_OBJECT = NorthBoundingCoordinate
-                         OBJECT = EastBoundingCoordinate
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             NUM_VAL = 1
-                             Value = 180.0
-                         END_OBJECT = EastBoundingCoordinate
-                         OBJECT = SouthBoundingCoordinate
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             NUM_VAL = 1
-                             Value = -90.0
-                         END_OBJECT = SouthBoundingCoordinate
-                     END_GROUP = BoundingRectangle
-                 END_GROUP = HorizontalSpatialDomainContainer
-             END_GROUP = SpatialDomainContainer
-         END_GROUP = Spatial
-         GROUP = Temporal
-             OBJECT = TimeType
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "UTC"
-             END_OBJECT = TimeType

## An Example Descriptor File for	OMI_L1b (4 of 19)

-            OBJECT = DateType
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "Gregorian"
-             END_OBJECT = DateType
-             OBJECT = TemporalRangeType
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "Continuous Range"
-             END_OBJECT = TemporalRangeType
-             OBJECT = PrecisionofSeconds
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = 1
-             END_OBJECT = PrecisionofSeconds
-             OBJECT = EndsatPresentFlag
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "Y"
-             END_OBJECT = EndsatPresentFlag
-              GROUP = RangeDateTime
-                  OBJECT = RangeBeginningDate
-                      Data_Location = "MCF"

-                      Mandatory = "TRUE"
-                      NUM_VAL = 1
-                      Value = "2003-01-01"
-                  END_OBJECT = RangeBeginningDate
-                  OBJECT = RangeBeginningTime
-                      Data_Location = "MCF"
-                      Mandatory = "TRUE"
-                      NUM_VAL = 1
-                      Value = "00:00:00.0"
-                  END_OBJECT = RangeBeginningTime
-                  OBJECT = RangeEndingDate
-                      Data_Location = "MCF"
-                      Mandatory = "TRUE"
-                      NUM_VAL = 1
-                      Value = "2003-01-01"
-                  END_OBJECT = RangeEndingDate
-                  OBJECT = RangeEndingTime
-                      Data_Location = "MCF"
-                      Mandatory = "TRUE"
-                      NUM_VAL = 1
-                      Value = "00:00:00.0"
-                  END_OBJECT = RangeEndingTime
-             END_GROUP = RangeDateTime
-         END_GROUP = Temporal
-         GROUP = Contact
-             GROUP = ContactOrganization

## An Example Descriptor File for	OMI_L1b (5 of 19)

-                 OBJECT = ContactOrganizationContainer
-                     Data_Location = "NONE"
-                     Mandatory = "TRUE"
-                     Class = "1"
-                     OBJECT = Role
-                         Data_Location = "MCF"
-                         Mandatory = "TRUE"
-                         Class = "1"
-                         NUM_VAL = 1
-                         Value = "Archive"
-                     END_OBJECT = Role
-                     OBJECT = ContactInstructions
-                         Data_Location = "MCF"
-                         Mandatory = "TRUE"
-                         Class = "1"
-                         NUM_VAL = 1
-                         Value = "Contact for format/distribution issues"
-                     END_OBJECT = ContactInstructions
-                     OBJECT = ContactOrganizationName
-                         Data_Location = "MCF"
-                         Mandatory = "TRUE"
-                         Class = "1"
-                         NUM_VAL = 1
-                         Value = "Goddard DAAC"
-                     END_OBJECT = ContactOrganizationName
-                     GROUP = ContactOrganizationAddress
-                         Class = "1"
-                         OBJECT = ContactOrganizationAddressContainer
-                             Data_Location = "NONE"
-                             Mandatory = "TRUE"
-                             Class = "1"

-                             OBJECT = StreetAddress
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 Class = "1"
-                                 NUM_VAL = 1
-                                 Value = "NASA/GSFC Code 902"
-                             END_OBJECT = StreetAddress
-                             OBJECT = City
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 Class = "1"
-                                 NUM_VAL = 1
-                                 Value = "GREENBELT"
-                             END_OBJECT = City
-                             OBJECT = StateProvince
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 Class = "1"
-                                 NUM_VAL = 1
-                                 Value = "MD"
-                             END_OBJECT = StateProvince
-                             OBJECT = PostalCode
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 Class = "1"
-                                 NUM_VAL = 1
-                                 Value = "20771"
-                             END_OBJECT = PostalCode
-                             OBJECT = Country
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"

## An Example Descriptor File for	OMI_L1b (6 of 19)

-                                 NUM_VAL = 1
-                                 Value = "USA"
-                             END_OBJECT = Country
-                         END_OBJECT = ContactOrganizationAddressContainer
-                     END_GROUP = ContactOrganizationAddress
-                     GROUP = OrganizationTelephone
-                         Class = "1"
-                         OBJECT = OrganizationTelephoneContainer
-                             Data_Location = "NONE"
-                             Mandatory = "TRUE"
-                             Class = "1"
-                             OBJECT = TelephoneNumber
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 Class = "1"
-                                 NUM_VAL = 1
-                                 Value = "301-614-5224"
-                             END_OBJECT = TelephoneNumber
-                             OBJECT = TelephoneNumberType
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 Class = "1"
-                                 NUM_VAL = 1
-                                 Value = "Voice"
-                             END_OBJECT = TelephoneNumberType
-                         END_OBJECT = OrganizationTelephoneContainer
-                     END_GROUP = OrganizationTelephone
-                     GROUP = OrganizationEmail
-                         Class = "1"
-                         OBJECT = ElectronicMailAddress
-                             Data_Location = "MCF"

-                             Mandatory = "TRUE"
-                             NUM_VAL = 1
-                             Value = ("daac_usg@gsfcsrvr4.gsfcmo.ecs.nasa.gov")
-                         END_OBJECT = ElectronicMailAddress
-                     END_GROUP = OrganizationEmail
-                 END_OBJECT = ContactOrganizationContainer
-                 OBJECT = ContactOrganizationContainer
-                     Data_Location = "NONE"
-                     Mandatory = "TRUE"
-                     Class = "2"
-                     OBJECT = Role
-                         Data_Location = "MCF"
-                         Mandatory = "TRUE"
-                         Class = "2"
-                         NUM_VAL = 1
-                         Value = "Producer"
-                     END_OBJECT = Role
-                     OBJECT = ContactInstructions
-                         Data_Location = "MCF"
-                         Mandatory = "TRUE"
-                         Class = "2"
-                         NUM_VAL = 1
-                         Value = "Contact for data content concerns"
-                     END_OBJECT = ContactInstructions
-                     OBJECT = ContactOrganizationName
-                         Data_Location = "MCF"
-                         Mandatory = "TRUE"
-                         Class = "2"
-                         NUM_VAL = 1

## An Example Descriptor File for	OMI_L1b (7 of 19)

-                          Value = "KNMI"
-                     END_OBJECT = ContactOrganizationName
-                     GROUP = ContactOrganizationAddress
-                         Class = "2"
-                         OBJECT = ContactOrganizationAddressContainer
-                             Data_Location = "NONE"
-                             Mandatory = "TRUE"
-                             Class = "1"
-                             OBJECT = StreetAddress
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 Class = "1"
-                                 NUM_VAL = 1
-                                 Value = "Newtonweg 1"
-                             END_OBJECT = StreetAddress
-                             OBJECT = City
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 Class = "1"
-                                 NUM_VAL = 1
-                                 Value = "Leiden"
-                             END_OBJECT = City
-                             OBJECT = StateProvince
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 Class = "1"
-                                 NUM_VAL = 1
-                                 Value = "Zuid Holland"
-                             END_OBJECT = StateProvince
-                             OBJECT = PostalCode
-                                 Data_Location = "MCF"

-                                 Mandatory = "TRUE"
-                                 Class = "1"
-                                 NUM_VAL = 1
-                                 Value = "2333 CP"
-                             END_OBJECT = PostalCode
-                             OBJECT = Country
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 Class = "1"
-                                 NUM_VAL = 1
-                                 Value = "NLD"
-                             END_OBJECT = Country
-                         END_OBJECT = ContactOrganizationAddressContainer
-                     END_GROUP = ContactOrganizationAddress
-                     GROUP = OrganizationTelephone
-                         Class = "2"
-                         OBJECT = OrganizationTelephoneContainer
-                             Data_Location = "NONE"
-                             Mandatory = "TRUE"
-                             Class = "1"
-                             OBJECT = TelephoneNumber
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 Class = "1"
-                                 NUM_VAL = 1
-                                 Value = "31-71-5245-000"
-                             END_OBJECT = TelephoneNumber
-                             OBJECT = TelephoneNumberType
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 Class = "1"

## An Example Descriptor File for	OMI_L1b (8 of 19)

-                                 NUM_VAL = 1
-                                 Value = "Voice"
-                             END_OBJECT = TelephoneNumberType
-                         END_OBJECT = OrganizationTelephoneContainer
-                     END_GROUP = OrganizationTelephone
-                     GROUP = OrganizationEmail
-                         Class = "2"
-                         OBJECT = ElectronicMailAddress
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             NUM_VAL = 1
-                             Value = ("omi@knmi.nl")
-                         END_OBJECT = ElectronicMailAddress
-                     END_GROUP = OrganizationEmail
-                 END_OBJECT = ContactOrganizationContainer
-             END_GROUP = ContactOrganization
-         END_GROUP = Contact
-         GROUP = DisciplineTopicParameters
-             OBJECT = DisciplineTopicParametersContainer
-                 Data_Location = "NONE"
-                 Mandatory = "TRUE"
-                 Class = "1"
-                 OBJECT = ECSDisciplineKeyword
-                     Data_Location = "MCF"
-                     Mandatory = "TRUE"
-                     Class = "1"
-                     NUM_VAL = 1

-                     Value = "Earth Science"
-                 END_OBJECT = ECSDisciplineKeyword
-                 OBJECT = ECSTopicKeyword
-                     Data_Location = "MCF"
-                     Mandatory = "TRUE"
-                     Class = "1"
-                     NUM_VAL = 1
-                     Value = "Radiance or Imagery"
-                 END_OBJECT = ECSTopicKeyword
-                 OBJECT = ECSTermKeyword
-                     Data_Location = "MCF"
-                     Mandatory = "TRUE"
-                     Class = "1"
-                     NUM_VAL = 1
-                     Value = "Ultraviolet Wavelengths"
-                 END_OBJECT = ECSTermKeyword
-                 OBJECT = ECSVariableKeyword
-                     Data_Location = "MCF"
-                     Mandatory = "TRUE"
-                     Class = "1"
-                     NUM_VAL = 1
-                     Value = "Sensor Counts"
-                 END_OBJECT = ECSVariableKeyword
-             END_OBJECT = DisciplineTopicParametersContainer
-             OBJECT = DisciplineTopicParametersContainer

## An Example Descriptor File for	OMI_L1b (9 of 19)

-                 Data_Location = "NONE"
-                 Mandatory = "TRUE"
-                 Class = "2"
-                 OBJECT = ECSDisciplineKeyword
-                     Data_Location = "MCF"
-                     Mandatory = "TRUE"
-                     Class = "2"
-                     NUM_VAL = 1
-                     Value = "Earth Science"
-                 END_OBJECT = ECSDisciplineKeyword
-                 OBJECT = ECSTopicKeyword
-                     Data_Location = "MCF"
-                     Mandatory = "TRUE"
-                     Class = "2"
-                     NUM_VAL = 1
-                     Value = "Radiance or Imagery"
-                 END_OBJECT = ECSTopicKeyword
-                 OBJECT = ECSTermKeyword
-                     Data_Location = "MCF"
-                     Mandatory = "TRUE"
-                     Class = "2"
-                     NUM_VAL = 1
-                     Value = "Visible Wavelengths"
-                 END_OBJECT = ECSTermKeyword
-                 OBJECT = ECSVariableKeyword
-                     Data_Location = "MCF"
-                     Mandatory = "TRUE"

-                     Class = "2"
-                     NUM_VAL = 1
-                     Value = "Sensor Counts"
-                 END_OBJECT = ECSVariableKeyword
-             END_OBJECT = DisciplineTopicParametersContainer
-         END_GROUP = DisciplineTopicParameters
-         GROUP = SpatialKeywordClass
-             OBJECT = SpatialKeyword
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "Global"
-             END_OBJECT = SpatialKeyword
-         END_GROUP = SpatialKeywordClass
-         GROUP = ProcessingLevel
-             OBJECT = ProcessingLevelID
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "1B"
-             END_OBJECT = ProcessingLevelID
-             OBJECT = ProcessingLevelDescription
-                 NUM_VAL = 1
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 Value = "Level 1b Radiances"
-             END_OBJECT = ProcessingLevelDescription
-         END_GROUP = ProcessingLevel

## An Example Descriptor File for	OMI_L1b (10 of 19)

-       GROUP = Platform
-             OBJECT = PlatformContainer
-                 Data_Location = "NONE"
-                 Mandatory = "TRUE"
-                 Class = "1"
-                 OBJECT = PlatformShortName
-                     Data_Location = "MCF"
-                     Mandatory = "TRUE"
-                     Class = "1"
-                     NUM_VAL = 1
-                     Value = "Aura"
-                 END_OBJECT = PlatformShortName
-                 OBJECT = PlatformLongName
-                     Data_Location = "MCF"
-                     Mandatory = "TRUE"
-                     Class = "1"
-                     NUM_VAL = 1
-                     Value = "First EOS Chemistry Mission Satellite, 1:45 PM Ascending Equator Crossing"
-                 END_OBJECT = PlatformLongName
-                 OBJECT = PlatformType
-                     Data_Location = "MCF"
-                     Mandatory = "TRUE"
-                     Class = "1"
-                     NUM_VAL = 1
-                     Value = "Spacecraft"
-                 END_OBJECT = PlatformType

-          GROUP = PlatformCharacteristic
-                     Class = "1"
-                     OBJECT = PlatformCharacteristicContainer
-                         Data_Location = "NONE"
-                         Mandatory = "TRUE"
-                         Class = "1"
-                         OBJECT = PlatformCharacteristicName
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             Class = "1"
-                             NUM_VAL = 1
-                             Value = "OrbitInclination"
-                         END_OBJECT = PlatformCharacteristicName
-                         OBJECT = PlatformCharacteristicDescription
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             Class = "1"
-                             NUM_VAL = 1
-                             Value = "Angle between the orbit plane and the Earth's equatorial plane”
-                         END_OBJECT = PlatformCharacteristicDescription
-                         OBJECT = PlatformCharacteristicDataType
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             Class = "1"
-                             NUM_VAL = 1
-                             Value = “float"
-                         END_OBJECT = PlatformCharacteristicDataType

## An Example Descriptor File for	OMI_L1b (11 of 19)

-                         OBJECT = PlatformCharacteristicUnit
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             Class = "1"
-                             NUM_VAL = 1
-                             Value = ”Degrees"
-                         END_OBJECT = PlatformCharacteristicUnit
-                            GROUP = PlatformCharacteristicValueClass
-                             Class = "1"
-                             OBJECT = PlatformCharacteristicValue
-                                 Data_Location = "MCF"
-                                 Mandatory = "TRUE"
-                                 NUM_VAL = 1
-                                 Value = " 98.2"
-                             END_OBJECT = PlatformCharacteristicValue
-                         END_GROUP =PlatformCharacteristicValueClass
-                     END_OBJECT = PlatformCharacteristicContainer
-                  END_GROUP = PlatformCharacteristic
-                  GROUP = Instrument
-                     Class = "1"
-                     OBJECT = InstrumentContainer
-                         Data_Location = "NONE"
-                         Mandatory = "TRUE"
-                         Class = "1"
-                         OBJECT = InstrumentShortName
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"

-                             Class = "1”
-                             NUM_VAL = 1
-                             Value = "OMI"
-    END_OBJECT = InstrumentShortName
-                        OBJECT = InstrumentLongName
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             Class = "1"
-                             NUM_VAL = 1
-                             Value = "Ozone Monitoring Instrument"
-                         END_OBJECT = InstrumentLongName
-                         OBJECT = InstrumentTechnique
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             Class = "1"
-                             NUM_VAL = 1
-                             Value = "Nadir-viewing wide-field-imaging spectrometer"
-                         END_OBJECT = InstrumentTechnique
-                         OBJECT = NumberofSensors
-                             Data_Location = "MCF"
-                             Mandatory = "TRUE"
-                             Class = "1"
-                             NUM_VAL = 1
-                             Value = 2
-                         END_OBJECT = NumberofSensors

## An Example Descriptor File for	OMI_L1b (12 of 19)

-                       GROUP = Sensor
-                           Class = "1"
-                           OBJECT = SensorContainer
-                              Data_Location = "NONE"
-                              Mandatory = "TRUE"
-                              Class = "1"
-                              OBJECT = SensorShortName
-                                     Data_Location = "MCF"
-                                     Mandatory = "TRUE"
-                                     Class = "1"
-                                     NUM_VAL = 1
-                                     Value = "CCD"
-                                 END_OBJECT = SensorShortName
-                                 OBJECT = SensorLongName
-                                     Data_Location = "MCF"
-                                     Mandatory = "TRUE"
-                                     Class = "1"
-                                     NUM_VAL = 1
-                                     Value = "Charge Coupled Device"
-                                 END_OBJECT = SensorLongName
-                                 OBJECT = SensorTechnique
-                                     Data_Location = "MCF"
-                                     Mandatory = "TRUE"
-                                     Class = "1"
-                                     NUM_VAL = 1
-                                     Value = "Radiometry"
-                                 END_OBJECT = SensorTechnique

-                             END_OBJECT = SensorContainer
-                             OBJECT = SensorContainer
-                                 Data_Location = "NONE"
-                                 Mandatory = "TRUE"
-                                 Class = "2"
-                                 OBJECT = SensorShortName
-                                     Data_Location = "MCF"
-                                     Mandatory = "TRUE"
-                                     Class = "2"
-                                     NUM_VAL = 1
-                                     Value = "TIR"
-                                 END_OBJECT = SensorShortName
-                                 OBJECT = SensorLongName
-                                     Data_Location = "MCF"
-                                     Mandatory = "TRUE"
-                                     Class = "2"
-                                     NUM_VAL = 1
-                                     Value = "Thermal Infrared"
-                                 END_OBJECT = SensorLongName
-                                 OBJECT = SensorTechnique
-                                     Data_Location = "MCF"
-                                     Mandatory = "TRUE"
-                                     Class = "2"
-                                     NUM_VAL = 1
-                                     Value = "Radiometry"
-                                 END_OBJECT = SensorTechnique
-                             END_OBJECT = SensorContainer

## An Example Descriptor File for	OMI_L1b (13 of 19)

- END_GROUP = Sensor
-                           END_OBJECT = InstrumentContainer
-                      END_GROUP = Instrument
-              END_OBJECT = PlatformContainer
-         END_GROUP = Platform
-         GROUP = CSDTDescription
-             OBJECT = PrimaryCSDT
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "Simple Swath"
-             END_OBJECT = PrimaryCSDT
-             OBJECT = Implementation
-                 Data_Location = "MCF"
-                 Mandatory = "TRUE"
-                 NUM_VAL = 1
-                 Value = "HDF-EOS"
-             END_OBJECT = Implementation
-         END_GROUP = CSDTDescription
-         GROUP = AdditionalAttributes
-             OBJECT = AdditionalAttributesContainer
-                 Data_Location = "NONE"
-                 Mandatory = "FALSE"
-                 Class = "1"
-                 OBJECT = AdditionalAttributeDatatype
-                     Data_Location = "MCF"
-                     Mandatory = "FALSE"

-                    Class = "1"
-                    NUM_VAL = 1
-                    Value = "varchar"
-                 END_OBJECT = AdditionalAttributeDatatype
-                 OBJECT = AdditionalAttributeDescription
-                     Data_Location = "MCF"
-                     Mandatory = "FALSE"
-                     Class = "1"
-                     NUM_VAL = 1
-                     Value = "Satellite Direction"
-                 END_OBJECT = AdditionalAttributeDescription
-                 OBJECT = AdditionalAttributeName
-                     Data_Location = "MCF"
-                     Mandatory = "FALSE"
-                     Class = "1"
-                     NUM_VAL = 1
-                     Value = "AscendingDescendingFlg"
-                 END_OBJECT = AdditionalAttributeName
-             END_OBJECT = AdditionalAttributesContainer
-         END_GROUP = AdditionalAttributes
-     END_GROUP = COLLECTIONMETADATA
-   GROUP = INVENTORYMETADATA
-         GROUPTYPE = MASTERGROUP
-     GROUP = ECSDataGranule

## An Example Descriptor File for	OMI_L1b (14 of 19)

-         OBJECT = SizeMBECSDataGranule
-             Data_Location = "DSS"
-             Mandatory = "FALSE"
-             TYPE = "DOUBLE"
-             NUM_VAL = 1
-         END_OBJECT = SizeMBECSDataGranule
-         OBJECT = LocalGranuleID
-             Data_Location = "PGE"
-             Mandatory = "TRUE"
-             TYPE = "STRING"
-             NUM_VAL = 1
-         END_OBJECT = LocalGranuleID
-         OBJECT = ProductionDateTime
-             Data_Location = "TK"
-             Mandatory = "TRUE"
-             TYPE = "DATETIME"
-             NUM_VAL = 1
-         END_OBJECT = ProductionDateTime
-         OBJECT = LocalVersionID
-             Data_Location = "PGE"
-             Mandatory = "TRUE"
-             TYPE = "STRING"
-             NUM_VAL = 1
-         END_OBJECT = LocalVersionID
-     END_GROUP = ECSDataGranule
-     GROUP = MeasuredParameter

-   OBJECT = MeasuredParameterContainer
-             Data_Location = "NONE"
-             Class = "M"
-             Mandatory = "TRUE"
-             OBJECT = ParameterName
-                 Data_Location = "PGE"
-                 Mandatory = "TRUE"
-                 Class = "M"
-                 TYPE = "STRING"
-                 NUM_VAL = 1
-             END_OBJECT = ParameterName
-             GROUP = QAFlags
-                 Class = "M"
-                 OBJECT = AutomaticQualityFlag
-                     Data_Location = "PGE"
-                     Mandatory = "TRUE"
-                     TYPE = "STRING"
-                     NUM_VAL = 1
-                 END_OBJECT = AutomaticQualityFlag
-                 OBJECT = AutomaticQualityFlagExplanation
-                     Data_Location = "PGE"
-                     Mandatory = "TRUE"
-                     TYPE = "STRING"
-                     NUM_VAL = 1
-                 END_OBJECT = AutomaticQualityFlagExplanation

## An Example Descriptor File for	OMI_L1b (15 of 19)

-                 OBJECT = OperationalQualityFlag
-                     Data_Location = "PGE"
-                     Mandatory = "FALSE"
-                     TYPE = "STRING"
-                     NUM_VAL = 1
-                 END_OBJECT = OperationalQualityFlag
-                 OBJECT = OperationalQualityFlagExplanation
-                     Data_Location = "PGE"
-                     Mandatory = "FALSE"
-                     TYPE = "STRING"
-                     NUM_VAL = 1
-                 END_OBJECT = OperationalQualityFlagExplanation
-                 OBJECT = ScienceQualityFlag
-                     Data_Location = "DP"
-                     Mandatory = "FALSE"
-                     TYPE = "STRING"
-                     NUM_VAL = 1
-                     VALUE = "Not Investigated"
-                 END_OBJECT = ScienceQualityFlag
-                 OBJECT = ScienceQualityFlagExplanation
-                     Data_Location = "DP"
-                     Mandatory = "FALSE"
-                     TYPE = "STRING"
-                     NUM_VAL = 1
-                 END_OBJECT = ScienceQualityFlagExplanation
-             END_GROUP = QAFlags

-      GROUP = QAStats
-                 Class = "M"
-                 OBJECT = QAPercentInterpolatedData
-                     Data_Location = "PGE"
-                     Mandatory = "TRUE"
-                     TYPE = "INTEGER"
-                     NUM_VAL = 1
-                 END_OBJECT = QAPercentInterpolatedData
-                 OBJECT = QAPercentMissingData
-                     Data_Location = "PGE"
-                     Mandatory = "TRUE"
-                     TYPE = "INTEGER"
-                     NUM_VAL = 1
-                 END_OBJECT = QAPercentMissingData
-                 OBJECT = QAPercentOutofBoundsData
-                     Data_Location = "PGE"
-                     Mandatory = "TRUE"
-                     TYPE = "INTEGER"
-                     NUM_VAL = 1
-                 END_OBJECT = QAPercentOutofBoundsData
-                 OBJECT = QAPercentCloudCover
-                     Data_Location = "PGE"
-                     Mandatory = "TRUE"
-                     TYPE = "INTEGER"
-                     NUM_VAL = 1
-                 END_OBJECT = QAPercentCloudCover

## An Example Descriptor File for	OMI_L1b (16 of 19)

-                  END_GROUP = QAStats
-         END_OBJECT = MeasuredParameterContainer
-     END_GROUP = MeasuredParameter
-     GROUP = OrbitCalculatedSpatialDomain
-         OBJECT = OrbitCalculatedSpatialDomainContainer
-                 Data_Location = "NONE"
-                 Class = "M"
-                 Mandatory = "TRUE"
-                 OBJECT = OrbitNumber
-                     Data_Location = "PGE"
-                     Mandatory = "FALSE"
-                     Class = "M"
-                     TYPE = "INTEGER"
-                     NUM_VAL = 1
-                 END_OBJECT = OrbitNumber
-                 OBJECT = StartOrbitNumber
-                     Data_Location = "PGE"
-                     Mandatory = "FALSE"
-                     Class = "M"
-                     TYPE = "INTEGER"
-                     NUM_VAL = 1
-                 END_OBJECT = StartOrbitNumber
-                 OBJECT = StopOrbitNumber
-                     Data_Location = "PGE"

-                     Mandatory = "FALSE"
-                     Class = "M"
-                     TYPE = "INTEGER"
-                     NUM_VAL = 1
-                 END_OBJECT = StopOrbitNumber
-                 OBJECT = EquatorCrossingLongitude
-                     Data_Location = "PGE"
-                     Mandatory = "TRUE"
-                     Class = "M"
-                     TYPE = "DOUBLE"
-                     NUM_VAL = 1
-                 END_OBJECT = EquatorCrossingLongitude
-                 OBJECT = EquatorCrossingTime
-                     Data_Location = "PGE"
-                     Mandatory = "TRUE"
-                     Class = "M"
-                     TYPE = "TIME"
-                     NUM_VAL = 1
-                 END_OBJECT = EquatorCrossingTime
-                 OBJECT = EquatorCrossingDate
-                     Data_Location = "PGE"
-                     Mandatory = "TRUE"
-                     Class = "M"
-                     TYPE = "DATE"
-                     NUM_VAL = 1
-                 END_OBJECT = EquatorCrossingDate
-         END_OBJECT = OrbitCalculatedSpatialDomainContainer

## An Example Descriptor File for	OMI_L1b (17 of 19)

-  END_GROUP = OrbitCalculatedSpatialDomain
-     GROUP = CollectionDescriptionClass
-         OBJECT = ShortName
-             Data_Location = "MCF"
-             Mandatory = "TRUE"
-             TYPE = "STRING"
-             NUM_VAL = 1
-             Value = "OMI_L1b"
-         END_OBJECT = ShortName
-         OBJECT = VersionID
-             Data_Location = "MCF"
-             Mandatory = "TRUE"
-             TYPE = "INTEGER"
-             NUM_VAL = 1
-             Value = 1
-         END_OBJECT = VersionID
-     END_GROUP = CollectionDescriptionClass
-     GROUP = InputGranule
-         OBJECT = InputPointer
-             Data_Location = "PGE"
-             Mandatory = "TRUE"
-             TYPE = "STRING"
-             NUM_VAL = 5
-         END_OBJECT = InputPointer
-     END_GROUP = InputGranule

-  GROUP = SpatialDomainContainer
-         GROUP = HorizontalSpatialDomainContainer
-             GROUP = GPolygon
-                OBJECT = GPolygonContainer
-                   Data_Location = "NONE"
-                   Mandatory = "TRUE"
-                   CLASS = "M"
-                   GROUP = GRing
-                      CLASS = "M"
-                      OBJECT = ExclusionGRingFlag
-                         Mandatory = "FALSE"
-                         Data_Location = "PGE"
-                         NUM_VAL = 1
-                         TYPE = "STRING"
-                      END_OBJECT = ExclusionGRingFlag
-                   END_GROUP = GRing
-                   GROUP = GRingPoint
-                      CLASS = "M"
-                      OBJECT = GRingPointLongitude
-                         Mandatory = "FALSE"
-                         Data_Location = "PGE"
-                         NUM_VAL = 4
-                         TYPE = "DOUBLE"

## An Example Descriptor File for	OMI_L1b (18 of 19)

-                      END_OBJECT = GRingPointLongitude
-                      OBJECT = GRingPointLatitude
-                         Mandatory = "FALSE"
-                         Data_Location = "PGE"
-                         NUM_VAL = 4
-                         TYPE = "DOUBLE"
-                      END_OBJECT = GRingPointLatitude
-                      OBJECT = GRingPointSequenceNo
-                         Mandatory = "FALSE"
-                         Data_Location = "PGE"
-                         NUM_VAL = 4
-                         TYPE = "INTEGER"
-                      END_OBJECT = GRingPointSequenceNo
-                   END_GROUP = GRingPoint
-                END_OBJECT = GPolygonContainer
-             END_GROUP = GPolygon
-         END_GROUP = HorizontalSpatialDomainContainer
-     END_GROUP = SpatialDomainContainer
-     GROUP = RangeDateTime
-         OBJECT = RangeBeginningTime
-             Data_Location = "PGE"
-             Mandatory = "TRUE"
-             TYPE = "TIME"
-             NUM_VAL = 1

-         END_OBJECT = RangeBeginningTime
-         OBJECT = RangeEndingTime
-             Data_Location = "PGE"
-             Mandatory = "TRUE"
-             TYPE = "TIME"
-             NUM_VAL = 1
-         END_OBJECT = RangeEndingTime
-         OBJECT = RangeBeginningDate
-             Data_Location = "PGE"
-             Mandatory = "TRUE"
-             TYPE = "DATE"
-             NUM_VAL = 1
-         END_OBJECT = RangeBeginningDate
-         OBJECT = RangeEndingDate
-             Data_Location = "PGE"
-             Mandatory = "TRUE"
-             TYPE = "DATE"
-             NUM_VAL = 1
-         END_OBJECT = RangeEndingDate
-     END_GROUP = RangeDateTime
-     GROUP = PGEVersionClass
-         OBJECT = PGEVersion
-             Mandatory = "TRUE"
-             Data_Location = "PGE"
-             TYPE = "STRING"
-             NUM_VAL = 1

## An Example Descriptor File for	OMI_L1b (19 of 19)

-               END_OBJECT = PGEVersion
-     END_GROUP = PGEVersionClass
-         GROUP = ProductSpecificMetadata
-             OBJECT = AscendingDescendingFlg
-                 Data_Location = "MCF"
-                 Mandatory = "FALSE"
-                 TYPE = "STRING"
-                 LENGTH = "10"
-                 MAXOCCURRENCES = "1"
-                 VALIDRULE = "Match(Ascending,Descending,Both)"
-             END_OBJECT = AscendingDescendingFlg
-         END_GROUP = ProductSpecificMetadata
-   END_GROUP = INVENTORYMETADATA
-     GROUP = UNPARSEDMETADATA
-         GROUP = ARCHIVEDMETADATA
-             GROUPTYPE = MASTERGROUP
-         END_GROUP = ARCHIVEDMETADATA
-     END_GROUP = UNPARSEDMETADATA
- END_GROUP = METADATA
- GROUP = SERVICE
- .
- .
- .

- .
- .
- .
- END_GROUP = SERVICE
- /* ESDT Data Type Structure */
- GROUP = STRUCTURE
-    OBJECT = STRUCTURE
-        CSDTType = "Simple Swath"
-        CSDTInterfaceType = Conformant
-        CSDTImplementation = "HDF-EOS"
-    END_OBJECT = STRUCTURE
- END_GROUP = STRUCTURE
- GROUP = EVENT
- .
- .
- .
- END_GROUP = EVENT
- END

## Metadata Configuration File (MCF)

**Metadata Configuration File (MCF)**
**Built around the 'parameter = value' form to provide maximum flexibility**
**Each Inventory metadata element is fully described in the MCF**
**For the Inventory level and unparsed metadata the descriptor file contains only a list of the attributes and a specification of how values will be assigned to them; this information is used by the SDSRV to generate an MCF, which is delivered to the Data Processing Subsystem or the Ingest Subsystem on demand**
**MCF File Naming Convention**
**Must end with “.MCF”**
**Example: OMI_L1b.001.MCF**

## An Example MCF File for	OMI_L1b (1 of 5)

## An Example MCF File for	OMI_L1b (2 of 5)

-              OBJECT = ScienceQualityFlagExplanation
-                 Mandatory = "FALSE"
-                 Data_Location = "DP"
-                 NUM_VAL = 1
-                 TYPE = "STRING"
-              END_OBJECT = ScienceQualityFlagExplanation
-           END_GROUP = QAFlags
-           GROUP = QAStats
-              CLASS = "M"
-              OBJECT = QAPercentMissingData
-                 Mandatory = "TRUE"
-                 Data_Location = "PGE"
-                 NUM_VAL = 1
-                 TYPE = "INTEGER"
-              END_OBJECT = QAPercentMissingData
-              OBJECT = QAPercentOutofBoundsData
-                 Mandatory = "TRUE"
-                 Data_Location = "PGE"
-                 NUM_VAL = 1
-                 TYPE = "INTEGER"
-              END_OBJECT = QAPercentOutofBoundsData
-              OBJECT = QAPercentCloudCover
-                 Mandatory = "TRUE"
-                 Data_Location = "PGE"
-                 NUM_VAL = 1
-                 TYPE = "INTEGER"
-              END_OBJECT = QAPercentCloudCover
-              OBJECT = QAPercentInterpolatedData
-                 Mandatory = "TRUE"
-                 Data_Location = "PGE"
-                 NUM_VAL = 1

-              TYPE = "INTEGER
-          END_OBJECT = QAPercentInterpolatedData
-          END_GROUP = QAStats
-           OBJECT = ParameterName
-              Mandatory = "TRUE"
-              CLASS = "M"
-              Data_Location = "PGE"
-              NUM_VAL = 1
-              TYPE = "STRING"
-           END_OBJECT = ParameterName
-        END_OBJECT = MeasuredParameterContainer
-     END_GROUP = MeasuredParameter
-     GROUP = OrbitCalculatedSpatialDomain
-        OBJECT = OrbitCalculatedSpatialDomainContainer
-           Data_Location = "NONE"
-           Mandatory = "TRUE"
-           CLASS = "M"
-           OBJECT = StartOrbitNumber
-              Mandatory = "FALSE"
-              CLASS = "M"
-              Data_Location = "PGE"
-              NUM_VAL = 1
-              TYPE = "INTEGER"
-           END_OBJECT = StartOrbitNumber
-           OBJECT = EquatorCrossingDate
-              Mandatory = "TRUE"
-              CLASS = "M"
-              Data_Location = "PGE"
-              NUM_VAL = 1
-              TYPE = "DATE"
-           END_OBJECT = EquatorCrossingDate

## An Example MCF File for	OMI_L1b (3 of 5)

## An Example MCF File for	OMI_L1b (4 of 5)

-                    CLASS = "M"
-                    OBJECT = GRingPointLongitude
-                       Mandatory = "FALSE"
-                       Data_Location = "PGE"
-                       NUM_VAL = 4
-                       TYPE = "DOUBLE"
-                    END_OBJECT = GRingPointLongitude
-                    OBJECT = GRingPointLatitude
-                       Mandatory = "FALSE"
-                       Data_Location = "PGE"
-                       NUM_VAL = 4
-                       TYPE = "DOUBLE"
-                    END_OBJECT = GRingPointLatitude
-                    OBJECT = GRingPointSequenceNo
-                       Mandatory = "FALSE"
-                       Data_Location = "PGE"
-                       NUM_VAL = 4
-                       TYPE = "INTEGER"
-                    END_OBJECT = GRingPointSequenceNo
-                 END_GROUP = GRingPoint
-                 GROUP = GRing
-                    CLASS = "M"
-                    OBJECT = ExclusionGRingFlag
-                       Mandatory = "FALSE"
-                       Data_Location = "PGE"
-                       NUM_VAL = 1
-                       TYPE = "STRING"
-                    END_OBJECT = ExclusionGRingFlag
-                 END_GROUP = GRing
-              END_OBJECT = GPolygonContainer
-           END_GROUP = GPolygon
-        END_GROUP = HorizontalSpatialDomainContainer
-     END_GROUP = SpatialDomainContainer

-     GROUP = RangeDateTime
-        OBJECT = RangeEndingDate
-           Mandatory = "TRUE"
-           Data_Location = "PGE"
-           NUM_VAL = 1
-           TYPE = "DATE"
-        END_OBJECT = RangeEndingDate
-        OBJECT = RangeEndingTime
-           Mandatory = "TRUE"
-           Data_Location = "PGE"
-           NUM_VAL = 1
-           TYPE = "TIME"
-        END_OBJECT = RangeEndingTime
-        OBJECT = RangeBeginningDate
-           Mandatory = "TRUE"
-           Data_Location = "PGE"
-           NUM_VAL = 1
-           TYPE = "DATE"
-        END_OBJECT = RangeBeginningDate
-        OBJECT = RangeBeginningTime
-           Mandatory = "TRUE"
-           Data_Location = "PGE"
-           NUM_VAL = 1
-           TYPE = "TIME"
-        END_OBJECT = RangeBeginningTime
-    END_GROUP = RangeDateTime
-     GROUP = PGEVersionClass
-        OBJECT = PGEVersion
-           Mandatory = "TRUE"
-           Data_Location = "PGE"
-           NUM_VAL = 1
-           TYPE = "STRING"
-        END_OBJECT = PGEVersion

## An Example MCF File for	OMI_L1b (5 of 5)

-    END_GROUP = PGEVersionClass
-     GROUP = AdditionalAttributes
-        OBJECT = AdditionalAttributesContainer
-           Data_Location = "NONE"
-           Mandatory = "FALSE"
-           CLASS = "M"
-           OBJECT = AdditionalAttributeName
-              Mandatory = "FALSE"
-              CLASS = "M"
-              Data_Location = "PGE"
-              NUM_VAL = 1
-              TYPE = "STRING"
-           END_OBJECT = AdditionalAttributeName
-           GROUP = InformationContent
-              CLASS = "M"
-              OBJECT = ParameterValue
-                 Mandatory = "FALSE"
-                 Data_Location = "PGE"
-                 NUM_VAL = 1
-                 TYPE = "STRING"
-              END_OBJECT = ParameterValue
-           END_GROUP = InformationContent
-        END_OBJECT = AdditionalAttributesContainer
-     END_GROUP = AdditionalAttributes
- END_GROUP = INVENTORYMETADATA
- END

## Metadata File (.met)

**Metadata File (.met)**
**Built around the 'parameter = value' form**
**Provides the inventory level and unparsed metadata attribute values for each data granule file; this information is used by the SDSRV to populate the inventory metadata database**
**Each inventory and unparsed metadata element in the .met is fully described in the MCF**
**If the attribute is not defined in the MCF, it can not be set in the .met.**
**.met File Naming Convention**
**Ought to end with “.met”**
**Example: OMI_L1b20000524190442v1.met**

## An Example .met File for an	OMI_L1b data granule (1 of 5)

**An Example .met File for an****	****OMI_L1b data granule ****(1 of 5)**

- GROUP                  = INVENTORYMETADATA
-   GROUPTYPE            = MASTERGROUP
-   GROUP                  = ECSDATAGRANULE
-     OBJECT                 = LOCALGRANULEID
-       NUM_VAL              = 1
-       VALUE                = "OMI_L1b20000524190442v1.hdf"
-     END_OBJECT             = LOCALGRANULEID
-     OBJECT                 = PRODUCTIONDATETIME
-       NUM_VAL              = 1
-       VALUE                = "2000-05-24T19:04:42.000Z"
-     END_OBJECT             = PRODUCTIONDATETIME
-     OBJECT                 = LOCALVERSIONID
-       NUM_VAL              = 1
-       VALUE                = "v1"
-     END_OBJECT             = LOCALVERSIONID
-   END_GROUP              = ECSDATAGRANULE
-   GROUP                  = MEASUREDPARAMETER
-     OBJECT                 = MEASUREDPARAMETERCONTAINER
-       CLASS                = "1"
-       GROUP                  = QAFLAGS
-         CLASS                = "1"

-  OBJECT                 = AUTOMATICQUALITYFLAGEXPLANATION
-           NUM_VAL              = 1
-           CLASS                = "1"
-           VALUE                = "Passed all automatic quality checks"
-         END_OBJECT             = AUTOMATICQUALITYFLAGEXPLANATION
-         OBJECT                 = AUTOMATICQUALITYFLAG
-           NUM_VAL              = 1
-           CLASS                = "1"
-           VALUE                = "Passed"
-         END_OBJECT             = AUTOMATICQUALITYFLAG
-         OBJECT                 = OPERATIONALQUALITYFLAGEXPLANATION
-           NUM_VAL              = 1
-           CLASS                = "1"
-           VALUE                = "GSFC DAAC found no Operation problems"
-         END_OBJECT             = OPERATIONALQUALITYFLAGEXPLANATION
-         OBJECT                 = OPERATIONALQUALITYFLAG
-           NUM_VAL              = 1
-           CLASS                = "1"
-           VALUE                = "Passed"
-         END_OBJECT             = OPERATIONALQUALITYFLAG
-         OBJECT                 = SCIENCEQUALITYFLAG
-           NUM_VAL              = 1
-           CLASS                = "1"
-           VALUE                = "Not Investigated"
-         END_OBJECT             = SCIENCEQUALITYFLAG

## An Example .met File for an	OMI_L1b data granule (2 of 5)

**An Example .met File for an****	****OMI_L1b data granule ****(2 of 5)**

-  END_GROUP              = QAFLAGS
-       GROUP                  = QASTATS
-         CLASS                = "1"
-         OBJECT                 = QAPERCENTMISSINGDATA
-           NUM_VAL              = 1
-           CLASS                = "1"
-           VALUE                = 0
-         END_OBJECT             = QAPERCENTMISSINGDATA
-         OBJECT                 = QAPERCENTOUTOFBOUNDSDATA
-           NUM_VAL              = 1
-           CLASS                = "1"
-           VALUE                = 0
-         END_OBJECT             = QAPERCENTOUTOFBOUNDSDATA
-         OBJECT                 = QAPERCENTCLOUDCOVER
-           NUM_VAL              = 1
-           CLASS                = "1"
-           VALUE                = 30
-         END_OBJECT             = QAPERCENTCLOUDCOVER
-         OBJECT                 = QAPERCENTINTERPOLATEDDATA
-           NUM_VAL              = 1
-           CLASS                = "1"
-           VALUE                = 5
-         END_OBJECT             = QAPERCENTINTERPOLATEDDATA
-       END_GROUP              = QASTATS

-   OBJECT                 = PARAMETERNAME
-         CLASS                = "1"
-         NUM_VAL              = 1
-         VALUE                = "Ultraviolet sensor counts"
-       END_OBJECT             = PARAMETERNAME
-     END_OBJECT             = MEASUREDPARAMETERCONTAINER
-   END_GROUP              = MEASUREDPARAMETER
-   GROUP                  = ORBITCALCULATEDSPATIALDOMAIN
-     OBJECT                 = ORBITCALCULATEDSPATIALDOMAINCONTAINER
-       CLASS                = "1"
-       OBJECT                 = STARTORBITNUMBER
-         CLASS                = "1"
-         NUM_VAL              = 1
-         VALUE                = 1
-       END_OBJECT             = STARTORBITNUMBER
-       OBJECT                 = EQUATORCROSSINGDATE
-         CLASS                = "1"
-         NUM_VAL              = 1
-         VALUE                = "2003-01-01"
-       END_OBJECT             = EQUATORCROSSINGDATE
-       OBJECT                 = EQUATORCROSSINGTIME
-         CLASS                = "1"
-         NUM_VAL              = 1
-         VALUE                = "01:00:00.000000"

## An Example .met File for an	OMI_L1b data granule (3 of 5)

-       END_OBJECT             = EQUATORCROSSINGTIME
-       OBJECT                 = ORBITNUMBER
-         CLASS                = "1"
-         NUM_VAL              = 1
-         VALUE                = 1
-       END_OBJECT             = ORBITNUMBER
-       OBJECT                 = EQUATORCROSSINGLONGITUDE
-         CLASS                = "1"
-         NUM_VAL              = 1
-         VALUE                = 90.000000
-       END_OBJECT             = EQUATORCROSSINGLONGITUDE
-       OBJECT                 = STOPORBITNUMBER
-         CLASS                = "1"
-         NUM_VAL              = 1
-         VALUE                = 3
-       END_OBJECT             = STOPORBITNUMBER
-     END_OBJECT             = ORBITCALCULATEDSPATIALDOMAINCONTAINER
-   END_GROUP              = ORBITCALCULATEDSPATIALDOMAIN
-   GROUP                  = COLLECTIONDESCRIPTIONCLASS
-     OBJECT                 = VERSIONID
-       NUM_VAL              = 1
-       VALUE                = 1
-     END_OBJECT             = VERSIONID

-  OBJECT                 = SHORTNAME
-       NUM_VAL              = 1
-       VALUE                = "OMI_L1b"
-     END_OBJECT             = SHORTNAME
-   END_GROUP              = COLLECTIONDESCRIPTIONCLASS
-   GROUP                  = INPUTGRANULE
-     OBJECT                 = INPUTPOINTER
-       NUM_VAL              = 5
-       VALUE                = ("OMI_L1a20000524190442v1.hdf", "CH1OMIL020000524190442v1.bin")
-     END_OBJECT             = INPUTPOINTER
-   END_GROUP              = INPUTGRANULE
-   GROUP                  = SPATIALDOMAINCONTAINER
-     GROUP                  = HORIZONTALSPATIALDOMAINCONTAINER
-       GROUP                  = GPOLYGON
-         OBJECT                 = GPOLYGONCONTAINER
-           CLASS                = "1"
-           GROUP                  = GRINGPOINT
-             CLASS                = "1"

## An Example .met File for an	OMI_L1b data granule (4 of 5)

-  OBJECT                 = GRINGPOINTLONGITUDE
-               NUM_VAL              = 4
-               CLASS                = "1"
-               VALUE                = (-180.000000, 180.000000, 180.000000, -180.000000)
-             END_OBJECT             = GRINGPOINTLONGITUDE
-             OBJECT                 = GRINGPOINTLATITUDE
-               NUM_VAL              = 4
-               CLASS                = "1"
-               VALUE                = (90.000000, 90.000000, -90.000000, -90.000000)
-             END_OBJECT             = GRINGPOINTLATITUDE
-             OBJECT                 = GRINGPOINTSEQUENCENO
-               NUM_VAL              = 4
-               CLASS                = "1"
-               VALUE                = (1, 2, 3, 4)
-             END_OBJECT             = GRINGPOINTSEQUENCENO
-           END_GROUP              = GRINGPOINT
-           GROUP                  = GRING
-             CLASS                = "1"
-             OBJECT                 = EXCLUSIONGRINGFLAG
-               NUM_VAL              = 1
-               CLASS                = "1"
-               VALUE                = "N"
-             END_OBJECT             = EXCLUSIONGRINGFLAG

-  END_GROUP              = GRING
-         END_OBJECT             = GPOLYGONCONTAINER
-       END_GROUP              = GPOLYGON
-     END_GROUP              = HORIZONTALSPATIALDOMAINCONTAINER
-   END_GROUP              = SPATIALDOMAINCONTAINER
-   GROUP                  = RANGEDATETIME
-     OBJECT                 = RANGEENDINGDATE
-       NUM_VAL              = 1
-       VALUE                = "2003-01-01"
-     END_OBJECT             = RANGEENDINGDATE
-     OBJECT                 = RANGEENDINGTIME
-       NUM_VAL              = 1
-       VALUE                = "06:00:00.000000"
-     END_OBJECT             = RANGEENDINGTIME
-     OBJECT                 = RANGEBEGINNINGDATE
-       NUM_VAL              = 1
-       VALUE                = "2003-01-01"
-     END_OBJECT             = RANGEBEGINNINGDATE
-     OBJECT                 = RANGEBEGINNINGTIME
-       NUM_VAL              = 1
-       VALUE                = "01:00:00.000000"
-     END_OBJECT             = RANGEBEGINNINGTIME

## An Example .met File for an	OMI_L1b data granule (5 of 5)

-  END_GROUP              = RANGEDATETIME
-   GROUP                  = PGEVERSIONCLASS
-     OBJECT                 = PGEVERSION
-       NUM_VAL              = 1
-       VALUE                = "1"
-     END_OBJECT             = PGEVERSION
-   END_GROUP              = PGEVERSIONCLASS
-   GROUP                  = ADDITIONALATTRIBUTES
-     OBJECT                 = ADDITIONALATTRIBUTESCONTAINER
-       CLASS                = "1"
-       OBJECT                 = ADDITIONALATTRIBUTENAME
-         CLASS                = "1"
-         NUM_VAL              = 1
-         VALUE                = "AscendingDescendingFlg"
-       END_OBJECT             = ADDITIONALATTRIBUTENAME
-       GROUP                  = INFORMATIONCONTENT
-         CLASS                = "1"
-         OBJECT                 = PARAMETERVALUE
-           NUM_VAL              = 1
-           CLASS                = "1"
-           VALUE                = "Descending"
-         END_OBJECT             = PARAMETERVALUE

-  END_GROUP              = INFORMATIONCONTENT
-     END_OBJECT             = ADDITIONALATTRIBUTESCONTAINER
-   END_GROUP              = ADDITIONALATTRIBUTES
- END_GROUP              = INVENTORYMETADATA
- END

## Summary:  Descriptor, MCF & .met  Files

**Metadata**
**  ****COLLECTIONMETADATA**
**  ****INVENTORYMETADATA**
**  ****UNPARSEDMETADATA**
**Service**
**Structure**
**Event**

**INVENTORYMETADATA**
**  ****UNPARSEDMETADATA**

**SDP Toolkit**
**Metadata Tools**

**INVENTORYMETADATA**

**Descriptor File**

**MCF File**

**.met File**

## Ingest Granule Metadata Generation

**ECS Ingest**
**Processing**

**Data**
**Granule**

**Science**
**Data Server**

**Inventory Tables**

**Metadata**
**File**

**Inventory**
**Metadata**
**(ASCII File)**

**Source**
**Metadata**
**Configuration**
**File**

**Target Metadata**
**Configuration**
**File**

## Processing Granule Metadata Generation

**Processing Granule Metadata Generation**

**SDP Toolkit**

**Inventory  Metadata**

**Scientific Data Set**

**Inputs**

**Process**
**Control**
**File**

**Product Generation**
**Executable**

**Product**

**Inventory**
**Metadata**

**(ASCII File)**

**Archive  Metadata**

**(Generated by Science Data Server)**

**(Generated by Processing)**

**Target **
**Metadata**
**Configuration**
**File**

**(HDF-EOS)**

**Scientific Data Set**

## ECS Data Distribution

**Data**
**Granule**

**Metadata**

**(ASCII File with**
**.met extension)**

**Data Server**
**Subsystem**

**Metadata**
**Tables**

**Storage**
**Management**

**To**
**User**

## ECS Data Distribution of HDF-EOS Products

**Inventory  Metadata**

**Structural Metadata**

**Granule**

**Metadata**

**(ASCII File with**
**.met extension)**

**HDF-EOS**

**Archive  Metadata**

**Data Server**
**Subsystem**

**Metadata**
**Tables**

**Storage**
**Management**

**To**
**User**

**HDF Data Object**

**HDF Data Object**

## Metadata in the ECSDirectory vs Inventory

## Source and Distribution of Metadata in ECS

**Source and Distribution of Metadata in ECS**

**Planning**

**Descriptor**

**ODL**

**C++**

**DLL**

**ESDT**

**Interoperability**

**Data Management**

**Collection Metadata Values**
**Granule Metadata Attributes**
**PSA Valids and Ranges**
**Services**

**Data Processing**

**Ingest**

**Client**

**PUSH**

**PULL**

**SDSRV**

- DLL Libraries

**Science Data**
**Archive**

**Metadata**
**Tables**