Acompanhe a Design Líquido nas redes sociais:
Especificação da Linguagem de Marcação Hiper Texto, LMHT.
LMHT nada mais é do que HTML em português, usando um arquivo de transformação XSL para mudar nomes de tags e atributos.
Por exemplo:
<lmht>
<corpo>
<titulo1>Isso é um título</titulo1>
<p classe="minha-classe">Isto é um parágrafo.</p>
<lista-simples>
<item-lista>Itens podem ser adicionados usando a estrutura item-lista.</item-lista>
<item-lista>Cada item da lista é transformado em um item li do HTML.</item-lista>
<item-lista>Não apenas estrutura são modificadas, como também seus atributos.</item-lista>
</lista-simples>
</corpo>
</lmht>
Gera o equivalente em HTML:
<html>
<body>
<h1>Isso é um título</h1>
<p class="minha-classe">Isto é um parágrafo.</p>
<ul>
<li>Itens podem ser adicionados usando a estrutura item-lista.</li>
<li>Cada item da lista é transformado em um item li do HTML.</li>
<li>Não apenas estrutura são modificadas, como também seus atributos.</li>
</ul>
</body>
</html>
Para testar a transformação XSL, use:
Por ser independente de linguagem, todos os arquivos de especificações podem ser usados com qualquer biblioteca de qualquer linguagem que implemente XSLT 1.0 ou superior.
- Para uso de XSLT 1.0, use o arquivo
lmht10.xslt
; - Para uso de XSLT 2.0 ou superior, use o arquivo
lmht.xslt
.
Há também um arquivo XSD para validação de arquivos na extensão .lmht
, que vive no diretório raiz deste repositório. Para validar seu arquivo LMHT usando XSD, basta adicionar à estrutura <lmht>
a referência para o arquivo XSD da seguinte forma:
<lmht xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/DesignLiquido/LMHT/principal/lmht.xsd">
...
</lmht>
Para testar a validação online, use:
Veja mais abaixo como validar usando diferentes linguagens de programação.
LMHT transforma para HTML5. Tags não compatíveis, que existam apenas em HTML4, não possuem uma estrutura correspondente em LMHT.
Não todos os valores de atributos são traduzidos. Quando há essa tradução, isso normalmente é especificado na Wiki de cada estrutura.
A estrutura <style>
não é traduzida. O motivo disso é que <estilo>
é usada para tradução, mas o que se espera dentro de <estilo>
é código em FolEs.
Algumas tags HTML por ora não serão mapeadas:
<embed>
é uma tag com várias alternativas, como<img>
,<iframe>
,<video>
e<audio>
. Essas tags são mapeadas, respectivamente, com as estruturas<imagem>
,<subpágina>
,<vídeo>
e<áudio>
.
Mais detalhes sobre as estruturas podem ser encontrados na nossa Wiki.
- JavaScript/Node.js/TypeScript: lmht-js
- PHP: lmht-php
- C#/.NET: lmht-csharp
A forma mais fácil de testar é pelo PowerShell, mas esse exemplo pode ser facilmente replicado para as demais linguagens.
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
$xslt.load("lmht.xslt");
$xslt.Transform("exemplo.lmht", "exemplo.html");
Para uma transformação reversa (de HTML para LMHT), use:
$xsltReverso = New-Object System.Xml.Xsl.XslCompiledTransform;
$xsltReverso.load("lmht-reverso.xslt");
$xsltReverso.Transform("exemplo.html", "exemplo-reverso.lmht");
Usando groovysh
:
xslt = new File("lmht.xslt").getText()
stringReader = new StringReader(xslt)
stringSource = new javax.xml.transform.stream.StreamSource(stringReader)
transformer = javax.xml.transform.TransformerFactory.newInstance().newTransformer(stringSource)
exemplo = new File("exemplo.lmht").getText()
html = new FileOutputStream("exemplo.html")
transformer.transform(new javax.xml.transform.stream.StreamSource(new StringReader(exemplo)), new javax.xml.transform.stream.StreamResult(html))
Exemplo funciona para Groovy e Java, com as devidas adaptações.
Pode ser utilizado xslt3, que usa a saxon-js.
Um comando para PowerShell pode ser o seguinte:
xslt3 "-s:exemplo.lmht" "-xsl:lmht.xslt" "-o:exemplo.html" -t
Para bash, zsh, etc., não é necessário usar as aspas duplas.
xslt3 -s:exemplo.lmht -xsl:lmht.xslt -o:exemplo.html -t
Primeiro instale o pacote lxml.
import lxml.etree as ET
arquivo_lmht = ET.parse("exemplo.lmht")
xslt = ET.parse("lmht.xslt")
transform = ET.XSLT(xslt)
conteudo_html = transform(arquivo_lmht)
conteudo_html.write("exemplo.html", encoding="utf-8")
Primeiro instale o pacote ruby-xslt. Essa biblioteca reclama da versão 2.0 do XSL, mas faz a transformação assim mesmo.
require 'xml/xslt'
xslt.xml = "exemplo.lmht"
xslt.xsl = "lmht.xslt"
xslt.save('exemplo.html')
Abaixo temos um exemplo de como validar um arquivo usando PowerShell:
$leitorSchema = New-Object System.Xml.XmlTextReader "lmht.xsd"
[scriptblock] $funcaoParaLidarComExcecoes = { Write-Error $args[1].Exception }
$schema = [System.Xml.Schema.XmlSchema]::Read($leitorSchema, $funcaoParaLidarComExcecoes)
$xml = New-Object System.Xml.XmlDocument
$xml.Schemas.Add($schema) | Out-Null
$xml.Load("exemplo.lmht")
$xml.Validate(
{
throw ([PsCustomObject] @{
SchemaFile = "lmht.xsd"
XmlFile = "exemplo.lmht"
Exception = $args[1].Exception
})
})
$leitorSchema.Close()
Primeiro instale o pacote lxml.
from lxml import etree
xmlschema_doc = etree.parse("lmht.xsd")
xmlschema = etree.XMLSchema(xmlschema_doc)
xml_doc = etree.parse("exemplo.lmht")
print(xmlschema.validate(xml_doc))