Gostaria de fazer uma pergunta sobre a notação XML e S-expression (-ish). As expressões S são bem antigas; eles também são realmente simples. Poderíamos considerar duas formas com significado igual e sintaxe diferente:
(código xml extraído da wikipedia polonesa )
<?xml version="1.0" encoding="UTF-8"?>
<ksiazka-telefoniczna kategoria="bohaterowie książek">
<!-- komentarz -->
<osoba charakter="dobry">
<imie>Ambroży</imie>
<nazwisko>Kleks</nazwisko>
<telefon>123-456-789</telefon>
</osoba>
<osoba charakter="zły">
<imie>Alojzy</imie>
<nazwisko>Bąbel</nazwisko>
<telefon/>
</osoba>
</ksiazka-telefoniczna>
Versão S-Expression (-ish):
(:version "1.0" :encoding "utf-8")
(ksiazka-telefoniczna :category "bohaterowie książek"
; komentarz(a comment)
(osoba :charakter "dobry"
(imie Ambroży)
(nazwisko Kleks)
(telefon 123-456-789))
(osoba :charakter "zły"
(imie Alojzy)
(nazwisko Bąbel)
(telefon)))
A versão S-Expression é muito mais concisa. Evitamos a redundância usando notações de lista simples, mas ainda podemos definir a sintaxe para incluir as coisas que queremos ter (por exemplo, propriedades). Obviamente, este é apenas um exemplo, e o padrão real poderia ter sido melhor ou simplesmente diferente; no entanto, é mais curto e fácil de analisar. Por que o XML venceu?
(para "This is a paragraph " (footnote "(better than the one under there)" "." /footnote) /para)
.Respostas:
Sabemos que os designers do XML estavam familiarizados com as expressões S, uma vez que o XML é baseado no SGML, e o SGML possui uma linguagem de folha de estilo, DSSSL, que usa a sintaxe da expressão S (e o esquema como linguagem de script incorporada).
No entanto, eles escolheram uma sintaxe diferente das expressões S devido aos casos de uso para XML. O XML foi inicialmente projetado para oferecer suporte a dados estruturados gerados por máquina e a linguagens de marcação como HTML, que são criados manualmente e contêm conteúdo misto (texto misturado com elementos com metadados).
Redundância
Os documentos de texto de marcação geralmente são mais longos que uma tela cheia. Se você vê um
)
e não consegue ver o início da estrutura, está bastante perdido; você não sabe se foi um capítulo ou uma barra lateral que acabou de terminar. A redundância de repetir o nome da tag nas marcações finais em XML</sidebar>
torna isso muito mais fácil para o escritor humano. Também o torna mais robusto: se você excluir acidentalmente uma tag final, poderá inferir com freqüência qual tag final está faltando.O SGML (o predecessor do XML) permitiu reduzir opcionalmente a tag final para um único caractere, mas esse recurso foi deixado de fora do XML por simplicidade.
Em resumo, o XML é mais detalhado por design, porque foi projetado para suportar documentos editáveis por humanos. Hoje, o XML é usado para uma ampla variedade de finalidades, também para comunicação pura máquina a máquina, onde essa redundância não é necessária.
Conteúdo misto
Sua sintaxe sugerida não suporta muito bem conteúdo misto. Veja este exemplo em HTML:
Como você expressaria isso em sua sintaxe? Você precisaria de algum tipo de delimitador adicional para distinguir entre atributos e conteúdo de texto. De repente, não é mais tão conciso.
Caracteres especiais
Os colchetes angulares são muito mais raros no texto comum do que parênteses e dois pontos.
Compatibilidade
O HTML já tinha um grande sucesso no momento em que o XML foi projetado, e fazia sentido escolher uma sintaxe semelhante.
Por que o XML venceu?
As expressões S nunca foram uma alternativa ao XML. A especificação XML é muito mais que colchetes angulares; Ele define uma sintaxe para elementos e atributos e conteúdo misto, escape, codificação de caracteres, sintaxe e validação DTD e assim por diante. Nada semelhante existia para expressões s. É claro que você pode definir um padrão semelhante, como propõe aqui, mas ninguém havia feito isso na época. O XML foi abençoado pelo W3C e, portanto, foi adotado pelos principais players e se tornou o padrão de troca de dados.
fonte
<PRE>
elemento em HTML. Então, presumi que seriam necessárias aspas.Pessoalmente, acho que a melhor parte do XML são os recursos de esquema bem definidos, e não a sintaxe. O mecanismo do esquema permite que os usuários publiquem seu formato de documento para compartilhar o que consideram um documento válido. Também existem validadores automatizados. Além disso, tipos e esquemas criados por um usuário podem ser estendidos por outros usuários.
Até onde eu sei, ninguém fez o esforço de padronizar um mecanismo de esquema de propósito geral para expressão s, exceto a própria linguagem LISP (que a amostra na pergunta do OP não está usando).
fonte
Aqui estão duas razões pelas quais eu escolheria XML em vez de algo "S-expression-ish":
Um modelo sintático e semântico bem definido
XML não é simplesmente uma árvore de nós, mas uma árvore de nós categorizados que possuem representação sintática diferente e comportamento diferente. Por exemplo, um atributo com um determinado nome pode aparecer apenas uma vez para um determinado nó, enquanto nós filhos podem aparecer várias vezes.
Você pode definir esse modelo sobre expressões S genéricas. Seus exemplos mostram um esquema para categorizar atributos e elementos filho. Adicione semântica para texto, comentários e instruções de processamento, e você terá algo isomórfico com XML.
Ferramentas
No modelo sintático e semântico padrão, você pode criar ferramentas - e muitas pessoas têm. Você pode encontrar alguma forma de analisador / serializador de XML, processador XPath e XSLT para cada idioma / plataforma comum. E você sabe que todos eles se comportarão da mesma maneira em todas as plataformas.
E aqui estão algumas outras coisas a considerar:
No grande esquema, XML não é tão detalhado
No seu exemplo, o que você realmente eliminou? Enquanto eu leio, você:
>
que normalmente separaria a tag de abertura de seus filhos.=
que separa o nome e o valor do atributo por a:
para indicar que o filho é um atributo; sem economia.Eu acho que também é importante reconhecer que as representações internas e externas do XML são muito diferentes. Internamente, uma árvore XML é muito compacta. E como os vários elementos já estão categorizados, é muito eficiente manipular. Externamente, bem, sim, você recebe todas essas tags de fechamento, mas elas são compactadas bem.
A "verbosidade" é o verdadeiro problema?
Penso que a verdadeira questão não é se o XML é "detalhado", mas se é mais expressivo do que o necessário para um determinado objetivo. Alguns exemplos:
fonte