tutorial español xslt functional-programming fxsl

español - ¿XSLT es un lenguaje de programación funcional?



xpath (6)

Varias preguntas sobre los lenguajes de programación funcional me han hecho pensar si XSLT es un lenguaje de programación funcional. Si no, ¿qué características faltan? ¿XSLT 2.0 se acortó o cerró la brecha?


Así es como se siente cuando lo estoy programando.

XSLT se basa completamente en la definición de funciones y su aplicación a eventos seleccionados que bajan de la secuencia de entrada.

XSLT te permite establecer una variable. La programación funcional no permite que las funciones tengan efectos secundarios, y eso es un problema.

Aún así, al escribir en XSLT, uno tiene la misma "sensación de trabajar en FP. Está trabajando con la entrada, no la está modificando, para crear resultados.

Este es un modelo de programación muy, muy diferente del utilizado cuando se trabaja con DOM API. DOM no separa la entrada y la salida en absoluto. Se le entrega una estructura de datos, y la manipula como mejor le parezca, sin vacilación, restricción o remordimiento.

Baste decir si te gusta FP y los principios que lo respaldan, probablemente te sientas cómodo trabajando en ello. Al igual que la experiencia con programación impulsada por eventos, y el XML en sí mismo, también lo hará sentir cómodo con él.

Si su única experiencia es con programas descendentes y no basados ​​en eventos, entonces XSLT será un paisaje alienígena muy desconocido. Al menos al principio. Desarrollar una pequeña experiencia y luego volver a XSLT cuando las expresiones XPath y el manejo de eventos le resulten realmente cómodos dará sus frutos.


En su mayor parte, lo que hace que XSLT no sea un lenguaje de programación 100% funcional es su incapacidad para tratar las funciones como un tipo de datos de primera clase.

Puede haber algunos otros, pero esa es la respuesta obvia.

¡Buena suerte!


Eso no es realmente un argumento, ya que solo puede declarar variables, no cambiar sus valores después de la declaración. En ese sentido, es un estilo declarativo, no imperativo, como se afirma en el artículo del señor Novatchev.

Los lenguajes de programación funcionales como Scheme o Erlang le permiten declarar variables también, y en Haskell también puede hacerlo:

- la función ''prueba'' toma la variable x y la agrega a cada elemento de la lista xs

test :: [Int] -> [Int] test xs = map (+ x) xs where x = 2



Saxon-SA ha introducido algunas funciones de extensión que hacen que XSLT funcione. Puede usar saxon:function() para crear un valor de función (en realidad, un {http://net.sf.saxon/java-type}net.sf.saxon.expr.UserFunctionCall value) que luego llamará con saxon:call() .

Saxon-B tiene una funcionalidad similar con el emparejamiento de saxon:expression() y saxon:eval() . La diferencia es que saxon:expression() toma cualquier expresión XPath, y saxon:eval() evalúa, mientras que saxon:function() toma el nombre de una función que saxon:call() llama.


XSLT es declarativo en lugar de stateful.

Aunque XSLT se basa en ideas de programación funcional, no es un lenguaje de programación completamente funcional, carece de la capacidad de tratar las funciones como un tipo de datos de primera clase. Tiene elementos como evaluación diferida para reducir la evaluación innecesaria y también la ausencia de bucles explícitos.

Sin embargo, como un lenguaje funcional, creo que se puede paralelizar muy bien con multihebra automática y segura en varios procesadores.

De Wikipedia en XSLT :

Como lenguaje, XSLT está influenciado por lenguajes funcionales y por lenguajes de patrones basados ​​en texto como SNOBOL y awk. Su predecesor más directo fue DSSSL, un lenguaje que realizaba la misma función para SGML que XSLT realiza para XML. XSLT también se puede considerar como un procesador de plantillas.

Aquí hay un gran sitio sobre cómo usar XSLT como un lenguaje funcional con la ayuda de FXSL. FXSL es una biblioteca que implementa soporte para funciones de orden superior.

Debido a FXSL, no creo que XSLT tenga una necesidad de ser totalmente funcional. Quizás FXSL se incluirá como un estándar W3C en el futuro, pero no tengo evidencia de esto.