ガラス体積計の不確かさに対処するライブラリ(Json)(0)

# ガラス体積計と不確かさの取り扱い
## 問題提起
ホールピペット、メスピペットで一定の体積を計り取って分析する湿式分析という分野があります。意外と面倒なのが、その不確かさの取り扱い。算術幾何平均とか実際の式を見るだけでウンザリします。実際、以前、仕事で構築したBASIC言語の滴定プログラムでは、その辺りを省略していました。
## で、どうするのか
そこでまず土台としてガラス体積計オブジェクトを返すライブラリの構築を考えました。
更にその土台としてデータ構造が必要です。なのでJIS R 3505の半構造化データを作成することにします。記述が簡潔なJSONとして形を整えます。

## JSONの記述前に
いきなりJSONを記述してもいいですが、まずはデータ構造のスキーマを作りましょう。データって最初が肝心です。
``` json:VolumetricPipette_schema.json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$comment": "2023/02/24 @Takao-Nishiwaki",
  "$id": "https://github.com/Nishiwaki-Takao/VolumetricGlassware/blob/master/VolumetricGlassware/VolumeticPipette/VolumetricPipette_shema.json",
  "description": "ホールピペット(JIS R 3505 / ISO 1769) json schema",
  "title": "VolumetricPipette.json schema",
  "type": "object",
  "properties": {
    "VolumetricPipette": {
      "description": "VolumetricPippet",
      "type": "array",
      "uniquness": true,
      "items": {
        "type": "object",
        "properties": {
          "NominalCapacity": {
            "description": "ホールピペットの容量",
            "type": "number",
            "enum": [ 0.1, 0.15, 0.2, 0.25, 0.3, 0.4, 0.5, 1, 1.5, 2, 2.5, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 17.5, 17.6, 20, 25, 30, 40, 50, 75, 100, 150, 200 ]
          },
          "CapacityTolerance": {
            "description": "ホールピペットの許容誤差",
            "type": "number",
            "minimum": 0.005,
            "maximum" : 0.2,
            "anyof": [ { "multipleOf": 0.005 }, (省略) { "multipleOf": 0.15 } ]
          },
          "Class": {
            "description": "ホールピペットの等級",
            "type": "string",
            "enum": [ "A", "B", "SuperGrade", "HighGrade" ]
          },
          "Calibration": {
            "description": "ホールピペットの出受の定義",
            "type": "string",
            "enum" :  ["TD"]
          },
          "ColorCode": {
            "description": "ホールピペット上部のカラーコード",
            "type": "object",
            "properties": {
              "Color": {
                "type": "string",
                "description": "ホールピペットのカラーコードの色",
                "enum": [ "Blue", "White", "Red", "Green", "Yellow", "Orange", "Black" ]
              },
              "NumberOfRing": {
                "type": "integer",
                "description": "ホールピペットのカラーコードの帯数",
                "enum": [ 1, 2 ]
                }}}}}}}}
```
JSON schemaは意外とうまく行きました。
こういう風にあっちこっちの完成品から要素を模倣してくるのは得意です。
``` json:VolumetricPipette.json
{
  "VolumetricPipette": [
    { "NominalCapacity": 0.1, "CapacityTolerance": 0.005, "Class": "A", "Calibration": "TD", "ColorCode": { "Color": "Blue", "NumberOfRing": 1 } },
    { "NominalCapacity": 0.1, "CapacityTolerance": 0.01, "Class": "B", "Calibration": "TD", "ColorCode": { "Color": "Blue", "NumberOfRing": 1 } },
    { "NominalCapacity": 0.15, "CapacityTolerance": 0.005, "Class": "A", "Calibration": "TD", "ColorCode": { "Color": "White", "NumberOfRing": 1 } },
    { "NominalCapacity": 0.15, "CapacityTolerance": 0.01, "Class": "B", "Calibration": "TD", "ColorCode": { "Color": "White", "NumberOfRing": 1 } },
(省略）
    { "NominalCapacity": 200, "CapacityTolerance": 0.1, "Class": "A", "Calibration": "TD", "ColorCode": { "Color": "Blue", "NumberOfRing": 1 } },
    { "NominalCapacity": 200, "CapacityTolerance": 0.2, "Class": "B", "Calibration": "TD", "ColorCode": { "Color": "Blue", "NumberOfRing": 1 } }
  ]
}
```
で、これがデータの抜粋です。
PythonのJsonSchemaライブラリでチェック済みです。
これを次回はPythonのオブジェクトにするためのJsonConstructorを持つPythonクラスを実装していきます。
## 余談
### JISの容量規定とカラーコード表のずれ
今回作成していてJIS R 3505では、カラーコード表に在って要領規定にない容量がありました。Ex:(0.15ml, 0.25ml, …… 75ml)
恐らくはISOのカラーコードとのすり合わせの際のズレてしょう。でもこれらはJISマークを付けれるんでしょうか？
対応自体はONEof構文とRange構文の組み合わせ、IsInJisプロパティ(boolean)で対応可能です。
### 技術の進歩による精度の向上
JIS R 3505は1994年に制定されたJISなので一部ガラス製品製造業者がJIS Aクラス以上の精度を持つピペットを製造しています。今回のスキーマではSHIBATAのSuperGradeと宮原計量器のHighGradeにも対応できるようグレードの所を触ってあります。あとはJIS外品に対応させるべきかとか、いろいろ考える必要がありあます。
JIS外品について使用している場所があれば対応の必要がありますが……Hey. What do ya think?Any statement. Roger. Roger.