linguagens de programação baseadas em xml


8

Eu estava olhando a wikipedia - Categoria: Linguagens de Programação Baseadas em XML .

Por que alguém adotaria essa abordagem para criar um idioma?
Quais são as vantagens disso?

Só consigo pensar em desvantagens.

  • difícil de manter
  • difícil de ler
  • difícil de escrever

2
Normalmente, existe um outro programa (interface visual ou outro) que um não programador usa para fazer algo, que é armazenado como XML e processado como XML.

2
Eu concordo com suas desvantagens. Use o Coldfusion e os argumentos que você faz contra ele são abundantes.
Rig

@ Rig: Embora o Coldfusion não esteja realmente nessa lista à qual o OP está vinculado.
FrustratedWithFormsDesigner

Suponho que uma possível vantagem seria que esse sistema poderia usar consultas e expressões XQuery e XPath para facilitar a escrita de código auto-modificável. Código que funciona através de XPath / XQuery é realmente uma coisa boa pode ser debatido se ou não auto-modificando ...
FrustratedWithFormsDesigner

1
@ Mhd.Tahawi: Se o código do seu programa estiver escrito como XML válido, ele poderá usar o XPath / XQuery para refletir sobre si mesmo. Utilizado com o XSLT, pode ser possível projetar uma linguagem de programação baseada em XML que use o XSLT para gravar programas que possam se modificar. Não tenho certeza se gostaria de lidar com esse programa, mas pode ser legal do ponto de vista da novidade.
FrustratedWithFormsDesigner

Respostas:


4

Uma das maiores vantagens de uma linguagem baseada em XML é que parece fácil implementar

Na verdade, existem vários analisadores de validação disponíveis que diagnosticam os erros de compilação relacionados à sintaxe e fornecem o AST gratuitamente

a execução também está simplesmente repetindo o referido AST e mantendo um mapa das funções e variáveis


3
"Parece" é a palavra-chave aqui. A verdade é que essas vantagens são muito pequenas ou inexistentes, mas certamente parece que você nunca criou uma implementação de linguagem. A análise é computacionalmente cara, mas na verdade é uma das partes mais simples de implementar (geradores de analisadores ou manuscritas) e design (a sintaxe é barata). E uma vez que você tenha o AST, sua maneira de proceder não será influenciada por sua análise - ou seja, se a execução for simples, permanecerá simples se você escolher uma sintaxe diferente (obviamente, somente se você mantiver a semântica).

@delnan Exatamente. A única coisa que o XML parece oferecer gratuitamente é a parte mais fácil. Eu digo "parece", porque na verdade não está fornecendo nada, é apenas empurrá-lo para o usuário ou algum tipo de GUI personalizada (provavelmente complicada).
Evicatos

10

Código é dados.

Ou melhor, programas são dados. Um arquivo de origem é apenas uma serialização específica deste programa. Essa idéia é, por exemplo, comum em linguagens homoicônicas como o Lisp. Essa linguagem derruba as barreiras entre o código do programa e os dados em que está operando. Isso pode ser extremamente poderoso e expressivo, embora eu não chamaria a aparência do código Lisp de "bonita" ou "fácil de ler".

XML é o formato estruturado de serialização de dados para o programador corporativo atual. Existem grandes cadeias de ferramentas estabelecidas em torno do processamento XML.

  • Definir uma linguagem destinada a operar em XML em XML pode ser interessante por causa dessa homoiconicidade. Um exemplo é XSLT. Em teoria, isso permite metaprogramação, mas nenhuma pessoa sã faria isso, certo?
  • Linguagens de templates estão interessadas em ter pouca separação entre dados e código. Usar um documento XML como modelo / programa é interessante quando a saída é XML ou HTML.
  • O armazenamento de código de uma linguagem de uso geral em XML ainda pode ser interessante. O armazenamento de uma Árvore de Sintaxe Abstrata serializada para XML em vez do código-fonte é viável quando esse código é manipulado por meio de um IDE, onde é apresentado em uma forma mais legível por humanos, por exemplo, para programação visual . Isso não é diferente dos ambientes Smalltalk, onde o "código fonte" é apenas uma representação da imagem real do bytecode.

Curiosamente, os documentos XML às vezes são usados ​​para modelar o código ... * shudder * (injeção de dependência). Atribuo isso à onipresença do XML em algumas cadeias de ferramentas / o XML do mindShare tem como um formato de dados estruturado.


