Docker

    複雑な型の設定

    複雑な型というのは

    • 複数の条件すべてにマッチしなければならない
    • どれかにマッチすればいい(ホワイトリスト)
    • 複数の条件のうち1つにマッチしなければならない
    • マッチしてはならない(ブラックリスト)

    などがあります。

    複数の条件すべてにマッチしなければならない

    これにはallOfを使います。

    {
      "allOf": [
        {
          "type": "string"
        },
        {
          "pattern": "\w+"
        }
      ]
    }

    別れているので少しややこしいですが、以下のようにするのと同じ意味です。

    {
      "type": "string",
      "pattern": "\w+"
    }

    主に#refな条件を組み合わせる為に使ったりします。

    どれかにマッチすればいい(ホワイトリスト)

    これにはanyOfを使います。「ここではstringnumberを置いてほしい」という要望なら、以下のようになります。

    {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        }
      ]
    }

    複数の条件のうち1つにマッチしなければならない

    これにはoneOfを使います。例えば以下のようなスキーマだったとします。

    {
      "oneOf": [
        {
          "type": "string"
          "pattern": "^a"
        },
        {
          "type": "string"
          "pattern": "z$"
        }
      ]
    }

    ここにはaazzは置くことができますが、azは両方にマッチしてしまうので置くことができません。

    マッチしてはならない(ブラックリスト)

    これにはnotを使います。例えば以下のようにすると「booleanobjectarray, null以外を期待する(stringnumber)」という意味になります。

    {
      "not": [
        {
          "type": "boolean"
        },
        {
          "type": "object"
        },
        {
          "type": "array"
        },
        {
          "type": "null"
        },
      ]
    }