YAML

16 10 2007

En la actualidad, XML disfruta la posición de lenguaje de marcado por excelencia, con una gran cantidad de aplicaciones y de lenguajes derivados. Ahora, también debemos enfocarnos en otras alternativas que existen en la actualidad, para el intercambio de información. Este es el caso de YAML (YAML Ain’t Another Markup Language); formato de serialización de datos legible por humanos inspirado en lenguajes como XML, C, Python, Perl, así como el formato para correos electrónicos especificado por el RFC 2822.

YAML fue creado bajo la creencia de que todos los datos pueden ser representados adecuadamente como combinaciones de listas, hashes (mapeos) y datos escalares (valores simples). La sintaxis es relativamente sencilla y fue diseñada teniendo en cuenta que fuera muy legible pero que a la vez fuese fácilmente mapeable a los tipos de datos más comunes en la mayoría de los lenguajes de alto nivel. Además, YAML utiliza una notación basada en el indentado y/o un conjunto de caracteres Sigil distintos de los que se usan en XML, haciendo que sea fácil componer ambos lenguajes.

En si, el lenguaje es muy potente a la vez que sencillo. No debería ser considerado como una alternativa sino a un complemento a XML, utilizado en casos, en donde se necesita un poco más de agilidad para el intercambio de información. He visto varios ejemplos de la utilización de YAML en distintos proyectos. Ruby on Rails, el famoso framework de desarrollo web para el lenguaje Ruby, utiliza YAML; entre otras cosas, para describir el archivo de configuración de conexión a la Base de Datos. Ruby, cuenta con un intérprete nativo para el lenguaje y existen muchas implementaciones de mapeadores, en otros lenguajes, como el caso de Spyc para PHP.

En lo particular, veo mucho potencial en este lenguaje. Es sencillo por naturaleza y, dependiendo de nuestras necesidades, sería fantástico agregarlo a nuestros proyectos. Por otra parte, comentar que JSON es un subconjunto del lenguaje YAML, muy utilzado en la actualidad, junto con el lenguaje JavaScript.

Ejemplos de Sintáxis YAML

Listas:

— # Películas favoritas, formato de bloque
– Casablanca
– Viridiana
– Psicosis
— # Lista de la compra, formato en línea
[leche, pan, huevos]

Arrays asociativos

— # Blooque
nombre: Pepe López
edad: 33
— # En línea
{nombre: Pepe López, edad: 33}

Como puede apreciarse en los ejemplos, la sintáxis es bastante sencilla. En pruebas de rendimiento, en ciertas ocasiones YAML supera en velocidad de mapeo a XML, aunque también, resulta ocupar más especio de ancho de banda, al estar comprimido.

Para formar documentos YAML, existen ciertas reglas especiales, dada su naturaleza.

  • Los contenidos en YAML se describen utilizando el conjunto de caracteres imprimibles de Unicode, bien en UTF-8 o UTF-16.
  • La estructura del documento se denota indentando con espacios en blanco; sin embargo no se permite el uso de caracteres de tabulación para indentar.
  • Los miembros de las listas se denotan encabezados por un guión ( – ) con un miembro por cada línea, o bien entre corchetes ( [ ] ) y separados por coma espacio ( , ).
  • Los arrays asociativos se representan usando los dos puntos seguidos por un espacio. en la forma “clave: valor”, bien uno por línea o entre llaves ( { } ) y separados por coma seguida de espacio ( , ).
  • Un valor de un array asociativo viene precedida por un signo de interrogación ( ? ), lo que permite que se construyan claves complejas sin ambigüedad.
  • Los valores sencillos (o escalares) por lo general aparecen sin entrecomillar, pero pueden incluirse entre comillas dobles ( ” ), o comillas simples ( ‘ ).
  • En las comillas dobles, los caracteres espaciales se pueden representar con secuencias de escape similares a las del lenguaje de programación C, que comienzan con una barra invertida ( \ ).
  • Se pueden incluir mútliples documentos dentro de un único flujo, separándolos por tres guiones ( — ); los tres puntos ( … ) indican el fin de un documento dentro de un flujo.
  • Los nodos repetidos se pueden denotar con un ampersand ( & ) y ser referidos posteriormente usando el asterisco ( * )
  • Los comentarios vienen encabezados por la almohadilla ( # ) y continúan hasta el final de la línea.
  • Los nodos pueden etiquetarse con un tipo o etiqueta utilizando el signo de exclamación( ! ) seguido de una cadena que puede ser expandida en una URL.
  • Los documentos YAML pueden ser precedidos por directivas compuestas por un signo de porcentaje ( % ) seguidos de un nombre y parámetros delimitados por espacios.. Hay definidas dos directivas en YAML 1.1:
    • La directiva %YAML se utiliza para identificar la versión de YAML en un documento dado.
    • La directiva %TAG se utiliza como atajo para los prefijos de URIs. Estos atajos pueden ser usados en las etiquetas de tipos de nodos.

YAML requiere que las comas y puntos y comas que se utilicen como separadores en las listas sean seguidos por un espacio, de forma que los valores escalares que contengan signos de puntuación (como 5,280 o http://www.wikipedia.org) se puedan reprsentar sin necesidad de utilizar comillas.

Hay dos caracteres adicionales que están reservados en YAML para su posible estandarización en un futuro: la arroba ( @ ) y el acento grave ( ` ).

YAML, tiene mucho potencial. Hay multiples esfuerzos para difundir su uso y está siendo considerado para ser agregado como un estandard de marcado ligero. En futuros artículos, describiré en mayor detalle cada una de sus características.

NOTA: algunas partes de este artículo fueron tomadas del articulo: http://es.wikipedia.org/wiki/YAML


Acciones

Information

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: