Con el plug-in de operaciones ya generado, el último paso que nos queda para integrarlo en la aplicación es la creación del índice xml que indexará las operaciones en el menú de tratamiento de imágenes o en el menú de caracterización de imágenes, así como en la barra de menú.
Para una mejor comprensión a la hora de generar los índices dentro de la aplicación, dividiremos esta sección en dos partes, una primera en la que se detallará la estructura de carpetas que se utiliza dentro de la aplicación. Y una segunda parte, donde se describirán las etiquetas y estructura que se usa en el índice xml.
Los índices que se utilizan para generar los menús de la aplicación se encuentran dentro de la carpeta index del directorio de la aplicación. Si accede a su interior, podrá observar que existen tres carpetas: dtd, imageProcessing y imageCharacterizing.
La estructura de índices de ambos menús (menú de caracterización y menú de tratamiento) son similares, con la salvedad que si se introduce alguna operación de caracterización en los índices de tratamiento, o alguna operación de tratamiento en los índices de caracterización, las operaciones no se cargarán en la aplicación y se mostrará un mensaje de error al arrancarla. Por lo tanto, en caso que el usuario implemente un mismo plug-in con operaciones de tratamiento y caracterización (práctica no recomendada), éste deberá crear al menos dos ficheros de índices.
Tras la introducción a la estuctura de carpetas utilizada, nos encontramos en disposición de pasar a detallar las etiquetas
y estructura interna de un índice.
Para facilitar la comprensión de esta estructura, explicaremos la estructura y cada una de las etiquetas a través de un posible
índice que utilizaría el plug-in de operaciones de color generado en el apartado
Crear un plug-in.
com.coolimagingproject.colorOperations.xml
|
<?xml version="1.0" encoding="ISO-8859-1"?> |
La primera linea que aparece en el documento, se refiere a la versión xml y el tipo de codificación utilizada.
Esta linea será dependiente de la versión y la codificación que el desarrollador desee utilizar.
<?xml version="1.0" encoding="ISO-8859-1"?>
La segunda linea que aparece en el documento hace referencia al document types declaration que debe verificar el archivo de índice antes de ser cargado en la aplicación. Este archivo se encuentra en la carpeta dtd de la estructura de directorios de índices.
Esta linea dependerá del tipo de índice que se quiera generar. En caso de ser un índice de tratamiento de imágenes deberá insertar esta linea:
<!DOCTYPE image_processing_index SYSTEM "index/dtd/definitionImageProcessing.dtd">
Y en caso de querer generar un índice de caracterización de imágenes la línea que deberá insertar será esta otra:
<!DOCTYPE image_characterizing_index SYSTEM "index/dtd/definitionImageCharacterizing.dtd">
Estas dos lineas forman parte de la cabecera del documento, mientras que las etiquetas que vamos a pasar a describir a continuación, forman parte de las etiquetas propias de la estructura de árbol de un documento xml.
La siguiente etiqueta que aparece es <image_processing_index>
, etiqueta que se utiliza dentro de los índices de
tratamiento de imágenes. Si el índice que estamos creando es de caracterización, la etiqueta que debe aparecer
es <image_characterizing_index>
en vez de <image_processing_index>.
Es importante que solamente exista una etiqueta de este tipo dentro de cada archivo de índice, así como considerar
que la etiqueta de cierre se debe corresponder con esta etiqueta (</image_processing_index>
o
</image_characterizing_index>
).
Seguidamente, en el ejemplo nos encontramos con la etiqueta <category>
. Esta etiqueta representa una categoría
dentro del menú. ¿Cómo se le asigna un nombre a una categoría? el nombre se expresa entre etiquetas <name>
y puede ser
codificado con caracteres Unicode. En
nuestro ejemplo le hemos asignado el nombre "Color". Es muy importante que esta etiqueta aparezca siempre
a continuación de la etiqueta <category>
y al menos una vez. ¿Por qué debe aparecer al menos una vez?
Esto se debe a que la aplicación permite la internacionalización
de los índices. Si se fija en el caso de ejemplo, las siguientes etiquetas <name>
vienen acompañadas del
atributo lang
. Dependiendo del idioma en el que se ejecute la aplicación se utilizará la etiqueta
<name>
más adecuada en caso de aparecer varias de ellas. Por ejemplo, en caso que la aplicación se
ejecute en español (es) se utilizará el nombre que contenga la etiqueta <name lang="es">
,
en vez de las otras que existan; pero si la aplicación se ejecutase en francés (fr), se utilizaría la etiqueta
<name>
por ser la más genérica y no existir la etiqueta <name lang="fr">
.
No sólo se puede hacer uso del atributo lang, sino que también se pueden utilizar los atributos
country y variant junto con la etiqueta lang.
Las combinaciones mostradas con el idioma español y país España son las consideradas como válidas:
<name>
<name lang="es">
<name lang="es" country="ES">
<name lang="es" country="ES" variant="linux">
En caso de existir varias etiquetas <name>
con distintos atributos, la etiqueta que se
utilizará para el índice será la más apropiada a las preferencias de la aplicación, es decir,
fijándonos en la lista de arriba, se empezaría buscando de abajo a arriba.
Los valores que utilizan los atributos lang
y country
están definidos en dos estándares.
El estándar ISO 639:1988 define los códigos de idioma, mientras que el estándar ISO 3166
define los códigos de país. Puede encontrar referencias a estos estándares en la sección
bibliografía->Internacionalización.
Otra posibilidad que ofrece la etiqueta <category>
es la de anidar tantas categorías como queramos.
En el índice de ejemplo anidamos la categoría "IHS-HSI" dentro de la categoría "Color". La única restricción que debemos
considerar es que esta nueva etiqueta <category>
debe de
aparecer tras terminar de definir todas las etiquetas <name>
para una categoría.
La siguiente etiqueta en la estructura de índices es la etiqueta <operation>
, encargada de albergar
toda la información relativa a una operación. En nuestro caso de ejemplo, esta etiqueta aparece tras la etiqueta
<name>
de la categoría "IHS-HSI". Pero ésta no es la única posición válida de esta etiqueta dentro
de la estructura de índices, sino que se puede situar en otras posiciones. Las posiciones válidas dentro del índice son:
<name>
que defina a una categoría.<image_processing_index>
o <image_characterizing_index>
, dependiendo del
índice.</category>
A diferencia de las categorías, las operaciones tienen una estructura rígida que siempre se debe cumplir, y es la siguiente:
<operation>
|
Tras la etiqueta <operation>
debe aparecer la etiqueta <class_location>
. Entre estas
etiquetas escribiremos la ubicación de la clase dentro de nuestro plug-in, que coincide
con la extensión de la clase OperadorRGB2IHSAplicacion
que se implementó y se encuentra definida en el
archivo "plugin.xml", tal y como se muestra en la imagen.
En el índice existirán tantas entradas operación como extensiones hayamos definido en el plug-in.
Con estas explicaciones debería poder generar sus propios índices personalizados, sin embargo, debe tener en cuenta que
las categorías no pueden ser vacías, es decir, estas deben contener alguna operación, o el resultado puede ser inesperado;
y los archivos de las categorías deben ser .xml.
En caso que cometa algún error, la aplicación le avisará con un mensaje de error.