Usar condiciones
Si abre el archivo QuickStart.xml, observará que cada elemento newsitem tiene un elemento secundario llamado metainfo, que a su vez contiene elementos secundarios llamados relevance. En el diseño SPS puede crear un cuadro combinado que tenga una lista desplegable con los valores de uno de los elementos relevance. Cuando el usuario de la vista Authentic seleccione una opción (un valor) de la lista desplegable del cuadro combinado, dicho valor se podrá enviar a un nodo del documento XML. Además podemos usar una condición para probar cuál es el valor seleccionado por el usuario (buscando dicho nodo) y aportar el procesamiento adecuado (opción de presentación) para cada valor seleccionado por el usuario.
En este apartado del tutorial aprenderá a crear una plantilla condicional que muestre solamente las noticias (los elementos newsitem) cuyo elemento relevance coincida con la opción seleccionada por el usuario.
El proceso sería el siguiente:
1.Se crea un cuadro combinado donde el usuario de la vista Authentic puede seleccionar el valor del nodo byrelevance. Los valores de la lista desplegable del cuadro combinado se obtienen con ayuda de una expresión XPath, que compila dinámicamente los valores del nodo relevance.
2.Se inserta una condición alrededor del elemento newsitem. Esta condición selecciona todos los elementos newsitem que tengan un elemento relevance cuyo contenido coincida con el contenido del nodo byrelevance. El contenido rodeado por la rama de una condición se conoce como plantilla condicional.
3.Dentro de la plantilla condicional, se enumeran todos los nodos relevance del elemento newsitem.
4.Se resalta el elemento relevance (en la lista de elementos relevance) que coincide con el elemento byrelevance. Para ello se crea una condición que permita seleccionar dichos elementos relevance y después se aplica formato especial a la plantilla condicional.
5.En la condición para el elemento newsitem, se inserta una rama que selecciona todos los elementos newsitem.
Primer paso: crear el cuadro combinado para seleccionar los diferentes valores del nodo
En el documento XML el nodo que contiene las opciones que el usuario puede seleccionar es el nodo /presswatch/selection/byrelevance. Este es el nodo a partir del cual crearemos el cuadro combinado. Esto se hace así:
1.Inserte el texto estático "Select by relevance: " (seleccionar por relevancia) justo después del segundo cálculo automático (imagen siguiente).
2.Arrastre el nodo byrelevance desde la ventana Estructura del esquema (imagen siguiente) y suéltelo justo después del texto estático que escribió en el paso anterior.
3.En el menú contextual que aparece seleccione el comando Crear cuadro combinado. Se abre el cuadro de diálogo "Editar el cuadro combinado":
4.Seleccione el botón de opción Utilizar expresión XPath y después la opción Utilizar la misma XPath para los valores XML y las entradas visibles. En el cuadro de edición XPath para los valores XML y entradas visibles escriba esta expresión XPath: distinct-values(//relevance). Esta expresión XPath selecciona los valores únicos de todos los elementos relevance del documento XML.
5.Para terminar haga clic en Aceptar. El cuadro combinado se inserta y el diseño tiene este aspecto:
6. | Cambie a la vista Authentic. Haga clic en la flecha del cuadro combinado y observe que la lista desplegable contiene los valores únicos de todos los nodos relevance (imagen siguiente). Compare la lista con el documento XML. Se trata de una lista dinámica que crecerá a medida que se añadan nuevos valores a los elementos relevance del documento XML. |
Segundo paso: insertar una condición para mostrar las noticias de la relevancia seleccionada
La condición selecciona los elementos newsitem cuyo elemento metainfo/relevance tenga el mismo valor que el valor seleccionado por el usuario (y enviado al elemento /presswatch/selection/byrelevance). Siga estos pasos para insertar la condición:
1.Seleccione el contenido de la parte newsitem del diseño que debe formar parte de la condición (imagen siguiente).
2.Seleccione el comando de menú (o el comando del menú contextual) Incluir en | Condición. Se abre el cuadro de diálogo Editar expresión XPath.
3.Introduzca la expresión metainfo/relevance=/presswatch/selection/byrelevance. Esta expresión devuelve el resultado true si el valor del descendiente metainfo/relevance del elemento newsitem actual coincide con el valor del elemento /presswatch/selection/byrelevance (el valor seleccionado por el usuario).
4.Haga clic en Aceptar. La condición se crea alrededor del contenido del elemento newsitem (imagen siguiente).
Observe que en esta condición solamente hay una rama. El documento de salida incluirá solamente las noticias (elementos newsitem) para las cuales la condición obtenga el resultado true. Por tanto, en este caso la condición funciona como un filtro. Más adelante aprenderá a añadir otra rama a la condición.
Insertar una lista a partir del nodo relevance
Para mostrar los nodos relevance de cada elemento newsitem, siga esta instrucciones:
1.Cree un poco de espacio vertical debajo del componente div que rodea al elemento source y también dentro de la etiqueta final de la plantilla condicional.
2.Escriba el texto estático "Relevance:" (Relevancia) y cree a su alrededor un formato predefinido div (resalte el texto estático e inserte el formato predefinido).
3.Arrastre el elemento relevance desde el nodo Elementos raíz de la ventana Estructura del esuqema y suéltelo en el diseño, justo debajo del texto estático Relevance:.
4.En el menú contextual que aparece al soltar el nodo en el diseño seleccione la opción Numeración y viñetas para crear una lista a partir del nodo. Después seleccione el formato de lista que desea usar.
5.Aplique el formato y el estilo que prefiera al contenido de la lista. Cuando termine, el diseño debería tener este aspecto:
Ahora, en la vista Authentic, compruebe qué ocurre si selecciona diferentes valores de relevance. Use el cuadro combinado para seleccionar los valores.
Poner el elemento relevance seleccionado en negrita
Algunos elementos newsitem tienen más de un elemento relevance. En estos casos podemos optimizar el diseño para resaltar el elemento relevance que coincide con la opción seleccionada por el usuario.
1.Seleccione el elemento relevance en la vista Diseño.
2.Inserte una condición formada por la expresión XPath .=/presswatch/selection/byrelevance. Esto crea una condición con una sola rama (imagen siguiente) que selecciona los elementos relevance que coinciden con el elemento byrelevance.
3.Seleccione el marcador de posición (contenido) y asígnele el formato local bold (en la ventana Estilos, en el grupo de propiedades fuente) y el formato local background-color:yellow (en el grupo color).
4.Haga clic con el botón derecho en la condición y seleccione Copiar rama en el menú contextual.
5.Aparece el cuadro de diálogo Editar expresión XPath. Marque la casilla Otherwise que aparece en la esquina superior derecha del cuadro de diálogo.
6.Haga clic en Aceptar y se crea la nueva rama (Otherwise). Esta rama de la condición selecciona todos los elementos relevance que no coinciden con el elemento byrelevance.
7.Observe que el contenido de la rama Otherwise es una copia de la primera rama, pero el marcador de posición (contenido) aparece en negrita y el color de fondo es amarillo. Quite este formato del marcador de posición (contenido).
Llegados a este punto, el diseño contiene una condición con dos ramas (cada una con su plantilla condicional) que lleva a cabo esta prueba en todos los elementos relevance del documento XML:
•Si el contenido del elemento relevance es idéntico al contenido del elemento /presswatch/selection/byrelevance, entonces el contenido de relevance aparece en negrita y con color de fondo amarillo.
•De lo contrario (otherwise), el contenido de relevance aparece con el formato normal.
Pruebe un poco estas condiciones en la vista Authentic.
Modificar el cuadro combinado e insertar otra rama condicional
En el cuadro combinado donde el usuario de la vista Authentic selecciona un valor de byrelevance, no hay ninguna opción que permita seleccionar todos los elementos newsitem. Para incluir esta opción:
1.Seleccione el cuadro combinado en la vista Diseño.
2.En la ventana Propiedades expanda el grupo de propiedades cuadro combinado y haga clic en el botón Editar de la propiedad Valores de entrada del cuadro combinado.
3.Aparece el cuadro de diálogo Editar el cuadro combinado. Cambie la expresión XPath distinct-values(//relevance) por la expresión distinct-values(//relevance), 'All'. Esta expresión añade la cadena All a la secuencia de elementos que devuelve la expresión XPath.
4.Mire otra vez la lista desplegable del cuadro combinado en la vista Authentic (imagen siguiente).
A partir de ahora si el usuario selecciona la opción All, este valor (All) se envía al nodo /presswatch/selection/byrelevance. La idea es que cuando el nodo byrelevance contenga el valor All, el documento de salida muestre todas las noticias (todos los elementos newsitem).
La condición que muestra la plantilla newsitem tiene una sola rama con la expresión metainfo/relevance=/presswatch/selection/byrelevance. Como ningún nodo metainfo/relevance tiene el valor All, el documento de salida no mostrará ninguna noticia cuando All sea el valor del nodo byrelevance. Lo que tenemos que hacer ahora es crear otra rama para la condición. Esta nueva rama buscará un valor de All. Al crear una plantilla newsitem dentro de esta rama, conseguiremos ver todas las noticias si la prueba da true como resultado. Para ello:
1.Seleccione la condición newsitem en la vista Diseño.
2.Haga clic con el botón derecho en la condición y seleccione Copiar rama en el menú contextual.
3.Aparece el cuadro de diálogo Editar expresión XPath. Introduzca la expresión /presswatch/selection/byrelevance='All'.
4.Haga clic en Aceptar y se crea la rama nueva.
El contenido de esta nueva rama es una plantilla de la primera rama. Lo que hace la nueva rama es generar la plantilla de las noticias si el usuario selecciona la opción All en el cuadro combinado.
Ahora no olvide guardar el archivo de diseño.