The OPeNDAP data access protocol defines a special data type to handle distributed data: URL. This is a scalar data type, much like the String type, intended to hold one OPeNDAP URL. It generally points at some remote dataset or data value. Using this data type, a constraint expression may make the data returned from one OPeNDAP data server dependent on data held at an entirely different site.
In order to accommodate this data type, OPeNDAP defines a special
"dereference" operator *. Similar to
its function with pointers in C, applying this operator to a URL
returns the data specified by that URL. The URL data type
itself contains only a character string. It must be dereferenced to
produce a reference to the data named by the URL.
The following example will return all the stations containing oxygen values greater than fifteen:
?station&station.cast.O2>15.0
Similarly, the following constraint expression will yield all the stations in the dataset whose value is greater than that of the oxygen value indicated by the URL:
?station&station.cast.O2>*''http://ocean.edu/etc/nc/data?O2MAX''
Finally, suppose that the dataset itself contained a variable of type URL, and that this URL contained the address of oxygen data stored at some other site. The data descriptor for the dataset might look like the following:
Dataset {
Sequence{
.
.
.
URL O2cal;
.
.
.
} station;
} arabian-sea;
We can now write the previous constraint as:
?station&station.cast.O2>*O2cal
URLs stored in remote datasets may also be used in the projection
clause of the constraint expression. Imagine a dataset that consists
only of a list of URLs for each square degree of latitude and
longitude. A user could query this dataset for the actual list of
URLs, or, by using the * operator, could construct a constraint
expression that would return the actual data indicated by the URLs in
the target dataset.