Re: [OT] ¿Es esto un bug de libxslt?
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?
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?
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?
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