Ejemplo: agrupar-por (Scores.sps)
El ejemplo Scores.sps está basado en el esquema Scores.xsd y utiliza el archivo XML de trabajo Scores.xml. Está disponible en la carpeta (Mis) Documentos, C:\Documents and Settings\<usuario>\Mis Documentos\Altova\StyleVision2023\StyleVisionExamples\Tutorial\Grouping\Scores\. La estructura del documento XML es esta: un elemento de documento results contiene un elemento group o más y un elemento match o más. Cada elemento match representa un partido y tiene esta estructura:
<match group="A" date="2007-10-12">
<team name="Brazil" for="2" points="3"/>
<team name="Germany" for="1" points="0"/>
</match>
El diseño se divide en tres partes (imagen siguiente): (i) los resultados de los partidos de cada día (los elementos se agrupan por //match/@date), (ii) los resultados de los partidos de cada grupo (los elementos se agrupan por //match/@group) y (iii) tablas de grupo con un resumen de la posición de cada grupo (una tabla dinámica creada con el elemento group, con cálculos automáticos para calcular los datos necesarios).
Estrategia
Para las dos secciones del diseño que contienen los resultados de los partidos, agrupamos los partidos por fecha y por torneo. Para los miembros de cada grupo (fecha y torneo) creamos tablas sin contorno. Los partidos que se jugaron en una fecha aparecen en una tabla y los resultados de un grupo del torneo aparecen en otra tabla (por ejemplo, los partidos del grupo A). Para la última sección, donde aparece la posición de cada grupo, creamos una tabla dinámica a partir del elemento group donde los cálculos dinámicos generan el valor de los datos necesarios.
Crear el diseño SPS
El diseño se creó así:
1.Arrastre el elemento /results/match desde la estructura del esquema y al soltarlo en el diseño seleccione Crear contenido.
2.Haga clic con el botón derecho en la etiqueta del elemento match y en el menú contextual seleccione Agrupar por.
3.En el cuadro de diálogo "Definir la agrupación de los resultados" seleccione la opción agrupar-por y en el cuadro de texto Criterio de agrupación escriba la expresión XPath @date. Después haga clic en Aceptar.
4.Aparece un cuadro de diálogo preguntando si se deben ordenar los grupos. Hacemos clic en Sí para que los grupos aparezcan en orden alfabético ascendente. (Si quiere, esto se puede definir más tarde.)
5.Como cada grupo (una fecha) debe crearse en una tabla distinta, cree una tabla a partir de la plantilla current-group. Para ello haga clic con el botón derecho en la etiqueta de current-group(), seleccione el comando Convertir en | Tabla y después seleccione los nodos descendientes team/@name y team/@for como columnas de la tabla (imagen siguiente).
6.En cada celda cree un guión, que debe aparecer en el resultado a no ser que el partido sea el último del grupo. Para ello use una plantilla condicional con esta condición position() != last(). El resultado de esta plantilla condicional sería Brazil - Germany o 2 - 1, por ejemplo.
7.Inserte un cálculo automático en el título para obtener la clave de agrupación actual para cada grupo (expresión XPath: current-grouping-key()).
8.Aplique el formato deseado a la tabla.
9.Para agrupar los partidos por grupos, repita todo el proceso pero agrupe los partidos por el atributo group de match.
10.Para las tablas de los grupos (en la tercera sección del diseño), que contienen la posición de cada equipo del grupo, cree una tabla dinámica a partir del elemento /results/group. Añada las columnas que sean necesarias (con los comandos Tabla | Anexar columna o Tabla | Insertar columna). Cree cálculos automáticos en cada columna para calcular la posición del equipo (3 puntos por victoria, 1 punto por empate y 0 puntos por derrota). Y para terminar ordene la tabla por orden ascendente según el total de puntos obtenido. Para ver las expresiones XPath utilizadas para obtener estos resultados, haga clic con el botón derecho en el cálculo automático o en la plantilla y seleccione Editar XPath u Ordenar por respectivamente.