web-dev-qa-db-ja.com

jsonschema文字列プロパティの複数の値

かなり複雑なAPIクエリ構文を記述するjsonスキーマがあります。一部のプロパティはパターンマッチングされていますが、パターン以外の値(つまり、他の明示的な文字列)も受け入れる必要があります。多数のjsonスキーマサイトのどこにもこの例を見つけることができないようです。

例:

{
    "type": "object",
    "properties": {
        "$gte": {
            "type": "string",
            "pattern": "<some-pattern>"
        }
    }
}

上記の例で私ができることは、$gteは、制約された値の特定のセットのいずれかです。たとえば、この特定の実装では、「$ gte」の値を次のいずれかに制限する必要があります。

  1. 特定の日付形式
  2. トークン{token}サーバー側で特別な値に置き換えられます

この状況でoneOfプロパティが使用されているのを見てきましたが、formatプロパティでのみ使用できるため、これが可能であると想定しています。実装方法の構文がわからないため、インスタンスは次のようになります。

{
    "type": "object",
    "properties": {
        "$gte": {
            "type": "string",
            "oneOf": [
                {"pattern": "<some-pattern>"},
                "{token}",
                "{another_token}"
            ]
        }
    }
}

私がjsonスキーマのドラフト4の仕様に慣れていなかったり、例を見つけたりしていないため、これを達成する方法を明確にしていただければ幸いです。

17
Jeff U.

データを正確な値の固定セットの1つにする場合は、enumを使用できます。

{
    "type": "string",
    "enum": ["stop", "go"]
}

だから、あなたの例にこれを合わせるために、試してください:

{
    "type": "object",
    "properties": {
        "$gte": {
            "type": "string",
            "oneOf": [
                {"pattern": "<some-pattern>"},
                {"enum": ["TOKEN", "ANOTHER_TOKEN"]}
            ]
        }
    }
}
40
cloudfeet