<div dir="ltr"><div><div><div><div><div>Markus,<br><br></div><div>It's great to see feedback from implementation! <br></div><div>I'm not sure how this folds into the process.. you raise some new points here.<br><br></div><div>Many of your concerns seem to stem from this document not including some of<br></div><div>the improvements/benefits of the cube and vo-dml work which has occurred since<br></div><div>this document first went through PR. It is true, this document reflects the state<br></div><div>of things as of a couple years ago, and the requirements placed upon the <br></div><div>generation of this version in general. Things have progressed quite a bit since<br></div><div>then and are reflected in the newer (cube) documents. <br><br></div><div>The priority for the DM group right now is the Cube model, so I can't spend too<br></div><div>much time iterating on this document.</div><div><br></div><div>A note about SSA vs SDM.<br></div><div> SDM (1 or 2) is the model for a Spectrum instance.<br></div><div> SSA is an access protocol for discovering said instances.<br><br></div>SDM does not use/reuse any elements from SSA. SSA makes use of SDM.<br></div>As such, utype changes in SDM can make for an incompatiblity with the SSA<br></div>protocol since it tied its definition of the query response so directly to the model. <br>This is one reason why it was mandated that this revision of the model should <br>have 'minimal impact on UTypes'.<br></div></div><br><div><div>Some responses below:<br><div><div><div><div><br></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Feb 18, 2015 at 9:55 AM, Markus Demleitner <span dir="ltr"><<a href="mailto:msdemlei@ari.uni-heidelberg.de" target="_blank">msdemlei@ari.uni-heidelberg.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Dear DM,<br>
<br>
I've finally added support for the spectral data model 2 to DaCHS, which<br>
actually means DaCHS can now generate spectra in VOTable that I kinda<br>
hope confrom to the SDM2 from from SSA metadata and matching data.<br>
Note that I'm not using any of the new features, in particular not the<br>
photometryPoint.<br>
<br>
This is based on current support of SDM1 (in VOTable and FITS) -- what<br>
few clients support SDM1 appear to have been ok with what it has been<br>
producing.<br>
<br>
The actual implementation was mainly replacing some utypes and removing<br>
some of the more baroque aspects of SDM1 (like the XML namespace<br>
declaration for the utype prefix). And then a bit to let people ask<br>
for SDM2.<br>
<br>
The following is a report on my experiences during implementation. I'm<br>
sorry I've not found time to do this during public review -- I'm taking<br>
my Registry chair hat off for this, and none of this is meant as part of<br>
TCG review. So, consider this an extremely late part of public review.<br>
<br>
My first challenge was: How do I let people tell me they want SDM2<br>
files? I've been equating application/x-votable+xml with SDM1 files,<br>
so I can't really use that. Having a (more or less) proper media<br>
type for SDM2 is IMHO important in many settings, however (think<br>
ObsCore). I'm now using<br>
<br>
application/x-votable+xml;content=spec2<br>
<br></blockquote><div><br></div><div>I think this is an SSA question, outside the scope of SDM.<br></div><div><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
-- I think the document should codify that (or something similar), or<br>
clients can't really figure out what's in a VOTable spectrum (before<br>
downloading it). For me, this media type is an option in the AccessData<br>
services' FORMAT parameter.<br>
<br>
So, you can now pull such spectra from the Heidelberg spectral services<br>
using datalink data access services. As client support for that is<br>
thin, here are a two direct links to randomly selected spectra<br>
generated in that way -- absent a validator I appreciate any hints<br>
what I'm doing wrong:<br>
<br>
A plain, observational spectrum:<br>
<br>
<a href="http://dc.g-vo.org/flashheros/q/sdl/dlget?ID=ivo%3A//org.gavo.dc/%7E%3Fflashheros/data/ca92/f0006.mt&FORMAT=application/x-votable%2Bxml%3Bcontent%3Dspec2" target="_blank">http://dc.g-vo.org/flashheros/q/sdl/dlget?ID=ivo%3A//org.gavo.dc/%7E%3Fflashheros/data/ca92/f0006.mt&FORMAT=application/x-votable%2Bxml%3Bcontent%3Dspec2</a><br>
<br>
A plain, theoretical spectrum (more on this below; this is known<br>
non-compliant due since position in space and time are required in<br>
SDM2):<br>
<br>
<a href="http://dc.g-vo.org/theossa/q/sdl/dlget?ID=ivo%3A%2F%2Fwww.g-vo.org%2Ftheossa%2Fq%2Fdata%2F0038000_5.70_H_9.968E-01_HE_3.167E-03_02000-03000A_2008-08-02_07_20_01&FORMAT=application/x-votable%2Bxml%3Bcontent%3Dspec2" target="_blank">http://dc.g-vo.org/theossa/q/sdl/dlget?ID=ivo%3A%2F%2Fwww.g-vo.org%2Ftheossa%2Fq%2Fdata%2F0038000_5.70_H_9.968E-01_HE_3.167E-03_02000-03000A_2008-08-02_07_20_01&FORMAT=application/x-votable%2Bxml%3Bcontent%3Dspec2</a><br>
<br>
The "plain" above refers to my original hope that SDM2 would let me<br>
properly write Echelle spectra. Here's an example for my improvised<br>
Echelle-as-sequence-of-almost-SDM1 hack -- I understand this is not in<br>
scope for SDM2, but frankly I'd love to be corrected:<br>
<a href="http://dc.g-vo.org/flashheros/q/echdl/dlget?ORDER_MAX=114&ORDER_MIN=112&ID=ivo%3A%2F%2Forg.gavo.dc%2F%7E%3Fflashheros%2Fdata_raw%2Fls95%2Fblue%2Fn0043.mt" target="_blank">http://dc.g-vo.org/flashheros/q/echdl/dlget?ORDER_MAX=114&ORDER_MIN=112&ID=ivo%3A%2F%2Forg.gavo.dc%2F%7E%3Fflashheros%2Fdata_raw%2Fls95%2Fblue%2Fn0043.mt</a><br>
<br></blockquote><div><br></div><div>I don't believe this model can accommodate Echelle spectra. It is something I'd like to address too, since it's been on the list for so long. The priority now is the Cube work. With that done, representing Spectrum ('plain' or Eschelle) and TimeSeries, in terms of a common framework should be pretty straight forward.<br> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Then, here's a list of issues I encountered during this work:<br>
<br>
<br>
(1) 2.1.7 Dataset.dataID:DataID promises 2.6 would talk about "any<br>
associations with various collections" -- does it? I'm asking because I<br>
was considering including SSA's association metadata (I'm not saying it<br>
should be included, but I'm wondering). If this is a remnant of earlier<br>
modelling, I suggest removing it. If "any associations" refers to<br>
DataID.collection, shouldn't that be made explicit?<br>
<br></blockquote><div><br></div><div>The text in 2.1.7 is a high level description of what the DataID object does<br>in this particular context. In this case, it simply summarizes the content of<br>the object. <br><br>Section 2.6 describes the DataID object, where:<br>"high level identification metadata" = title, datasetID, creatorDID, observationID, etc.<br></div><div>"associations with various collections" => collection<br><br></div><div>I'm not real familiar with it, but it looks like the SSA Association object is an element <br></div><div>of the query response for grouping various datasets in the response. <br></div><div><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
(2) Like SSA, SDM2 has both DataID.Version and Curation.Version. Here's<br>
what the explanation in SDM2 is:<br>
<br>
2.4.5 Curation.version:string<br>
Version is provided by the publisher or creator and may be any string.<br>
(RM:Curation.Version)<br>
<br>
2.6.7 DataID.version:string<br>
Version of the creator-produced dataset.<br>
<br>
As an implementor, I'd certainly appreciate some guidance as to what the<br>
difference between the two is and what scenarious for using one or<br>
the other might be.<br></blockquote><div><br></div><div>As I mentioned on the twiki, I don't know what the difference is. I assume it accommodates<br></div><div>a scenario like:<br></div><div> + creator processes observation; releases version 1.<br></div><div> + data reprocessed (multiple times?).. generates version 4<br></div><div> + data provider receives dataset (for the first time)<br></div><div> Curation.version == '1'<br></div><div> DataID.version == '4'<br><br></div><div> + curator modifies/updates some curation metadata (maybe their dataset id?)<br></div><div> Curation.version == '2'<br></div><div> DataID.version == '4'<br></div><div> <br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
(3) In a similar vein, it would be useful to explain why Derived.varAmpl<br>
is there when AFAICS we don't actually talk about time series anywhere<br>
else (incidentally, the explanation in 2.11.6 detailing why there's<br>
Target.redshift and Derived.redshift is a good example for the sort of<br>
explanation that's really helpful for implementors).<br></blockquote><div><br></div><div>There has been no previous request to remove it. In the cube work, there<br></div><div>is/will be more discussion on the Derived object modeling to allow more <br></div><div>flexibility ( these 3 items are not universally relevant ). <br><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
(4) What are the CoordSys.ID and the other STC IDs supposed to do?<br>
Where would I reference them from? I also couldn't figure out what I<br>
might want to do with CoordFrame -- some indication would be great.<br>
<br></blockquote><div>This is the tag used to reference the coordinate system. In cube/vo-dml<br></div><div>work, this would not be a modeled element, but rather a property of the <br></div><div>object. It would NOT have a UType. The definition in this document is <br></div><div>unchanged from the current REC.<br></div><div><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
(5) Why is it CalibStatus in Char.SpectralAxis.CalibStatus but<br>
Char.(TimeAxis|FluxAxis|SpatialAxis).CalibrationStatus otherwise? (and<br>
is it actually worth the trouble to rename this from SSA's Calibration?)<br>
<br></blockquote><div>ERGH! can't believe I missed one. All references to CalibStatus in Utypes and<br></div><div>text (including SpectralAxis description in section 4.11) are using CalibrationStatus<br></div><div>now in order to be more consistent with Characterisation (the owner of those<br></div><div>components), and ObsCore (1.1.. not the current REC).<br><br> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
(6) This one is really important to me, and for this one I could as<br>
well put my Registry chair hat on -- SDM1 and SDM2 utypes are<br>
different, and they should be discernable without context (e.g., in the<br>
utype column in TAP_SCHEMA or VOResource). Hence, the "prefix" (or<br>
whatever preferred terminology you have for the thing in front of a<br>
colon in legacy utypes) *must not* be spec. I'm now using spec2 in my<br>
implementation, and something like this will need to go to 7.1.1. I<br>
don't know about 8.1.1, but I have a bad feeling about the photometry DM<br>
using photdm and SDM2 using phot. IMHO that's inviting confusion, and<br>
I'd much prefer if we had, say, photpoint here.<br>
<br></blockquote><div>Hmm. I hadn't expected the prefix to change for every version of any given<br>model. The DataModel object would tell the user which model/version was being used.<br></div><div>NOTE: This is another element which the vo-dml process improves. The<br></div><div>DataModel element is absorbed as a property of the dataset. At that point, the<br></div><div>user would need to interpret the 'Model' description in the votable.<br><br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
(7) Char.SpatialAxis.SamplingPrecision.SamplingPrecisionRefval.fillFactor<br>
and its three friends -- this is mapped from SSA's<br>
Char.SpatialAxis.SamplingPrecision.fillFactor, and I give you both are<br>
not beauties. But frankly, given that char2 isn't REC yet, maybe we<br>
don't have to blindly follow this. Doesn't anyone else feel a utype<br>
with almost 80 characters and "SamplingPrecision" twice in it is an<br>
indication that we're doing it wrong?<br>
<br></blockquote><div>The changes here bring Spectrum in line with Characterisation (which owns<br></div><div>those elements). It was a major goal/effort to improve the consistency <br></div><div>between the models, so that a proper separation of concerns could happen<br></div><div>in the next pass (Cube).<br></div><div><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
(8) I'm still entirely at a loss as to what to do with mandatory spatial<br>
axis coverage (both value and extent) and mandatory time axis start and<br>
stop. I have lots of theoretical spectra, for which these make no sense<br>
at all. Should I now write invalid SDM instances or give up on it for<br>
theoretical spectra? And what's the rationale for disallowing them?<br>
<br>
(9) A minor thing, but for, e.g., comparing with other utype lists,<br>
having the list in Appendix A sorted strictly (and not only<br>
approximately) alphabetically would be nice.<br>
<br></blockquote><div>I can see your point here, but a strictly alphabetical list would be awkward in <br></div><div>other cases ( Char.*Axis.Name|ucd|unit would be distributed oddly within the complex objects).<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
(10) It seems a bit weird to me to annotate both RESOURCE and TABLE with<br>
utype="spec2:Spectrum" -- even if I'm not quite sure what legacy utypes<br>
really point to, it seems unwise to point to the same thing from<br>
two fundamentally different entities.<br>
<br>
(11) I'm still uncertain if it's a good idea to have both<br>
spec2:Curation.PublisherDID and spec2:DataID.DatasetID; I don't even want<br>
to imagine circumstances in which the two would be different (also keep<br>
in mind that there's creatorDID on top of these two). If we keep them,<br>
I'd suggest to have the (at least so far) far more common<br>
ssa:Curation.PublisherDID in the example rather than, as now,<br>
DataID.DatsetID.<br>
<br>
Also (and you might again notice my Registry hat behind my back), I'd<br>
of course like to change the "unique within the namespace controlled<br>
by the publisher" in 2.4.3. We're using IVORNs here specifically<br>
such that pubDIDs are unique within the entire VO. If I understand<br>
the provenance of these items the difference between PublisherDID and<br>
DatasetID was intended to be in persistence, not uniqueness.<br>
<br>
(12) I'm unhappy that the way to serialise list-valued items --<br>
repeating PARAMS, as shown for spec:DataId.Collection in the example --<br>
isn't actually properly defined anywhere. This needs discussion (in the<br>
document) as I'd claim the instinct of most people would have been to<br>
put at least atomic values into an array or a single PARAM. Also, I<br>
think it needs to be stressed (somewhere) that in consequence,<br>
multiple PARAMs with identical utypes may occur.<br>
<br></blockquote><div> </div><div>I think this serialization is in line with where the vo-dml serialization <br></div><div>convention is going... and consistent with the description you were <br></div><div>advocating for the attribute.<br></div><div>A (singular) collection is a string PARAM<br></div><div>The DataID.collection attribute can have >1 of these.<br><br></div><div>If instead, collection were a complex object instead of a string.. then<br></div><div>each instance of collection would be a GROUP containing the content<br></div><div>of that object.<br><br></div><div>The multiplicity issue is described in the "Serialization Issues" section <br></div><div>in the end. The possibility of UTypes occuring multiple times has always<br></div><div>existed, and was one of the drivers for the UTypes work.. wasn't it?<br><br><br><br></div></div><br></div></div></div></div></div></div></div></div></div>