Clarification 1:
I was probably too terse in my previous message about variable-length
dimensions. Let me elaborate a bit.
All existing dimensions (including UNLIMITED) have
(at any point in time) a fixed known size and every use of that
dimension has that size. Note that an UNLIMITED dimension's size may
change over time, but it is still the case that all occurrences of it
have the same size at any point in time.
A variable-length dimension (often represented by "*") has potentially
a different size for every occurrence at any given point in time.
The pretense that a variable-length dimension is a dimension causes
significant code and use complications in the CDM data model.
An ArraySequence is particular form of CDM Array, similar to an
Array Structure, that encapsulates the fact the the length of the
sequence can differ for each ArraySequence instance. The goal of the
proposed change is to isolate/encapsulate true variable-length objects
within an ArraySequence object.
So, if we have, for example,
int x(5,*)
then this would be represented as a 5 element array of
ArraySequence objects, and each ArraySequence object
contains a variable length vector of integers.
Using the netcdf-4 model, this would be:
types: int(*) sequence_t
variables: sequence_t x(5)
The requirement on e.g. IOSP developers is that they create
ArraySequence objects, and the requirement on the client users of CDM
(via the netcdf-Java library) is that they recognize ArraySequence objects.
My speculation is that anyone who uses variable-length dimensions
already has to make code exceptions to process it, and it is probable
that only that code would need to be changed to deal with ArraySequence.
Note: ArraySequences actually already exist in the CDM code, but are
currently not used (AFAIK).
=Dennis Heimbigner
Unidata