<div dir="auto">I have to apologize for not having followed the discussion, being too busy with other subjects. <div dir="auto">But it occurred to me, as we are starting to use DataCite DOIs for data citation, that the DataCite metadata contains some provenance items, too. </div><div dir="auto">Did anyone look to see whether the WD  proposal is consistent with those items? </div><div dir="auto"><br></div><div dir="auto">Cheers, </div><div dir="auto"><br></div><div dir="auto">  - Arnold </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Oct 16, 2017 4:50 PM, &quot;Kristin Riebe&quot; &lt;<a href="mailto:kriebe@aip.de">kriebe@aip.de</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Markus, DM,<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I think that would be a good thing altogether;  declaring proper<br>
licenses might seem a fairly un-academic exercise and pretty much is<br>
until you want to revive an orphaned dataset and get into trouble<br>
with your legal department.  Or until you want a part of the data be<br>
included with &lt;popular software package of your choice&gt;.<br>
<br>
ProvDM would be the natural place to have that.  VOResource 1.1<br>
already has some language on this, and it&#39;d be great if we could sync<br>
this between Provenance and Registry.<br>
</blockquote>
<br>
Okay, we could give it a try. I&#39;ve put it on the TODO list at the wiki page. (Just a reminder, it&#39;s <a href="http://wiki.ivoa.net/twiki/bin/view/IVOA/ObservationProvenanceDataModel" rel="noreferrer" target="_blank">http://wiki.ivoa.net/twiki/bin<wbr>/view/IVOA/ObservationProvenan<wbr>ceDataModel</a>.)<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
happen.  Are you absolutely sure you can&#39;t fix WasGeneratedBy/Used to<br>
cover what WasDerivedFrom is designed to do and then drop<br>
WasDerivedFrom?<br>
</blockquote>
[...]<br>
The main difference is: not every input of an activity that generated an<br>
entity will automatically have a &quot;WasDerivedFrom&quot;, it&#39;s semantically<br>
different. E.g. an image is usually &quot;derived from&quot; another image, but not<br>
from &quot;auxiliary&quot; input like a configuration file or a parameter (which were<br>
also used as input from the generating activity).<br>
</blockquote>
<br>
Hm -- why not?  I don&#39;t really see a use case to treat them<br>
differently: Dependency modeling, debugging, giving credit -- isn&#39;t<br>
for all of these the configuration file pretty much the same as the<br>
raw instrument output (say)?<br>
</blockquote>
<br>
Well, I think that &#39;wasDerivedFrom&#39; is meant to be used to just give you the main track, i.e. the main progenitors. So I expect a wasDerivedFrom relationship only to those input files of the generating activity that are the main inputs. E.g. if an image is corrected using a dark frame, then the image was derived from the raw image, not from the dark frame. But the raw image and dark frame are both inputs.<br>
<br>
Here&#39;s another use case for wasDerivedFrom:<br>
Imagine that you have two input images i1, i2 and two result images o1 and o2 for an activity. The wasDerivedFrom relationship can then tell you that o1 was derived from i1 and o2 from i2 (and not o1 from i2 or so). So it&#39;s adding more information.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
In principle (i.e. I think it should work, but haven&#39;t really tried it in an<br>
implementation with realistic data) the &quot;role&quot; attribute to Used and<br>
WasGeneratedBy, together with the corresponding links to description classes<br>
can be used to express which entity was derived from which progenitor<br>
entity, even without the explicit WasDerivedFrom link. But doing it this way<br>
would be a huge overhead for those use cases where description classes are<br>
not needed.<br>
</blockquote>
<br>
I&#39;m not sure I understand how that overhead comes about -- is it<br>
because you can define dependencies in bulk in the description?<br>
<br>
Perhaps an example might help here?<br>
</blockquote>
<br>
I need more time to work out a good example. The idea is, that you can predefine the expected input and output datatypes for each activity using ActivityDescription, EntityDescription and their relations.<br>
And thus you know which of the input data is auxiliary data/config file/dark frame/raw image/..., which is indicated by the role-attribute of the corresponding used-relation. This can help to find out which data entity is progenitor of another, even without the wasDerivedFrom relationship.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Similarly: what if you are not interested in the actual processing step, but<br>
just want to record that one image was derived from another, without any<br>
further information? (e.g. copying process, simple format conversion). If we<br>
insist on using the Used/WasGeneratedBy construct always, then even for<br>
those simple cases one needs to define &quot;empty&quot; activities, which then<br>
blow-up the serialisations.<br>
</blockquote>
<br>
True.  But that may be a price worth paying if it streamlines client<br>
code (that presumably would have to re-introduce the empty activities<br>
when parsing such declarations, or their code will be rife with<br>
special cases) and, in particular, query patterns in ProvTAP (where<br>
two different ways to do the same thing usually require UNION, which<br>
ADQL 2.0 doesn&#39;t have and that&#39;s a long way from becoming mandatory<br>
in any form).<br>
</blockquote>
<br>
Yeah, see, I always had only the serialization formats like PROV-JSON in mind, which could be put into the header of a file to keep the provenance information with the data. And I imagine how ugly that serialization looks with empty entities/activities all over the place and all the additional relation entries which are then required.<br>
<br>
But yes, multiple ways to do things are making TAP queries much harder (UNION, *sigh* ...).<br>
<br>
Hm - just another thought: imagine we drop wasDerivedFrom and wasInformedBy from the model. Could we then just re-introduce wasDerivedFrom/wasInformedBy only in the serializations (for those cases with empty in-between activities/entities), since wasDerivedFrom is a valid construct in W3C serializations? So we just use it in order to optimize serializations? Would that make any sense or confuse everyone completely?<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Also, W3C tools can interprete WasDerivedFrom-relations (since it&#39;s borrowed<br>
from W3C), but wouldn&#39;t be able to &quot;understand&quot; it, if it&#39;s hidden in the<br>
roles and description classes.<br>
</blockquote>
<br>
That&#39;s a serious issue.  The problem with the description classes I<br>
understand, but that I think is a minor issue; whatever progenitor is<br>
declared in a description class is probably largely formal in the<br>
first place (as all instances depend on it).<br>
<br>
The problem with the roles I don&#39;t understand, but probably because I<br>
don&#39;t really know much about the different models.  <br>
</blockquote>
<br>
You could specify in the descriptions that the input data with used.role=&#39;r1&#39; is the progenitor of the output data with wasGeneratedBy.role=&#39;r2&#39;. A VO client may gain knowledge about this, but a W3C tool wouldn&#39;t know about the special meanings of these roles, and thus couldn&#39;t give any information about direct progenitors of the output data.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
But doesn&#39;t the<br>
W3C have similar problems, too?  Why can&#39;t we do as they do?<br>
</blockquote>
<br>
If we do it as in the W3C model, then we need to keep wasDerivedFrom and wasInformedBy.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
We introduced WasInformedBy (again borrowed from W3C) based on use cases<br>
that describe pipelines, chains of activities, where defining and recording<br>
the intermediate entities is not needed. In that sense, WasInformedBy is a<br>
short-cut to Used/WasGeneratedBy again, but in contrast to WasDerivedFrom it<br>
does not provide any further insights. It&#39;s really just meant to be used as<br>
a short-cut when intermediate entities are unimportant.<br>
</blockquote>
<br>
But can&#39;t this be replaced by a single Activity then, taking the<br>
inputs of the first pipeline element as inputs and producing the<br>
output(s) of the last pipeline element?  How would that be more<br>
complicated?<br>
</blockquote>
<br>
Yes, that can be done and that&#39;s what the &quot;ActivityFlow&quot; is used for. Its individual steps (activities) may be important, however, in order to know what has been done to the input dataset and in which order. Here the hadStep relations are used to link member-activities with their activityFlow and wasInformedBy is used to chain the member-activities together in the correct order.<br>
<br>
E.g. If I want to retrieve all images from a database where dark frame is subtracted, then I could search for all entities which at some point in their history had an activity of type &#39;dark frame correction&#39; or similar. But if there is just one activity &#39;calibration&#39;, then I am missing the finer details (which calibrations steps were done).<br>
<br>
Ok, maybe we could also come up with a standard way how to put all the attributes and parameters of individual steps into one big activity (in the case that minor steps are unimportant) in order to make still visible what happened to the data without explicitly modelling these steps ... I think we need more examples from use cases to decide this.<br>
<br>
Cheers,<br>
Kristin<br>
<br>
-- <br>
------------------------------<wbr>-------------------------<br>
Dr. Kristin Riebe<br>
Press and Public Outreach<br>
<br>
Email: <a href="mailto:kriebe@aip.de" target="_blank">kriebe@aip.de</a>, <a href="mailto:webmaster@aip.de" target="_blank">webmaster@aip.de</a><br>
Phone: <a href="tel:%2B49%20331%207499-377" value="+493317499377" target="_blank">+49 331 7499-377</a><br>
Room:  Bib/3<br>
------------------------------<wbr>-------------------------<br>
Leibniz-Institut für Astrophysik Potsdam (AIP)<br>
An der Sternwarte 16, D-14482 Potsdam<br>
Vorstand: Prof. Dr. Matthias Steinmetz, Matthias Winker<br>
Stiftung bürgerlichen Rechts<br>
Stiftungsverzeichnis Brandenburg: 26 742-00/7026<br>
------------------------------<wbr>-------------------------<br>
</blockquote></div></div>