Re: [Json] JSON Schema Language

Carsten Bormann <cabo@tzi.org> Fri, 10 May 2019 07:16 UTC

Return-Path: <cabo@tzi.org>
X-Original-To: json@ietfa.amsl.com
Delivered-To: json@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C1BB4120198 for <json@ietfa.amsl.com>; Fri, 10 May 2019 00:16:29 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.199
X-Spam-Level:
X-Spam-Status: No, score=-4.199 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
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 vYrnIrq-8RYT for <json@ietfa.amsl.com>; Fri, 10 May 2019 00:16:25 -0700 (PDT)
Received: from smtp.uni-bremen.de (gabriel-vm-2.zfn.uni-bremen.de [134.102.50.17]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 8412B12018F for <json@ietf.org>; Fri, 10 May 2019 00:16:25 -0700 (PDT)
Received: from [192.168.217.106] (p54A6CC75.dip0.t-ipconnect.de [84.166.204.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.uni-bremen.de (Postfix) with ESMTPSA id 450hMp6NG9zyVZ; Fri, 10 May 2019 09:16:22 +0200 (CEST)
Content-Type: text/plain; charset="utf-8"
Mime-Version: 1.0 (Mac OS X Mail 11.5 \(3445.9.1\))
From: Carsten Bormann <cabo@tzi.org>
In-Reply-To: <CAJK=1RjdYD6TZCNrw=H3d9ZLKLxZZOwVCOYYPwfbP+1ETDDz1Q@mail.gmail.com>
Date: Fri, 10 May 2019 09:16:22 +0200
Cc: JSON WG <json@ietf.org>
X-Mao-Original-Outgoing-Id: 579165380.119637-6090981b72f3cdd0973785dd94d38664
Content-Transfer-Encoding: quoted-printable
Message-Id: <11CDA7F6-30BB-40E4-8926-2EDCBCFD785B@tzi.org>
References: <CAJK=1RjV1uv0eOdtFZ8cKn-FfCwCiGP5r2hOz1UamiM6YV4H1A@mail.gmail.com> <CAHBU6itE8kub1qtdRoW8BqxaOmzMv=vUo1aDeuAr3HX141NUGg@mail.gmail.com> <77994bdb-a400-be90-5893-b846a8e13899@gmail.com> <20190507154201.GP21049@localhost> <CEF72901-5077-4305-BA68-60624DCE952D@bzfx.net> <69ea0c99-e983-5972-c0aa-824ddeecb7c4@dret.net> <CAMm+LwjyVjnJuWE4+a9Ea=_X1uuEGuK+O4KojzN3uVQ+s+HqUQ@mail.gmail.com> <058f58a3-dd27-998e-5f54-4874aff5f2f0@dret.net> <20190507221726.GR21049@localhost> <CAJK=1Rj7PBD-bbwvsqgjQQzp4Aoidb-W2q5Lj6asMHHDHaTVYQ@mail.gmail.com> <646abf11-496b-c120-45d6-2a1aeab051a8@codalogic.com> <8224451C-F21B-41E5-A834-A9005050CB1F@tzi.org> <CAJK=1RjdYD6TZCNrw=H3d9ZLKLxZZOwVCOYYPwfbP+1ETDDz1Q@mail.gmail.com>
To: Ulysse Carion <ulysse@segment.com>
X-Mailer: Apple Mail (2.3445.9.1)
Archived-At: <https://mailarchive.ietf.org/arch/msg/json/hpia-WLiK9SplwvSeu6Ixm95mZQ>
Subject: Re: [Json] JSON Schema Language
X-BeenThere: json@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "JavaScript Object Notation \(JSON\) WG mailing list" <json.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/json>, <mailto:json-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/json/>
List-Post: <mailto:json@ietf.org>
List-Help: <mailto:json-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/json>, <mailto:json-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 10 May 2019 07:16:30 -0000

On May 10, 2019, at 05:55, Ulysse Carion <ulysse@segment.com> wrote:
> 
> Carsten,
> 
> Do you think that our difference in opinion on CDDL vs JSON Schema
> Language may be attributable to a difference in requirements?

Hi Ulysse,

I’m not even sure we disagree.  That was why I became interested in converting between JSL and CDDL.  As I was trying to show, CDDL might make a fine presentation language for JSL, and JSL might be a nice “profile” for CDDL that is very simple to process.

> It seems to me that your use-case is centered around defining
> standards and other complex data requirements. CDDL is, in my view,
> unquestionably a better choice for this use-case. In my mind, CDDL is
> ABNF for CBOR, and that is undeniably what standards dealing with CBOR
> or its near-equivalents require. The existing references, from RFCs,
> to CDDL are testament to this.

Yes, you are describing the intention correctly.  I would add that CDDL has proven as useful for describing pure JSON protocols as for CBOR.  

Not all JSON/CBOR protocols need the full capabilities of CDDL.  For instance, the example in the CDDL spec for RFC 7071 could easily be expressed in JSL, except for two details: reputation-object is not meant to be extensible (reputon is), and there are some value constraints (some values are integers).

> But I (and I suspect Tim) am more preoccupied solely with defining the
> mundane sorts of messages that come out of JSON event processing and
> repetitive JSON APIs. Tim has blogged (see link in my original email)
> about dealing with AWS's CloudWatch events. That's messages that look
> like this:
> 
> https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html
> 
> Tons of messages, and frequently being added and updated. But none of
> these messages are particularly exciting from a schema perspective.

Well, I just had a look at (randomly selected)
https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html#health-event-types
You’d need to add enumerations to JSL.  There are also timestamps in the object (ironically in two different formats).  There is a table that maps language tags to messages in that language.  (And the second and third example have a missing bracket.)  But I can’t really say, because the description by example only just begins to expose the actual intention.

> CDDL can do much more than is necessary for merely representing
> CloudWatch events. This may seem like a good thing, but such excess
> capability reduces the suitability of the solution. JSON Schema
> Language is intentionally small and scuttled in scope, so as to
> simplify code and UI generation. By being so limited in scope, JSON
> Schema Language fits more easily into the architecture of a system
> that would like to integrate it.

I’ve seen my share of developments that start simple.  How much functionality will be added to JSL before it becomes a standard?  Also, the law of extensibility tells us it will be extended even after becoming a standard.

Of course, in its domain, CDDL is incredibly simple.  Compare to JCR: JCR is about three times as complex as CDDL.  This is because CDDL was built from a few very simple building blocks, which combine nicely to provide its functionality.  JCR is more of an accretion of features, which in sum can do most of what CDDL can do.

But back to JSL and CDDL:
What I’m interested in is what are the sweet spots on this functionality vs. complexity continuum.  I think we have found two of these sweet spots (at least maybe after a little more calibration).  Now how do we handle the onslaught of applications that don’t quite fit the sweet spots?  

The question that intrigues me: Is it possible to define something that is as simple as JSL when you need just that, but allows dipping into the capabilities of something like CDDL where needed?

By the way: You may not be aware of the WISHI activity we have in the T2TRG (thing-to-thing research group) of the IRTF.  Here we look at modeling (not just for data) and at translating between different modeling approaches.  http://wishi.space if you want to have a look.

Grüße, Carsten