Re: [Cbor] CDDL 2.0 import and paths

Carsten Bormann <cabo@tzi.org> Mon, 06 February 2023 14:32 UTC

Return-Path: <cabo@tzi.org>
X-Original-To: cbor@ietfa.amsl.com
Delivered-To: cbor@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 4D125C1522AA for <cbor@ietfa.amsl.com>; Mon, 6 Feb 2023 06:32:06 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Level:
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QLgxRBqQ7CMT for <cbor@ietfa.amsl.com>; Mon, 6 Feb 2023 06:32:02 -0800 (PST)
Received: from smtp.zfn.uni-bremen.de (gabriel-smtp.zfn.uni-bremen.de [IPv6:2001:638:708:32::15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id CA110C151544 for <cbor@ietf.org>; Mon, 6 Feb 2023 06:32:00 -0800 (PST)
Received: from [192.168.217.124] (p548dc9a4.dip0.t-ipconnect.de [84.141.201.164]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.zfn.uni-bremen.de (Postfix) with ESMTPSA id 4P9TH259HQzDCf4; Mon, 6 Feb 2023 15:31:58 +0100 (CET)
Content-Type: text/plain; charset="utf-8"
Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.7\))
From: Carsten Bormann <cabo@tzi.org>
In-Reply-To: <2304074.1675693261@dyas>
Date: Mon, 06 Feb 2023 15:31:58 +0100
Cc: cbor@ietf.org
X-Mao-Original-Outgoing-Id: 697386718.278199-0c7d5f84d533adc97fbe961db707b00c
Content-Transfer-Encoding: quoted-printable
Message-Id: <0F5E27CB-44D6-4112-A7BA-8372F36EF3B3@tzi.org>
References: <Y9FYSKde6bXgzep3@hephaistos.amsuess.com> <BAFC97D5-3B5A-4ED5-ADEC-93CB53CC2128@tzi.org> <2304074.1675693261@dyas>
To: Michael Richardson <mcr+ietf@sandelman.ca>
X-Mailer: Apple Mail (2.3608.120.23.2.7)
Archived-At: <https://mailarchive.ietf.org/arch/msg/cbor/DZz-mfGfwwRMNlU_tuG9Iqi2sjs>
Subject: Re: [Cbor] CDDL 2.0 import and paths
X-BeenThere: cbor@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: "Concise Binary Object Representation \(CBOR\)" <cbor.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/cbor>, <mailto:cbor-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/cbor/>
List-Post: <mailto:cbor@ietf.org>
List-Help: <mailto:cbor-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/cbor>, <mailto:cbor-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 06 Feb 2023 14:32:06 -0000

On 2023-02-06, at 15:21, Michael Richardson <mcr+ietf@sandelman.ca> wrote:
> 
> 
> Carsten Bormann <cabo@tzi.org> wrote:
>> ;# include rfc9052
>> ;;; include all the rules from rfc9052.cddl as well as the ones
>> imported/included there, no questions asked
> 
> So that's recursive.

Well, cddlc will break its little mind quickly if it actually gets recursive…

>> ;# import rfc9052
>> ;;; include only those rules from rfc9052.cddl that actually are
>> undefined references in the current CDDL file, treating rfc9052 as a
>> “library”.
> 
> So, that's not recursive, and if there were dangling references in
> rf9062.cddl, I'd have to take care of it?

Actually, this also runs a transitive closure *within the imported CDDL file*, and it acts on directives inside that (but not adding anything nested based on undefined references from outside).  I added a nested import directive to rfc9053.cddl, if you want to play with this.

But the intention is that a recursive import would actually stop (haven’t set up a test case for that yet).

> A question about CDDL_INCLUDE_PATH, does it always start at the beginning, or
> does it start at the place in the path where the current file was found?

The path always starts at the beginning.
So you can override/reach into dependency chains (on purpose or inadvertently).

>> I plan to add something like
> 
>> ;# import rfc9052 as COSE
> 
>> which would rename the names in the imported rules to start with COSE(*).
>> (This is of course interesting because of other imported names, as well as prelude names…)
> 
> A good idea.
> I'll update my use of cddlc later this month when I return to that work.
> 
>> (*) I’m not yet sure whether the auto-import mechanism should add glue
>> rules automatically, so you don’t have to call your referencing names
>> COSE.COSE_Encrypt0 while still getting overly generic names such as
>> `label` or `values` prefixed as `COSE.label` and `COSE.values`.  This
>> could be limited to specific names listed in a “import … from” part of
>> the directive.  I need to see more examples to make a useful
>> suggestion.
> 
> A good question, I think prefixing is okay.

Thanks for the feedback!

Grüße, Carsten