1
Conflitar código com dados não é uma vantagem; é uma brecha de segurança no nível do idioma. O exemplo clássico é a injeção de SQL: toda vez que um site é invadido e milhões de dólares em danos são causados ​​e dezenas de milhares de usuários precisam solicitar novos cartões de crédito devido a uma exploração de injeção de SQL, a razão fundamental é porque algum desenvolvedor está em algum lugar criar uma consulta de alguma maneira que não separe adequadamente os dados do código. Jogar palavras chiques como "homoiconicidade" não muda esse fato fundamental.
Mason Wheeler

5
@MasonWheeler Não discordo de que a fuga adequada seja necessária de uma perspectiva de segurança para todos os sistemas de modelos, mas isso não tem nada a ver com a pergunta, minha resposta ou a separação de código de dados. Eu não surto sobre os rwxscripts que tenho, que são dados para o meu editor, mas código executável para o meu shell.
amon

1
O fato de você tentar responder a isso em termos de escape em primeiro lugar - que é e sempre foi o caminho errado para impedir a injeção de SQL - e não em termos de separação de código dos dados por meio de Parâmetros - é a única maneira correta de fazer isso - mostra que você realmente não entende o problema. E é por isso que os ataques de injeção de SQL continuam acontecendo: as pessoas não entendem por que essas coisas são importantes e como fazê-las corretamente.
Mason Wheeler

7
@MasonWheeler: seus críticos de "combinar código com dados" estão corretos ao obter dados de fontes externas e criar código a partir deles (que, aliás, não é de modo algum especial para XML). Mas essa resposta tem um foco completamente diferente, é sobre o aspecto da metaprogramação.
quer

