XSLT - XSLT

XSLT
Paradigma Declarativo
Desenvolvedor World Wide Web Consortium (W3C)
Apareceu pela primeira vez 1998
Versão estável
3.0 / 8 de junho de 2017 ; 3 anos atrás  ( 08/06/2017 )
Extensões de nome de arquivo .xslt
Local na rede Internet www .w3 .org / TR / xslt-30 /
Implementações principais
libxslt , Saxon , Xalan
Influenciado por
DSSSL

XSLT ( Extensible Stylesheet Language Transformations ) é uma linguagem para transformar documentos XML em outros documentos XML ou outros formatos, como HTML para páginas da web , texto simples ou objetos de formatação XSL , que podem ser posteriormente convertidos em outros formatos, como PDF , PostScript e PNG . XSLT 1.0 é amplamente suportado em navegadores da web modernos.

O documento original não é alterado; em vez disso, um novo documento é criado com base no conteúdo de um existente. Normalmente, os documentos de entrada são arquivos XML, mas qualquer coisa a partir do qual o processador pode construir um modelo de dados XQuery e XPath pode ser usado, como tabelas de banco de dados relacionais ou sistemas de informações geográficas .

Embora XSLT seja projetada como uma linguagem de propósito especial para transformação XML, a linguagem é Turing-completa , o que a torna teoricamente capaz de cálculos arbitrários.

História

O XSLT é influenciado por linguagens funcionais e por linguagens de correspondência de padrões baseadas em texto, como SNOBOL e AWK . Seu predecessor mais direto é o DSSSL , que fez para o SGML o que o XSLT faz para o XML.

  • XSLT 2.0: após uma tentativa abortada de criar uma versão 1.1 em 2001, o grupo de trabalho XSL uniu forças com o grupo de trabalho XQuery para criar XPath 2.0 , com um modelo de dados e sistema de tipos mais rico baseado em XML Schema . Com base nisso, está o XSLT 2.0, desenvolvido sob a direção de Michael Kay , que alcançou o status de recomendação em janeiro de 2007. As inovações mais importantes no XSLT 2.0 incluem:
    • Manipulação de strings usando expressões regulares
    • Funções e operadores para manipular datas, horas e durações
    • Vários documentos de saída
    • Agrupamento (criação de estrutura hierárquica a partir de sequências de entrada simples)
    • Um sistema de tipo mais rico e verificação de tipo mais forte
  • XSLT 3.0: tornou-se uma recomendação W3C em 8 de junho de 2017. Os principais novos recursos são:
    • Transformações de streaming : nas versões anteriores, todo o documento de entrada precisava ser lido na memória antes de ser processado, e a saída não podia ser gravada até que o processamento fosse concluído. O XSLT 3.0 permite streaming de XML, que é útil para processar documentos muito grandes para caber na memória ou quando as transformações são encadeadas em XML Pipelines .
    • Pacotes, para melhorar a modularidade de grandes folhas de estilo.
    • Tratamento aprimorado de erros dinâmicos com, por exemplo, uma instrução xsl: try.
    • Suporte para mapas e matrizes, permitindo que XSLT manipule JSON e XML.
    • As funções agora podem ser argumentos para outras funções (de ordem superior).

Modelo de design e processamento

Diagrama dos elementos básicos e fluxo do processo de eXtensible Stylesheet Language Transformations.

O processador XSLT pega um ou mais documentos de origem XML, além de uma ou mais folhas de estilo XSLT, e os processa para produzir um documento de saída. Em contraste com as linguagens de programação imperativas amplamente implementadas como C , o XSLT é declarativo . O paradigma de processamento básico é a correspondência de padrões. Em vez de listar uma seqüência imperativo de ações a serem executadas em um ambiente de estado, regras de modelo só definem como lidar com um nó combinando um determinado XPath-como padrão, se o processador deve acontecer de encontrar um, e os conteúdos dos modelos efetivamente compreendem funcional expressões que representam diretamente sua forma avaliada: a árvore de resultados, que é a base da saída do processador.

Um processador típico se comporta da seguinte maneira. Primeiro, supondo que uma folha de estilo já tenha sido lida e preparada, o processador constrói uma árvore de origem a partir do documento XML de entrada. Em seguida, ele processa o nó raiz da árvore de origem, encontra o modelo mais adequado para esse nó na folha de estilo e avalia o conteúdo do modelo. As instruções em cada modelo geralmente direcionam o processador para criar nós na árvore de resultados ou para processar mais nós na árvore de origem da mesma maneira que o nó raiz. Finalmente, a árvore de resultados é serializada como texto XML ou HTML.

XPath

O XSLT usa XPath para identificar subconjuntos da árvore do documento de origem e realizar cálculos. O XPath também fornece uma gama de funções , que o próprio XSLT aumenta ainda mais.

