<div dir="ltr"><div><div><div><div><div>Markus,<br><br></div><div>It&#39;s great to see feedback from implementation! <br></div><div>I&#39;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&#39;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 &#39;minimal impact on UTypes&#39;.<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">&lt;<a href="mailto:msdemlei@ari.uni-heidelberg.de" target="_blank">msdemlei@ari.uni-heidelberg.de</a>&gt;</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&#39;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&#39;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&#39;m<br>
sorry I&#39;ve not found time to do this during public review -- I&#39;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&#39;ve been equating application/x-votable+xml with SDM1 files,<br>
so I can&#39;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&#39;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&#39;t really figure out what&#39;s in a VOTable spectrum (before<br>
downloading it).  For me, this media type is an option in the AccessData<br>
services&#39; 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&#39;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&amp;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&amp;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&amp;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&amp;FORMAT=application/x-votable%2Bxml%3Bcontent%3Dspec2</a><br>
<br>
The &quot;plain&quot; above refers to my original hope that SDM2 would let me<br>
properly write Echelle spectra.  Here&#39;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&#39;d love to be corrected:<br>
<a href="http://dc.g-vo.org/flashheros/q/echdl/dlget?ORDER_MAX=114&amp;ORDER_MIN=112&amp;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&amp;ORDER_MIN=112&amp;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&#39;t believe this model can accommodate Echelle spectra.  It is something I&#39;d like to address too, since it&#39;s been on the list for so long. The priority now is the Cube work.  With that done, representing Spectrum (&#39;plain&#39; 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&#39;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 &quot;any<br>
associations with various collections&quot; -- does it?  I&#39;m asking because I<br>
was considering including SSA&#39;s association metadata (I&#39;m not saying it<br>
should be included, but I&#39;m wondering).  If this is a remnant of earlier<br>
modelling, I suggest removing it.  If &quot;any associations&quot; refers to<br>
DataID.collection, shouldn&#39;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>&quot;high level identification metadata&quot; = title, datasetID, creatorDID, observationID, etc.<br></div><div>&quot;associations with various collections&quot; =&gt; collection<br><br></div><div>I&#39;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&#39;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&#39;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&#39;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 == &#39;1&#39;<br></div><div>      DataID.version == &#39;4&#39;<br><br></div><div>   + curator modifies/updates some curation metadata (maybe their dataset id?)<br></div><div>      Curation.version == &#39;2&#39;<br></div><div>      DataID.version == &#39;4&#39;<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&#39;t actually talk about time series anywhere<br>
else (incidentally, the explanation in 2.11.6 detailing why there&#39;s<br>
Target.redshift and Derived.redshift is a good example for the sort of<br>
explanation that&#39;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&#39;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&#39;s Calibration?)<br>
<br></blockquote><div>ERGH! can&#39;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 &quot;prefix&quot; (or<br>
whatever preferred terminology you have for the thing in front of a<br>
colon in legacy utypes) *must not* be spec.  I&#39;m now using spec2 in my<br>
implementation, and something like this will need to go to 7.1.1.  I<br>
don&#39;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&#39;s inviting confusion, and<br>
I&#39;d much prefer if we had, say, photpoint here.<br>
<br></blockquote><div>Hmm.  I hadn&#39;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 &#39;Model&#39; 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&#39;s<br>
Char.SpatialAxis.SamplingPrecision.fillFactor, and I give you both are<br>
not beauties.  But frankly, given that char2 isn&#39;t REC yet, maybe we<br>
don&#39;t have to blindly follow this.  Doesn&#39;t anyone else feel a utype<br>
with almost 80 characters and &quot;SamplingPrecision&quot; twice in it is an<br>
indication that we&#39;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&#39;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&#39;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=&quot;spec2:Spectrum&quot; -- even if I&#39;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&#39;m still uncertain if it&#39;s a good idea to have both<br>
spec2:Curation.PublisherDID and spec2:DataID.DatasetID; I don&#39;t even want<br>
to imagine circumstances in which the two would be different (also keep<br>
in mind that there&#39;s creatorDID on top of these two).  If we keep them,<br>
I&#39;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&#39;d<br>
of course like to change the &quot;unique within the namespace controlled<br>
by the publisher&quot; in 2.4.3.  We&#39;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&#39;m unhappy that the way to serialise list-valued items --<br>
repeating PARAMS, as shown for spec:DataId.Collection in the example --<br>
isn&#39;t actually properly defined anywhere. This needs discussion (in the<br>
document) as I&#39;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 &gt;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 &quot;Serialization Issues&quot; 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&#39;t it?<br><br><br><br></div></div><br></div></div></div></div></div></div></div></div></div>