> For the complete documentation index, see [llms.txt](https://ufrj.gitbook.io/etl4lod/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ufrj.gitbook.io/etl4lod/master.md).

# ETL₄LOD+

![](/files/-LOhZVeHsG6XUwsar4IJ)

## Introdução

O objetivo do ETL4LOD é fornecer uma framework amigável ao usuário que permita a manutenção da etapa de publicação do ciclo de vida de dados do tipo LOD.

A figura 1 apresenta as principais etapas envolvidas nesse ciclo de vida:

![Figura 1 - Processo de Linked Open Data](/files/-LMYhARUqwGEuIu-xV5B)

Para garantir uma interface que seja amigável ao usuário e tirar proveito de funcionalidades já existentes, o ETL4LOD foi criado como uma extensão ao Pentaho Data Integration, também conhecido como Kettle.

Uma extensão do Kettle é um conjunto de plugins, ou steps, desenvolvidos em Java que são integrados a ferramenta e podem ser usados em conjunto com os outros steps já existentes. Portanto, o ELT4LOD é um conjunto de plugins voltados especificamente para o trabalho com Linked Data.

A mecânica *drag\&drop* contida no Kettle garante uma ótima usabilidade para o usuário final, que precisa apenas selecionar entre uma lista de opções que se aplicam ao processo sendo criado, e arrastá-la para a área de trabalho do Kettle para uso. Já a existência de steps feitos especificamente para processos de ETL no Kettle permite que o processo de publicação do ciclo de vida de dados ligados seja feito todo dentro do Kettle.

Em sua versão inicial, o ETL4LOD foi criado para trabalhar com a versão 4.1 do Kettle. O objetivo deste trabalho é dualmente atualizar o ETL4LOD e suas dependências para trabalhar na versão mais recente do Kettle, e melhorar a usabilidade e funcionalidades já existentes na ferramenta.

Mais informações sobre o que foi atualizado podem ser encontradas em [changelog](/etl4lod/master.md#changelog).

## Ciclo de Vida de LOD

O ciclo de vida para publicação de dados do tipo LOD na web é dividido em três etapas: pré-processamento, triplificação e ligação. Os steps criados para o ETL4LOD se encaixam em sua maioria na etapa de triplificação, enquanto que os steps já existentes no Kettle são usados na etapa de pré-processamento. Atualmente a única etapa sendo feita fora do Kettle é a ligação.

### Pré-processamento

A etapa de pré-processamento é a que envolve o trabalho sobre um dado bruto, geralmente um arquivo csv ou excel, visando tirar as inconsistências desses dados e prepará-los para o processo de triplificação.

O pré-processamento de dados no Kettle pode ser subdivido em duas etapas: entrada de dados e trabalho sobre os dados. Abaixo segue uma lista de steps usados em cada uma dessas etapas.

#### Entrada de dados

A entrada de dados envolve steps que sejam usados para carregar os dados necessários para o Kettle, estejam eles em arquivos de texto, xml, csv ou em um banco de dados. Os steps mais usados para o trabalho com dados interligados são:

|               Step               | Descrição                                          |
| :------------------------------: | -------------------------------------------------- |
| ![](/files/-LN82UqdJVYFrn7tZEzl) | Leitura de arquivos de quaisquer arquivos de texto |
| ![](/files/-LN83PfzCw57-R3UONUM) | Leitura de arquivos de texto separados por vírgula |
| ![](/files/-LN83oSuR-218lQ8ahQl) | Leitura de uma tabela num banco de dados           |
| ![](/files/-LN84J9AsKhgHZZOnYcD) | Leitura de um arquivo xls ou xlst                  |
| ![](/files/-LN84epi7ARVkLiUNane) | Leitura de um arquivo json ou json-ld              |
| ![](/files/-LN84skrbIEW9cVLLZv3) | Leitura de arquivos xml, incluindo owl ou rdf      |

Os steps de entrada de dados geralmente possuem um step correspondente para a saída de dados que permite salvar os dados naquele formato. Como o processo de triplificação geralmente envolve salvar os dados num endpoint sparql ou em rdf não falaremos sobre todos esses steps de saída.

#### Trabalho sobre os dados

Nesta categoria entram os plugins mais usados para remover inconsistências de dados, separar o fluxo dos dados

### Triplificação

|              Plugin              |                    Manual                   | Descrição                                                 |
| :------------------------------: | :-----------------------------------------: | --------------------------------------------------------- |
| ![](/files/-LN8AZ7DxKoxr5qR01o6) |  [link](/etl4lod/data-property-mapping.md)  | Mapeia triplas RDF, onde o objeto é um valor literal      |
| ![](/files/-LN8AaMVHLgpp-6DB4-A) | [link](/etl4lod/object-property-mapping.md) | Mapeia triplas RDF, onde o objeto de saída é uma URI      |
| ![](/files/-LN8AkD0FY9TgwTXQ385) |    [link](/etl4lod/ntriples-generator.md)   | Converte sentenças RDF em NTriple                         |
| ![](/files/-LN8AhH_JJEpSaBVekdq) |   [link](/etl4lod/sparql-update-output.md)  | Carrega triplas RDF em um banco de triplas como o Vituoso |
| ![](/files/-LN8Aco35x3P672fBCG0) |     [link](/etl4lod/sparql-endpoint.md)     | Extrai dados de um SPARQL Endpoint                        |
| ![](/files/-LN8AexXeBN7V-EknvRT) |     [link](/etl4lod/sparql-run-query.md)    | Executa uma query SPARQL                                  |
| ![](/files/-LN8AWUtdjRk9oCv-CQX) |        [link](/etl4lod/annotator.md)        | Anota uma tripla com termos de vocabulários e ontologias  |

### Ligação

## Plugins

| Nome                     | Descrição                                                                                         | Versão do Kettle |
| ------------------------ | ------------------------------------------------------------------------------------------------- | ---------------- |
| GraphSparqlEndpoint      | Roda uma query sparql num endpoint e recupera um conjunto de triplas que representam um grafo RDF | 8.1              |
| GraphSemanticLevelMarker | Lê um grafo RDF, avalia seu nível de expressividade semântica e marca o grafo com esse nível      | 8.1              |
| GraphTriplify            | Lê um grafo RDF e gera suas triplas                                                               | 8.1              |

## Changelog

### 2.0.0

#### Added

* xmlpull 1.1.3.1 adicionado como dependência dos projetos que usam xstream 1.4.10
* jena-shaded-guava e jena-base adicionados como dependências dos projetos que agora usam jena 3
* javadocs
* adicionado plugins R2RMLtoRDF, OAI Input

#### Removed

* i18n removida dos plugins dando preferência ao uso de pt-BR
* removida compatibilidade dos plugins com arquivos criados na versão 1.0 do ELT4LOD
* removida versão dos plugins DataPropertyMapping e ObjectPropertyMapping

#### Changed

* xstream 1.3.1 atualizado para 1.4.10
* kettle atualizado de 4.0 para 9.0.0.0-SNAPSHOT
* any23 1.0 atualizado para versão 2.2
* apache httpclient 4.1.1 atualizado para versão 4.5.6
* apache httpcore 4.1 atualizado para versão 4.4.10
* jena 2.6 atualizado para versão 3.8.0
* KettlePluginTools.jar maveninzado

## Testes

OAI: <https://escholarship.org/oai>

## Rodando o projeto

Mude a variável `pdi.home` no `pom.xml` do projeto pai e rode o comando `mvn install` no projeto pai. Isso deveria ser o suficiente para gerar todos os plugins e colocá-los na pasta correta na sua instalação do kettle.
