O XSLT vale a pena? [fechadas]

112

Um tempo atrás, comecei em um projeto em que desenvolvi um esquema XML em formato html para que os autores pudessem escrever seu conteúdo (material do curso educacional) em um formato simplificado que seria então transformado em HTML via XSLT. Eu brinquei (lutei) com isso por um tempo e cheguei a um nível muito básico, mas depois fiquei muito irritado com as limitações que estava encontrando (que podem muito bem ser limitações do meu conhecimento) e quando li um blog sugerindo abandonar XSLT e apenas escrever seu próprio analisador XML para qualquer coisa na linguagem de sua escolha, eu ansiosamente pulei para isso e funcionou de forma brilhante.

Ainda estou trabalhando nisso até hoje ( na verdade, deveria estar trabalhando nisso agora, em vez de jogar no SO ), e estou vendo mais e mais coisas que me fazem pensar que a decisão de abandonar o XSLT foi uma boa.

Eu sei que o XSLT tem o seu lugar, por ser um padrão aceito, e se cada um estiver escrevendo seus próprios intérpretes, 90% deles acabarão no TheDailyWTF . Mas dado que é uma linguagem de estilo funcional em vez do estilo procedural com o qual a maioria dos programadores está familiarizada, para alguém que está embarcando em um projeto como o meu, você recomendaria que eles seguissem o caminho que eu segui, ou continuassem com XSLT ?

nickf
fonte
1
Acho que há uma grande desconexão entre o assunto da sua pergunta (que é argumentativa) e a pergunta real que você faz (ou seja, se os leitores do SO realmente usam XSLT ou recomendam usá-lo). Também não está claro por que você precisa que essa pergunta seja respondida.
Martin v. Löwis
3
@Martin, o que você sugere como título? Não PRECISO que esta pergunta seja respondida, mas acho interessante, e também útil para quem está tentando decidir se investe em XSLT ou em uma alternativa.
Benjol
7
Acho que o XSLT atingiu o patamar de produtividade dentro do ciclo de hype ( en.wikipedia.org/wiki/Hype_cycle ).
Dirk Vollmar
Eu pessoalmente sinto que meu XML não está agregando nenhum valor até que eu o tenha executado por pelo menos 1 ou 2 transformações.
@ Martinv.Löwis, concordo com sua avaliação. Além disso, isso realmente se resume a questões empresariais, o que significa que se o mesmo cara fizer tudo, e o método for inicializar ... muito bem, faça-o no estilo de implementação mais rápido, você só vai se ferrar nesse caso. XSLT é bastante difícil até clicar, requer conhecimento específico do domínio, mas em uma grande organização ... Oh meu Deus, você percebe como todas as pessoas anti-XML estão erradas. E também, uma vez que você conhece XSLT, é a melhor escolha, só parece o contrário quando você não conhece XSLT, então você leva em consideração o investimento em aprendizado.
JM Becker

Respostas:

64

Vantagens do XSLT:

  • Específico de domínio para XML, então, por exemplo, não há necessidade de citar XML literal na saída.
  • Suporta XPath / XQuery, que pode ser uma boa maneira de consultar DOMs, da mesma forma que expressões regulares podem ser uma boa maneira de consultar strings.
  • Linguagem funcional.

Desvantagens do XSLT:

  • Pode ser obscenamente prolixo - você não precisa citar XML literal, o que efetivamente significa que você precisa citar código. E não de uma maneira bonita. Mas, novamente, não é muito pior do que seu SSI típico.
  • Não faz certas coisas que a maioria dos programadores dá como certas. Por exemplo, a manipulação de cordas pode ser uma tarefa árdua. Isso pode levar a "momentos infelizes" quando os novatos projetam o código e, em seguida, procuram freneticamente na web por dicas de como implementar funções que eles presumiam que estariam lá e não teriam tempo para escrever.
  • Linguagem funcional.

A propósito, uma maneira de obter comportamento procedural é encadear várias transformações. Após cada etapa, você tem um DOM totalmente novo para trabalhar, que reflete as alterações nessa etapa. Alguns processadores XSL têm extensões para fazer isso com eficácia em uma transformação, mas esqueci os detalhes.

Portanto, se o seu código é principalmente produzido e não tem muita lógica, o XSLT pode ser uma maneira muito legal de expressá-lo. Se houver muita lógica, mas principalmente de formulários que são integrados ao XSLT (selecione todos os elementos que parecem blá, e para cada um produzir blá), é provável que seja um ambiente bastante amigável. Se você gosta de pensar em XML o tempo todo, experimente o XSLT 2.

Caso contrário, eu diria que se sua linguagem de programação favorita tiver uma boa implementação de DOM com suporte a XPath e permitindo que você crie documentos de uma maneira útil, então existem poucos benefícios em usar XSLT. Vinculações a libxml2 e gdome2 devem servir bem, e não há vergonha em se ater a linguagens de uso geral que você conhece bem.

