Page 1
GO-ESSPLLNL, June 2006
CSML – Stocktake and Forward Look
Andrew Woolf ([email protected] ), Dominic LoweCCLRC Rutherford Appleton Laboratory
with contributions from NDG Team (Bryan Lawrence, Roy Lowry, Kerstin Kleese van Dam, Ray Cramer, Siva
Kondapalli, Sue Latham, Kevin O’Neill, Ag Stephens)
Page 2
GO-ESSPLLNL, June 2006
Outline
• CSML: History• CSML: Present• CSML: Future
Page 3
GO-ESSPLLNL, June 2006
CSML: History• NERC DataGrid: the integration problem
– multiple organisations, formats, storage mechanisms (file, relational)
– only commonality is data semantics
Page 4
GO-ESSPLLNL, June 2006
CSML: History• The standards-based approach
– “Conceptual modelling is the process of creating an abstract description of some portion of the real world and/or a set of related concepts.” (ISO 19101)
NDG
Universe of discourse
...
startTime[1]bottomTime[1]salinity[*]temperature[*]depth[*]
CTDProfile
...
...
Feature types
ISO 19103
<?xml version="1.0" encoding="UTF-8"?> <schema targetNamespace="http://ndg.nerc.ac.uk/csml" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:csml="http://ndg.nerc.ac.uk/csml" xmlns:om="http://www.opengis.net/om" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.1"> <annotation> <documentation>CSML application schema</documentation> </annotation> <!--====================================================================== --> <import namespace="http://www.opengis.net/gml" schemaLocation="GML-3.1.0/base/gml.xsd"/> <import namespace="http://www.opengis.net/om" schemaLocation="phenomenon.xsd"/> <!--====================================================================== --> <!--===== Root element for CSML dataset =====--> <!--====================================================================== --> <complexType name="DatasetType"> <complexContent> <extension base="gml:AbstractGMLType"> <sequence> <element ref="csml:UnitDefinitions" minOccurs="0" maxOccurs="unbounded"/> <element ref="csml:ReferenceSystemDefinitions" minOccurs="0" maxOccurs="unbounded"/> <element ref="csml:PhenomenonDefinitions" minOccurs="0"/> <element ref="csml:_ArrayDescriptor" minOccurs="0" maxOccurs="unbounded"/> <element ref="gml:FeatureCollection" minOccurs="0" maxOccurs="unbounded"/> </sequence> </extension> </complexContent> </complexType> <element name="Dataset" type="csml:DatasetType"/> <!--====================================================================== --> <!--===== Dictionary/definition elements =====--> <!--====================================================================== --> <complexType name="ReferenceSystemDefinitionsType"> <complexContent> <extension base="gml:DictionaryType"/> </complexContent> </complexType> <element name="ReferenceSystemDefinitions" type="csml:ReferenceSystemDefinitionsType"/> <complexType name="ReferenceSystemDefinitionsPropertyType"> <sequence> <element ref="csml:ReferenceSystemDefinitions" minOccurs="0"/> </sequence> <attributeGroup ref="gml:AssociationAttributeGroup"/> </complexType>
Application schema
ISO 19109
FTC
ISO 19110 <gml:definitionMember> <om:Phenomenon gml:id="taxon"> <gml:description>The taxon name</gml:description> <gml:name codeSpace="http://www.vliz.be">taxon</gml:name> </om:Phenomenon> </gml:definitionMember> </NDGPhenomenonDefinitions> <!--===================================================================--> <gml:FeatureCollection> <!-- ============================================================== --> <gml:featureMember> <NDGPointFeature gml:id="ICES_100"> <NDGPointDomain> <domainReference> <NDGPosition srsName="urn:EPSG:geographicCRS:4979" axisLabels="Lat Long" uomLabels="degree degree"> <location>55.25 6.5</location> </NDGPosition> </domainReference> </NDGPointDomain> <gml:rangeSet> <gml:DataBlock> <gml:rangeParameters> <gml:CompositeValue> <gml:valueComponents> <gml:measure uom="#tn"/> <gml:measure uom="#amount"/> <gml:measure uom="#gsm"/> </gml:valueComponents> </gml:CompositeValue> </gml:rangeParameters> <gml:tupleList> 'ANTHOZOA',63.1,missing 'Scoloplos armiger',66.1,missing 'Spio filicornis',10,missing 'Spiophanes bombyx',60.3,missing 'Capitellidae',131.8,missing 'Pholoe',10,missing 'Owenia fusiformis',23.4,missing 'Hypereteone lactea',6.8,missing 'Anaitides groenlandica',13.2,missing 'Anaitides mucosa',6.8,missing
ISO 19118
Page 5
GO-ESSPLLNL, June 2006
CSML: History
• Is this standards stuff relevant?! One example:– EU INSPIRE Directive
• Establishes European Spatial Data Infrastructure – mandating interoperability of environmental data across EEA
• “[ISO/OGC] standards and specifications ... will be considered as reference material for the Consolidation Team and relevant Drafting Teams.” (INSPIRE Work Programme Preparatory Phase 2005 – 2006)
• Annex III Data Themes, incl.:– Atmospheric Conditions– Meteorological geographical features– Oceanographic geographical features– Sea regions
Page 6
GO-ESSPLLNL, June 2006
CSML: Historygrep ‘ISO|OGC|WFS|WCS|WMS|GML’ {AGU,AMS,GO-ESSP}/* | wc
0
1
2
3
4
5
6
7
1 (2003) 2 (2003) 3 (2004) 4 (2005) 5 (2006)
GO-ESSP
?0
1
2
3
4
5
1998 1999 2000 2001 2002 2003 2004 2005 2006
AMS (all)
0
5
10
15
20
25
1998 1999 2000 2001 2002 2003 2004 2005 2006
AGU (Spring and Fall)
Page 7
GO-ESSPLLNL, June 2006
CSML: History
British OceanographicData Centre
British AtmosphericData Centre
ISO standards
‘Governance Principle’
Climate Science Modelling Language
«FeatureType»AbstractGeometryFeature
«FeatureType»AbstractStaticCoverageFeature
«FeatureType»AbstractSeriesCoverageFeature
+domainSet : AbstractDomain+coverageFunction : MappingRule
«FeatureType»AbstractCoverageFeature
+domainSet+rangeSet+coverageFunction
«FeatureType»GML::AbstractDiscreteCoverage
+track : Trajectory
«FeatureType»TrajectoryFeature
+domainSet : ProfileDomain
«FeatureType»ProfileFeature
+domainSet : PointDomain
«FeatureType»PointFeature
«FeatureType»SectionFeature
+domainSet : GridDomain
«FeatureType»GridFeature
+domainSet : PointSeriesDomain
«FeatureType»PointSeriesFeature
+domainSet : ProfileSeriesDomain
«FeatureType»ProfileSeriesFeature
«FeatureType»SectionSeriesFeature
+domainSet : GridSeriesDomain
«FeatureType»GridSeriesFeature
{domainSet.domainReference = Position}
{domainSet.domainReference = Trajectory}
OGC Obs & Meas::Phenomenon
+parameter
{+,-}phenomenon{+,-}seriesFeature{+,-}gridI{+,-}gridJ{+,-}gridK
«Enumeration»IncrementOrder
+scanOrder[0..1] : Sequence<IncrementOrder>
«DataType»MappingRule
+id[0..1]+metaDataProperty[0..1]+description[0..1]+name[0..1]+boundedBy[0..1]
«DataType»GML::AbstractFeature
<?xml version="1.0" encoding="UTF-8"?><schema targetNamespace="http://ndg.nerc.ac.uk/csml" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:csml="http://ndg.nerc.ac.uk/csml" xmlns:om="http://www.opengis.net/om" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.1"> <annotation> <documentation>CSML application schema</documentation> </annotation> <!--====================================================================== --> <import namespace="http://www.opengis.net/gml" schemaLocation="GML-3.1.0/base/gml.xsd"/> <import namespace="http://www.opengis.net/om" schemaLocation="phenomenon.xsd"/> <!--====================================================================== --> <!--===== Root element for CSML dataset =====--> <!--====================================================================== --> <complexType name="DatasetType"> <complexContent> <extension base="gml:AbstractGMLType"> <sequence> <element ref="csml:UnitDefinitions" minOccurs="0" maxOccurs="unbounded"/> <element ref="csml:ReferenceSystemDefinitions" minOccurs="0" maxOccurs="unbounded"/> <element ref="csml:PhenomenonDefinitions" minOccurs="0"/> <element ref="csml:_ArrayDescriptor" minOccurs="0" maxOccurs="unbounded"/> <element ref="gml:FeatureCollection" minOccurs="0" maxOccurs="unbounded"/> </sequence> </extension> </complexContent> </complexType> <element name="Dataset" type="csml:DatasetType"/> <!--====================================================================== --> <!--===== Dictionary/definition elements =====--> <!--====================================================================== --> <complexType name="ReferenceSystemDefinitionsType"> <complexContent> <extension base="gml:DictionaryType"/> </complexContent> </complexType> <element name="ReferenceSystemDefinitions" type="csml:ReferenceSystemDefinitionsType"/> <complexType name="ReferenceSystemDefinitionsPropertyType"> <sequence> <element ref="csml:ReferenceSystemDefinitions" minOccurs="0"/> </sequence> <attributeGroup ref="gml:AssociationAttributeGroup"/> </complexType>
Conceptual model Schemas
Tooling
Page 8
GO-ESSPLLNL, June 2006
CSML: PresentConceptual model
numerical weather prediction model, ocean general circulation model
Timeseries of gridded parameter fields.GridSeriesFeature
vertical or scanning radar, shipborne ADCP, thermistor chain timeseries
Series of profile-type measurements.ProfileSeriesFeature
tidegauge, rainfall timeseriesSeries of single datum measurements.PointSeriesFeature
gridded analysis fieldSingle time-snapshot of a gridded field.GridFeature
wind sounding, XBT, CTD, radiosonde
Single ‘profile’ of some parameter along a directed line in space.ProfileFeature
raingauge measurementSingle point measurement.PointFeature
ship’s cruise track, aircraft’s flight pathDiscrete path in time and space of a platform or instrument.TrajectoryFeature
ExamplesDescriptionCSML feature type
‘Coverage’ feature typesPure geometry feature type
ProfileSeriesFeature
ProfileFeature
GridFeature
Page 9
GO-ESSPLLNL, June 2006
CSML: Present• GML Application schema
– all sections optional
CSML Dataset
csml:UnitDefinitions
csml:ReferenceSystemDefinitions
csml:PhenomenonDefinitions
Storage descriptors
gml:FeatureCollection
csml:NetCDFExtract, csml:AggregatedArray,csml:GRIBExtract, csml:NASAAmesExtract, etc
(cf. UDUNITS.xml)
GMLdictionaries
(cf. CFStandardNames.xml)
Page 10
GO-ESSPLLNL, June 2006
CSML: Present• Tooling
– Scanner
• uses ‘feature file map’ to characterise relationship between feature type and directory/files being scanned
• individual Python classes for GML classes, feature types, dataset, etc all have toXML() method for generating GML/CSML
• instances populated by Scanner
$ python csmlscan.py -d /badc/ecmwf-e40/data/gp/gp/ap-o era40gridseries.xml -c GridSeriesFeature -t 'time'
CDAT/cdunif+
csmlscanCSMLFile.xml
Page 11
GO-ESSPLLNL, June 2006
CSML: Present• Tooling
– Parser
• all GML/CSML Python classes have fromXML() method
• called recursively by Parser on ElementTree representation
tree = ElementTree(file=CSMLFile) dataset = Dataset()dataset.fromXML(tree.getroot())
...feature = dataset.featureCollection.members[0]variablePhenomenon = feature.parameterunits = feature.rangeSet.aggregatedArray.uom...
csml = dataset.toXML()
ElementTree+
parserCSMLFile.xmlDataset
NetCDFExtract
GridSeriesFeature
featureMember
AggregatedArray
rangeSet
Page 12
GO-ESSPLLNL, June 2006
CSML: Present
• Tooling– API
• experimental at present• defined against CSML data model• e.g.: Dataset.getFeatureList(),
GridSeriesFeature.getDomain(), GridSeriesFeature.subsetToGridSeries()
– Different feature types may support different operations (part of UML model!)
– ‘Subsetting’ regarded as ‘extracting a feature’
Page 13
GO-ESSPLLNL, June 2006
CSML: Present
• Higher-level services– BADC DataExtractor– OGC Web Coverage
Service• extension of GALEON
server
http://glue.badc.rl.ac.uk/cgi-bin/TPAC/WCS-CSML?SERVICE=WCS&VERSION=1.0.0&REQUEST=GetCoverage&COVERAGE=solar_3&CRS=EPSG:4326&BBOX=0,-90,356,90&TIME=2790-01-01/2790-05-01&FORMAT=CF-netCDF&RESX=2&RESY=2
Page 14
GO-ESSPLLNL, June 2006
CSML: PresentCSML (and friends): software stack
Page 15
GO-ESSPLLNL, June 2006
CSML PresentOther User Example: Norwegian Met Office
Page 16
GO-ESSPLLNL, June 2006
CSML: Future
• Immediate issues (v2)– Feature types:
• Swath• ProfileSeries{Radar, Section, ProfileSeries}?• Lose ‘composite domain pattern’?
– GML 3.2 ( ISO 19136)– remove ‘storage descriptors’ from core CSML
schema– deployment, testing
Page 17
GO-ESSPLLNL, June 2006
CSML: Future
• Longer-term issues– GML irregular grids – CSML extends gml:Grid
(evolving standards is slooow!)– ISO 19131 ‘Data Product Specifications’ (e.g.
CRS should be defined in DPS, not AS)– GML & file-based data (will be discussed next
week at OGC TC in Edinburgh)
Page 18
GO-ESSPLLNL, June 2006
CSML: FutureOther activities:
Universe of discourse
Feature types
ISO 19103
Application schema
ISO 19109
ISO 19110 <gml:definitionMember> <om:Phenomenon gml:id="taxon"> <gml:description>The taxon name</gml:description> <gml:name codeSpace="http://www.vliz.be">taxon</gml:name> </om:Phenomenon> </gml:definitionMember> </NDGPhenomenonDefinitions> <!--===================================================================--> <gml:FeatureCollection> <!-- ============================================================== --> <gml:featureMember> <NDGPointFeature gml:id="ICES_100"> <NDGPointDomain> <domainReference> <NDGPosition srsName="urn:EPSG:geographicCRS:4979" axisLabels="Lat Long" uomLabels="degree degree"> <location>55.25 6.5</location> </NDGPosition>'Anaitides mucosa',6.8,missing
ISO 19118
EUproject
‘MOTIIVE’
EUproject‘RISE’
GALEONMetOfficeoperationalmeteorology netCDF
datastandards
RISE and MOTIIVEare both pilots for INSPIRE
Page 19
GO-ESSPLLNL, June 2006
CSML: Future• The CSML ‘niche’
– set of base feature types for specialising or using as-is
cd CSML future
CF v ocab Obs & Meas
Climate CRS
CSML
+ GridSeriesFeature+ Profi leSeriesFeature
MyModel
+ Ensemble
+ EnsembleMember+ Mooring
«import»
«import» «import»
«import»
cd MyModel
«interface»CSML::ProfileSeriesFeature
+ domainSet: = ProfileSeriesDomain+ parameter: om:Phenomenon+ rangeSet:
Mooring
+ averaging: + blowover: + deploymentEnd: + deploymentStart:
«interface»CSML::GridSeriesFeature
+ domainSet: = GridSeriesDomain+ parameter: om:Phenomenon+ rangeSet:
Ensemble
+ ensembleParameters:
EnsembleMember
+ memberNumber: + paramValues:
*
Page 20
GO-ESSPLLNL, June 2006
CSML: Future
• CSML ‘out-of-the-box’– conceptual model– GML application schema– ‘geometric affordances’ (i.e. operations for
generic Grid, Profile, Point coverages + series)
Page 21
GO-ESSPLLNL, June 2006
Links
• CSML: http://ndg.nerc.ac.uk/csml• CSML validator: http://glue.badc.rl.ac.uk/cgi-bin/
csml/parseTest.py• MetOffice ‘Exeter Communiqué:
http://www.metoffice.gov.uk/informatics• NDG CSML subversion:
http://glue.badc.rl.ac.uk/viewsub/viewvc.cgi/ndg/TI02-CSML/