XML para quê? Conheça YAML, o primo esperto das linguagens de markup.

October 29, 2007

Conhece a anedota? Conta que um programador estava tentando resolver um problema: ele tinha um sistema que precisava manipular e enviar informação estruturada para outros clientes. Num instante de pura sagacidade, ele pensou “Já sei. Vou usar XML!”. No instante seguinte, de pura decepção, ele constatou: “Agora eu tenho dois problemas. Não bastasse meu problema original, eu vou usar XML.”

De todos os alfabetos gastos em tecnologias que construiam “em cima” do XML (XQuery, XPath, XSL, XML-RPC, X-Men, Xuxa, sei lá) não consigo lembrar de nenhum que traga algo novo. Parece que é o tipo de coisa que cai na categoria “problemas inventados pelos vendors de software para que eu possa continuar justificando lucros trimestrais de US$4 bilhões.”

Tudo que eu e o programador da anedota precisamos é de um sistema que possa passar informação de um jeito estruturado. Se puder ser facilmente lido como texto, tanto melhor. Ninguém merece ter que ficar editando arquivo CSV, não é mesmo?

Que tal a possibilidade de ver um registro de uma fatura num formato assim?

invoice: 34843

date : 2001-01-23

bill-to: &id001

given  : Chris

family : Dumars

address:

    lines: |

        458 Walkman Dr.

        Suite #292

    city    : Royal Oak

    state   : MI

    postal  : 48046

ship-to: *id001

product:

- sku         : BL394D

  quantity    : 4

  description : Basketball

  price       : 450.00

- sku         : BL4438H

  quantity    : 1

  description : Super Hoop

  price       : 2392.00

tax : 251.42

total: 4443.52

Esse é um documento YAML, válido. Bonitinho, né? Pena que ninguém mais usa isso por aí… e de que adianta ser capaz de emitir algo assim, se ninguém é capaz de receber? Vou ter que continuar usando XML? Não necessariamente. Especialmente se está mexendo com web e já ouviu falar de uma outra darling das notações de marcação, JSON.

JSON, essa você já deve ter ouvido falar. Seu browser mastiga isso com uma facilidade tremenda:

{"student": {

"first name": "John",

"last name": "Smith",

"course": {

"report": [

  {"Subject": "Math", "grade": "A"},

  {"Subject": "English", "grade": "C"},

  {"Subject": "Arts", "grade": "F"}]}}}

}

É só pedir para o seu interpretador Javascript avaliar essa string, e você tem um objeto que pode processar, e apresentar um relatório lindo para os pais do John, que vão dar uma bronca nele por ele não largar do computador e não ter aprendido a desenhar flores em aquarela.

Deixa eu contar o pulo do gato: todo JSON válido também é YAML. A notação usada em JSON é usada para descrever inline collections em YAML. Se você tiver uma string que seja a representação de um objeto em JSON, ele será visto como um objeto pelo seu parser de YAML (escolha aqui seu parser, na sua linguagem/plataforma favorita).

O que se ganha com isso? Um exemplo: validação e manipulação de formulários. Que tal a possibilidade de não só validar os dados no cliente, mas também pegar os campos de um formulário, verificar se o objeto está consistente, transformar em uma string JSON (usando um emitter apropriado) e enviar para o servidor essa string? Depois, o seu parser de YAML vai te montar um objeto, o qual pode ser muito mais facilmente validado e verificado.

Para quem quiser fazer formulários onde campos podem ser livremente adicionados ou removidos, ou usar toneladas de AJAX em seu aplicativo web, a combinação JSON + YAML funciona e é uma mão na roda.

tags: ,
posted in Uncategorized by Raphael Lullis

