Re: [OT] ¿Es esto un bug de libxslt?

2014-11-12 Por tema Camaleón
El Tue, 11 Nov 2014 18:36:04 +0100, José Miguel (sio2) escribió:

> El Tue, 11 de Nov de 2014, a las 04:05:27PM +, Camaleón dijo:
> 
>> Tomemos lo que dice la normativa (v.2):
> 
> En realidad uso XSLT 1.0, porque libxslt no da para más.

Uff... vale. Entonces tenemos que usar como referencia:

http://www.w3.org/TR/xslt#misc-func

>> http://www.w3.org/TR/xslt20/#current-function
> 
>> Creo ("creo" ojo, porque tengo el lenguaje bien oxidado) que lo que te
>> falla es efectivamente el contexto el que estás procesando la regla y
>> el nivel al que están los dos atributos que usas como filtro de conteo.
>> Es decir, estás usando el mismo valor del atributo (tipo) en el mismo
>> nivel de ahí que el resultado de las dos expresiones sea idéntico.
>> 
>> Fíjate en el ejemplo de la documentación:
>> 
>> 
>>   ^   
>> @name ! @ref (distintos atributos)
>> 
>> Y tu expresión:
>> 
>> 
>> 
>> @tipo = @tipo (mismo atributo)
> 
> No veo en qué afecta que esos atributos tengan el mismo nombre ("tipo").
> En la normativa sólo pone que current() hace referencia al nodo que está
> procesando el procesador XSLT en el momento en que se evalúa la
> expresión XPath. Nada más. De cómo se llamen o se dejen de llamar
> atributos que pertenecen a ese nodo, no dice nada. De hecho la misma
> expresión que me falla en "xsl:number" me funciona en "xsl:if"
> y en "xsl:apply-templates".

No me refería a un problema con la normativa sino a que no estás 
obteniendo los datos correctamente por estar en el mismo nivel de 
consulta. Si te fijas en el ejemplo que ponen en la documentación 
oficial, cuando usas corchetes el contexto de la función "current()" 
cambia y con el filtro que has creado "@tipo=current()/@tipo" estás 
comparando dos valores que son exactamente iguales porque ¿cuál es el 
valor de "tipo"? No tengo el xml en bruto pero entiendo que lo que buscas 
es saber cuántos discos de la fonoteca son de un tipo determinado. 

En el ejemplo de la documentación añaden una variable más con la que 
comparar el atributo del elemento que es lo que tu filtro no tiene.

> Ahora bien, leyendo ahí mismo veo lo siguiente:
> 
> "If the current function is used within a pattern, its value is the node
> that is being matched against the pattern."
> 
> Pero no entiendo muy bien el alcance de esta afirmación y si es la
> culpable de que con el "count" de number no funcione y con el "select"
> de xsl:apply-templates o el "test" de xsl:if, sí lo haga.

Puede ser. En el ejemplo usan "", podrías probarlo 
así aunque sólo sea para ver si efectivamente devuelve el resultado 
esperado.

> En la especificación que debería estar leyendo (1.0) se dice al
> respecto:
> 
> "It is an error to use the current function in a pattern."
> 
> Me autocorrijo. Mirando las deficiones de los elementos xsl:if,
> xsl:apply-templates y xsl:number veo que se definen:
> 
> * El "test" de xsl:if como boolean-expresion.
> * El "select" de xsl:apply-templates como node-set-expression.
> * El "count" de xsl:number como pattern.
> 
> Así que esa es la causa. Sin embargo, no tengo muy claro por qué unos
> atributos son "pattern" y otros no: no debe ser algo caprichoso.

En ese caso podrías obtener el mismo resultado dando un rodeo, usando 
algún elemento que no sea un patrón y almacenando el resultado en una 
variable para mostrarlo después.

Saludos,

-- 
Camaleón


-- 
To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/pan.2014.11.12.14.49...@gmail.com



Re: [OT] ¿Es esto un bug de libxslt?

2014-11-11 Por tema sio2
El Tue, 11 de Nov de 2014, a las 04:05:27PM +, Camaleón dijo:

> Tomemos lo que dice la normativa (v.2):

En realidad uso XSLT 1.0, porque libxslt no da para más.

> http://www.w3.org/TR/xslt20/#current-function