Analisadores XML desenvolvidos internamente são geralmente incompletos (nesse caso, você vai se desvencilhar algum dia) ou não são muito menores do que algo que você poderia comprar (nesse caso, provavelmente você está perdendo seu tempo), e você inúmeras oportunidades para introduzir problemas de segurança graves em torno de entrada maliciosa. Não escreva um a menos que você saiba exatamente o que você ganha fazendo isso. O que não quer dizer que você não possa escrever um analisador para algo mais simples do que XML como formato de entrada, se não precisar de tudo que o XML oferece.

Steve Jessop
fonte
3
XSLT não é funcional, é declarativo (como SQL).
jmah
Um Template XSL me parece ter todos os critérios de uma função pura, o que o desqualifica para ser descrito como funcional? Por que 'declarativo' é uma alternativa? a = 1; é declarativo.
AnthonyWJones,
É declarativo como Prolog. en.wikipedia.org/wiki/Declarative_programming
Martin York
8
Eu acredito que a programação funcional é um tipo de programação declarativa.
Zifre
1
Embora o ponto sobre o XSLT 2.0 seja bom, mesmo no momento em que estou escrevendo, não há suporte generalizado para o XSLT 2.0.
PeterAllenWebb
91

Tanta negatividade!

Eu uso o XSLT há alguns anos e realmente o amo. A principal coisa que você precisa entender é que não é uma linguagem de programação, é uma linguagem de modelos (e, a esse respeito, acho que é indescritivelmente superior ao asp.net / spit).

XML é o formato de dados de fato do desenvolvimento web hoje, seja arquivos de configuração, dados brutos ou representação em memória. O XSLT e o XPath fornecem uma maneira extremamente poderosa e eficiente de transformar esses dados em qualquer formato de saída que você queira, fornecendo instantaneamente aquele aspecto MVC de separar a apresentação dos dados.

Depois, há os recursos de utilidade: limpar namespaces, reconhecer definições de esquema díspares, mesclar documentos.

Ele deve ser melhor para lidar com XSLT do que desenvolver seus próprios métodos in-house. Pelo menos XSLT é um padrão e algo que você pode contratar, e se realmente for um problema para sua equipe, sua própria natureza permitiria que você mantivesse a maior parte de sua equipe trabalhando apenas com XML.

Um caso de uso do mundo real: acabei de escrever um aplicativo que lida com documentos XML na memória em todo o sistema e se transforma em JSON, HTML ou XML conforme solicitado pelo usuário final. Tive um pedido bastante aleatório para fornecer dados do Excel. Um ex-colega havia feito algo semelhante de maneira programática, mas exigia um módulo de alguns arquivos de classe e que o servidor tinha o MS Office instalado! Acontece que o Excel tem um XSD: nova funcionalidade com impacto mínimo do basecode em 3 horas.

Pessoalmente, acho que é uma das coisas mais limpas que encontrei na minha carreira e acredito que todos os seus problemas aparentes (depuração, manipulação de strings, estruturas de programação) se resumem a um entendimento incorreto da ferramenta.

Obviamente, acredito fortemente que "vale a pena".

Annakata
fonte
8
Uma pequena adição ao seu ponto sobre depuração. As versões mais recentes do Visual Studio permitem depurar diretamente nos arquivos XSL. Definindo pontos de interrupção, inspeção etc.
Craig Bovis
Esta é uma resposta tão boa, especialmente a história refrescante do excel xsd!
Laguna
1
@annakata, você pode fornecer um link para um artigo do msdn ou algum tutorial sobre como fazer a coisa do Excel? Eu acho que pode ser algo que eu possa usar no meu projeto também. THX!
Laguna
6
JSON e JAML são formatos de dados superiores ao XML. XML em seu núcleo é a linguagem de marcação ; e é muito lamentável que tenha sido tão amplamente mal utilizado para representação de dados estruturados.
ulidtko
3
@ulidtko, Trabalhando como engenheiro de sistemas, vi muitos JSON como marcação inadequada ... Só espero que mais venham, e isso faz o XML parecer incrível em comparação.
JM Becker
27

Tenho que admitir um preconceito aqui porque ensino XSLT para viver. Mas, pode valer a pena cobrir as áreas em que vejo meus alunos trabalhando. Eles se dividem em três grupos em geral: publicação, banco e web.

Muitas das respostas até agora podem ser resumidas como "não é bom para criar sites" ou "não é nada como a linguagem X". Muitos técnicos passam por suas carreiras sem nenhuma exposição a linguagens funcionais / declarativas. Quando estou ensinando, o pessoal experiente em Java / VB / C / etc é quem tem problemas com a linguagem (variáveis ​​são variáveis ​​no sentido de álgebra, não de programação procedural, por exemplo). Muitas pessoas estão respondendo aqui - eu nunca me familiarizei com Java, mas não vou me preocupar em criticar a linguagem por causa disso.

Em muitas circunstâncias, é uma ferramenta inadequada para a criação de sites - uma linguagem de programação de uso geral pode ser melhor. Freqüentemente, preciso pegar documentos XML muito grandes e apresentá-los na web; O XSLT torna isso trivial. Os alunos que vejo neste espaço tendem a processar conjuntos de dados e apresentá-los na web. XSLT certamente não é a única ferramenta aplicável neste espaço. No entanto, muitos deles estão usando o DOM para fazer isso e o XSLT certamente é menos doloroso.

