Re: [netmod] attributes in draft-lhotka-netmod-yang-json

Andy Bierman <andy@yumaworks.com> Wed, 26 March 2014 14:43 UTC

Return-Path: <andy@yumaworks.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id F3F091A0332 for <netmod@ietfa.amsl.com>; Wed, 26 Mar 2014 07:43:59 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.978
X-Spam-Level:
X-Spam-Status: No, score=-1.978 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=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 kD_nGjteoWh2 for <netmod@ietfa.amsl.com>; Wed, 26 Mar 2014 07:43:56 -0700 (PDT)
Received: from mail-qc0-f178.google.com (mail-qc0-f178.google.com [209.85.216.178]) by ietfa.amsl.com (Postfix) with ESMTP id 9C5821A0145 for <netmod@ietf.org>; Wed, 26 Mar 2014 07:43:55 -0700 (PDT)
Received: by mail-qc0-f178.google.com with SMTP id i8so2617831qcq.23 for <netmod@ietf.org>; Wed, 26 Mar 2014 07:43:54 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=+6ojo1flX7VtVsTKRzKHgVy9J2hLwlZo/NGg98HcsGw=; b=OyNxRF7TTSv8BP5aWpcFIvV9TZs+OsRRH9g2u2xWgBtmRnlF02AfpwKuWGiSVsBfIt qMEIBNffiVqgsGPHGjbw176Ey11boies5ti+ytqpZIKhd9GIaGQab36RMV17uNKKE1aQ K5lcMzECibvRWu2c8QCpu/RQV/4mLGZ+m81oJlIi/FPOJ7cU5CfYXT0t/HCGnf2SVwqj H4jsamdkkGB9Toqlw39JM+3RUKm4qdVdRPuXrAU8Lwrx9ZvBIuS2oWLYD6a7Ww/Avm6H gwHo/odHYbBIIzxLTV9Ph6irzs4cI19OMc+OThmwFeFTs8tPPW85QRDrpBcBXY4qJnEu agSw==
X-Gm-Message-State: ALoCoQmSsr1dFe+JoOfzONfToWNVDAbUWk8wCfLD5jhhzsKbvuVBtXA+JmCe9n+wCstz6gP8OqX3
MIME-Version: 1.0
X-Received: by 10.229.81.71 with SMTP id w7mr90217504qck.8.1395845033890; Wed, 26 Mar 2014 07:43:53 -0700 (PDT)
Received: by 10.140.104.194 with HTTP; Wed, 26 Mar 2014 07:43:53 -0700 (PDT)
In-Reply-To: <20140326.152737.330538996469661145.mbj@tail-f.com>
References: <20140326.145737.580242632261637255.mbj@tail-f.com> <A169C9A0-970B-4F7B-B102-61543EE553BD@nic.cz> <CABCOCHTg5T+k_LzyNz=bwUKC5AS5gYcBVODL4ZUihUWXQbDbkQ@mail.gmail.com> <20140326.152737.330538996469661145.mbj@tail-f.com>
Date: Wed, 26 Mar 2014 07:43:53 -0700
Message-ID: <CABCOCHSmt-Mr2fe-Xmpajz0v8jg=XOJsY4CMEtCBe1GzTbL6EA@mail.gmail.com>
From: Andy Bierman <andy@yumaworks.com>
To: Martin Bjorklund <mbj@tail-f.com>
Content-Type: multipart/alternative; boundary="001a1133b2b06829ac04f5837f32"
Archived-At: http://mailarchive.ietf.org/arch/msg/netmod/izyplWO-dkVZBda97Q15N56pHas
Cc: "netmod@ietf.org" <netmod@ietf.org>
Subject: Re: [netmod] attributes in draft-lhotka-netmod-yang-json
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: NETMOD WG list <netmod.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netmod>, <mailto:netmod-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/netmod/>
List-Post: <mailto:netmod@ietf.org>
List-Help: <mailto:netmod-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netmod>, <mailto:netmod-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 26 Mar 2014 14:44:00 -0000

On Wed, Mar 26, 2014 at 7:27 AM, Martin Bjorklund <mbj@tail-f.com> wrote:

> Andy Bierman <andy@yumaworks.com> wrote:
> > On Wed, Mar 26, 2014 at 7:10 AM, Ladislav Lhotka <lhotka@nic.cz> wrote:
> >
> > >
> > > On 26 Mar 2014, at 14:57, Martin Bjorklund <mbj@tail-f.com> wrote:
> > >
> > > > Ladislav Lhotka <lhotka@nic.cz> wrote:
> > > >> Martin Bjorklund <mbj@tail-f.com> writes:
> > > >>
> > > >>> Hi,
> > > >>>
> > > >>> Here's yet another attempt to handle attributes in JSON, without
> > > >>> changing the encoding for the case that there are no attributes
> > > >>> present.
> > > >>>
> > > >>> In all examples, the attributes "inactive" and "etag" are present.
> > > >>>
> > > >>> Attributes are encoded differently depending on the type of object:
> > > >>>
> > > >>>
> > > >>> leaf
> > > >>> ----
> > > >>>
> > > >>> Encode the attributes as a sibling to the leaf.
> > > >>>
> > > >>>
> > > >>>  leaf foo {
> > > >>>    type string;
> > > >>>  }
> > > >>>
> > > >>>  "foo": "some value";
> > > >>>  "@foo": {
> > > >>>     "inactive": true,
> > > >>>     "etag": "...";
> > > >>>   }
> > > >>>
> > > >>>
> > > >>> list instance
> > > >>> -------------
> > > >>>
> > > >>> Encode the attributes within the list instance.
> > > >>>
> > > >>>
> > > >>>  list bar {
> > > >>>    key name;
> > > >>>    leaf name {
> > > >>>      type string;
> > > >>>    }
> > > >>>    ...
> > > >>>  }
> > > >>>
> > > >>>  "bar": [
> > > >>>     {
> > > >>>        "@bar": {
> > > >>>           "inactive": true,
> > > >>>           "etag": "..."
> > > >>>         }
> > > >>>         "name": "instance name";
> > > >>>      }]
> > > >>>
> > > >>
> > > >> This could be ambiguous:
> > > >>
> > > >> list bar {
> > > >>  key name;
> > > >>  leaf name { ... }
> > > >>  leaf bar { ... }
> > > >> }
> > > >>
> > > >> Then you don't know whether the attributes belong to the list entry
> > > >> or to the contained leaf.
> > > >
> > > > Right. Then we use "@@bar" for the list / container attributes.
> > >
> > > OK, then this scheme is fine with me.
> > >
> > >
> > Looks more complicated than other solution proposals.
>
> Do we agree that we don't want different encodings for values if there
> are attributes or not?  I.e., if my code works when no attributes are
> present, it should also work if there are attributes?
>
>
Not if the normal encoding is painful to use.
The use attributes is going to be rare.
I want the expected "plain" encoding when there are no attributes.
Code that generates JSON and does not care about attributes
must not be rendered useless because the JSON is specially encoded
in RESTCONF.  We want to leverage wide knowledge of JSON,
not invent our own incompatible version of it.



> If so, do we have any other proposal?
>
> I am all for a simpler solution!
>
>

Putting attributes at the sibling level does not work for leaf-lists.
Even for leafs, it is difficult to parse.  JSON objects are unordered,
so the "@foo" could appear anywhere, even before "foo".  The schemes
I proposed always keeps the attributes within the node for the attributes
(just like XML).

One idea I had was to simply disallow attributes for leaf and leaf-list.
They can only go in container or list nodes.  This is restrictive but then
there
will not be any dual decoding possibilities.



> /martin
>

Andy