> Creo ("creo" ojo, porque tengo el lenguaje bien oxidado) que lo que te 
> falla es efectivamente el contexto el que estás procesando la regla y el 
> nivel al que están los dos atributos que usas como filtro de conteo. Es 
> decir, estás usando el mismo valor del atributo (tipo) en el mismo nivel 
> de ahí que el resultado de las dos expresiones sea idéntico.
> 
> Fíjate en el ejemplo de la documentación:
> 
> 
>   ^   
> @name ! @ref (distintos atributos)
> 
> Y tu expresión:
> 
> 
> 
> @tipo = @tipo (mismo atributo)

No veo en qué afecta que esos atributos tengan el mismo nombre
("tipo"). En la normativa sólo pone que current() hace referencia al
nodo que está procesando el procesador XSLT en el momento en que se
evalúa la expresión XPath. Nada más. De cómo se llamen o se dejen de
llamar atributos que pertenecen a ese nodo, no dice nada. De hecho la
misma expresión que me falla en "xsl:number" me funciona en "xsl:if"
y en "xsl:apply-templates".

Ahora bien, leyendo ahí mismo veo lo siguiente:

"If the current function is used within a pattern, its value is the node
that is being matched against the pattern."

Pero no entiendo muy bien el alcance de esta afirmación y si es la
culpable de que con el "count" de number no funcione y con el "select"
de xsl:apply-templates o el "test" de xsl:if, sí lo haga.

En la especificación que debería estar leyendo (1.0) se dice al
respecto:

"It is an error to use the current function in a pattern."

Me autocorrijo. Mirando las deficiones de los elementos xsl:if,
xsl:apply-templates y xsl:number veo que se definen:

* El "test" de xsl:if como boolean-expresion.
* El "select" de xsl:apply-templates como node-set-expression.
* El "count" de xsl:number como pattern.

Así que esa es la causa. Sin embargo, no tengo muy claro por qué unos
atributos son "pattern" y otros no: no debe ser algo caprichoso.

> Saludos,

Saludos y gracias.

-- 
   Quiere, aborrece, trata bien, maltrata,
y es la mujer, al fin, como sangría,
que a veces da salud y a veces mata.
  --- Lope de Vega ---


-- 
To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/2014173604.ga2...@cubo.casa



Re: [OT] ¿Es esto un bug de libxslt?

2014-11-11 Por tema Camaleón
El Mon, 10 Nov 2014 19:36:22 +0100, José Miguel (sio2) escribió:

> Hola, listeros:

Súper-OT pero me encanta XSLT :-P

(...)

> En cambio, esto no funciona:
> 
> 
> 
> La salida que se me muestra es la misma que si hubiera escrito:
> 
> 
> 
> o sea, que me cuenta todos los discos. Si he entendido bien, current()
> se refiere siempre al nodo que está procesando el XSLT y no al nodo de
> referencia en la expresión XPath.

(...)

Tomemos lo que dice la normativa (v.2):

http://www.w3.org/TR/xslt20/#current-function

Creo ("creo" ojo, porque tengo el lenguaje bien oxidado) que lo que te 
falla es efectivamente el contexto el que estás procesando la regla y el 
nivel al que están los dos atributos que usas como filtro de conteo. Es 
decir, estás usando el mismo valor del atributo (tipo) en el mismo nivel 
de ahí que el resultado de las dos expresiones sea idéntico.

Fíjate en el ejemplo de la documentación:


  ^   

@name ! @ref (distintos atributos)

Y tu expresión:


   ^   ^

@tipo = @tipo (mismo atributo)

Saludos,

-- 
Camaleón


-- 
To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/pan.2014.11.11.16.05...@gmail.com



[OT] ¿Es esto un bug de libxslt?

2014-11-10 Por tema sio2
Hola, listeros:

He tenido que estar apañado un XSLT (de lo que sé lo justito) y resulta
que me he encontrado con lo siguiente:

Esto funciona perfectamente:




Sólo se cuentan los discos cuyo "tipo" sea igual al "tipo" del nodo que se
está procesando (que es un disco).

En cambio, esto no funciona:



La salida que se me muestra es la misma que si hubiera escrito:



o sea, que me cuenta todos los discos. Si he entendido bien, current()
se refiere siempre al nodo que está procesando el XSLT y no al nodo de
referencia en la expresión XPath.

La misma expresión he usado en el atributo "test" de un "xsl:if" y en el
select de un "xsl:apply-templates" y el current() ha funcionado como yo
esperaba.

He procurado buscar el bug en https://bugzilla.gnome.org/, pero no he
encontrado nada al respecto.

¿Está alguien puesto en XSLT?

Saludos.

-- 
   Un bel morir tutta una vita honora.
  --- Francisco Petrarca ---


-- 
To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20141110183622.ga6...@cubo.casa