Os alunos do setor bancário que vejo usam uma caixa DataPower em geral. Este é um dispositivo XML e é usado para ficar entre os serviços que 'falam' diferentes dialetos XML. A transformação de uma linguagem XML para outra é quase trivial em XSLT e o número de alunos que frequentam meus cursos sobre isso está aumentando.

O conjunto final de alunos que vejo vem de uma formação editorial (como eu). Essas pessoas tendem a ter documentos imensos em XML (acredite em mim, a publicação como uma indústria está entrando muito em XML - a publicação técnica existe há anos e a publicação comercial está chegando lá agora). Esses documentos precisam ser processados ​​(DocBook para ePub vem à mente aqui).

Alguém acima comentou que os scripts tendem a ter menos de 60 linhas ou se tornam difíceis de manejar. Se ficar difícil de manejar, é provável que o codificador não tenha realmente a ideia - XSLT é uma mentalidade muito diferente de muitas outras linguagens. Se você não entender, não funcionará.

Certamente não é uma língua moribunda (a quantidade de trabalho que recebo me diz isso). No momento, está um pouco "preso" até que a Microsoft conclua sua (muito tarde) implementação do XSLT 2. Mas ele ainda está lá e parece estar forte do meu ponto de vista.

Nic Gibson
fonte
Sou um desenvolvedor Java e também adoro XML e XSLT. Eu gostaria que as pessoas percebessem o poder disso.
Nikolas
24

Usamos XSLT extensivamente para coisas como documentação e para tornar algumas configurações complexas que podem ser reparadas pelo usuário.

Para documentação, usamos muito DocBook, que é um formato baseado em XML. Isso nos permite armazenar e gerenciar nossa documentação com todo o nosso código-fonte, uma vez que os arquivos são texto simples. Com o XSLT, podemos construir facilmente nossos próprios formatos de documentação, permitindo-nos gerar automaticamente o conteúdo de uma forma genérica e torná-lo mais legível. Por exemplo, quando publicamos notas de lançamento, podemos criar XML que se parece com:

<ReleaseNotes>
    <FixedBugs>
        <Bug id="123" component="Admin">Error when clicking the Foo button</Bug>
        <Bug id="125" component="Core">Crash at startup when configuration is missing</Bug>
        <Bug id="127" component="Admin">Error when clicking the Bar button</Bug>
    </FixedBugs>
</ReleaseNotes>

E então, usando XSLT (que transforma o texto acima em DocBook), terminamos com boas notas de lançamento (PDF ou HTML geralmente) onde os IDs de bug são automaticamente vinculados ao nosso rastreador de bug, os bugs são agrupados por componente e o formato de tudo é perfeitamente consistente . E o XML acima pode ser gerado automaticamente consultando nosso rastreador de bug para saber o que mudou entre as versões.

O outro lugar onde descobrimos que o XSLT é útil é, na verdade, em nosso produto principal. Às vezes, ao fazer interface com sistemas de terceiros, precisamos processar dados de alguma forma em uma página HTML complexa. Analisar HTML é feio, então alimentamos os dados por meio de algo como TagSoup(o que gera eventos XML SAX apropriados, essencialmente nos permitindo lidar com o HTML como se fosse XML escrito corretamente) e, então, podemos executar algum XSLT contra ele, para transformar os dados em um formato "conhecido estável" com o qual podemos realmente trabalhar. Ao separar essa transformação em um arquivo XSLT, isso significa que se e quando o formato HTML mudar, o aplicativo em si não precisa ser atualizado, em vez disso, o usuário final pode apenas editar o arquivo XSLT ou podemos enviar um e-mail eles um arquivo XSLT atualizado sem que todo o sistema precise ser atualizado.

Eu diria que, para projetos da web, existem maneiras melhores de lidar com o lado da visualização do que o XSLT hoje, mas como tecnologia, definitivamente existem usos para o XSLT. Não é a linguagem mais fácil de usar do mundo, mas definitivamente não está morta e, da minha perspectiva, ainda tem muitos usos bons.

Adam Batkin
fonte
Obrigado, essa é uma boa resposta com um exemplo concreto.
Benjol
E ainda assim alguém sentiu a necessidade de votar sem nem mesmo deixar um comentário sobre o que havia de errado com a minha resposta
Adam Batkin
Provavelmente porque eles não concordaram ...
Benjol
Havia outro programa semelhante ao TagSoup que também cria uma árvore XML adequada a partir de HTML ... mas não consigo lembrar o nome. Alguém sabe disso?
erjiang
Tidy é um bom programa para esse propósito
Erlock
19

XSLT é um exemplo de linguagem de programação declarativa .

Outros exemplos de linguagens de programação declarativas incluem expressões regulares, Prolog e SQL. Todos eles são altamente expressivos e compactos, e geralmente muito bem projetados e poderosos para a tarefa para a qual foram projetados.

