code: def check_vocab(instance, vocab, code):
      
      vocab_uses = getattr(enums, vocab + "_USES")
      for k in vocab_uses.keys():
          if instance['type'] == k:
              for prop in vocab_uses[k]:
                  if prop not in instance:
                      continue
  
                  vocab_ov = getattr(enums, vocab + "_OV")
                  if type(instance[prop]) is list:
                      is_in = set(instance[prop]).issubset(set(vocab_ov))
                  else:
                      is_in = instance[prop] in vocab_ov
  
                  if not is_in:
                      vocab_name = vocab.replace('_', '-').lower()
                      yield JSONError("%s contains a value not in the %s-ov "
                                      "vocabulary." % (prop, vocab_name),
                                      instance['id'], code)
docs: Ensure that the open vocabulary specified by `vocab` is used properly.
  
      This checks properties of objects specified in the appropriate `_USES`
      dictionary to determine which properties SHOULD use the given vocabulary,
      then checks that the values in those properties are from the vocabulary.