'JsonSchema number validation with multiple ranges

Is there a supported way (without using the anyOf keyword) to specify multiple ranges for a number in JsonSchema?

E.g., a value can either be in the range of 0-10 or 50-100 (the range of 10 < x < 50 is considered invalid).

The anyOf keyword can be used as follows:

{
  "anyOf": [
    {
      "type": "number",
      "minimum": 0,
      "maximum": 10
    },
    {
      "type": "number",
      "minimum": 5,
      "maximum": 100
    }
  ]
}

Additionally, if the only allowed values were whole integers, I could use an enum and actually hand-specify each allowed number, but obviously that's less ideal than specifying ranges.

So, just wondering if there is a way to accomplish this with something like a "restrictions" keyword:

//NOTE: the below is not actually supported (I don't think), just using it as an example of what I'm interested in
{
  "type": "number",
  "restrictions": [
    {
      "minimum": 0,
      "maximum": 10
    },
    {
      "minimum": 50,
      "maximum": 100
    }
  ]
}

Also, for those wondering why if anyOf is available, it's that I have some custom tooling to maintain and supporting anyOf would be more of a lift than something that is specific to numeric validation.



Solution 1:[1]

The scenario you describe is exactly why anyOf exists. So no, if you want to express a logical OR, you need to implement the keyword that implements that. I don't see why adding a new custom keyword would make things any easier.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ether