No entanto, os desenvolvedores de software geralmente odeiam essas linguagens, porque são tão diferentes das linguagens OO ou procedurais mais convencionais que são difíceis de aprender e depurar. Sua natureza compacta geralmente torna muito fácil causar muitos danos inadvertidamente.

Portanto, embora o XSLT seja um mecanismo eficiente para mesclar dados na apresentação, ele falha no departamento de facilidade de uso. Eu acredito que é por isso que ainda não pegou.

Bill Karwin
fonte
2
O XSLT é funcional, mas acho que é discutível se ele é declarativo (existem dependências de ordenação, etc.). No entanto, concordo com seu ponto de vista de que isso (seja funcional ou declarativo) é uma coisa poderosa e também uma fonte de frustração para a maioria dos programadores OO / procedurais. No entanto, no caso do XSLT, acredito que, como linguagem funcional, faltam muitos dos recursos que tornam a maioria das linguagens funcionais utilizáveis. Como resultado, você normalmente acaba escrevendo muito mais código, em vez de ser compacto. Você já tentou dividir strings em XSLT (1.0), por exemplo?
philsquared
3
A propósito, XSLT não é funcional - ele não tem funções como valores de primeira classe. Sim, existem hacks (FXSL), mas eles são apenas isso, e você ainda não consegue captura de variável com eles (então nada de lambdas). XSLT é puro (sem efeitos colaterais), sim, mas isso não precisa significar "funcional".
Pavel Minaev
1
XSLT é uma perversão horrível de uma linguagem de programação declarativa e PLs em geral. Até o INTERCAL é mais coerente e, para alguns casos de uso, quase tão produtivo. Sim, certas transformações de árvore são diretas em XSLT, mas descobri que uma combinação de XPath e uma linguagem tradicional (pseudo-) funcional é muito mais fácil de escrever e muito, muito mais fácil de ler e entender.
pmf de
23
@Jeff Atwood: Assim como no regex, a beleza do XSLT está no conceito, não na sintaxe. Para aqueles que não podem lê-los, os regexes são uma mistura gigante de letras e símbolos sem sentido. É a mentalidade por trás do regex que os torna bonitos.
Tomalak
6
@Jeff Atwood Por que você escreve tais afirmações categóricas sobre uma área que obviamente não conhece? XSLT e XPath têm bons recursos de RegEx e alguns deles foram usados ​​em respostas a perguntas no SO. Eu escrevi mais de um analisador usando RegEx em XSLT, para o lexer. O analisador mais complicado era para XPath 2.0. Escrevendo sem ler primeiro - como na piada de Chukche :)
Dimitre Novatchev
12

Lembro-me de todo o entusiasmo em torno do XSLT quando o padrão foi lançado recentemente. Todo o entusiasmo em poder construir uma interface de usuário HTML inteira com uma transformação 'simples'.

Vamos enfrentá-lo, é difícil de usar, quase impossível de depurar, muitas vezes insuportavelmente lento. O resultado final é quase sempre peculiar e aquém do ideal.

Prefiro roer minha própria perna do que usar um XSLT, enquanto há maneiras melhores de fazer as coisas. Ainda assim, ele tem seus lugares, é bom para tarefas de transformação simples.

Duro
fonte
1
insuportavelmente lento ?? Comparado com o quê?
AnthonyWJones,
Comparado a escrever a mão a conversão em VB6 como eu fiz. Ordens de magnitude mais rápido do que fazer XSLT (eu estava convertendo conjuntos de registros ADO em HTML - em 2002 ou algo assim :-)
endian
3
É muito mais fácil depurar usando ferramentas como o Oxygen do que você esperaria.
Andy Dent,
10

Usei XSLT (e também XQuery) extensivamente para várias coisas - para gerar código C ++ como parte do processo de construção, para produzir documentação a partir de comentários de documentos e dentro de um aplicativo que tinha que trabalhar muito com XML em geral e XHTML em particular . O gerador de código em particular tinha mais de 10.000 linhas de código XSLT 2.0 espalhadas por cerca de uma dúzia de arquivos separados (ele fazia muitas coisas - cabeçalhos para clientes, proxies / stubs remoting, wrappers COM, wrappers .NET, ORM - para nomear um pouco). Eu herdei de outro cara que realmente não entendia bem a linguagem, e as partes mais antigas eram, conseqüentemente, uma bagunça. No entanto, as coisas mais novas que escrevemos foram mantidas sãs e legíveis, e não me lembro de nenhum problema particular em conseguir isso. Certamente não foi mais difícil do que fazê-lo para C ++.

Falando em versões, lidar com XSLT 2.0 definitivamente ajuda a mantê-lo são, mas 1.0 ainda é bom para transformações mais simples. Em seu nicho, é uma ferramenta extremamente útil, e a produtividade que você obtém de certos recursos específicos de domínio (o mais importante, o envio dinâmico por meio de correspondência de modelo) é difícil de igualar. Apesar da linguagem percebida da sintaxe baseada em XML do XSLT, a mesma coisa em LINQ to XML (mesmo em VB com literais XML) costumava ser várias vezes mais longa. Freqüentemente, entretanto, ele recebe críticas imerecidas por causa do uso desnecessário de XML em alguns casos, em primeiro lugar.