Follow comments via the RSS Feed | Leave a comment | Trackback URL

  • laggarcia

    Raphael,

    Concordo com você que pra muita coisa XML é overkill. Por exemplo, pra passar registros como os exemplos que você mostrou.

    Mas não consigo ver este tipo de tecnologia que você mostrou substituindo XML. Por exemplo, não consigo enxergar como este tipo de tecnologia representaria um texto com formatação (por exemplo, HTML). Ou tipos de informações mais estruturadas, com interdependências de validações. Você tem exemplos disso?

    Um abraço,

    Leonardo Garcia

  • http://www.via6.com/topico.php?tid=122471 <![CDATA[Miguel via Rec6]]>

    XML para quê? Conheça YAML, o primo esperto das linguagens de markup. « Log

    XML para quê? Conheça YAML, o primo esperto das linguagens de markup

  • http://log4dev.wordpress.com/ Miguel Galves

    Raphael, fico bem feliz em ver que finalmente vc escreveu um review tecnológico! :-)

    Não conhecia YAML, mas andei brincando um pouco com JSON. De fato, para transferência de dados estruturados, JSON resolve muito bem o problema e é mais simples e mais direto do que XML. Se formos utilizar esta transferência em um ambiente com Javascript, a vantagem é dupla, já que javascript avalia e entende JSON. E parsear XML em js é um porre.

    Mas concordo com o Leo quando ele fala que talvez para dados mais complexos, para armazenamento e coisas onde você precise de mais detalhes, XML ainda seja melhor.

    Como eu disse no post sobre diversidade, acho que é importante usar as melhores ferramentas em cada momento. No caso, JSON e XML tem o propósito interessante de estruturar informação de uma forma legível e clara. Me parecem que elas podem coexistir em domínios separados.

    []s

  • Raphael Lullis

    Léo e Miguel,

    tem razão. Não recomendaria a ninguém que largasse tudo que foi feito em XML e partisse para outra coisa. Só acho que ainda está para surgir alguma aplicação onde todas as coisas que XML diz resolver não tenha sido resolvidas por outros sistemas, menores.

    Quanto a validação de esquema: tirei da wikipedia o que vai abaixo.

    YAML lacks the notion of tag attributes that are found in XML and SDL. For data structure serialization, tag attributes are, arguably, a feature of questionable utility since their presence adds complexity when represented by the natural data structures (hashes, arrays) in common languages. [5] YAML instead has extensible type declaration (including class types for objects). YAML lacks XML’s language-defined document schema descriptors that allow, for example, a document to self validate. (A reference implementation of a proposed YAML schema descriptor language exists.)

  • Raphael Lullis

    Ah… e quando eu digo que não há nada de novo em XML, é pelo seguinte:

    XML usa a idéia do DOM: uma árvore, com elementos cujos filhos são outros elementos. Isso não é novo. S-expressions já são assim.

    (html (head (title “Example page”) ) (body (h1 style “color:red” “This is a really pointless example”) (p “I can’t think of anything exciting to say on this line.” (br) “Nor this one.” ) ) )

    O trabalho de um interpretador LISP, por exemplo, consiste justamente em parsear o seu arquivo e montar a AST. Isso é, na teoria e na prática, justamente a “validação de um schema”.

  • http://bpfurtado.livejournal.com Bruno

    A principal vantagem do XML é que é meta-formato padronizado.

    Por ser um meta-formato e não um formato ele lhe dá a flexibilidade de criar suas estruturas hierárquicas da maneira como você quiser.

    Por ser padronizado você pode pegar o padrão e implementar parsers em qualquer plataforma, podendo então trocar dados estruturados entre COBOL, Java, .NET, Python, Ruby, etc.

    E é claro, hoje os parsers já estão todos implementados, você nunca precisará codificar algo na mão para ler um XML em praticamente 100% das plataformas de desenvolvimento.

    XML surgiu para prover interoperabilidade, e isto ele faz muito bem. (e de quebra ainda tem a questão da validação que ele faz automaticamente também, ou melhor os parsers são obrigados pela spec).

    Graças a estas características é possível você criar formatos para informações hierarquisadas, sem você se preocupar em como Ler ou Escrever (pois as APIs já estão prontas). E ter a certeza de que qualquer outro sistema pode ler estas informações (validadas) facilmente.

    O XML-RPC que foi citado apenas implementa RPC se valendo de XML para ser o formato padrão entre uma invocação Java -> C++ por exemplo. Graças ao XML os projetistas não precisaram se preocupar em criar parsers, formatos fechados, etc.

    Quanto a verbosidade de XML, qualquer XML de tamanho razoável provavelmente hoje é gerado programaticamente e não por mãos humanas. E leitores XML existem em número infinitamente superior aos editores de qualquer outro formato concorrente.

    O que eu sinto falta no YAML é a validação sintática que qualquer editor (para programadores) pode fazer em um XML. Não gostaria de ter que rodar meu programa e ver um erro só em runtime para descobrir que troquei um “:” por um “;”.

    No mundo java recomendo a API http://www.dom4j.org/

  • Raphael Lullis

    Não, Bruno, de novo não! :D

    Vamos deixar assim: o que motivou o post foi a minha busca por uma esquema prático para passar dados de um cliente web para o servidor. E usando o esquema JSON + YAML, eu também não escrevo nada em nenhum desses formatos. As libs de JS se encarregam de emitir o código JSON, e o parser de YAML se encarrega de construir o objeto para mim.

    Cheers.

  • http://bpfurtado.livejournal.com Bruno

    Mas nem foi para contradizer as vantagens que você levantou não :) Foi mais para complementar o post (bem interessante por sinal) com as informações sobre XML.

  • http://www.navegantes.org Glaydson

    Pena que ninguém mais usa isso por aí…

    Eu uso! Eu uso! :)

    O Framework PHP Symfony utiliza o YAML. http://www.symfony-project.com

blog comments powered by Disqus

Switch to our mobile site

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org