protected function fetchAxAttributes()
    {
        $alias = null;
        if (isset($this->data['openid_ns_ax']) && $this->data['openid_ns_ax'] != 'http://openid.net/srv/ax/1.0') {
            // It's the most likely case, so we'll check it before
            $alias = 'ax';
        } else {
            // 'ax' prefix is either undefined, or points to another extension, so we search for another prefix
            foreach ($this->data as $key => $value) {
                if (strncmp($key, 'openid_ns_', 10) === 0  && $value == 'http://openid.net/srv/ax/1.0') {
                    $alias = substr($key, strlen('openid_ns_'));
                    break;
                }
            }
        }
        if (!$alias) {
            // An alias for AX schema has not been found, so there is no AX data in the OP's response
            return [];
        }

        $attributes = [];
        foreach ($this->data as $key => $value) {
            $keyMatch = 'openid_' . $alias . '_value_';
            if (strncmp($key, $keyMatch, strlen($keyMatch))) {
                continue;
            }
            $key = substr($key, strlen($keyMatch));
            if (!isset($this->data['openid_' . $alias . '_type_' . $key])) {
                /* OP is breaking the spec by returning a field without
                associated ns. This shouldn't happen, but it's better
                to check, than cause an E_NOTICE.*/
                continue;
            }
            $key = substr($this->data['openid_' . $alias . '_type_' . $key], strlen('http://axschema.org/'));
            $attributes[$key] = $value;
        }

        return $attributes;
    }