Resumindo: é uma ferramenta incrivelmente útil de se ter na caixa de ferramentas de alguém, mas é muito especializada, então é boa desde que você a use corretamente e para o propósito a que se destina. Eu realmente gostaria que houvesse uma implementação .NET nativa adequada de XSLT 2.0.

Pavel Minaev
fonte
9

Eu uso XSLT (por falta de alternativa melhor), mas não para apresentação, apenas para transformação:

  1. Eu escrevo transformações XSLT curtas para fazer edições em massa em nossos arquivos maven pom.xml.

  2. Escrevi um pipeline de transformações para gerar esquemas XML a partir de XMI (diagrama UML). Funcionou por um tempo, mas finalmente ficou muito complexo e tivemos que retirá-lo para trás do celeiro.

  3. Usei transformações para refatorar esquemas XML.

  4. Eu contornei algumas limitações no XSLT usando-o para gerar um XSLT para fazer o trabalho real. (Você já tentou escrever um XSLT que produza uma saída usando namespaces que não são conhecidos até o tempo de execução?)

Eu continuo voltando a ele porque ele faz um trabalho melhor de ida e volta no XML que está processando do que outras abordagens que tentei, que pareciam desnecessariamente com perdas ou simplesmente não entendiam o XML. XSLT é desagradável, mas acho que usar oxigênio o torna suportável.

Dito isso, estou investigando o uso de Clojure (um lisp) para realizar transformações de XML, mas ainda não fui longe o suficiente para saber se essa abordagem me trará benefícios.

Bendin
fonte
XSLT me salvou de escrever modificações POM em scripts shell hack. Cheguei a um acordo com XML, é ruim ... mas é melhor do que qualquer outra coisa para marcação. XSLT, é ruim, mas é a MELHOR maneira de fazer transformações de XML para qualquer coisa. XQuery é legal, mas não é a melhor maneira de consertar aquela pilha de bobagens de XML, que precisa ser transformada em um conjunto organizado de significados XML.
JM Becker
7

Pessoalmente, usei XSLT em um contexto totalmente diferente. O jogo de computador em que eu estava trabalhando na época usava toneladas de páginas de interface do usuário definidas em XML. Durante uma grande refatoração, logo após um lançamento, queríamos mudar a estrutura desses documentos XML. Fizemos o formato de entrada do jogo seguir uma estrutura muito melhor e ciente do esquema.

XSLT pareceu a escolha perfeita para esta tradução do formato antigo -> novo formato. Em duas semanas, tive uma conversão funcional do antigo para o novo em nossas centenas de páginas. Também consegui usá-lo para extrair muitas informações sobre o layout de nossas páginas da IU. Eu criei listas de quais componentes foram incorporados de forma relativamente fácil e, em seguida, usei XSLT para escrever em nossas definições de esquema.

Além disso, vindo de uma formação C ++, era uma linguagem muito divertida e interessante de dominar.

Acho que é uma ferramenta fantástica para traduzir XML de um formato para outro. No entanto, não é a única maneira de definir um algoritmo que leva XML como uma entrada e produz algo . Se o seu algoritmo for suficientemente complexo, o fato de a entrada ser XML torna-se irrelevante para a sua escolha de ferramenta - ou seja, role a sua própria em C ++ / Python / qualquer.

Especificamente para seu exemplo, eu imagino que a melhor ideia seria criar seu próprio XML-> XML convert que segue sua lógica de negócios. Em seguida, escreva um tradutor XSLT que apenas saiba sobre formatação e não faça nada inteligente. Isso pode ser um bom meio-termo, mas depende totalmente do que você está fazendo. Ter um tradutor XSLT na saída torna mais fácil criar formatos de saída alternativos - para impressão, para celulares, etc.

Tom Leys
fonte
6

Sim, eu uso muito. Usando arquivos xslt diferentes, posso usar a mesma fonte XML para criar vários arquivos HTML poliglotas (X) (apresentando os mesmos dados de maneiras diferentes), um feed RSS, um feed Atom, um arquivo descritor RDF e fragmento de um mapa do site .

Não é uma panacéia. Existem coisas que ele faz bem e coisas que não faz bem e, como todos os outros aspectos da programação, trata-se de usar a ferramenta certa para o trabalho certo. É uma ferramenta que vale a pena ter em sua caixa de ferramentas, mas só deve ser usada quando for apropriado.

Alohci
fonte
3

Eu descobri que o XSLT é bastante difícil de trabalhar.

Tive a experiência de trabalhar em um sistema um tanto semelhante ao que você descreve. Minha empresa observou que os dados que estávamos retornando da "camada intermediária" estavam em XML e que as páginas deviam ser renderizadas em HTML, que também poderia ser XHTML, além disso, eles ouviram que XSL era um padrão para transformação entre XML formatos. Portanto, os "arquitetos" (ou seja, pessoas que pensam profundamente em design, mas aparentemente nunca codificam) decidiram que nossa camada de fronteira seria implementada escrevendo scripts XSLT que transformavam os dados em XHTML para exibição.

