DAP4: Possible Notation for Server Commands

From OPeNDAP Documentation

<< Back to OPULS Development

1 Background

Looking to the future, it is clear that eventually our query language, or more generically our server commands must encompass three classes of computations.

  1. Queries in the DAP2 sense,
  2. Commands to control the processing of requests on the server (i.e. thing like caching),
  3. Server-side processing.

I want to propose a notation for everything in the URL after the "?". I think this notation has the ability to represent a wide variety of features without, I hope, being too generic.

2 Proposal

The notation is basically nested functions combined with single assignment variables. A semantically nonsensical, but grammatical example would look something like this.

?svc("cmd");_x=f("string17",g(h(12))),f2(_x,[0:3:10])

Everything past the "?" is in the form of a semi-colon separated list of expression lists. An expression list is a comma separated list of nested function invocations, possibly assigned to a variable. Anything that begins with an underscore is considered a local, temporary, variable, anything that does not look like a function call (i.e. name followed immediately by left paren) is assume to what I will call a non-quoted string constant; standard quoted string constants are also allowed. Each function has an arbitrary number of argument expressions separated by commas.

BTW, the term "single assignment" means that a variable may only be assigned to once, but may be referenced as many times as desired after that.

3 Syntactic and Lexical Structure

I have defined a preliminary syntax document and lexical document for the ideas presented here.

4 Notes

  1. The purpose of providing multiple expression lists separated by semi-colons is to support the a visible notation for specififying server commands separate from constraint evaluation.
  2. My hypothesis is that this notation should also be able to handle most kinds of server side processing by defining and composing functions.
  3. The standard projection+selection constraints of DAP2 can be represented using a special constraint() function whose argument is the standard DAP2 constraint. Alternatively, one could define a collection of nested functions to do the same thing.
  4. I hypothesize that Ferret notations could be represented in my proposed function notation without having to clutter up the URL format. E.g.
    http://.../thredds/dodsC/hfrnet/agg/6km_expr_{}{let deq1ubar=u[d=1,l=1:24@ave]}
  5. An important issue involves the construction of a DDX from a constraint. I have begun this discussion here

-Dennis Heimbigner