SXML es una sintaxis alternativa para escribir datos XML (más precisamente, XML Infosets [1] ) como expresiones S , para facilitar el trabajo con datos XML en Lisp y Scheme . Un conjunto de herramientas asociado [ ¿cuál? ] implementa XPath , SAX y XSLT para SXML en Scheme [2] [3] y están disponibles en la implementación GNU Guile de ese lenguaje.
Extensión de nombre de archivo | .sxml , .scm |
---|---|
Código de tipo | TEXTO |
Tipo de formato | lenguaje de marcado |
La correspondencia textual entre SXML y XML para un fragmento XML de muestra se muestra a continuación:
XML | SXML |
---|---|
| ( etiqueta ( @ ( atributo1 " valor1 " ) ( atributo2 " valor2 " )) ( "nodo de texto" anidado ) ( vacío )) |
En comparación con otras representaciones alternativas para XML y sus lenguajes asociados, SXML tiene la ventaja de ser analizable directamente por las implementaciones de Scheme existentes. Las herramientas y la documentación asociadas fueron elogiadas en muchos aspectos por David Mertz en su columna de IBM developerWorks , aunque también criticó la naturaleza preliminar de su documentación y sistema. [4]
Ejemplo
Tome la siguiente página XHTML simple :
< html xmlns = "http://www.w3.org/1999/xhtml" xml: lang = "en" lang = "en" > < head > < title > Una página de ejemplo title > head > < body > < h1 id = "greeting" > ¡ Hola! h1 > < p > Esto es solo un & gt; & gt; ejemplo & lt; & lt; para mostrar XHTML & amp; SXML. p > cuerpo > html >
Después de traducirlo a SXML, la misma página ahora se ve así:
( * TOP * ( @ ( * NAMESPACES * ( x "http://www.w3.org/1999/xhtml" ))) ( x: html ( @ ( xml: lang "en" ) ( lang "en" ) ) ( x: head ( x: title "Una página de ejemplo" )) ( x: body ( x: h1 ( @ ( id "greeting" )) "Hola" ) ( x: p "Esto es solo un >> ejemplo << para mostrar XHTML y SXML. " ))))
El par de etiquetas de cada elemento se reemplaza por un par de paréntesis. El nombre de la etiqueta no se repite al final, es simplemente el primer símbolo de la lista. A continuación, se muestran los contenidos del elemento, que son elementos en sí mismos o cadenas. No se requiere una sintaxis especial para los atributos XML. En SXML simplemente se representan como un nodo más, que tiene el nombre especial de @. Esto no puede causar un conflicto de nombre con una etiqueta "@" real, porque @ no está permitido como nombre de etiqueta en XML. Este es un patrón común en SXML: cada vez que se usa una etiqueta para indicar un estado especial o algo que no es posible en XML, se usa un nombre que no constituye un identificador XML válido.
También podemos ver que no hay necesidad de "escapar" de los caracteres significativos como & y> como & amp; y & gt; entidades. Todo el contenido de la cadena se escapa automáticamente porque se considera contenido puro y no tiene etiquetas ni entidades. Esto también significa que es mucho más fácil insertar contenido generado automáticamente y que no hay peligro de que nos olvidemos de escapar de la entrada del usuario cuando lo mostramos a otros usuarios (lo que podría dar lugar a todo tipo de ataques de secuencias de comandos entre sitios u otras molestias de desarrollo). .
Referencias
- ^ Kiselyov, Oleg (2002). "Especificación SXML". Avisos ACM SIGPLAN . 37 (6): 52–58. doi : 10.1145 / 571727.571736 .
- ^ Kiselyov, Oleg; Lisovsky, Kirill (2002). Implementaciones XML, XPath, XSLT como SXML, SXPath y SXSLT (PDF) . Conferencia Internacional Lisp.
- ^ Kiselyov, Oleg; Krishnamurthi, Shriram (2003). SXSLT: Lenguaje de manipulación para XML . Aspectos prácticos de los lenguajes declarativos. Apuntes de conferencias en Ciencias de la Computación. 2562 . págs. 256–272. doi : 10.1007 / 3-540-36388-2_18 . ISBN 978-3-540-00389-2.
- ^ Mertz, David (23 de octubre de 2003). "Asuntos XML: investigación de SXML y SSAX" . IBM developerWorks . Archivado desde el original el 4 de diciembre de 2004 . Consultado el 10 de enero de 2015 .