Re: [netmod] attributes in draft-lhotka-netmod-yang-json
Ladislav Lhotka <lhotka@nic.cz> Sun, 23 March 2014 15:08 UTC
Return-Path: <lhotka@nic.cz>
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 920F11A072D for <netmod@ietfa.amsl.com>; Sun, 23 Mar 2014 08:08:07 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9] 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 OGppmJr2SXZB for <netmod@ietfa.amsl.com>; Sun, 23 Mar 2014 08:08:00 -0700 (PDT)
Received: from trail.lhotka.name (trail.lhotka.name [77.48.224.143]) by ietfa.amsl.com (Postfix) with ESMTP id 29ECD1A6FC7 for <netmod@ietf.org>; Sun, 23 Mar 2014 08:07:59 -0700 (PDT)
Received: from localhost (localhost [127.0.0.1]) by trail.lhotka.name (Postfix) with ESMTP id A8AC454050C; Sun, 23 Mar 2014 16:07:57 +0100 (CET)
Received: from trail.lhotka.name ([127.0.0.1]) by localhost (trail.lhotka.name [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id TLsrAqOlp62k; Sun, 23 Mar 2014 16:07:52 +0100 (CET)
Received: from localhost (unknown [172.29.2.202]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by trail.lhotka.name (Postfix) with ESMTPSA id B4CFB540192; Sun, 23 Mar 2014 16:07:51 +0100 (CET)
From: Ladislav Lhotka <lhotka@nic.cz>
To: Andy Bierman <andy@yumaworks.com>
In-Reply-To: <CABCOCHS0=fODFFaf_2kDZVcbGAd=BuvJXCpR5-K3uQFXy+PAsw@mail.gmail.com>
References: <3FADE5E8-88AC-4FD0-A2F6-72F408FAFFC4@juniper.net> <20140320.150426.496532825.mbj@tail-f.com> <CABCOCHT3AJR0u=-GV1eM8geL-F2j7HSBsw0uBb1DYDvZio6eCA@mail.gmail.com> <CABCOCHSM7CwAPFOZ4qzzTtTRRX0LWE2Gb+ZWzmDpwBGSKRGhOg@mail.gmail.com> <m2bnwy7j0c.fsf@nic.cz> <CABCOCHRFjzj40nWtckJRPCbxCMSwojadRh0rBb27qMRyHx8MHA@mail.gmail.com> <m2ob0xb697.fsf@nic.cz> <CABCOCHS0=fODFFaf_2kDZVcbGAd=BuvJXCpR5-K3uQFXy+PAsw@mail.gmail.com>
User-Agent: Notmuch/0.17~rc2+11~g2de8ce9 (http://notmuchmail.org) Emacs/24.3.50.2 (x86_64-apple-darwin13.0.0)
Date: Sun, 23 Mar 2014 16:07:49 +0100
Message-ID: <m2k3blar7e.fsf@nic.cz>
MIME-Version: 1.0
Content-Type: text/plain
Archived-At: http://mailarchive.ietf.org/arch/msg/netmod/ZSyEOatJmj_aur_hS1YyDe__WaI
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: Sun, 23 Mar 2014 15:08:08 -0000
Andy Bierman <andy@yumaworks.com> writes: > On Sun, Mar 23, 2014 at 2:42 AM, Ladislav Lhotka <lhotka@nic.cz> wrote: > >> Andy Bierman <andy@yumaworks.com> writes: >> >> ... >> >> > >> > The attribute mapping needs to correspond to the XML attribute mapping. >> > Attributes have string values, so the mapping above will not work. >> >> I don't understand. XML schemas can define attribute values to be of other >> types, too, not only string. >> >> > I meant they are encoded in XML as quoted strings > > >> > >> > Attributes can be qualified or unqualified. If qualified, then the >> > module-name >> > is used as a prefix: >> > >> > "foo" [ 1, 2, { "@foo-mod:owner":"admin1", "foo":3}, { >> > "@foo-mod:owner":"admin2", "foo":4}, >> > >> > >> > This approach presumes the attribute has a YANG module name that defines >> > the attribute, >> > which is of course not allowed. >> > >> > RFC 6241 defines XML attributes for the <get> operation, using a hack >> > called the 'get-filter-element-attributes' extension. >> > >> http://www.netconfcentral.org/modules/ietf-netconf/2011-06-01#get-filter-element-attributes.56 >> >> This is another extension that violates the rule stated in RFC 6020, sec. >> 6.3.1: >> >> If a YANG compiler does not support a particular extension, which >> appears in a YANG module as an unknown-statement (see Section 12), >> the entire unknown-statement MAY be ignored by the compiler. >> >> > >> > The NETCONF-EX <get2> operation has a "with-metadata" parameter that uses >> > identities >> > to map attributes to YANG. >> > >> > I think a standard mechanism is needed to properly map attributes to JSON >> > and XML. >> >> I'd suggest to define two generic constructs: >> >> 1. Metadata >> >> Every JSON value (false / null / true / object / array / number / string) >> can be changed into a "@tagged-value" object, e.g. the number 42 can become >> >> { >> "@tagged-value" : { >> "@owner": "admin1", >> "@value": 42 >> } >> } >> >> Multiple metadata key-value pairs may be present inside the >> "@tagged-value" object. >> >> > I don't think this works for lists and leaf-lists. > Can you expand the encoding to show a real example with > container, list, leaf, and leaf-list used? container ========= "foo": { "bar": 42 } becomes "foo": { "@tagged-value": { "@tag1": 54, "@value": { "bar": 42 }, "@tag2": "hi!" } } leaf ==== "bar": 42 becomes "bar": { "@tagged-value": { "@tag3" = false, "@value": 42 } } leaf-list ========= "foos": [ 6, 3, 7, 8] when tagging the whole array becomes "foos": { "@tagged-value": { "@value": [ 6, 3, 7, 8 ] "tag4": true or, when tagging only one entry, becomes "foos": [ 6, { @tagged-value: { "@tag5": 1, "@value": 3 } }, 7, 8 ] list ==== is analogical, only scalar values (numbers in the above example) will be replaced with objects. > > Not only doesn't it work for siblings, but it depends on the order (@owner > followed by @value), > and JSON objects are not ordered. No, it doesn't, as you can see in the examples the "@value" member can appear at any place and the order of tags is also irrelevant. The only restriction is that no tag can have the key "@value". > > > >> 2. Properties >> >> For a property "foo", every JSON value can be changed into a "@foo" >> object, e.g. >> >> { >> "@foo": 42 >> } >> >> Such property objects may nest, e.g. >> >> { >> "@bar": >> { >> "@foo": 42 >> } >> } > > > > why are properties needed? They are not strictly needed, only their encoding is much nicer, and I assume quite often XML attributes are supposed to be used for such binary properties, such as "protect", "deactivate" etc. So the examples above could also be written "@tagged-value": { "@value": 42, "@foo": true } and "@tagged-value": { "@value": 42, "@foo": true, "@bar": true } > why do we need attributes within attributes? To be able to express that a single value has multiple properties. Lada > > > Both constructs work for list and leaf-list entries, and may be also >> combined. >> >> > A robust deterministic mapping is required, ad-hoc or not. Perhaps an >> > identity registration >> > scheme is good enough, since it provides a module-name for the attribute >> > name. >> > (i.e., the tool needs to know all the identities derived-from the >> > 'metadata' base identity) >> > >> > module foo-mod { >> > ... >> > import nexconf-ex { prefix nx; } >> > >> > identity owner { >> > base nx:metadata; >> > } >> > } >> >> I would prefer either to define global attributes outside YANG, or to >> introduce a new top-level statement for them in YANG 1.1, e.g. >> "global-attribute". > > > >> >> > Lada >> >> > Andy -- Ladislav Lhotka, CZ.NIC Labs PGP Key ID: E74E8C0C
- [netmod] attributes in draft-lhotka-netmod-yang-j… Dean Bogdanovic
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Martin Bjorklund
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Martin Bjorklund
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Ladislav Lhotka
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Ladislav Lhotka
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Ladislav Lhotka
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Martin Bjorklund
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Ladislav Lhotka
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Ladislav Lhotka
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Ladislav Lhotka
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Martin Bjorklund
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Ladislav Lhotka
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Martin Bjorklund
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Ladislav Lhotka
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Martin Bjorklund
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Ladislav Lhotka
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Martin Bjorklund
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Martin Bjorklund
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Martin Bjorklund
- Re: [netmod] attributes in draft-lhotka-netmod-ya… Andy Bierman