You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Updates documentation and translate it to English.
- General refactoring.
- Includes configurations to deploy the project to Maven Central.
- Adds maven-license-plugin to include copyright notice at top of java files.
- Adds new badges to README.md
XML é um padrão internacional da W3C para intercâmbio de dados, amplamente utilizado e conhecido. Tal formato permite a troca de dados entre sistemas heterogêneos, garantindo a interoperabilidade entre os mesmos. No entanto, em aplicações interativas para o Sistema Brasileiro de TV Digital, desenvolvidas em NCL e Lua, tem-se uma alternativa bem mais simples que o uso de arquivos XML para a representação, armazenamento e troca de dados: os arquivos de dados em formato Lua, como já mostrei [neste post](http://manoelcampos.com/2010/06/08/aplicacao-de-tv-digital-usando-arquivos-de-dados-em-lua/).
5
5
@@ -8,8 +8,7 @@ O uso de tais arquivos traz vários benefícios como: tamanho menor (menos bytes
8
8
Por demandar uma capacidade mínima de processamento, o uso de arquivos de dados em formato Lua é ideal para ambientes de recursos de hardware restritos como os equipamentos de recepção de TV Digital, além de simplificar o código da aplicação para a manipulação de tais dados.
9
9
10
10
11
-
O problema
12
-
----------
11
+
# O problema
13
12
14
13
O uso de arquivos XML em aplicações NCL/Lua para a TVD (enviadas via broadcast) é perfeitamente possível desde que tenha-se um parser escrito inteiramente em Lua, como o [LuaXML](https://github.com/manoelcampos/LuaXML) (veja o [Leitor de RSS em NCLua](https://github.com/manoelcampos/NCLuaRSS-Reader)). Tal parser converte um arquivo XML para uma tabela Lua, armazenando a mesma em RAM. Desta forma, a manipulação dos dados fica mais fácil. No link anterior existe uma versão do parser, adaptada por mim, que funciona com Lua 5 (a versão utilizada no subsistema Ginga-NCL do middleware Ginga).
15
14
@@ -20,23 +19,19 @@ Apesar de ser possível a atualização do middleware, sabemos que nem todos os
20
19
Desta forma, usar arquivos XML localmente não garante que a aplicação executará em qualquer implementação de Ginga.
21
20
22
21
23
-
A solução: Xml2Lua
24
-
------------------
25
-
22
+
# A solução: Xml2Lua
26
23
27
24
Para resolver tal problema, estou disponibilizando uma aplicação console em Java para converter um arquivo XML para o formato Lua. A aplicação utiliza o parser DOM (que se não estou errado é padrão no JDK e JRE) para percorrer os elementos do arquivo XML e assim poder gerar um arquivo Lua com os dados contidos no primeiro.
28
25
29
26
Para tal conversão, poderia ser utilizada qualquer linguagem de programação, até mesmo Lua, com uso do [LuaXML](https://github.com/manoelcampos/LuaXML) (para fazer o parse do XML) e o [table.save](http://lua-users.org/wiki/SaveTableToFile) (para salvar a tabela Lua, gerada a partir do XML, em disco). No entanto, o arquivo lua gerado com o table.save não ficou muito organizado e incluiu muito lixo, dificultando a manipulação dos dados. Por este motivo, resolvi implementar a ferramenta em Java.
30
27
31
28
A implementação realizada está disponível no final do artigo, juntamente com toda a documentação e código fonte. Ela possui uma ferramenta de linha de comando (para ser usada antes de enviar a aplicação NCL/Lua via broadcast) para fazer a conversão do XML para Lua. Além disto, existe também uma classe Java que pode ser usada em qualquer outra aplicação (Desktop ou Web), permitindo a integração de tal implementação em sistemas já existentes, para, por exemplo, automatizar a conversão dos arquivos XML para Lua, para assim poderem ser enviados pelo carrossel para transmissão em broadcast.
32
29
33
-
Documentação
34
-
------------
30
+
# Documentação
35
31
36
32
A documentação da API está [disponível online aqui](http://manoelcampos.github.io/Xml2Lua/apidocs).
37
33
38
-
Usando a ferramenta
39
-
-------------------
34
+
# Usando a ferramenta
40
35
41
36
Para usar a ferramenta de linha de comando, basta executar em um terminal:
Note que deve-se informar o nome de um arquivo XML. A aplicação gerará um arquivo Lua de mesmo nome, dentro do diretório atual.
48
43
49
-
Estudo de caso
50
-
--------------
44
+
# Estudo de caso
51
45
52
46
Para exemplificar o uso da ferramenta, vamos imaginar que temos uma aplicação NCL/Lua de uma loja virtual, que precisa exibir uma lista de produtos na tela. As informações de tais produtos estão em um arquivo XML que será convertido para um arquivo Lua.
53
47
54
-
Para isto, usaremos um arquivo de nome produtos.xml, com o conteúdo a seguir. Todos os arquivos XML e o código do exemplo apresentado aqui está disponível na pasta [exemplo](exemplo).
48
+
Para isto, usaremos um arquivo de nome produtos.xml, com o conteúdo a seguir. Todos os arquivos XML e o código do exemplo apresentado aqui está disponível na pasta [lua-sample-app](lua-sample-app).
55
49
56
50
```xml
57
51
<produtos>
@@ -153,7 +147,6 @@ A partir de um for em tal tabela, pegando-se o valor do campo id, pode-se acessa
153
147
154
148
## Código da aplicação Lua
155
149
156
-
157
150
Após terem sido convertidos os arquivos produtos.xml e destaques.xml para Lua, podemos ter uma aplicação Lua para carregar tais arquivos Lua e exibir os dados, como pode ser visto no trecho de código a seguir. A aplicação não possui interface gráfica pois isto está fora do escopo do artigo. Ela apenas exibe os dados no terminal. Tal código está disponível no arquivo app.lua, no pacote para download.
158
151
159
152
```lua
@@ -176,8 +169,7 @@ lua app.lua
176
169
```
177
170
178
171
179
-
Conclusão
180
-
---------
172
+
# Conclusão
181
173
182
174
Como as aplicações de TVD (por exemplo, as de comércio eletrônico) podem ser apenas uma nova interface gráfica para sistemas já existentes que usam XML, WebServices e outras tecnologias como a base da arquitetura destes, implementar a geração de arquivos de dados Lua em tais arquiteturas pode ser algo trabalhoso.
0 commit comments