Ejemplo: una factura
El archivo SPS de ejemplo SimpleInvoice.sps de la carpeta (Mis) Documentos, C:\Documents and Settings\<usuario>\Mis Documentos\Altova\StyleVision2025\StyleVisionExamples\Tutorial\Auto-Calculations\, demuestra cómo usar cálculos automáticos para:
•Contar nodos
•Seleccionar un nodo en función de los datos introducidos por el usuario de la vista Authentic
•Crear cálculos complejos
En el archivo SPS de ejemplo, los cálculos automáticos aparecen resaltados en amarillo (imagen siguiente).
Contar nodos
En el archivo SPS de ejemplo cada producto de la lista está numerado según su posición en la lista de productos solicitados por el cliente (Product 1, Product 2, etc). Esta numeración se consigue gracias a un cálculo automático (imagen siguiente).
En este caso concreto la expresión XPath position() sería suficiente para obtener la numeración correcta. Otra manera muy fácil de obtener la posición de un nodo es contar el número de elementos del mismo nivel anteriores y sumar uno. La expresión XPath sería: count(preceding-sibling::Product)+1. Este último método es ideal para los contextos en los que es difícil o imposible usar la función position(). Puede probar este cálculo automático en el archivo de ejemplo eliminando productos y añadiendo productos nuevos.
Seleccionar un nodo en función de los datos introducidos por el usuario
En el archivo de ejemplo las categorías de productos (Book, CD, DVD, or Electronics) están en el nodo //Product/Category y aparecen en un cuadro combinado. Esta selección se introduce en el nodo //Product/Category del documento XML. Después un cálculo automático utiliza este valor para remitirse a una "tabla de búsqueda" del documento XML e identificar el nodo que contiene el porcentaje de IVA para cada categoría de productos. La expresión de este cálculo automático es:
for $i in Category return /Invoice/Categories/Category[. = $i]/@rate.
En el documento de salida aparece la tasa de IVA en la posición donde se insertó el cálculo automático. En el archivo SPS de ejemplo la tabla de búsqueda se almacena en el mismo documento XML que los datos de la factura. No obstante, esta tabla también se puede almacenar en un documento distinto, en cuyo caso habría que acceder a ella con la función doc() de XPath 2.0. Observe que cada categoría tiene una tasa de IVA diferente (Book=10%; CD=15%; DVD=15%; Electronics=20%).
Crear un cálculo automático complejo
La tasa de IVA (que se obtiene con el cálculo automático descrito más arriba) es necesaria para poder calcular el precio bruto (precio neto + IVA) de cada producto. La fórmula necesaria se podría derivar así:
Gross Price = Net Price + VAT-amount
Puesto que VAT-amount = Net Price * VAT-percentage div 100
Entonces Gross Price = Net Price + (Net Price * VAT-percentage div 100)
El precio neto de un producto se obtiene del nodo PriceNet. La tasa de IVA se calcula con el cálculo automático descrito más arriba porque su valor no está disponible en ningún nodo. Como este valor no se puede obtener directamente de ningún nodo, debemos volver a calcularlo con el cálculo automático que calcula el precio bruto. La expresión XPath sería:
for $i in Category return PriceNet + (PriceNet *(/Invoice/Categories/Category[. = $i]/@rate) div 100)
La expresión XPath se puede ver y editar en la ventana Propiedades. Para probar el cálculo automático que calcula el precio bruto: (i) cambie el precio o la categoría de cualquier producto en el archivo XML y (ii) vuelva a cargar el archivo SPS. Observe que el precio bruto (precio neto + IVA) del producto modificado también cambió.