6
@MasonWheeler, a injeção está executando dados que não devem ser executados. Homoiconicidade significa que código e dados são muito parecidos, na forma literal e na manipulação programática. Uma linguagem homoicônica pode manipular e executar com segurança (código gerado a partir de) dados confiáveis, sejam codificados no código fonte ou de outra forma. Por exemplo, Common Lisp, você pode incluir dados no código gerado sem que ele seja executado, como (eval `(foo (quote ,data))). Seu argumento sobre parâmetros versus escape pode estar certo, mas você não entendeu.
acelent

2

Vou me concentrar em XSLT em vez de linguagens baseadas em XML em geral.

Há uma história aqui, é claro. O XSLT foi concebido como sucessor do DSSSL, a linguagem de estilo do SGML, e tentou acertar o que o DSSSL havia errado. Um dos principais problemas com o DSSSL foi percebido como sendo sua sintaxe (semelhante ao esquema), e havia uma sensação generalizada de que a solução residia no uso da mesma sintaxe para a folha de estilo e os dados; afinal de contas, a idéia era que uma folha de estilo deveria consistir em grande parte de dados estruturados, em vez de lógica de programa, e muitos desses dados consistiriam em dados proforma ("modelo") para adicionar à árvore de resultados, com alguma parametrização.

O XSLT é frequentemente percebido como excessivamente detalhado. Para o XSLT 1.0, que infelizmente muitas pessoas ainda estão usando, isso provavelmente é verdade, mas o problema foi amplamente resolvido com o XSLT 2.0, que geralmente é muito mais conciso do que outras maneiras de resolver o mesmo problema.

Certamente existem desvantagens. Você é muito obrigado a usar um editor projetado especificamente (mas a maioria dos programadores usa editores direcionados à sintaxe para todos os idiomas, não é?). A linguagem não é tão compositável quanto pode ser (embora, novamente, o XSLT 2.0 conserte isso em grande parte). Mas também há vantagens significativas:

  1. O XSLT é amplamente usado por não programadores e, para eles, é uma vantagem que eles só precisam aprender uma sintaxe, não duas. Lembre-se, são todos os pequenos detalhes, como lidar com a codificação de caracteres e o escape de caracteres especiais.

  2. A capacidade de processar código XSLT usando XSLT é muito mais útil do que você imagina. Quase todos os grandes projetos XSLT aproveitam esse recurso e podem trazer benefícios muito grandes. Por exemplo, vi um sistema bancário on-line que tinha algumas centenas de formulários em sua interface do usuário, cada um gerado por sua própria folha de estilo, mas as folhas de estilo foram geradas a partir de uma biblioteca comum de código, proporcionando excelente reutilização e consistência na aparência.

  3. Há um benefício que eu não esperava, que é o uso de uma estrutura sintática restrita como XML, que força os designers de linguagem a manter um nível de consistência lexical à medida que a linguagem evolui e, ao mesmo tempo, oferece grande extensibilidade. O XQuery WG está sempre debatendo sobre como estender o idioma sem quebrar a compatibilidade ou introduzir peculiaridades; O XSLT não tem esses problemas, porque é basicamente uma questão de definir novos elementos e atributos.


0

Eu pude ver algo assim sendo útil em um ambiente pesado para XML (pense em XSLT), onde você presumivelmente já possui editores XML decentes e pode ser útil poder gerar código usando o mesmo conjunto de ferramentas. Também pode facilitar a gravação de verificadores de correção ou outras ferramentas para garantir que o código siga certos padrões ou regras (por exemplo, um esquema define para onde a lógica de negócios deve ser executada e / ou garante que todas as variáveis ​​sejam inicializadas de maneira consistente )


0

XSLT é a única linguagem de programação XML que eu usei, não tive a chance / oportunidade de entrar nos outros.

temos um aplicativo principal que dispara um arquivo XML para um banco de dados e vários outros aplicativos podem pegar esse arquivo e aplicar um arquivo XSLT a ele para extrair os dados que esses aplicativos precisam, o que alivia a necessidade de exportar um novo conjunto de Dados para cada novo aplicativo que aparecer. Eu acho que é uma grande vantagem. você só precisa codificar um arquivo XSLT para o novo aplicativo decodificar as informações que já estão sendo produzidas, em vez de precisar produzir novas informações para um novo aplicativo.

Percebo que não toquei em nenhum dos outros idiomas que você listou, mas lhe dei uma idéia de um bom local para o uso desse idioma. ainda não tenho certeza se respondi completamente ou mesmo parcialmente à sua pergunta. mas espero ter dado algumas dicas.


2
Não, as perguntas perguntam por que o XSLT deve ser o próprio XML. A cadeia de ferramentas que você descreveu poderia ter sido implementada da mesma forma que um script Perl ou Python que analisa o XML de saída e gera alguma saída a partir disso. A decisão de design interessante sobre o XSLT não é que ele pode transformar XML, mas sim que ele não usa chavetas⸮ am
amon

ou ponto e vírgula? Entendo o que você está dizendo. qualquer linguagem poderia realmente analisar essas informações do documento XML; portanto, a pergunta seria "por que eles precisariam de uma linguagem de transformação XML", certo?
Malachi

Não, uma linguagem de transformação XML faz sentido (se você estiver fazendo muita transformação XML). Há muitas coisas que o XSLT faz para oferecer suporte ao processamento XML (como a capacidade de percorrer e consultar facilmente a árvore DOM), mas ser o próprio XML não está entre essas coisas.

Eu estava tentando esclarecer a questão com meu último comentário @delnan. Entendo e concordo que o XSLT é uma ferramenta agradável de se ter.
Malachi

-3

XML quase não faz sentido ausente do contexto histórico e político. A SGML era ainda mais difícil de escrever, ler e manter, mas tinha o selo de aprovação ISO colocado em 1986, o que a tornou talvez a primeira linguagem de declaração de dados a ter esse tipo de imprimatur.

Foi suficientemente útil e documentado para inspirar Tim Berners-Lee a usá-lo como base do HTML no início dos anos 90. Lembre-se, ele pretendia criar uma rede mundial de computadores e, basear-se em um padrão ISO existente, ajudaria ainda mais isso.

Então, no final dos anos 90, com a Web bastante bem consolidada, o World Wide Web Consortium iniciou uma iniciativa de marcação estrutural padrão para intercâmbio de dados. O fator de hype em torno do XML atingiu níveis sem precedentes de "não temos certeza do que fazer com isso, mas aposto que será muito legal".

Tal como está, para o que o XML é bom principalmente é o intercâmbio estruturado de dados entre sistemas diferentes. Como amon observou, existem alguns domínios específicos nos quais ele tem utilidade mais ampla. Estou feliz que agora é possível codificar grafite em uma marcação padronizada para que, no futuro, as crianças não tenham que arriscar a vida e a ação judicial, mas sim fazer a marcação com drones controlados remotamente com tinta.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.