a.css

esbudellant estàndards


Resolució de conflictes de prioritat en plantilles XSLT 1.0

22/06/07

Per determinar quin TEMPLATE s'ha d'aplicar quan la selecció d'un node aplica a múltiples TEMPLATE s'han de tenir en compte els següents criteris:

  1. Tots els TEMPLATE que tinguin menor precedència d'importació que el TEMPLATE seleccionat es descarten.
  2. Tots els TEMPLATE que tinguin menor prioritat que el TEMPLATE seleccionat es descarten. La prioritat per defecte es computa segons les següents regles:
    • Si el patró conté múltiples alternatives separades per | es tractarà com si fossin TEMPLATE separats, un per cada alternativa.
    • Si el patró conté un nom qualificat (QName) o una instrucció de procés (PI), precedit per un axis de tipus child:: o attribute:: la prioritat és 0.
    • Si el patró conté la forma NCName:* precedit per un axis de tipus child:: o attribute:: la prioritat és -0.25.
    • Si el patró és una evaluació de nodes precedida per un axis de tipus child:: o attribute:: la prioritat és -0.5.
    • Sinó la prioritat és 0.5.

Nota: Davant de dubtes millor mirar el punt 5.5 (Conflict Resolution for Template Rules) de l'especificació XSLT 1.0.

Aquest sistema porta en la majoria de casos a conflictes insolubles ja que usar una selecció de tipus:


<xsl:template match="node">
   (...)
</xsl:template>

o una selecció de tipus:


<xsl:template match="ancestorNode//node">
   (...)
</xsl:template>

Ambdues seleccions computen igual: 0.5.

Això es converteix en un problema ja que l'especificació diu explícitament:

It is an error if this leaves more than one matching template rule. An XSLT processor may signal the error; if it does not signal the error, it must recover by choosing, from amongst the matching template rules that are left, the one that occurs last in the stylesheet.

XSLT 1.0 - Conflict Resolution for Template Rules

Per resoldre inequívocament un conflicte, l'especificació XSLT 1.0 proporciona l'atribut "priority" que permet forçar la prioritat al valor desitjat.

A l'especificació del gener del 2007 d'XSLT 2.0 la cosa no és gaire més resolutiva, crec que un model més semblant a l'especificitat de CSS aniria millor.

Comentaris

Afegir un comentari


Run DMC ringtonesSeal ringtonesRolling Stones ringtonesDonnie McClurkin ringtones

© Arnau Siches. a.css està sota Llicència Creative Commons.