Cálculos de atributos derivados complejos
Aunque en esta guía de aprendizaje no se muestra este hecho, los cálculos de atributos derivados necesitan con frecuencia hacer algo más que concatenar series estáticas con valores extraídos del modelo de entrada JET. Estas manipulaciones se suelen llevar a cabo llamando a funciones XPath dentro de una expresión XPath.
Suponga que diseña un mensaje de correo electrónico generado para informar a los usuarios de que se había creado una cuenta con sus direcciones de correo electrónico como ID y una contraseña generada. La contraseña generada es la primera letra de su nombre junto a su apellido, todo en minúscula. El mensaje de correo electrónico generado debe contener esta contraseña como recordatorio para los usuarios.
El motor XPath de JET proporciona varias funciones que pueden ayudarle a realizar esta tarea. La función substring devuelve una parte de una serie, la función concat concatena dos o más series, y la función lowercase gestiona la conversión a minúsculas. El fragmento de código siguiente muestra el cálculo del atributo derivado hipotético para la contraseña en el elemento de correo:
{lower-case(concat(substring($mailing/@firstName,1,1), $mailing/@lastName))}JET incluye la mayoría de las funciones de XPath 1.0, tal como se definen en la biblioteca de funciones centrales de las especificaciones de XPath 1.0. Sólo dos funciones no están implementadas: lang e id. JET también proporciona varias funciones adicionales de XPath.
Filtrado de expresiones de vía de acceso XPath
En algunos casos, debe utilizar predicados XPath para procesar un subconjunto de elementos basado en un criterio determinado. Un predicado es una expresión que se aplica en un paso de una expresión XPath para filtrar elementos que coincidan con este paso. Un predicado puede ser una expresión booleana o una expresión entera, en cuyo caso se trata como un índice de base uno en el conjunto de elementos. Los predicados se especifican entre corchetes ([]).
En los ejemplos siguientes se presenta este concepto de manera más concreta. El código <c:iterate> siguiente sólo procesa elementos de correo que contengan un elemento de interés:
<c:iterate select="$campaign/mailing[interest]" var="mailing">XPath convierte el resultado del interés de la expresión de predicado en un valor booleano probando la cardinalidad del conjunto de nodos coincidentes. La expresión es equivalente al ejemplo siguiente:
<c:iterate select="$campaign/mailing[count(interest) > 0]" var="mailing">El código <c:iterate> siguiente procesa elementos de correo que especifiquen Product1 como primer producto en el que se interese un usuario:
<c:iterate select="$campaign/mailing[interest[1]/@code = 'Product1']" var="mailing">