def extract_value(mapping, bind, data):
columns = mapping.get('<STR_LIT>', [mapping.get('<STR_LIT>')])<EOL>values = [data.get(c) for c in columns]<EOL>for transform in mapping.get('<STR_LIT>', []):<EOL><INDENT>values = list(TRANSFORMS[transform](mapping, bind, values))<EOL><DEDENT>format_str = mapping.get('<STR_LIT>')<EOL>value = values[<NUM_LIT:0>] if len(values) else None<EOL>if not is_empty(format_str):<EOL><INDENT>value = format_str % tuple('<STR_LIT>' if v is None else v for v in values)<EOL><DEDENT>empty = is_empty(value)<EOL>if empty:<EOL><INDENT>value = mapping.get('<STR_LIT:default>') or bind.schema.get('<STR_LIT:default>')<EOL><DEDENT>return empty, convert_value(bind, value)<EOL>
Given a mapping and JSON schema spec, extract a value from ``data``
    and apply certain transformations to normalize the value.