A escolha acabou sendo desastrosa. XSLT, ao que parece, é uma dor de escrever. E assim todas as nossas páginas eram difíceis de escrever e manter. Teríamos feito muito melhor se tivéssemos usado JSP (isso era em Java) ou alguma abordagem semelhante que usasse um tipo de marcação (colchetes angulares) para o formato de saída (o HTML) e outro tipo de marcação (como <% ... %>) para os metadados. A coisa mais confusa sobre o XSLT é que ele é escrito em XML e traduz de XML para XML ... é muito difícil manter todos os 3 documentos XML diferentes em mente.

Sua situação é um pouco diferente: em vez de criar cada página em XSLT como eu fiz, você só precisa escrever UM bit de código em XSLT (o código a ser convertido de modelos para exibição). Mas parece que você passou pelo mesmo tipo de dificuldade que eu. Eu diria que tentar interpretar uma DSL simples baseada em XML (linguagem de domínio específico) como você está fazendo NÃO é um dos pontos fortes do XSLT. (Embora PODE fazer o trabalho ... afinal, é Turing completo!)

No entanto, se o que você tinha era mais simples: você tem dados em um formato XML e queria fazer alterações simples neles - não uma DSL de descrição de página completa, mas algumas modificações simples e diretas, então o XSLT é uma ferramenta excelente para esse propósito. Sua natureza declarativa (não procedimental) é na verdade uma vantagem para esse propósito.

- Michael Chermside

Mcherm
fonte
3

É difícil trabalhar com o XSLT, mas depois de conquistá-lo, você terá um conhecimento completo do DOM e do esquema. Se você também XPath, está no caminho certo para aprender programação funcional e isso irá expor novas técnicas e maneiras de resolver problemas. Em alguns casos, a transformação sucessiva é mais poderosa do que as soluções procedimentais.

David Robbins
fonte
heh - você obtém uma boa apreciação do xpath e do DOM ao escrever seu próprio código de transformação customizado. Houve muitas coisas, incluindo, mas não se limitando a: redimensionar imagens, gerar javascript (de XML), ler do sistema de arquivos para gerar navegação, etc.
nickf
3

Eu uso XSLT extensivamente, para um front-end de estilo MVC personalizado. O modelo é "serializado" para xml (não via serialização xml) e então convertido para html via xslt. A vantagem sobre o ASP.NET está na integração natural com XPath e nos requisitos de boa formação mais rigorosos (é muito mais fácil raciocinar sobre a estrutura do documento em xslt do que na maioria das outras linguagens).

Infelizmente, a linguagem contém várias limitações (por exemplo, a capacidade de transformar a saída de outra transformação), o que significa que às vezes é frustrante trabalhar com ela.

No entanto, a separação de interesses facilmente alcançável e fortemente imposta que ele concede não é algo que vejo outra tecnologia fornecer agora - então, para transformações de documentos ainda é algo que eu recomendaria.

Eamon Nerbonne
fonte
3

Usei XML, XSD e XSLT em um projeto de integração entre sistemas de banco de dados muito diferentes em algum momento de 2004. Tive que aprender XSD e XSLT do zero, mas não foi difícil. A grande vantagem dessas ferramentas é que me permitiram escrever código C ++ independente de dados, contando com XSD e XSLT para validar / verificar e, em seguida, transformar os documentos XML. Altere o formato dos dados, altere os documentos XSD e XSLT, não o código C ++ que empregava as bibliotecas Xerces.

Por interesse: o XSD principal era 150KB e o tamanho médio do XSLT era <5KB IIRC.

O outro grande benefício é que o XSD é um documento de especificação no qual o XSLT se baseia. Os dois trabalham em harmonia. E as especificações são raras no desenvolvimento de software atualmente.

Embora eu não tenha tido muitos problemas para aprender a natureza declarativa XSD e XSLT, descobri que outros programadores C / C ++ tiveram grande dificuldade em se ajustar à forma declarativa. Quando viram que era isso, ah procedimental eles murmuraram, agora que entendi! E eles começaram (trocadilhos?) A escrever XSLT procedural! A questão é que você precisa aprender XPath e entender os eixos do XML. Lembra-me dos antigos programadores C que se adaptavam ao emprego de OO ao escrever C ++.

Usei essas ferramentas porque elas me permitiram escrever uma pequena base de código C ++ isolada de todas as modificações de estrutura de dados, exceto as mais fundamentais, e essas últimas foram alterações na estrutura do banco de dados. Embora eu prefira C ++ a qualquer outra linguagem, usarei o que considero útil para beneficiar a viabilidade de longo prazo de um projeto de software.

Sam
fonte
3

Eu costumava pensar que o XSLT era uma ótima ideia. Quer dizer, é uma ótima ideia.

Onde falha é a execução.

O problema que descobri com o tempo foi que as linguagens de programação em XML são apenas uma má ideia. Isso torna tudo impenetrável. Especificamente, acho que XSLT é muito difícil de aprender, codificar e entender. O XML no topo dos aspectos funcionais apenas torna tudo muito confuso. Eu tentei aprender cerca de 5 vezes em minha carreira, e simplesmente não pegou.

