We don't need to introduce views or datasets, but we do know that there is a schema that describes each potential value that could be passed in or made a part of Constraint. I think it would be better to use that schema, primarily because it is canonical for the data. Maybe this is over-cautious, but it makes me uneasy to infer a schema, which we agree could be different, when one provided by the user is available.

Another benefit of using the original schema is that the field name can be used to get the field schema, so we wouldn't have to derive and then serialize the schema for each value.