Re: [Json] JSON Schema Language

Phillip Hallam-Baker <ietf@hallambaker.com> Mon, 06 May 2019 14:10 UTC

Return-Path: <hallam@gmail.com>
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 A0A63120052 for <json@ietfa.amsl.com>; Mon, 6 May 2019 07:10:11 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.649
X-Spam-Level:
X-Spam-Status: No, score=-1.649 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=no 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 hzWdOjoTChQ3 for <json@ietfa.amsl.com>; Mon, 6 May 2019 07:10:09 -0700 (PDT)
Received: from mail-ot1-f67.google.com (mail-ot1-f67.google.com [209.85.210.67]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id A596F12011E for <json@ietf.org>; Mon, 6 May 2019 07:10:09 -0700 (PDT)
Received: by mail-ot1-f67.google.com with SMTP id o39so11541748ota.6 for <json@ietf.org>; Mon, 06 May 2019 07:10:09 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=xVakA1Ylwcle9uSUq+voNWQ8PajMCQoNek+wYPkNnyM=; b=bkdyQJnnIFPkf9jPff8U1pyI++nai0ZK+8mhQ+Er2Snefod6CQWsfvldOjXTj4HHVY xX4I8gveAB7Ll2i9jnepH8B1sA2xAzSG40LP0HTbrmOkq8ITIT48K7z1MHANOJKENK9Y WmDo9UkOYToQ8LidIJaIWcrjDkdBQC89MudCUkwPTHIrTnO5MYh4jVR3+839cjVtyg28 n6WEIbJaXeMdG94uty97Bo1PJ5+mA6sGM5tZ5fuOBSKOoc7CTwu1XZXbffgyYqG+vQs3 2bjVZY3MR6TmgZ7P+f+oNwCzpdRSV5nWZl3kFyykp3IF0fkl6TkRpAHMK2NL57bmacKA 6m8A==
X-Gm-Message-State: APjAAAV5j24VzUDvwVTghnCCqzFI8uEBEVLPFKvNIBlx9YOM9Qco1rWT dDhmYDHJMZcdDK70uRJBQ+zMxF0MVRU9orlnV0E=
X-Google-Smtp-Source: APXvYqzTu7aN+wVJ1UnLpXJxVWoOEkMi8nM0bGlGFulTyUJeTFTppxaKddRI3IM3WT3zIyBlSkpw5K9ARXFjzSsh0n0=
X-Received: by 2002:a9d:6d93:: with SMTP id x19mr6735898otp.157.1557151808769; Mon, 06 May 2019 07:10:08 -0700 (PDT)
MIME-Version: 1.0
References: <CAJK=1RjV1uv0eOdtFZ8cKn-FfCwCiGP5r2hOz1UamiM6YV4H1A@mail.gmail.com> <39682ec8-f993-a44c-d3e2-1638d2c1608f@gmail.com> <29CAE1CE-D6CB-4796-B2F2-2095BE921385@tzi.org> <AD5ABD9C-F5F2-477D-B862-529C890D5472@bzfx.net> <DA1767B8-22D6-4EA9-8112-4B36B79E9039@tzi.org> <D21B379B-23CC-48B3-BE10-D2777308E2E0@bzfx.net> <40f80ea0-d130-3f3b-39fa-2c84e802ed55@gmail.com> <35E2623E-753D-4918-8AF4-BF0BC5DE4868@bzfx.net> <6260354b-aca2-e001-7145-148b32658416@gmail.com> <9D90C1F1-6747-4373-93B0-8D51C5B25F1C@bzfx.net> <3a438654-b1ef-ecbd-0fb2-937d8f40f0c9@gmail.com>
In-Reply-To: <3a438654-b1ef-ecbd-0fb2-937d8f40f0c9@gmail.com>
From: Phillip Hallam-Baker <ietf@hallambaker.com>
Date: Mon, 06 May 2019 10:09:58 -0400
Message-ID: <CAMm+LwiRgHb=swBC0C9wfPZhrVv_1Ljeeb0UCPZZxHqLJS5dSA@mail.gmail.com>
To: Anders Rundgren <anders.rundgren.net@gmail.com>
Cc: Austin Wright <aaa@bzfx.net>, Ulysse Carion <ulysse@segment.com>, JSON WG <json@ietf.org>
Content-Type: multipart/alternative; boundary="0000000000006c530b058838a8b3"
Archived-At: <https://mailarchive.ietf.org/arch/msg/json/o_6oXrUzXDR9l8SFVJtVU_R0gEM>
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: Mon, 06 May 2019 14:10:12 -0000

Lets back up here a moment.

JSON is actually more than one thing. It is:

* A data model
* A lexical token specification
* A serialization

For the Mesh I take the JSON data model and extend it to distinguish
integers from floats and binary encoded blobs from strings via base64url
encoding. I also extend the lexical token specification so that I do not
have to base64 encode binary data blobs. Which is the chief barrier to use
of JSON for crypto.

I am writing my own serializer/deserializer and my own lexical token
analyzer. But that part is really not well grounded in JSON tooling as it
exists in the wild (yet). The aim of JSON-B/C is to be plug-compatible with
JSON so that it is possible to take an existing encoding and just drop in a
JSON-B handler.

Looking at the JSON tools out there, I see that most of them simply take
the input stream and turn it into a parse tree that supports search path
type accessors. That is not the approach I like but it is what folk working
in scripting languages usually want.

>From an interop point of view, any application that relies on being able to
round trip integers that exceed the IEEE float mantissa capacity is going
to break. That is just a fact of life. Another fact is that I have never
found a use for a float in any protocol specification.


Serializations and encodings are important. But there is no point in making
a fetish of finding the one true encoding. The Mesh uses JSON/JSON-B for
all its native encodings. But the Mesh tools have handling for ASN.1,
RFC821, RFC822, TLS and will soon have to add iCal/vCard because they are
all needed in the wild.

I think a JSON schema is a mistake at this point. We should look at writing
a general schema language that is a good schema language and has the
ability to specify ASN.1 or XML schemas or anything else that might need to
be specified.

The world is focusing on JSON for a reason but I think it is the JSON data
model we are actually focusing on rather than the JSON serialization. And I
don't think that insisting that nobody ever touch the original perfection
of JSON encoding is helpful either. All that is doing is ensuring that
instead of there being one JSON/2.0 there are dozens and more are being
added all the time.