Optimize read_value; add ValueSchema::validate(features)