O NextTypes é um sistema de armazenamento de informações, processamento e transmissão baseado em padrões que integra as características de outros sistemas, como bancos de dados, linguagens de programação, protocolos de comunicação, sistemas de arquivos, gerentes de documentos, sistemas operacionais, estruturas, formatos de arquivo e hardware em um único sistema fortemente integrado usando um sistema de tipos de dados comum.
A implementação de referência está programada no Java 17 e usa o PostGresql 15 Database Manager. Ele é distribuído sob a licença Apache 2.0, em um arquivo de guerra facilmente instalável. Para testar a interface de software (no modo somente leitura), sem precisar instalá-lo, você pode explorar o site do projeto, desenvolvido usando o referido software. No menu à esquerda, na seção "Painel de controle" e nos botões na parte superior/direita da página, você encontrará as ações disponíveis.
O NextTypes integra os tipos de dados primitivos do PostgreSQL, como números, texto, binário, datas, JSON ou XML, embora forneçam nomes diferentes para simplificar a nomenclatura e facilitar a integração com outros sistemas. Por exemplo, em vez de usar "smallint", "inteiro" e "bigint" a raiz "int" seguidos pelo número de bits (int16, int32 e int64) é usado ou em vez de "variar de caracteres" ou "varchar", é usado "string" como em algumas linguagens de programação.
Ele também adiciona outros tipos de dados, como HTML ou URL, e usando a capacidade do PostGresql para criar tipos de dados compostos para colunas, inclui tipos de dados para arquivos, documentos, imagens, áudios e vídeos. O conteúdo binário desses campos pode ser digitalizado com o antivírus Clamav. Tipos de dados complexos, como HTML ou imagens, são compostos de elementos que podem ser acessados individualmente e podem ser aplicados restrições a eles, como tags ou formatos permitidos.
O sistema de armazenamento é baseado principalmente em SQL, mas é um híbrido relacional/de rede/objetos/arquivos. Cada tabela é um tipo de dados e cada linha em uma tabela é um objeto. Cada linha possui uma coluna com um identificador (ID) que é a chave primária e várias colunas com metadados semelhantes aos dos arquivos: data de criação (cdate), data de atualização (udate) e backup (backup). O restante das colunas são os campos de dados do objeto. A data da criação (cdate) e alteração (anúncio) dos tipos de dados também são armazenadas. As datas usam o padrão UTC e incluem horas, minutos, segundos e microssegundos. O padrão ISO 8601 é usado para sua representação no texto.
Os campos dos objetos podem ser de um tipo primitivo ou apontar para outros objetos usando o identificador como uma chave estrangeira, formando um banco de dados de rede. O identificador é uma sequência de texto com um índice exclusivo e, por padrão, recebe um UUID. Essa simplificação e uniformidade nas chaves primárias e estrangeiras facilita a automação e a integração com outros sistemas.
A correspondência com o modelo de relação de entidade é semelhante à do modelo relacional. Cada entidade é um objeto, atributos são campos e relacionamentos e vários atributos são feitos com campos que se referem a outros objetos.
O identificador de objetos e os campos podem fazer parte de índices de pesquisa não unigos, exclusivos e de texto completo. A definição de tipos de dados e objetos pode ser exportada e importada para/para o JSON, permitindo cópias de backup e transferência de informações entre os sistemas.
{
"Nome": "Article_Language",
"CDATE": "2015-04-01T14: 30: 16Z",
"Adate": "2018-09-26T14: 59: 35.53Z",
"Fields": {
"título" : {
"tipo": "string",
"Comprimento": 254,
"não_null": verdadeiro
},
"linguagem" : {
"tipo": "idioma",
"Comprimento": 100,
"não_null": verdadeiro
},
"texto" : {
"Tipo": "html",
"não_null": verdadeiro
},
"artigo" : {
"Tipo": "Artigo",
"Comprimento": 100,
"não_null": verdadeiro
}
},
"Indexes": {
"Al_ft_search_index": {
"MODE": "FullText",
"Fields": ["title", "text"]
}
},
"Ações": {}
}As datas de alteração e atualização permitem a implementação de um sistema de controle de simultaneidade otimista. Se ao alterar um tipo ou atualizar um objeto, a última data conhecida de alteração ou atualização for indicada, o sistema verifica se essa data é a mesma da data atual do tipo ou objeto para descartar que foi modificado por outro usuário posteriormente.
Os metadados "backup" são usados para criar um sistema de backup incremental de objetos atualizados com cópias completas, cada um um número especificado de cópias incrementais. Toda vez que um objeto é atualizado, o "backup" dos metadados é alterado para "false" para indicar que não há cópia desse objeto e deve ser copiado no próximo backup.
Através do uso de recursos do PostgreSQL, como DDL transacional e restrições diferíveis, o sistema permite a criação ou modificação de vários tipos e objetos de dados na mesma transação enquanto o sistema estiver em uso.
Para complementar o sistema de pesquisa de texto completo, a extração de metadados e o texto do PDF, Opendocument e Office Open XML Documents, formatos binários do Microsoft Office e outros formatos é adicionado usando o Tika.
O NextTypes é um sistema principalmente relacional com alguns recursos orientados a objetos que facilitam seu uso e automação de linguagens de programação. Diferentemente dos sistemas relacionados a objetos, ele não usa uma correspondência de classe de objeto, em vez disso, usa uma série de classes e métodos genéricos para todos os tipos e objetos que permitem executar as ações básicas (CRUD) da criação, leitura, atualização e exclusão.
Para ações complexas, como consultas que usam várias tabelas, ele fornece a um sistema um nível mais alto de abstração do que o JDBC que facilita o uso do SQL e se integra aos tipos de dados do armazenamento. Este sistema permite consultas parametrizadas com a execução de um único método e usa nomes de tabela e colunas como parâmetros, que oferecem proteção contra a injeção de SQL. Ele também permite que você use uma matriz como um parâmetro.
Ações básicas podem ser interceptadas semelhantes aos gatilhos do SQL para modificar tipos ou objetos ou executar ações adicionais. Além disso, novas ações podem ser definidas e disponibilizadas para o sistema.
Na implementação do Java, alguns tipos de dados primitivos em armazenamento, como números, têm uma correspondência direta com as classes no Java Runtime Enviroment. Para outros tipos, como HTML, documentos, imagens ou vídeos, o sistema possui classes que se integram aos tipos de armazenamento e permitem a criação e modificação dos dados.
O principal protocolo usado é o HTTP, embora os adaptadores possam ser criados para qualquer outro protocolo. O sistema inclui um adaptador SMTP que permite a recepção de emails e sua conversão em objetos. No topo do HTTP, uma interface REST é construída com autenticação por meio de certificados e senhas X.509 (criptografado com BCRYPT), HTTP Basic Auth, proteção contra ataques de DOS e gerenciamento do arquivo de robôs e sitemap da web. Essa interface permite o acesso a todos os tipos de dados, objetos, campos e elementos com um URL.
Os sistemas de armazenamento, processamento e transmissão formam um sistema MVC que permite o acesso aos dados através de diferentes visualizações ou formatos: HTML, WebDav, Caldav, JSON, XML, RSS, ICalendar ou outros sistemas. Cada uma dessas visualizações pode ser modificada para todos os tipos de dados ou objetos ou alguns deles para adaptá -los às necessidades do usuário. A codificação UTF-8 é usada em todo o sistema para permitir o uso de texto em diferentes idiomas.
A visualização HTML fornece uma interface gráfica responsiva e multi-linguagem que permite executar todas as ações do sistema de armazenamento/processamento. Ele está programado em HTML5/CSS3 com ícones redimensíveis SVG, conformidade com WCAG, editores de texto com destaque de sintaxe (codemirror) ou wysiwyg (TINYMCE) e proteção contra CSRF e XSS. Essa visualização integra os tipos de dados HTML5 aos próximos tipos, adicionando os componentes necessários à interface para complementar os controles fornecidos pelo HTML5. No tipo de dados "Exemplo", você pode ver os controles de todos os tipos de dados primitivos e referências de objetos. Você pode adaptar a exibição HTML modificando o DOM.
Cada objeto possui um código QR de identificação com o nome do servidor, o tipo de dados e o identificador do objeto. Este código pode ser usado para rotular objetos reais ou lê -lo em um aplicativo móvel. Existe também a possibilidade de exportar alguns dados no formato JSON-LD.
Outras visualizações permitem acesso remoto aos dados por qualquer sistema. Através do uso de visualizações JavaScript e JSON ou XML, é possível acessar todos os dados e realizar processamento de informações no navegador. A exibição WebDav permite acessar dados como um sistema de arquivos no qual os tipos de dados e objetos são pastas e os campos são arquivos. Isso permite que você abra e modifique qualquer campo de um objeto com um aplicativo externo. Por exemplo, você pode editar um campo de documento com um aplicativo de processamento de texto.
A visualização Caldav é uma modificação da visualização WebDav que permite expor alguns objetos como eventos de calendário. Esses eventos também podem ser acessados usando a visualização do iCalendar. A exibição RSS permite o acesso às listagens de objetos com qualquer cliente desse formato.