基本表現 -2



おまじない

 JSON Schemaの先頭には、おまじないを記述します。ここではその内以下の2つを紹介します。


 "$schema": "http://json-schema.org/draft-07/schema#",
 "$id": "https://ppp-database.org/spec/datamodel/データモデル名",

一行目は準拠しているJSON Schemaのバージョンを指定します。指定は、リンクの形式で、指定します。
二行目は準拠しているデータモデルの定義場所をリンクの形式で指定します。本項は共通データ仕様に準拠しているので、そのURLを指定します。

制約の記述

 前項の記述で、「補足情報」の記述しましたが、ここに色々記述する事で、色々な制約事項を記述する事が可能です。

■必須項目
 必須項目は、"required":["項目名1","項目名2"・・・}という形式で記述します。記述箇所はオブジェクト内にpropertiesと同列に記述します。
 今回の例では、Attributeとしてはidとtyprがありますが、childの下のtypeとvalueも必須です。

■固定値
 typeのExampleやchildの下のtypeのStructuredValueも固定値です。固定値は"const":"固定値"で記述します。記述箇所は値の記述の中でtypeと同列に記述します。

■Array内の個数の制限
 Arryの要素の数を制約したい場合は"minItems"と"maxItems"で指定します。

■値の形式 その1
 値の形式を:形式名で指定できます。例えば、

   "type": "string",
   "format": "uri"

の様に指定します。}但し、形式が正しいかどうかのチェックをサポートしているかどうかは、実装に依存します。また、実装していても、どこまでチェックしてくれるのかも、実装に依存します。一般的には、"uri"<"date"、"date-time"、"email"等があります。現在は、本ツールでは無視されます。

■値の形式 その2
 値の形式を正規表現で指定できます。例えば、

   "type": "string",
   "pattern": "^ABC\\d{16}-\\d+$"

の様に指定します。}但し、形式が正しいかどうかのチェックをサポートしているかどうかは、実装に依存します。また、実装していても、どこまでチェックしてくれるのかも、実装に依存します。対象は文字列の項目だけです。現在は、本ツールでは無視されます。

■列挙型項目
 列挙型項目とは、プルダウンメニューの様に登録出来る値が鍵らけている項目です。
   "enum": ["A","B","C"]
の様に指定します。本ツールでは無視されます。

前記の例にこれらの制約を記述すると以下となります。あだ名の数の制約は1個から3個としました


{
   "$schema": "http://json-schema.org/draft-07/schema#",
   "@id": "https://ppp-database.org/spec/datamodel/Example",
   "type": "object",
   "properties": {
       "id": {
           "type": "string"
       },
       "type": {
           "type": "string",
           "const": "Example"
       },
       "child": {
           "type": "object",
           "properties": {
               "type": {
                   "type": "string",
                   "const": "StructuredValue
               },
               "value": {
                   "type": "object",
                   "properties": {
                       "age": {
                           "type": "integer"
                       },
                       "name": {
                           "type": "string"
                       },
                       "nickname": {
                           "type": "array",
                           "items": {
                               "type": "string"
                           },
                           "minItems": 1,
                           "maxItems": 3
                       }
                   }
               }
           },
           "required": ["type","value"]
       }
   },
   "required": ["id","type"]
}

追加した記述は青字にしてあります。