Hi Richard, The current revision sounds good to me.
Sorry for the confusion. The "loose dependency" refers to what Mirja said ("... replace it by a few sentences that loosely described the scheme.") Maybe I misunderstood it. I thought Mirja suggested when the RFC7396 is updated in the future, the sentences in this document should also imply the updated specification. What I suggest is that we should use a fixed specification, not an adaptive one. Thanks, Jensen On Thu, Mar 12, 2020 at 12:13 PM Y. Richard Yang <y...@cs.yale.edu> wrote: > - add Adam explicitly. > > Hi Jensen, > > Not sure by loose dependency, what you meant. The current approach is to > revise the current document to include key features/notes of the algorithm. > We will plan to use the change below: > > Old > > > To avoid always sending complete data, a server needs mechanisms to > encode incremental changes. This design uses JSON merge patch as one > mechanism. Below is a non-normative summary of JSON merge patch; see > [RFC7396 <https://tools.ietf.org/html/rfc7396>] for the normative > definition. > > JSON merge patch is intended to allow applications to update server > resources via the HTTP patch method [RFC5789 > <https://tools.ietf.org/html/rfc5789>]. This document adopts > > the JSON merge patch message format to encode incremental changes, > but uses a different transport mechanism. > > Informally, a JSON merge patch object is a JSON data structure that > defines how to transform one JSON value into another. Specifically, > JSON merge patch treats the two JSON values as trees of nested JSON > objects (dictionaries of name-value pairs), where the leaves are > values (e.g., JSON arrays, strings, numbers) other than JSON objects > and the path for each leaf is the sequence of keys leading to that > leaf. When the second tree has a different value for a leaf at a > path, or adds a new leaf, the JSON merge patch tree has a leaf, at > that path, with the new value. When a leaf in the first tree does > not exist in the second tree, the JSON merge patch tree has a leaf > with a JSON "null" value. The JSON merge patch tree does not have an > entry for any leaf that has the same value in both versions. > > As a result, if all leaf values are simple scalars, JSON merge patch > is a quite efficient representation of incremental changes. It is > less efficient when leaf values are arrays, because JSON merge patch > replaces arrays in their entirety, even if only one entry changes. > > Formally, the process of applying a JSON merge patch is defined by > the following recursive algorithm, as specified in [RFC7396 > <https://tools.ietf.org/html/rfc7396>]: > > define MergePatch(Target, Patch) { > if Patch is an Object { > if Target is not an Object { > Target = {} # Ignore the contents and > # set it to an empty Object > } > for each Name/Value pair in Patch { > if Value is null { > if Name exists in Target { > remove the Name/Value pair from Target > } > } else { > Target[Name] = MergePatch(Target[Name], Value) > } > } > return Target > } else { > return Patch > } > } > > Note that null as the value of a name/value pair will delete the > element with "name" in the original JSON value. > > > > New > > To avoid always sending complete data, a server needs mechanisms to > encode incremental changes. This design uses JSON merge patch as one > mechanism. Below is a non-normative summary of JSON merge patch; see > [RFC7396 <https://tools.ietf.org/html/rfc7396>] for the normative > definition. > > JSON merge patch is intended to allow applications to update server > resources via the HTTP patch method [RFC5789 > <https://tools.ietf.org/html/rfc5789>]. This document adopts > > the JSON merge patch message format to encode incremental changes, > but uses a different transport mechanism. > > Informally, a JSON merge patch message consists of a JSON merge patch > object (referred to as a patch in [RFC7396]), which defines > how to transform one JSON value into another using a recursive > merge patch algorithm. > Specifically, the patch is computed by treating two JSON values (first one > being the original, and the second being the updated) as trees > of nested JSON objects (dictionaries of name-value pairs), where the > leaves are values (e.g., JSON arrays, strings, numbers) other than > JSON objects and the path for each leaf is the sequence of keys leading > to that leaf. When the second tree has a different value for a leaf at a > > path, or adds a new leaf, the patch has a leaf, at > that path, with the new value. When a leaf in the first tree does > not exist in the second tree, the JSON merge patch tree has a leaf > with a JSON "null" value. Hence, in the patch, null as the value of > a name/value pair will delete the element with "name" in the original > JSON value. The patch does not have an entry for any leaf that has the same > value in both versions. See the MergePatch pseudocode > > at the beginning of Section 2 of [RFC7396] for the formal specification of > how to apply a given patch. > > As a result, if all leaf values are simple scalars, JSON merge patch > is a quite efficient representation of incremental changes. It is > less efficient when leaf values are arrays, because JSON merge patch > replaces arrays in their entirety, even if only one entry changes. > > > ==== > > If there is an objection, please do let us know. > > Thanks, > Richard > > On Thu, Mar 12, 2020 at 11:30 AM Jensen Zhang <jingxuan.n.zh...@gmail.com> > wrote: > >> Hi Suresh, Mirja and Richard, >> >> To make the content consistent, I agree that we should not duplicate the >> formal specification. But I don't think it should be a loose dependency. >> Personally, I think we should strictly refer to RFC7396, even though it >> could be updated or obsoleted. If it is a loose dependency, an ALTO client >> adopting the old specification may not be compatible with the ALTO server >> adopting the new specification. We should make sure all the clients/servers >> based on this document are compatible in any case. If RFC7396 is updated or >> obsoleted in the future, we can also update this document. >> >> Jensen >> >> >> On Thu, Mar 12, 2020 at 6:23 AM Mirja Kuehlewind <i...@kuehlewind.net> >> wrote: >> >>> Hi Richard, >>> >>> The concern is that RFC7396 could be updated by another RFC or even >>> obsoleted. Therefore duplicating any formal specification should be avoided >>> and it’s actually a feature that people have to look up RFC7396.. I >>> recommend to remove the pseudo code and replace it by a few sentences that >>> loosely described the scheme. >>> >>> Mirja >>> >>> >>> >>> > On 11. Mar 2020, at 21:49, Y. Richard Yang <y...@cs.yale.edu> wrote: >>> > >>> > Dear Suresh, >>> > >>> > Thanks for the review! Please see inline. >>> > >>> > On Wed, Mar 11, 2020 at 12:20 PM Suresh Krishnan via Datatracker < >>> nore...@ietf.org> wrote: >>> > Suresh Krishnan has entered the following ballot position for >>> > draft-ietf-alto-incr-update-sse-20: No Objection >>> > >>> > When responding, please keep the subject line intact and reply to all >>> > email addresses included in the To and CC lines. (Feel free to cut this >>> > introductory paragraph, however.) >>> > >>> > >>> > Please refer to >>> https://www.ietf.org/iesg/statement/discuss-criteria.html >>> > for more information about IESG DISCUSS and COMMENT positions. >>> > >>> > >>> > The document, along with other ballot positions, can be found here: >>> > https://datatracker.ietf.org/doc/draft-ietf-alto-incr-update-sse/ >>> > >>> > >>> > >>> > ---------------------------------------------------------------------- >>> > COMMENT: >>> > ---------------------------------------------------------------------- >>> > >>> > Section 3.1.1.: >>> > I feel strongly that this document should not restate the >>> pseudo-code for the >>> > JSON merge patch algorithm and should instead use a reference to >>> Section 2 of >>> > RFC7396 instead. This will avoid inconsistencies (e.g. note that the >>> pseudo >>> > code in this draft is *already different* from that in RFC7396 even >>> though >>> > the difference is only the braces) and be amenable to updates to >>> RFC7396. >>> > >>> > >>> > This is an interesting discussion point. In an earlier version, the >>> authors had some back-and-forth on including the pseudo-code or not. The >>> "include" argument "won" because it makes the document more self-contained >>> and a potentially more pleasant read---a reader does not need to track down >>> a separate document to find the pseudo-code, and we are referring to a >>> "fixed" document---I can see your argument that there can be Errata/Update >>> to the RFC7396 pseudocode. It is amazing that you caught the difference in >>> braces vs : ! One proposal is that we change to the exact format (replace >>> braces with {) as in RFC 7396 and keep the pseudocode. Or let the coauthors >>> discuss a bit more and get a conclusion in the next couple of days. How >>> does this sound? >>> > >>> > References: >>> > >>> > Is there a reason this document is using the obsoleted JSON reference >>> to >>> > RFC7159? Suggest updating the reference to RFC8259. >>> > >>> > >>> > Good catch. We are updating to RFC 8259. Thanks! >>> > >>> > Thanks again. >>> > Richard >>> >>> _______________________________________________ >>> alto mailing list >>> alto@ietf.org >>> https://www.ietf.org/mailman/listinfo/alto >>> >>
_______________________________________________ alto mailing list alto@ietf.org https://www.ietf.org/mailman/listinfo/alto