HaskellのためのJSONスキーマライブラリのレビュー


JSON Schema JSONフォーマットを記述するJSON形式です.
これは主にJSON値が正しい形式を持つことを検証するために使用されますが、スキーマ定義に合うランダム値を生成するためにも使用できます.これはテストに役立つかもしれません.
JSONスキーマの最新版は「草案2020 - 12」と呼ばれ、このドラフトを使ってスキーマを定義する方法です
{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    ...
}
Previous versions DRAFT - 03(2010)、Draft - 04(2013)と呼ばれました.Draft - 08は、2019 - 09号に改名されました.JSONスキーマ定義を扱うHaskellライブラリを探索するとき、彼らは以前のドラフトで失速しがちである.パターンがあるようです、そして、Juspayのものmedea パッケージは既にReadMeセクションで何が起こっているかを要約していますWhy Medea? ; 彼らの答えが深みを帯びたローストで行くところで、要約します.
  • The JSON Schema standard is complex
  • It [...] covers considerably more than simply validating JSON documents
  • JSON Schema requires arbitrary URI resolution

これはブラッドハウンドの私を思い出させるsupport for ElasticSearch version 1 and 5 (そしてなぜライブラリはバージョン6 , 7 , 8 )をサポートしていないのです.新しいエラスティックサーチAPIバージョンの複雑さと定数の解放は、タイプライブラリを作成することを困難にします.私はそれを正確にどのようにフレーズを確認していないが、Haskellは、このタイプの非常に揮発性のインターフェイスのための悪いフィット感のようです.検証の一部として再帰的で、有界のネットワークI/Oを加えることは、Haskellerが完全な実装を追求しそうでないようにします.
決して以下.私は“スキーマ”の単語の深いスキャンを行ったhttps://hackage.haskell.org/packages/ また、JSONスキーマ固有のパッケージのリストを次のように示しました.彼らは2つのカテゴリーのうちの1つに分類されます.

specが複雑すぎるとき、いくつかのことが起こる


第一に、「我々は試してみた」というカテゴリーがある彼らは、JSONスキーマの初期のバージョンのために働くライブラリを作る試みであるという共通点があります、そして、彼ら全員は、彼らが捨てられると一般的に持ちますこれはオープンソースの運命です.

  • aeson-schema : 唯一のdraft - 03recommends hjsonschema 代わりに.

  • hjsonschema : 唯一のdraft - 04announced deprecated あまりにモジュラーである試みで.

  • jsonschema-gen , jsons-to-schema : 唯一のDraft - 04は、値を基にスキーマを生成しません.some limitations 適用.
  • それから、JSONスキーマ関連のライブラリであるように見えるライブラリは、名前によって判断されますが、実際には、JSONスキーマをサポートしようとしていないが、より制限された前提条件で同様のものを構築するすべてのバリエーションです.

  • json-schema : Haskell特有で、JSON Schema . orgとの関係はありません

  • aeson-schemas : 最後に更新2022年!テンプレートHaskellを用いたタイプセーフスキーマ言語しかし、JSONスキーマをロードするオプションはありません.JSONファイル.JSONスキーマスキーマではなく、JSONのスキーマです.

  • hschema-aeson : 最後に更新2022年!Haskellデータ型のスキーマを指定し、JSONとしてエンコードするようなプロジェクトも同様です.JSONスキーマスキーマではなく、JSONのスキーマです.

  • schematic : 2021年に更新.「なるほどthought of as a subset of JSON Schema 「スキーマスキーマはJSONスキーマにエクスポートできます」.

  • medea : 2021年に更新.MDEAはJSON文書構造のスキーマ言語です.JSONスキーマに似ていますが、より簡単で自己完結型に設計されています
  • ( quick-schema : 最終更新2015年.最小限のJSONスキーマ言語維持されず、正確にはPARまでではない.
  • 概要


    現在のビルド環境でビルドできないメンテナンスされていないパッケージを使用してJSONスキーマの10 - 12年前のドラフトをサポートしたい場合は、次の2つのオプションがあります.人は他を推薦します、そして、もう一方は自己非難されます、私がAesonスキーマが働くことができると言うとき、私は完全に皮肉でありません.それはよく作られます、そして、それが複雑になる前に、スーパー古いJSONスキーマ定義を支持したいかもしれませんし、あるいは後の草案まで拡張することさえできます.
    あなたが草案2020 - 12のどんな報道のためにでも望むならば、あなたは不運でいます.Haskellersは単にあきらめて、代わりのJSONスキーマライブラリを書きました.JSON仕様をパブリックドメインに解放しようとしていないならば、JSONをサポートする良い内部パイプ言語を選んでいるなら、Aeson Schemas、HSchema Aeson、Schema、およびMedeaのどれかが良い選択かもしれません.または、全く別のシリアル化フレームワークを見ることができます.
    私は現在、私は新しいペットプロジェクトのための仕様をリリースする過程にあるので、これらのそれぞれを評価する優先順位はありません.JSON Flashcard , そして、私はライブラリだけでなく、仕様形式を必要とします、私は回路図で私の運をためしています.