netcdf foo { // an example netCDF specification in CDL types: ubyte enum enum_t {Clear = 0, Cumulonimbus = 1, Stratus = 2}; opaque(11) opaque_t; int(*) vlen_t; dimensions: lat = 10 ; lon = 5 ; time = unlimited ; // (0) currently) variables: int lat(lat) ; int lon(lon) ; int time(time) ; float Z(time, lat, lon) ; float t(time, lat, lon) ; double p(time,lat,lon); long rh(time,lat,lon); string country(time,lat,lon); ubyte tag; // variable attributes lat:long_name = "latitude"; lat:units = "degrees_north"; lon:long_name = "longitude"; lon:units = "degrees_east"; time:units = "seconds since 1992-1-1 00:00:00"; // typed variable attributes string Z:units = "geopotential meters"; float Z:valid_range = 0., 5000.; double p:_FillValue = -9999.; long rh:_FillValue = -1; vlen_t :globalatt = {17, 18, 19}; data: lat = 0, 10, 20, 30, 40, 50, 60, 70, 80, 90; lon = -140, -118, -96, -84, -52; group: g { types: compound cmpd_t { vlen_t f1; enum_t f2;}; } // group g group: h { variables: /g/cmpd_t compoundvar; data: compoundvar = { {3,4,5}, Stratus } ; } // group h }//foo