static char *splitExpression(char *property, int *operator, char **value)
{
    char    *seps, *op, *end, *vp;
    ssize   i;

    assert(property);
    assert(operator);
    assert(value);

    seps = JSON_EXPR_CHARS " \t";
    *value = 0;

    if ((op = spbrk(property, seps)) == 0) {
        return 0;
    }
    end = op;
    while (isspace((int) *op)) op++;
    if (end < op) {
        *end = '\0';
    }
    switch (op[0]) {
    case '<':
        *operator = (op[1] == '=') ? JSON_OP_LE: JSON_OP_LT;
        break;
    case '>':
        *operator = (op[1] == '=') ? JSON_OP_GE: JSON_OP_GT;
        break;
    case '=':
        *operator = JSON_OP_EQ;
        break;
    case '!':
        if (op[1] == '~') {
            *operator = JSON_OP_NMATCH;
        } else if (op[1] == '=') {
            *operator = JSON_OP_NE;
        } else {
            *operator = 0;
            return 0;
        }
        break;
    case '~':
        *operator = JSON_OP_MATCH;
        break;
    default:
        *operator = 0;
        return 0;
    }
    if ((vp = spbrk(op, "<>=! \t")) != 0) {
        *vp++ = '\0';
        i = sspn(vp, seps);
        vp += i;
        if (*vp == '\'' || *vp == '"') {
            for (end = &vp[1]; *end; end++) {
                if (*end == '\\' && end[1]) {
                    end++;
                } else if (*end == *vp) {
                    *end = '\0';
                    vp++;
                }
            }
        }
        *value = vp;
    }
    return property;
}
NVD is only using a subset of CWE for mapping instead of the entire CWE, and the weakness type is not covered by that subset.