IVOA Simple Line Access Protocol v0.2

Doug Tody dtody at nrao.edu
Mon Feb 6 11:04:10 PST 2006


Pedro, Jesus, Marie-Lise, et. al. -

As I said back in the ESAC meeting, I really like the way the SLAP interface
has developed.  It is a simple, straightfoward interface which people are
likely to actually use, but it has had a lot of thought behind it, and
has a sophisticated underlying line data model.  I appreciate the effort
to make it compatible with the approach taken with the other DAL interfaces.

What follow are some notes I made while reading through the documents.
These are in not in any particular order.


Must/Should/Could

     It is not important, but it would be preferable to use Must/Should/May
     to be consistent with the W3C convention reference here (RFC 2119) and
     used elsewhere within DAL.  "May" refers to a feature which is defined
     by the interface but which is optional for a service to implement.


format=metadata

     I think you are doing the right thing by following this convention
     (from SIAP) for the present, until the matter is resolved.  The use of
     the FORMAT keyword to retrieve service metadata may change with the
     next round of interfaces - we haven't decided yet, it is still under
     consideration.  As the document states, how the service metadata is
     returned is still also under consideration.  The registry guys have
     suggested that native XML, consistent with the service description
     in the registry, be returned, instead of a VOTable as in SIA 1.0.


Use of query operators, e.g., INITIAL_LEVEL_ENERGY>370000
Wavelength spectral range as WAVELENGTH_MIN and WAVELENGTH_MAX

     The use of ">" for an open range is inconsistent with what is currently
     specified in SSA, plus I am not sure it is legal (or at least advisable)
     to do this in a GET.  We are not yet committed to what has been proposed
     for SSA, but we should agree upon a standard way to specify ranges of
     parameter values in all DAL query interfaces.  That is, in all simple
     parameter-based query interfaces; ADQL will eventually provide a general
     solution to this problem by adding a general capability for expressions.

     I think we have to assume that parameters are passed in a GET as a
     name/value pair with "=" connecting the two strings.  If for no other
     reason this is advisable as standard URL parsers will look for the "="
     to parse name/value pairs.

     Hence, all that we can finesse is the value string.  It would be
     possible to have a value string such as ">370000", however the ">"
     is not permissible in a URL and would have to be hex-encoded.  Also,
     once we start using actual expression operators it may be difficult
     to know where to stop: do we permit ">", "<", ">=", "<=", etc.?
     Since we will provide a general expression capability elsewhere, a
     simple approach is required here.

     One approach would be to provide separate equality, min, and max
     keywords for all parameters (as in WAVELENGTH above).  The chief
     problem here is verbosity, as it takes at least three such keywords
     to specify every parameter which can support ranges.  Also, what if
     the parameter is list-valued?  This approach quickly becomes unwieldly.

     The approach proposed in the current SSA spec is to use a range-list
     syntax encoded as the parameter value.  The current proposal suggests
     using a comma delimiter to specify ranges.  In this approach we would
     have "WAVELENGTH=5.1E-6,5.6E-1" and "INITIAL_ENERGY_LEVEL=370000,"
     for the examples above.  This provides a simple way to support equality
     as well as open and closed ranges, while still being easy for client
     code to parse.

     This may be a bit too simplistic as we also need to support list-valued
     parameters in some cases.  The obvious thing here is a list of values
     delimited by commas.  To avoid overloading comma, perhaps we should
     use a different metacharacter for ranges than that used for lists.
     We already have a use-case (for cube access) where we want to be
     able to specify a list of wavelength ranges to filter data along the
     spectral axis.

     This needs further thought.  It is not a hard problem but we should
     come up with a standard way to specify simple range-lists in parameter
     values.


UTYPE usage

     In general UTYPE usage in SLAP looks good (e.g., "ldm:Line.wavelength").
     An issue comes up in section 4.2 where WAVELENGTH_MIN and WAVELENGTH_MAX
     have the *same* UTYPE.  This is not permitted!  UTYPE provides a means
     to unambiguously identify individual interface elements, hence every
     such element must have a unique UTYPE.  UCDs, on the other hand, can be
     the same for multiple elements - the whole point of a UCD is to provide
     a means to say that multiple elements are the same type of value.

     In section 6.1 (standard output fields), the spec states that a field
     MUST have name="wavelength", implying that the value of NAME is used
     to identify the field in the interface.  Again, the purpose of UTYPE is
     to identify interface elements.  The data provide can assign anything
     they want to NAME; the interface should specify the value of UTYPE
     (and probably UCD as well), and the service implementor or data provider
     must return this value.  There are numerous other examples of this
     in the remainder of the section.


I read through the Line data model document but did not have many specific
comments.  It was not always clear what the units for a data model
attribute should be.  The UTYPE would be the data model element name,
e.g., "Line.wavelength", which is consistent with current usage in the
query interface.

 	- Doug



More information about the dal mailing list