OK, você poderia 'usar ferramentas' - acho que esse foi em parte o ponto de seu design - mas essa é a segunda falha: todas as ferramentas XSLT no mercado são, simplesmente ... uma porcaria!

Jack Ukleja
fonte
1
Parece-me que você acabou de descrever seus problemas com XSLT, nenhum problema com a linguagem em si. Devo dizer que provavelmente você está usando as ferramentas erradas :)
Nic Gibson
2

A especificação XSLT define XSLT como "uma linguagem para transformar documentos XML em outros documentos XML". Se você está tentando fazer algo que não seja o processamento de dados mais básico em XSLT, provavelmente existem soluções melhores.

Também vale a pena observar que os recursos de processamento de dados do XSLT podem ser estendidos no .NET usando funções de extensão personalizadas:

colher 16
fonte
1
Estender a linguagem padrão com extensões não padrão é a pior coisa que se pode fazer. O que você obtém não é um código XSLT nem CLR.
Piotr Dobrogost
Justo, isso não significa que às vezes não seja útil
Eric Schoonover
2

Eu mantenho um sistema de documentação online para minha empresa. Os escritores criam a documentação em SGML (uma linguagem semelhante a xml). O SGML é então combinado com o XSLT e transformado em HTML.

Isso nos permite fazer alterações facilmente no layout da documentação sem fazer nenhuma codificação. É apenas uma questão de alterar o XSLT.

Isso funciona bem para nós. Em nosso caso, é um documento somente leitura. O usuário não está interagindo com a documentação.

Além disso, ao usar o XSLT, você está trabalhando mais próximo do domínio do problema (HTML). Sempre considerei isso uma boa ideia.

Por último, se o seu sistema atual FUNCIONA, deixe-o como está. Eu nunca sugeriria jogar no lixo seu código existente. Se eu estivesse começando do zero, usaria o XSLT, mas no seu caso, usaria o que você tem.

Purê de batata
fonte
2

Tudo se resume ao que você precisa. Seu principal ponto forte é a facilidade de manutenção da transformação, e escrever seu próprio analisador geralmente elimina isso. Dito isso, às vezes um sistema é pequeno e simples e realmente não precisa de uma solução "sofisticada". Contanto que seu construtor baseado em código seja substituível sem ter que alterar outro código, não é grande coisa.

Quanto à feiura do XSL, sim, é feio. Sim, leva algum tempo para se acostumar. Mas uma vez que você pega o jeito (não deve demorar muito, IMO), é realmente uma navegação tranquila. As transformações compiladas são executadas muito rapidamente na minha experiência e você certamente pode depurar nelas.

SpongeJim
fonte
2

Ainda acredito que o XSLT pode ser útil, mas é uma linguagem feia e pode levar a uma confusão terrível ilegível e impossível de manter. Em parte porque XML não é legível o suficiente para formar uma "linguagem" e em parte porque XSLT está preso em algum lugar entre ser declarativo e procedural. Dito isso, e acho que uma comparação pode ser feita com expressões regulares, ela tem sua utilidade quando se trata de problemas simples e bem definidos.

Usar a abordagem alternativa e analisar XML no código pode ser igualmente desagradável e você realmente deseja empregar algum tipo de tecnologia de empacotamento / ligação de XML (como JiBX em Java) que converterá seu XML diretamente em um objeto.

Tom Martin
fonte
2

Se você pode usar XSLT em um estilo declarativo (embora eu não concorde totalmente que seja uma linguagem declarativa), então acho que é útil e expressivo.

