[thredds] CDMRemote and OPeNDAP

Hi Dennis,

I am going to spin off a new thread for this one.

I'm inclined to agree that DAP2 doesn't currently provide the best abstraction for data access. What concerns do you have about it and how do you think CDMRemote addresses them? Others out there, do you have cases of OPeNDAP request syntax short-comings?

I'll point out that I am a big fan of REST and GET. I'd be curious to hear more about the GET vs POST issues (maybe in another thread?), but I'm only concerned about GET, for now. I note an affinity for "name=value" parameters in REST APIs. Is there anything in REST practices that require this? Do others consider OPeNDAP (which does not adhere to this convention) to be RESTful?

For example, instead of "data.nc?req=CDL" in the CDMRemote examples, I would simply say "data.cdl". Although I've seen many OPeNDAP servers point to actual NetCDF files, I consider "data" in this case simply as a resource - a virtual dataset. "data.nc" tells me that I should expect a NetCDF file as a response. Saying that "data.nc" is the "endpoint" seems to expose an implementation detail - that the data come from a specific NetCDF file. It's the suffix "cdl" (or "das" or "dods"...) that specifies the output format. Maybe a little unconventional compared to most REST interfaces, but it's consistent with OPeNDAP.

After a quick glance, I also don't see how the CDMRemote request syntax is significantly different from OPeNDAP. OPeNDAP's hyperslab notation seems to support the index subsetting, and selection constraints like "longitude>22.8" could be used in place of "south=22.8". Is there something I'm missing in those examples? (I'll save the ncstream vs dods protocol discussion for another time.)

I've been working on a new data model for our OPeNDAP server (LaTiS). It is largely inspired by Unidata's CDM, DAP2, and VisAD. One thing that strikes me is that CDM (and many other data models) seem to leap to a domain specific "feature type" definition prematurely. At some level, I can say that my variable is a function of two variables (think two dimensional):

  (X,Y) -> MyVariable

At a higher level, I can say that X is longitude and Y is latitude so I now have a GeoGrid. However, there are lots of things you can do with a more generic view of a 2D variable (think polymorphism). No need to exclude astronomers or anyone else that has a 2D problem domain. And it gets more interesting when you start thinking about a 2D variable being a function of arity 2 from a Functional Programming perspective. If anyone knows anything about category theory, type classes, contravarience, partial functions, currying,... in Scala, I'd love to talk with you.


IMO DAP2 queries are not usable for specifying server-side operations.
There is too much missing.
DAP4 is a possibility although I am not sanguine on the prospects
given the way it is evolving.
John Caron's CDMremote seems like a better candidate.
Visad also would be promising for its data model, but
as far as I know, there is no remote access protocol
using visad.

=Dennis Heimbigner

  • 2012 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the thredds archives: