Skip to content

"unevaluatedItems" and "contains", "minContains", and "maxContains" #293

@handrews

Description

@handrews

This is a little vague in the spec, as discussed in json-schema-org/json-schema-spec#810, but will be clarified in a bug fix and we should go ahead and test for it from the start.

contains gets applied to all elements of the array, and excludes any element to which it applied successfully from unevaluatedItems. This produces an interesting and potentially useful behavior of carving out exceptions in an otherwise homogenous array, which you can't otherwise do.

Given:

{
  "type": "array",
  "oneOf": [
    {
      "contains": {"type": "string"}
    },
    {
      "items": {"type": "integer"}
    }
  ],
  "unevaluatedItems": {"type": "boolean"}
}

The following instances should all be valid:

  • [true, "hello", false]
  • [1, 3, 4]
  • [true, false]

Note that minContains and maxContains shouldn't affect this (although I don't think there's any meaningful interaction with maxContains as matching less is no different than if it's not there, and matching more causes it to fail validation):

  • if contains matches more than the minimum, all of those should be excluded from unevaluatedItems, not just the first however many up to the minimum

Metadata

Metadata

Assignees

No one assigned

    Labels

    missing testA request to add a test to the suite that is currently not covered elsewhere.

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions