NextTypes est un système de stockage, de traitement et de transmission basé sur des normes qui intègre les caractéristiques d'autres systèmes tels que les bases de données, les langages de programmation, les protocoles de communication, les systèmes de fichiers, les gestionnaires de documents, les systèmes d'exploitation, les cadres, les formats de fichiers et le matériel dans un système unique intégré étroitement intégré à l'aide d'un système de types de données communs.
L'implémentation de référence est programmée dans Java 17 et utilise le gestionnaire de base de données PostgreSQL 15. Il est distribué sous la licence Apache 2.0, dans un fichier de guerre facilement installable. Pour tester l'interface logicielle (en mode en lecture seule), sans avoir à l'installer, vous pouvez explorer le site Web du projet, qui est développé à l'aide dudit logiciel. Dans le menu à gauche, dans la section "Panneau de configuration" et dans les boutons en haut / à droite de la page, vous trouverez les actions disponibles.
NextTypes intègre les types de données PostgreSQL primitifs tels que les nombres, le texte, le binaire, les dates, JSON ou XML, tout en leur donnant différents noms pour simplifier la nomenclature et faciliter l'intégration avec d'autres systèmes. Par exemple, au lieu d'utiliser "SmallInt", "Integer" et "BigInt", la racine "int" suivie du nombre de bits (int16, int32 et int64) est utilisée ou au lieu de "variant de caractères" ou "varchar", il est utilisé "String" comme dans certains langages de programmation.
Il ajoute également d'autres types de données telles que HTML ou URL, et en utilisant la capacité de PostgreSQL à créer des types de données composites pour les colonnes, il comprend des types de données pour les fichiers, les documents, les images, les audios et les vidéos. Le contenu binaire de ces champs peut être scanné avec l'antivirus Clamav. Des types de données complexes tels que HTML ou des images sont constitués d'éléments accessibles individuellement et peuvent leur être appliqués, tels que des balises ou des formats autorisés.
Le système de stockage est principalement basé sur SQL mais est un hybride relationnel / réseau / objets / fichiers. Chaque table est un type de données et chaque ligne d'une table est un objet. Chaque ligne a une colonne avec un identifiant (ID) qui est la clé principale et plusieurs colonnes avec des métadonnées similaires à celles des fichiers: date de création (CDATE), date de mise à jour (UDate) et sauvegarde fabriquée (sauvegarde). Les autres colonnes sont les champs de données de l'objet. La date de création (CDATE) et l'altération (adate) des types de données est également stockée. Les dates utilisent la norme UTC et incluent les heures, les minutes, les secondes et les microsecondes. La norme ISO 8601 est utilisée pour sa représentation dans le texte.
Les champs des objets peuvent être de type primitif ou pointer vers d'autres objets utilisant l'identifiant comme clé étrangère, formant ainsi une base de données réseau. L'identifiant est une chaîne de texte avec un index unique et par défaut, il reçoit un UUID. Cette simplification et cette uniformité dans les clés primaires et étrangères facilitent l'automatisation et l'intégration avec d'autres systèmes.
La correspondance avec le modèle de relation entité est similaire à celle du modèle relationnel. Chaque entité est un objet, les attributs sont des champs, et les relations et plusieurs attributs sont fabriqués avec des champs qui se réfèrent à d'autres objets.
L'identifiant d'objets et les champs peuvent faire partie des index de recherche non uniques, uniques et complets. La définition des types de données et des objets peut être exportée et importée vers / depuis JSON, permettant des copies de sauvegarde et le transfert d'informations entre les systèmes.
{
"Nom": "Article_Language",
"Cdate": "2015-04-01t14: 30: 16Z",
"Adate": "2018-09-26T14: 59: 35.53Z",
"champs": {
"titre" : {
"type": "string",
"longueur": 254,
"not_null": vrai
},
"langue" : {
"Type": "Langue",
"longueur": 100,
"not_null": vrai
},
"texte" : {
"type": "html",
"not_null": vrai
},
"article" : {
"Type": "Article",
"longueur": 100,
"not_null": vrai
}
},
"index": {
"al_ft_search_index": {
"mode": "FullText",
"champs": ["titre", "texte"]
}
},
"Actions": {}
}Les dates d'altération et de mise à jour permettent la mise en œuvre d'un système de contrôle de concurrence optimiste. Si lors de la modification d'un type ou de la mise à jour d'un objet, la dernière date connue de modification ou de mise à jour est indiquée, le système vérifie que cette date est la même que la date actuelle du type ou de l'objet pour exclure qu'il a été modifié par un autre utilisateur à une date ultérieure.
Les métadonnées "de sauvegarde" sont utilisées pour créer un système de sauvegarde incrémentiel d'objets mis à jour avec des copies complètes chacune un nombre spécifié de copies incrémentielles. Chaque fois qu'un objet est mis à jour, la "sauvegarde" des métadonnées est changée en "False" pour indiquer qu'il n'y a pas de copie de cet objet et qu'elle doit être copiée dans la sauvegarde suivante.
Grâce à l'utilisation de fonctionnalités PostgreSQL telles que le DDL transactionnel et les contraintes différées, le système permet la création ou la modification de divers types de données et objets dans la même transaction pendant que le système est utilisé.
Pour compléter le système de recherche en texte complet, l'extraction des métadonnées et du texte de PDF, OpenDocument et Office Open XML Documents, Microsoft Office Binary et d'autres formats sont ajoutés à l'aide de Tika.
NextTypes est un système principalement relationnel avec certaines fonctionnalités orientées objet qui facilitent son utilisation et son automatisation à partir des langages de programmation. Contrairement aux systèmes relationnels des objets, il n'utilise pas de correspondance de classe d'objet, il utilise plutôt une série de classes et de méthodes génériques pour tous les types et objets qui permettent de réaliser les actions de base (crud) de la création, de la lecture, de la mise à jour et de la suppression.
Pour des actions complexes telles que les requêtes qui utilisent plusieurs tables, il fournit un système avec un niveau d'abstraction plus élevé que JDBC qui facilite l'utilisation de SQL et s'intègre aux types de données du stockage. Ce système permet des requêtes paramétrées avec l'exécution d'une seule méthode et utilise des noms de table et de colonne comme paramètres, qui offre une protection contre l'injection SQL. Il vous permet également d'utiliser un tableau comme paramètre.
Les actions de base peuvent être interceptées similaires aux déclencheurs SQL pour modifier les types ou les objets ou effectuer des actions supplémentaires. De plus, de nouvelles actions peuvent être définies et mises à la disposition du système.
Dans l'implémentation Java, certains types de données primitifs en stockage, tels que les nombres, ont une correspondance directe avec les classes dans l'environnement de l'exécution de Java. Pour d'autres types tels que HTML, documents, images ou vidéos, le système propose des classes qui s'intègrent aux types de stockage et permettent la création et la modification des données.
Le protocole principal utilisé est HTTP, bien que les adaptateurs puissent être créés pour tout autre protocole. Le système comprend un adaptateur SMTP qui permet la réception des e-mails et leur conversion en objets. En plus de HTTP, une interface de repos est construite avec l'authentification via des certificats et des mots de passe x.509 (cryptés avec BCrypt), HTTP Basic Auth, protection contre les attaques DOS et gestion du fichier robots et du site Web Web. Cette interface permet d'accéder à tous les types de données, objets, champs et éléments avec une URL.
Les systèmes de stockage, de traitement et de transmission forment un système MVC qui permet d'accéder aux données via différentes vues ou formats: HTML, WebDAV, CALDAV, JSON, XML, RSS, ICICENDAR ou autres systèmes. Chacune de ces vues peut être modifiée pour tous les types de données ou objets ou certains d'entre eux pour l'adapter aux besoins de l'utilisateur. Le codage UTF-8 est utilisé dans tout le système pour permettre l'utilisation du texte dans différentes langues.
La vue HTML fournit une interface graphique réactive et multi-langues qui permet d'effectuer toutes les actions du système de stockage / traitement. Il est programmé en HTML5 / CSS3 avec des icônes redizables SVG, la conformité WCAG, les éditeurs de texte avec la mise en évidence de la syntaxe (Codemirror) ou Wysiwyg (TinyMCE) et la protection contre CSRF et XSS. Cette vue intègre les types de données HTML5 avec ceux de NextTypes, ajoutant les composants nécessaires à l'interface pour compléter les contrôles fournis par HTML5. Dans le type de données "Exemple", vous pouvez voir les contrôles pour tous les types de données primitifs et les références d'objets. Vous pouvez adapter la vue HTML en modifiant le DOM.
Chaque objet a un code QR d'identification avec le nom du serveur, le type de données et l'identifiant de l'objet. Ce code peut être utilisé pour étiqueter les objets réels ou le lire à partir d'une application mobile. Il est également possible d'exporter certaines données au format JSON-LD.
D'autres vues permettent un accès à distance aux données par n'importe quel système. Grâce à l'utilisation des vues JavaScript et JSON ou XML, il est possible d'accéder à toutes les données et d'effectuer un traitement de l'information dans le navigateur. La vue WebDAV vous permet d'accéder aux données en tant que système de fichiers dans lequel les types de données et les objets sont des dossiers et les champs sont des fichiers. Cela vous permet d'ouvrir et de modifier tout champ d'un objet avec une application externe. Par exemple, vous pouvez modifier un champ de documents avec une application de traitement de texte.
La vue CALDAV est une modification de la vue WebDAV qui vous permet d'exposer certains objets en tant qu'événements de calendrier. Ces événements sont également accessibles à l'aide de la vue ICICENDAR. La vue RSS permet d'accéder à des listes d'objets avec tout client de ce format.