protected function _extractData($data)
    {
        $extractedData = array();

        foreach ($data as $key => $value) {
            $type = 'scalar';
            $options = array();

            if (is_array($value)) {
                if (isset($value['type'])) {
                    $type = $value['type'];
                    if (isset($value['default'])) {
                        $options['default'] = $value['default'];
                    }

                    if (isset($value['label'])) {
                        $options['label'] = $value['label'];
                    }

                    if (isset($value['accept'])) {
                        $options['accept'] = $value['accept'];
                    }

                    if (isset($value['maxentry'])) {
                        $options['maxentry'] = $value['maxentry'];
                    }

                    if (isset($value['minentry'])) {
                        $options['minentry'] = $value['minentry'];
                    }

                    if (isset($value['parameters'])) {
                        $options['parameters'] = $value['parameters'];
                    }

                    if (isset($value['extra'])) {
                        $options['extra'] = $value['extra'];
                    }
                } else {
                    $type = 'array';
                    $options['default'] = $value;
                }
            } else {
                $value = trim($value);

                if (strpos($value, '!!') === 0) {
                    $typedValue = explode(' ', $value, 2);
                    $type = str_replace('!!', '', $typedValue[0]);
                    if (isset($typedValue[1])) {
                        $options['default'] = $typedValue[1];
                    }
                }
            }

            $extractedData[$key] = array('type' => $type, 'options' => $options);
        }

        return $extractedData;
    }