Eu escrevi aplicativos da web que usam uma linguagem OO (C # no meu caso) para lidar com a camada de dados / processamento, mas geram XML em vez de HTML. Isso pode então ser consumido diretamente pelos clientes como uma API de dados ou processado como HTML por XSLTs. Como o C # estava gerando XML que era estruturalmente compatível com esse uso, tudo era muito tranquilo e a lógica de apresentação era mantida declarativa. Era mais fácil seguir e mudar do que enviar as tags do C #.

No entanto, como você requer mais lógica de processamento no nível XSLT, ele se torna complicado e prolixo - mesmo se você "obtiver" o estilo funcional.

Claro, atualmente eu provavelmente teria escrito esses aplicativos da web usando uma interface RESTful - e acho que as "linguagens" de dados, como JSON, estão ganhando força em áreas em que o XML tradicionalmente foi transformado pelo XSLT. Mas, por enquanto, o XSLT ainda é uma tecnologia importante e útil.

philsquared
fonte
1

Passei muito tempo no XSLT e descobri que, embora seja uma ferramenta útil em algumas situações, definitivamente não é uma solução para tudo. Funciona muito bem para fins B2B quando é usado para tradução de dados para entrada / saída XML legível por máquina. Não acho que você esteja no caminho errado em sua declaração de limitações. Uma das coisas que mais me frustrou foram as nuances nas implementações do XSLT.

Talvez você deva olhar para algumas das outras linguagens de marcação disponíveis. Eu acredito que Jeff fez um artigo sobre este mesmo tópico sobre Stack Overflow.

HTML é uma linguagem de marcação humana?

Eu daria uma olhada no que ele escreveu. Você provavelmente pode encontrar um pacote de software que faz o que você quer "fora da caixa", ou pelo menos muito próximo, em vez de escrever suas próprias coisas do zero.

Jason Jackson
fonte
1

Atualmente, estou encarregado de extrair dados de um site público (sim, eu sei). Felizmente, ele está em conformidade com o xhtml, então posso usar o xslt para coletar os dados de que preciso. A solução resultante é legível, limpa e fácil de mudar se necessário. Perfeito!

Goran
fonte
1

Já usei o XSLT antes. O grupo de 6 arquivos .xslt (refatorados a partir de um grande) tinha cerca de 2.750 linhas muito antes de eu reescrevê-lo em C #. O código C # tem atualmente 4.000 linhas contendo muita lógica; Não quero nem pensar no que seria necessário para escrever em XSLT.

O ponto em que desisti foi quando percebi que não ter o XPATH 2.0 estava prejudicando significativamente meu progresso.

Sam Harwell
fonte
2
Sim, o XSLT não é totalmente ruim e tem alguns casos de uso muito legais, mas a Microsoft não adotar o XSLT 2.0 é uma dor.
Daren Thomas
1
Diga-nos qual era o tamanho do código C # logo após você reescrever essas 2750 linhas de XSLT. Dar o tamanho atual não nos diz nada.
Piotr Dobrogost
1

Para responder às suas três perguntas:

  1. Usei o XSLT uma vez, há alguns anos.
  2. Eu acredito que o XSLT pode ser a solução certa em certas circunstâncias. (Nunca diga nunca)
  3. Eu tendo a concordar com sua avaliação de que é principalmente útil para transformações "simples". Mas acho que, desde que você entenda bem o XSLT, há um caso a ser feito para usá-lo para tarefas maiores, como publicar um site como XML transformado em HTML.

Acredito que a razão pela qual muitos desenvolvedores não gostam de XSLT é porque eles não entendem o paradigma fundamentalmente diferente no qual ele se baseia. Mas, com o recente interesse em programação funcional, podemos ver o retorno do XSLT ...

Dawie Strauss
fonte
1

Um lugar onde o xslt realmente brilha é na geração de relatórios. Descobri que é um processo de 2 etapas, com a primeira etapa exportando os dados do relatório como um arquivo xml e a segunda etapa gerando o relatório visual do xml usando xslt. Isso permite relatórios visuais agradáveis ​​enquanto mantém os dados brutos como um mecanismo de validação, se necessário.

Jack ryan
fonte
1

Em uma empresa anterior, fizemos muito com XML e XSLT. XML e XSLT são grandes.

Sim, há uma curva de aprendizado, mas você tem uma ferramenta poderosa para lidar com XML. E você pode até usar XSLT em XSLT (que às vezes pode ser útil).

O desempenho também é um problema (com XML muito grande), mas você pode resolver isso usando o XSLT inteligente e fazer algum pré-processamento com o XML (gerado).

Qualquer pessoa com conhecimento de XSLT pode alterar a aparência do produto acabado porque ele não foi compilado.

Toon Krijthe
fonte
1

Eu pessoalmente gosto de XSLT, e você pode dar a sintaxe simplificada uma olhada na (sem modelos explícitos, apenas um arquivo HTML antigo normal com algumas tags XSLT para inserir valores nele), mas não é para todos.

Talvez você apenas queira oferecer aos seus autores uma interface simples de Wiki ou Markdown. Existem bibliotecas para isso também, e se o XSLT não está funcionando para você, talvez o XML também não esteja funcionando para eles.

brianary
fonte
0

XSLT não é o fim de tudo da transformação xml. No entanto, é muito difícil julgar com base nas informações fornecidas se essa teria sido a melhor solução para o seu problema ou se existem outras abordagens mais eficientes e sustentáveis. Você diz que os autores poderiam inserir seu conteúdo em um formato simplificado - qual formato? Caixas de texto? Para que tipo de html você o estava convertendo? Para julgar se o XSLT é a ferramenta certa para o trabalho, seria útil conhecer os recursos dessa transformação com mais detalhes.

Shmoggle
fonte
os autores escrevem XML em um editor de texto. basicamente, é um HTML simplificado - algumas coisas foram removidas para forçar um estilo consistente, coisas como uma tag <video /> foram adicionadas como uma abreviação para um HTML mais complexo. Outros elementos são usados ​​para gerar menus / bibliografia / glossários, etc.
nickf
0

Gosto de usar XSLT apenas para alterar a estrutura de árvore de documentos XML. Acho complicado fazer qualquer coisa relacionada ao processamento de texto e relegar isso a um script personalizado que posso executar antes ou depois de aplicar um XSLT a um documento XML.

O XSLT 2.0 incluiu muito mais funções de string, mas acho que não é um bom ajuste para a linguagem e não há muitas implementações de XSLT 2.0.

Ben
fonte