XSLT 1.0 usa XPath 1.0, enquanto XSLT 2.0 usa XPath 2.0. XSLT 3.0 funcionará com XPath 3.0 ou 3.1. No caso de 1.0 e 2.0, as especificações XSLT e XPath foram publicadas na mesma data. Com o 3.0, no entanto, eles não estavam mais sincronizados; XPath 3.0 tornou-se uma recomendação em abril de 2014, seguido por XPath 3.1 em fevereiro de 2017; O XSLT 3.0 foi lançado em junho de 2017.

XQuery comparado

As funcionalidades do XSLT se sobrepõem às do XQuery , que foi inicialmente concebido como uma linguagem de consulta para grandes coleções de documentos XML.

Os padrões XSLT 2.0 e XQuery 1.0 foram desenvolvidos por grupos de trabalho separados dentro do W3C , trabalhando juntos para garantir uma abordagem comum quando apropriado. Eles compartilham o mesmo modelo de dados, sistema de tipos e biblioteca de funções, e ambos incluem XPath 2.0 como um sublinguagem.

As duas línguas, no entanto, estão enraizadas em tradições diferentes e atendem às necessidades de comunidades diferentes. O XSLT foi concebido principalmente como uma linguagem de folha de estilo cujo objetivo principal era renderizar XML para o leitor humano na tela, na web (como uma linguagem de modelo da web ) ou no papel. XQuery foi concebido principalmente como uma linguagem de consulta de banco de dados na tradição do SQL .

Como as duas linguagens se originam em comunidades diferentes, o XSLT é mais forte no manuseio de documentos narrativos com estrutura mais flexível, enquanto o XQuery é mais forte no manuseio de dados, por exemplo, ao realizar junções relacionais.

Tipos de mídia

O <output> elemento pode opcionalmente ter o atributo media-type , o que permite uma para definir o tipo de material (ou o tipo MIME) para a saída resultante, por exemplo: <xsl:output output="xml" media-type="application/xml"/> . A recomendação XSLT 1.0 recomenda os tipos de atributos mais gerais text/xml e application/xml já que por muito tempo não havia tipo de mídia registrado para XSLT. Durante esse tempo, text/xsl tornou-se o padrão de fato. No XSLT 1.0 não foi especificado como os media-type valores devem ser usados.

Com o lançamento do XSLT 2.0, o W3C recomendou o registro do tipo de mídia MIME application/xslt+xml e posteriormente foi registrado na Autoridade para Atribuição de Números da Internet .

Rascunhos de trabalho anteriores à 1.0 de XSLT usados text/xsl em seus exemplos de incorporação, e esse tipo foi implementado e continua a ser promovido pela Microsoft no Internet Explorer e no MSXML. Também é amplamente reconhecido nas xml-stylesheet instruções de processamento de outros navegadores. Na prática, portanto, os usuários que desejam controlar a transformação no navegador usando essa instrução de processamento são obrigados a usar esse tipo de mídia não registrada.

Exemplos

Estes exemplos usam o seguinte documento XML de entrada

<?xml version="1.0" ?>
<persons>
  <person username="JS1">
    <name>John</name>
    <family-name>Smith</family-name>
  </person>
  <person username="MI1">
    <name>Morka</name>
    <family-name>Ismincius</family-name>
  </person>
</persons>

Exemplo 1 (transformação de XML em XML)

Esta folha de estilo XSLT fornece modelos para transformar o documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/persons">
    <root>
      <xsl:apply-templates select="person"/>
    </root>
  </xsl:template>

  <xsl:template match="person">
    <name username="{@username}">
      <xsl:value-of select="name" />
    </name>
  </xsl:template>

</xsl:stylesheet>

Sua avaliação resulta em um novo documento XML, possuindo outra estrutura:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <name username="JS1">John</name>
  <name username="MI1">Morka</name>
</root>

Exemplo 2 (transformação de XML em XHTML)

Processando o seguinte arquivo XSLT de exemplo

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/1999/xhtml">

  <xsl:output method="xml" indent="yes" encoding="UTF-8"/>

  <xsl:template match="/persons">
    <html>
      <head> <title>Testing XML Example</title> </head>
      <body>
        <h1>Persons</h1>
        <ul>
          <xsl:apply-templates select="person">
            <xsl:sort select="family-name" />
          </xsl:apply-templates>
        </ul>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="person">
    <li>
      <xsl:value-of select="family-name"/><xsl:text>, </xsl:text><xsl:value-of select="name"/>
    </li>
  </xsl:template>

</xsl:stylesheet>

com o arquivo de entrada XML mostrado acima resulta no seguinte XHTML (o espaço em branco foi ajustado aqui para maior clareza):

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head> <title>Testing XML Example</title> </head>
  <body>
    <h1>Persons</h1>
      <ul>
        <li>Ismincius, Morka</li>
        <li>Smith, John</li>
      </ul>
  </body>
