object Map is components: Layer*; description: (* Holds all the data for the map, organized into sets of data called layers. *); end map; object Layer is components: LayerName and Region and FillOpacity and PenOpacity and DataType and Details and Legend; description: (* Holds a set of data for the map. This is inherited from to get the different types of layers. A large amount of the data for the layer is defined here, but some specifics for the different types are not *); end Layer; object LayerName is string; object Region is components: ACoord and BCoord; end Region; object ACoord is components: Longitude and Latitude; end ACoord; object BCoord is components: Longitude and Latitude; end BCoord; object Longitude is components: Degrees and Minutes and Seconds and NSDirection; end Longitude; object Latitude is components: Degrees and Minutes and Seconds and WEDirction; end Latitude; object Degrees is integer; object Minutes is integer; object Seconds is integer; object NSDirection is boolean description: (* true stands for North, false for South*); end; object WEDirection is boolean description: (* true stands for West, false for East*); end; object PenOpacity is integer; object FillOpacity is integer; object DataType is string; object Details is string; object Legend is components: LegendElement*; end Legend; object LegendElement is components: Label; end LegendElement; object Label is string; object GradientElement inherits from LegendElement components: Color and Shade; end GradientElement; object Color is components: Red and Green and Blue; end Color; object Red is integer; object Green is integer; object Blue is integer; object Shade is integer; object FillElement inherits from LegendElement components: Color; end FillElement; object IconElement inherits from LegendElement components: Icon; end IconElement; object Icon is Picture; object StaticLayer inherits from Layer components: LayerElement*; description: (* Only has the data for a layer. It is a single set of data. It does not have any time value associated with it. The LayerElements for this type of layer are stored here*); end StaticLayer; object LayerElement is components: ELementName and ShapeType and ShapeCoord* and Value and LegendRef; end LayerElement; object ElementName is string; object ShapeType is string; object ShapeCoord is string; object Value is string or int; object LegendRef is LegendElement; object LayerCategory inherits from Layer components: LayerFrame* and TimeFormat; description: (* The TimeFormat governs the way the time must be formatted for all the LayerFrames of this Layer Category. It must have one LayerFrame to hold any data. The actual LayerElements are not stored here, but on its LayerFrames. *); end LayerCategory; object LayerFrame is components: TimeStamp and LayerElement* and Details; description: (* The TimeStamp must be unique from all the other LayerFrames. It holds the LayerElements for the layer. *); end LayerFrame; object TimeStamp is string;