排他的境界値 — exclusiveMinimum/exclusiveMaximumの使い方
JSON Schemaの exclusiveMinimum と exclusiveMaximum を使用して、境界値を含まない範囲制約を定義する方法を解説します。
Number Constraints
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"temperature": {
"type": "number",
"exclusiveMinimum": -273.15,
"description": "Temperature in Celsius (above absolute zero)"
},
"opacity": {
"type": "number",
"exclusiveMinimum": 0,
"exclusiveMaximum": 1,
"description": "Opacity value, strictly between 0 and 1"
},
"age": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 150
}
},
"required": ["temperature"]
}Test Data
{
"temperature": 22.5,
"opacity": 0.75,
"age": 30
}詳細な説明
JSON Schemaでは exclusiveMinimum と exclusiveMaximum を使用して、境界値自体を除外した範囲制約を定義できます。これは数学における開区間に相当します。
minimum/maximum との違い:
minimum: 0— 0以上(0を含む)exclusiveMinimum: 0— 0より大きい(0を含まない)maximum: 100— 100以下(100を含む)exclusiveMaximum: 100— 100未満(100を含まない)
Draft 4と Draft 6以降の違い:
JSON Schema Draft 4では exclusiveMinimum はboolean値(true/false)でしたが、Draft 6以降では数値を直接指定する形式に変更されました。現在の推奨はDraft 6以降の形式です。
例えば、確率値のバリデーションでは exclusiveMinimum: 0, exclusiveMaximum: 1 とすることで、0より大きく1未満の値のみを許可できます。
ユースケース
確率値、除算の分母(0を除外)、温度の物理的限界値など、境界値自体を除外する必要がある数値制約で使用します。