Re: [core] YANG list to CBOR mapping
peter van der Stok <stokcons@xs4all.nl> Mon, 23 November 2015 08:58 UTC
Return-Path: <stokcons@xs4all.nl>
X-Original-To: core@ietfa.amsl.com
Delivered-To: core@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0F27D1B3860 for <core@ietfa.amsl.com>; Mon, 23 Nov 2015 00:58:09 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.702
X-Spam-Level:
X-Spam-Status: No, score=-0.702 tagged_above=-999 required=5 tests=[BAYES_20=-0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JcLh4slOUig4 for <core@ietfa.amsl.com>; Mon, 23 Nov 2015 00:58:05 -0800 (PST)
Received: from lb3-smtp-cloud6.xs4all.net (lb3-smtp-cloud6.xs4all.net [194.109.24.31]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 6A6711B3856 for <core@ietf.org>; Mon, 23 Nov 2015 00:58:05 -0800 (PST)
Received: from webmail.xs4all.nl ([194.109.20.200]) by smtp-cloud6.xs4all.net with ESMTP id kwy11r00Z4K0fSy01wy13F; Mon, 23 Nov 2015 09:58:02 +0100
Received: from [2001:983:a264:1:9df4:60b8:396e:73f] by webmail.xs4all.nl with HTTP (HTTP/1.1 POST); Mon, 23 Nov 2015 09:58:01 +0100
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"; format="flowed"
Content-Transfer-Encoding: 8bit
Date: Mon, 23 Nov 2015 09:58:01 +0100
From: peter van der Stok <stokcons@xs4all.nl>
To: Michel Veillette <Michel.Veillette@trilliantinc.com>
Organization: vanderstok consultancy
Mail-Reply-To: consultancy@vanderstok.org
In-Reply-To: <BLUPR06MB1763CC28443C787020D60CF7FE1A0@BLUPR06MB1763.namprd06.prod.outlook.com>
References: <170106a36217a736a4b55991c4a5cf6a@xs4all.nl> <BLUPR06MB1763CC28443C787020D60CF7FE1A0@BLUPR06MB1763.namprd06.prod.outlook.com>
Message-ID: <b02eb0119020ae52bbddfaed84dc1b01@xs4all.nl>
X-Sender: stokcons@xs4all.nl (3qJxpUVx58iC6eUVL1rVXFcwCA87x6CW)
User-Agent: XS4ALL Webmail
Archived-At: <http://mailarchive.ietf.org/arch/msg/core/25wtVsXEE6eCk8142_65sllIdr8>
Cc: ana@ackl.io, Core <core@ietf.org>
Subject: Re: [core] YANG list to CBOR mapping
X-BeenThere: core@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
Reply-To: consultancy@vanderstok.org
List-Id: "Constrained RESTful Environments \(CoRE\) Working Group list" <core.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/core>, <mailto:core-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/core/>
List-Post: <mailto:core@ietf.org>
List-Help: <mailto:core-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/core>, <mailto:core-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 23 Nov 2015 08:58:09 -0000
Hi Michel, the point is to express in the payload the replacement criteria independent of application. It is a CBOR extension to the patch format of RFC 7396. The latter allows the replacement of complete arrays, not a subset of the array. Peter Michel Veillette schreef op 2015-11-20 21:41: > Reference: YANG list to CBOR mapping > https://core-wg.github.io/yang-cbor/#rfc.section.3.1.17 > > Hi Peter > > Your proposed solution for lists have some drawbacks and I'll like to > understand better its advantages to evaluate the PROS and CONS. > > List of CONS > - Your proposed solution is not aligned with > draft-ietf-netmod-yang-json-06 > - Your proposed solution take one extra byte per list entry > - Your proposed solution use a map as key for a map, which is uncommon > (Illegal in JSON but not in CBOR) > - The encoding of list defined with keys or without keys are done > differently > > CoMI-CoOL clients and servers known which data nodes of a list are > keys and which ones are associated information. > I don’t the see value of implementing the keys on the left side of the > ':' (key) and the rest of the data nodes on the right side of the ':" > (value). > This semantic is already known by both ends, why we need to add it to > the encoding? > > === Examples > > Map of map solution with CoMI IDs (88 Bytes) > { > 11111111 : { > {22222222 : "book1", 33333333 : "author2"} : {44444444 : 500, > 55555555: 66} , > {22222222 : "book5", 33333333 : "author3"} : {44444444 : 444, > 55555555: 11} > } > } > > Array of map solution with CoMI IDs (86 Bytes) > { > 11111111 : [ > { > 22222222 : "book1", > 33333333 : "author2", > 44444444 : 500, > 55555555: 66 > } , > { > 22222222 : "book5", > 33333333 : "author3", > 44444444 : 444, > 55555555: 11 > } > ] > } > > Map of map solution with CoOL IDs (56 Bytes) > > { > 11111111 : { > {2 : "book1", 3 : "author2"} : {4 : 500, 5: 66} , > {2 : "book5", 3 : "author3"} : {4 : 444, 5: 11} > } > } > > Array of map solution with CoOL IDs (54 Bytes) > > { > 11111111 : [ > { > 2 : "book1", > 3 : "author2", > 4 : 500, > 5: 66 > } , > { > 2 : "book5", > 3 : "author3", > 4 : 444, > 5: 11 > } > ] > } > > You say "It is the wish to transport only those list elements with a > unique key value, either to support a PATCH or a FETCH command". > I don’t see why this is not the case for both representations. > > Michel Veillette > System Architecture Director > Trilliant Inc. > Tel: 450-375-0556 ext. 237 > michel.veillette@trilliantinc.com > www.trilliantinc.com > > > -----Original Message----- > From: core [mailto:core-bounces@ietf.org] On Behalf Of peter van der > Stok > Sent: November-19-15 5:06 AM > To: Core <core@ietf.org> > Cc: lhotka@nic.cz > Subject: [core] YANG list to CBOR mapping > > Hi CoOL authors, > > This e_mail complements my earlier e-mail on YANG to CBOR mapping, and > explains the proposed list encoding. > > Both the draft yang-json and the CoOL draft encode a list as an array. > In the yang-json case as a JSON array, and in the CoOL case as major > type 4 of major type 5 objects. > This encoding prevents the selection of list instances on the basis of > the key values from the payload alone. In CoMI the list is encoded as > a major type 5 of major type 5 objects. This deviation from the > yang-json mapping is motivated by the wish to transport individual > list instances and identify the instances in the payload from the key > values. This is especially important in case of PATCH operation on > list instances. > Two cases are to be looked at: (1) the list definition specifies one > or more key elements, and (2) the list definition does not specify a > key element. We will start with a list containing key elements. > It is the wish to transport only those list elements with a unique key > value, either to support a PATCH or a FETCH command. Therefore it is > required that the payload allows the selection and identification of > these list element on the basis of their key values. Using the > diagnostic JSON notation used for CBOR diagnostics, the payload > containing a number of elements with key values should look like a > JSON object with the structure list-name: {key: value}. Both key and > value are composed of JSON objects separated by commas. For example > consider the following YANG list specification: > module foo { > namespace http://example.com/book; > prefix “fo”; > revision 2015-06-07; > > list B { > key “key1 key2”; > leaf key1 {type string;} > leaf key2 {type string;} > leaf coll {type int32;} > leaf counter {type int32;} > } > } > > Consider the transport of two instances specified by <“key1” = > “book1”, “key2” = “author2”> and by <“key1” = “book5”, “key2” = > “author3”> out of a larger set of instances. The representation is > different from the yang-json one for the reasons explained above. > > The payload will look like: > {"B" :{ > {"key1" : "book1", "key2" : "author2"} : > {"coll" : 500, "counter": 66} , > {"key1" : "book5", "key2" : "author3"} : > {"coll" : 444, "counter": 11} > } > } > > > Which translated to CBOR yields: > > a1 # map(1) > 61 # text(1) > 42 # "B" > a2 # map(2) > a2 # map(2) > 64 # text(4) > 6b657931 # "key1" > 65 # text(5) > 626f6f6b31 # "book1" > 64 # text(4) > 6b657932 # "key2" > 67 # text(7) > 617574686f7232 # "author2" > a2 # map(2) > 64 # text(4) > 636f6c6c # "coll" > 19 01f4 # unsigned(500) > 67 # text(7) > 636f756e746572 # "counter" > 18 42 # unsigned(66) > a2 # map(2) > 64 # text(4) > 6b657931 # "key1" > 65 # text(5) > 626f6f6b35 # "book5" > 64 # text(4) > 6b657932 # "key2" > 67 # text(7) > 617574686f7233 # "author3" > a2 # map(2) > 64 # text(4) > 636f6c6c # "coll" > 19 01bc # unsigned(444) > 67 # text(7) > 636f756e746572 # "counter" > 0b # unsigned(11) > > The corresponding yang-json draft encoding - that allows transport of > a selection of instances- does not specify the key fields and would > have looked like: > > {"B" : [ > {"key1" : "book1", > "key2" : "author2”, > "coll" : 500, > "counter": 66 > } , > {"key1" : "book5", > "key2" : "author3", > "coll" : 444, > "counter": 11, > } > ] > } > > Suppose there are no key elements specified. In that case it is > impossible to specify the wanted list elements, and always the whole > list must be transported. In the case of a list without key > specification is is best to use major type 4 composed of major type 5 > to transport the list, as is specified in yang-json draft. > > Consider the following YANG list > > Module foo{ > Namespace http://example.com/book; > Prefix “bo” > Revision 2015-06-7 > List B { > Leaf title {type string;} > Leaf author {type string;} > Leaf coll {type int32} > Leaf counter {type int32} > } > } > > Suppose the list contains two elements. The transport payload of the > two elements looks like: > > {"B" :[ > {"title" : "book1", "author" : "author2", "coll" : 500, "counter": > 66} , > {"title" : "book5", "author" : "author3", “coll" : 444, > "counter": > 11} > ] > } > > This payload is identical to the yang-json payload. > Which yields the corresponding CBOR code. > > a1 # map(1) > 61 # text(1) > 42 # "B" > 82 # array(2) > a4 # map(4) > 65 # text(5) > 7469746c65 # "title" > 65 # text(5) > 626f6f6b31 # "book1" > 66 # text(6) > 617574686f72 # "author" > 67 # text(7) > 617574686f7232 # "author2" > 64 # text(4) > 636f6c6c # "coll" > 19 01f4 # unsigned(500) > 67 # text(7) > 636f756e746572 # "counter" > 18 42 # unsigned(66) > a4 # map(4) > 65 # text(5) > 7469746c65 # "title" > 65 # text(5) > 626f6f6b35 # "book5" > 66 # text(6) > 617574686f72 # "author" > 67 # text(7) > 617574686f7233 # "author3" > 64 # text(4) > 636f6c6c # "coll" > 19 01bc # unsigned(444) > 67 # text(7) > 636f756e746572 # "counter" > 0b # unsigned(11) > > > -- > Peter van der Stok > vanderstok consultancy > mailto: consultancy@vanderstok.org > > _______________________________________________ > core mailing list > core@ietf.org > https://www.ietf.org/mailman/listinfo/core
- [core] YANG list to CBOR mapping peter van der Stok
- Re: [core] YANG list to CBOR mapping Michel Veillette
- Re: [core] YANG list to CBOR mapping Michel Veillette
- Re: [core] YANG list to CBOR mapping peter van der Stok
- Re: [core] YANG list to CBOR mapping Michel Veillette
- Re: [core] YANG list to CBOR mapping Carsten Bormann
- Re: [core] YANG list to CBOR mapping peter van der Stok