viernes, 3 de enero de 2014

El formato de archivo Yaml


Yaml es un formato de serealización de datos inspirado básicamente en los lenguajes Python y XML que desde hace 13 años ya se transformó en un estándar, su nombre Yaml es un acrónimo recursivo que significa “YAML Ain't Another Markup Language” en español “YAML no es otro lenguaje de marcado”.

Es muy simple identificar un formato de tipo Yaml, su estructura es simplemente prolija basada en la identación y herencia.

Características


Yaml fue creado con la premisa de que todos los datos pueden ser representados en forma de listas, como les comentaba líneas atrás, su sintaxis es sumamente sencilla y fue diseñada para que los usuarios tengan la capacidad de crear y entender este formato.


  • 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 guion ( - ) 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 especiales 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.


Lo interesante de todo, es que al ser un estándar es posible encontrar librerías que nos ayuda a interpretar este tipo de formato en los lenguajes de programación más utilizados, como C, Ruby, Python, Java, Perl, C#, PHP, JavaScript, etc.

La primera vez que me tocó editar un archivo con formato Yaml fue en la primera versión de Symfony y desde ese momento no dejé de utilizarlo para mis proyectos que programé en Python como WPHardening y MTFF (MikroTik Firewall Framework) como los archivos de configuración.


Ejemplo


Archivo de configuración mtff.yaml

configuration:
    product:    RB450G
    version:    0.1
    author:     Daniel Maldonado
    comment:    Comment for Firewall

interfaces:
    ether1:
        ip:
            name:       ether1-wan
            address:    192.168.0.1
            netmask:    255.255.255.0
            network:    192.168.0.0
            comment:    Interface de la WAN

        services:
            accept:     [DNS, HTTP, PROXY]
            deny:       [SSH]

        policy:         drop

    ether2:
        ip:
            name:       ether2-lan
            address:    10.0.0.1
            netmask:    255.255.255.0
            network:    10.0.0.0
            comment:    Interface de la LAN

        services:
            accept:     [DNS, HTTP, PROXY, SSH]
            deny:       [FTP]

        policy:         drop

router:
    ether2-to-ether1:
        inface:         ether2
        outface:        ether1
        options:        masquerade
        services:
            accept:     [DNS, HTTP, PROXY]
            deny:       [FTP, SSH]

services:
    DNS :   { tcp: 53, udp: 53 }
    HTTP:   { tcp: 80 } 
    PROXY:  { tcp: 8080 }
    FTP:    { tcp: 21 }
    SSH:    { tcp: 22 }
    WINBOX: { tcp: 8291 }
    TELNET: { tcp: 23 }

Basta con conocer mínimamente sus reglas de construcción para poder interpretar y manipular estos archivos de forma simple.

A poner en práctica lo aprendido y espero sus comentarios y sugerencias.

Saludos!

Enlace | yaml.org

No hay comentarios.:

Publicar un comentario

Entradas populares