- From: James Cheney <jcheney@inf.ed.ac.uk>
- Date: Tue, 22 Jan 2013 17:52:24 +0000
- To: Tom De Nies <tom.denies@ugent.be>
- Cc: Provenance Working Group <public-prov-wg@w3.org>
- Message-Id: <3B23092D-E143-4223-866C-79EE5E35D6EA@inf.ed.ac.uk>
('binary' encoding is not supported, stored as-is)
Hi, Here are my review comments. --James > Questions for reviewers > - Is the notation of Dictionary concepts clear & acceptable for you? (in PROV-N, PROV-O and/or PROV-XML) Yes > - Are the constraints acceptable, or are they too loose/too strict? See below > -- In particular, can the constraint "IF derivedByRemovalFrom(d2, d1, {"k1"}) THEN hadDictionaryMember(d1, e1, "k1") " be dropped, or do you strongly support it? Happy with dropping it > - Is the name PROV-DICTIONARY appropriate for the document? Yes > - Can this be released as a first public working draft? Yes, unless suggestions are controversial. I think this is a reasonable working draft for the purpose of getting feedback from potential adopters. The constraints need some work, but this does not need to be ironclad at this stage. > - If not, where are the blocking issues? > - If yes, are there other issues to work on? See suggestions below. === Detailed review === General things: 1. The syntax for insertion and deletion allows multiple keys to be inserted or deleted at once, but in several places the document considers only the special case of a single insertion or deletion. It isn't always obvious how to generalize to handle arbitrary multiple insertions or deletions (if this is intended) 2. It would be nice if the constraints/inferences had names or numbers. 3. The superscripts op and dp, and other conventions from the prov-o CR, are not explained locally; please mention where these are explained. Constraints: -- > IF hadDictionaryMember(d1, e1, "k1") and derivedByInsertionFrom(d2, d1, {("k2", _e2)}) and k1 ≠ k2 THEN hadDictionaryMember(d2, e1, "k1") In general this could be IF hadDictionaryMember(d1, e, "k") and derivedByInsertionFrom(d2, d1, {("k1",e1),…,("kn",en)}) and k \notin {k1,…,kn} THEN hadDictionaryMember(d2, e, "k") -- > IF hadDictionaryMember(d1, e1, "k1") and derivedByInsertionFrom(d2, d1, {("k1", e2)}) THEN hadDictionaryMember(d2, e2, "k1")) > This constraint is a special case of the next one: > IF derivedByInsertionFrom(d2, d1, {("k1", e1)}) THEN hadDictionaryMember(d2, e1, "k1") The above constraint could be generalized to: IF derivedByInsertionFrom(d2, d1, {("k1", e1),…,("kn",en)}) THEN hadDictionaryMember(d2, ei, "ki") (for each i in [1..n]). -- > IF derivedByRemovalFrom(d2, d1, {"k1"}) THEN hadDictionaryMember(d1, e1, "k1") can likewise be generalized. However, it is also proposed for deletion, which is fine with me too. -- > IF derivedByInsertionFrom(d2, d1, {_("k1", e1)}) THEN wasDerivedFrom(d2, d1) > > IF derivedByRemovalFrom(d2, d1, {_"k1"}) THEN wasDerivedFrom(d2, d1) > These can both be immediately generalized to arbitrary key-value sets or key sets. I think the underscores above are typos, though. -- > IF derivedByInsertionFrom(d2, d1, {("k1", _e1)}) and derivedByRemovalFrom(d3, d2, {"k1"}) THEN hadDictionaryMember(d1, e2, "k2") holds IF AND ONLY IF hadDictionaryMember(d3, e2, "k2") Two potential problems: 1. You need to be careful here, because if k1 = k2 then there is no reason to believe that its value will be the same in d1 and d3, as it has been deleted and then re-inserted with a potentially different entity value. 2. This inference has more complex structure than those in the constraints. I think you mean: IF derivedByInsertionFrom(d2, d1, {("k1", _e1)}) and derivedByRemovalFrom(d3, d2, {"k1"}) THEN (for all k2, e2. hadDictionaryMember(d1, e2, "k2") holds IF AND ONLY IF hadDictionaryMember(d3, e2, "k2") This potentially goes beyond the formalism we have been using in the constraints, but I think you can decompose it into the two constraints, which (I think) have the same effect: IF derivedByInsertionFrom(d2, d1, {("k1", _e1)}) and derivedByRemovalFrom(d3, d2, {"k1"}) and hadDictionaryMember(d1, e2, "k2") and k1 \neq k2 THEN hadDictionaryMember(d3, e2, "k2") IF derivedByInsertionFrom(d2, d1, {("k1", _e1)}) and derivedByRemovalFrom(d3, d2, {"k1"}) and hadDictionaryMember(d3, e2, "k2") and k1 \neq k2 THEN hadDictionaryMember(d1, e2, "k2") Alternatively, this constraint could be dropped, as previous constraints allow us to reason about the contents of a dictionary after an insertion and deletion of the same key. This should avoid both problems. -- > IF derivedByRemovalFrom(d2, d1, {_"k1"}) and derivedByInsertionFrom(d2, d1, {_("k2", e2)})THEN INVALID This is also fine if you allow an arbitrary insertion and deletion set. -- > IF IF derivedByInsertionFrom(d2, d1, {_("k1", e1)}) and derivedByInsertionFrom(d2, d1, {_("k2", e2)})THEN INVALID Extra "IF", unnecessary underscores > IF derivedByRemovalFrom(d2, d1, {_"k1"}) and derivedByRemovalFrom(d2, d1, {_"k2"})THEN INVALID Unnecessary uderscores. Also, I think the above two constraints might really be functional dependencies in disguise. That is, would IF derivedByInsertionFrom(d2, d1,KV1) and derivedByInsertionFrom(d2, d1, KV2) THEN KV1 = KV2 IF derivedByRemovalFrom(d2, d1, K1) and derivedByRemovalFrom(d2, d1, K2)THEN K1=K2 be acceptable instead? If so, that is sensible as a first step, but considering equalities on sets of keys/KV pairs is a potential complication. -- > IF hadDictionaryMember(d, e1, "k1") and 'prov:EmptyDictionary' ∈ typeOf(d)THEN INVALID This seems to follow already from the earlier inference (hadDictionaryMember implies hadMember) and the fact that an empty dictionary is an empty collection. I don't see a problem with making it explicit, though. -- Minor things: > prov:EmptyDictionary is a subtype of prov:EmptyCollection. It denotes an empty dictionary. And a subtype of prov:Dictionary, right? This seems to be said in the ontology later. > Thus, :c3 does not contain the members ("k1", :e1) and ("k2", :e2( from :c2. On Jan 16, 2013, at 8:17 AM, Tom De Nies <tom.denies@ugent.be> wrote: > Hi everyone, > > Our apologies that this mail did not go out sooner. We had some trouble with our university mailing server, and couldn't send any mails anymore from our approved email addresses. > I sent an email to the list from another address on Friday, but apparently it didn't get through. > > PROV-DICTIONARY is now ready for internal review. > This document is on the NOTE track, and we'd like to publish a working draft by the time the RECs go to PR. > > The latest editor's draft is here: https://dvcs.w3.org/hg/prov/raw-file/default/dictionary/prov-dictionary.html#dictionary-xml-schema > > The following people volunteered for reviewing the document: Paolo, Stian, James (maybe), Luc, and Paul, but others are also welcome to review of course. > If you only have bandwidth to review part of the document (e.g. only the ontology section), that could be useful as well. > > Questions for reviewers > - Is the notation of Dictionary concepts clear & acceptable for you? (in PROV-N, PROV-O and/or PROV-XML) > - Are the constraints acceptable, or are they too loose/too strict? > -- In particular, can the constraint "IF derivedByRemovalFrom(d2, d1, {"k1"}) THEN hadDictionaryMember(d1, e1, "k1") " be dropped, or do you strongly support it? > - Is the name PROV-DICTIONARY appropriate for the document? > - Can this be released as a first public working draft? > - If not, where are the blocking issues? > - If yes, are there other issues to work on? > > In your review please include ISSUE-614 > > Due to the delay in sending this notification, I suggest we allow a little more time to review the document. > We propose the due date for review to be on Wednesday the 23rd, so that we can vote on the revised document on the 24th. > > Thanks in advance to all the reviewers. > > Regards, > Tom & Sam
The University of Edinburgh is a charitable body, registered in Scotland, with registration number SC005336.
Received on Tuesday, 22 January 2013 17:52:50 UTC