</html>

Este XHTML gera a saída abaixo quando renderizado em um navegador da web.

XHTML renderizado gerado a partir de um arquivo de entrada XML e uma transformação XSLT.

Para que um navegador da web seja capaz de aplicar uma transformação XSL a um documento XML em exibição, uma instrução de processamento de folha de estilo XML pode ser inserida no XML. Portanto, por exemplo, se a folha de estilo no Exemplo 2 acima estivesse disponível como "example2.xsl", a seguinte instrução poderia ser adicionada ao XML de entrada original:

<?xml-stylesheet href="example2.xsl" type="text/xsl" ?>

Neste exemplo, text/xsl está tecnicamente incorreto de acordo com as especificações do W3C (que dizem que o tipo deveria ser application/xslt+xml ), mas é o único tipo de mídia com amplo suporte para navegadores a partir de 2009, e a situação não mudou em 2021.

Implementações de processador

  • A Microsoft fornece dois processadores XSLT (somente XSLT 1.0). O processador anterior MSXML fornece interfaces COM; do MSXML 4.0 também inclui o utilitário de linha de comando msxsl.exe . O runtime .NET inclui um processador XSLT integrado separado em sua System.Xml.Xsl biblioteca.
  • Saxon é um processador XSLT 3.0 e XQuery 3.1 com código aberto e versões proprietárias para operação autônoma e para Java , JavaScript e .NET. Um produto separado Saxon-JS oferece processamento XSLT 3.0 em Node.js e no navegador.
  • Xalan é um processador XSLT 1.0 de código aberto da Apache Software Foundation disponível para Java e C ++. Uma variante do processador Xalan está incluída como processador XSLT padrão na distribuição Java padrão da Oracle.
  • Navegadores da Web: Safari, Chrome, Firefox, Opera e Internet Explorer são compatíveis com XSLT 1.0 (somente). Os navegadores podem realizar transformações dinâmicas de arquivos XML e exibir a saída da transformação na janela do navegador. Isso é feito incorporando o XSL no documento XML ou referenciando um arquivo contendo instruções XSL do documento XML. Este último pode não funcionar com o Chrome em arquivos do sistema de arquivos local devido ao seu modelo de segurança.
  • Desempenho

    A maioria dos primeiros processadores XSLT eram intérpretes. Mais recentemente, a geração de código é cada vez mais comum, usando linguagens intermediárias portáveis ​​(como bytecode Java ou .NET Common Intermediate Language ) como o destino. No entanto, mesmo os produtos interpretativos geralmente oferecem fases de análise e execução separadas, permitindo que uma árvore de expressão otimizada seja criada na memória e reutilizada para realizar várias transformações. Isso oferece benefícios substanciais de desempenho em aplicativos de publicação online, onde a mesma transformação é aplicada muitas vezes por segundo a diferentes documentos de origem. Essa separação é refletida no design das APIs de processamento XSLT (como JAXP ).

    Os primeiros processadores XSLT tinham muito poucas otimizações. Os documentos de folha de estilo eram lidos em modelos de objeto de documento e o processador atuava diretamente sobre eles. Os motores XPath também não foram otimizados. Cada vez mais, no entanto, os processadores XSLT usam técnicas de otimização encontradas em linguagens de programação funcionais e linguagens de consulta de banco de dados, como reescrita estática de uma árvore de expressão (por exemplo, para mover cálculos fora de loops) e avaliação preguiçosa em pipeline para reduzir a pegada de memória de resultados intermediários (e permitir "saída antecipada" quando o processador puder avaliar uma expressão, por exemplo, following-sibling::*[1] sem uma avaliação completa de todas as subexpressões). Muitos processadores também usam representações de árvore que são significativamente mais eficientes (em espaço e tempo) do que implementações DOM de propósito geral.

    Em junho de 2014, Debbie Lockett e Michael Kay introduziram uma estrutura de benchmarking de código aberto para processadores XSLT chamada XT-Speedo.

    Veja também

    Referências

    Leitura adicional

    links externos

    Documentação
    Bibliotecas de código XSLT
    • EXSLT é uma iniciativa ampla da comunidade para fornecer extensões para XSLT.
    • FXSL é uma biblioteca que implementa suporte para funções de ordem superior em XSLT. FXSL é escrito no próprio XSLT.
    • A biblioteca padrão XSLT xsltsl fornece ao desenvolvedor XSLT um conjunto de modelos XSLT para funções comumente usadas. Eles são implementados puramente em XSLT, ou seja, não usam extensões. xsltsl é um projeto do SourceForge.
    • Kernow Uma GUI para Saxon que fornece uma interface de apontar e clicar para executar transformações.
    • xslt.js - Transforma XML com biblioteca XSLT JavaScript que transforma XML com XSLT no navegador.