NextTypes es un sistema de almacenamiento, procesamiento y transmisión de información basado en estándares que integra las características de otros sistemas, como bases de datos, lenguajes de programación, protocolos de comunicación, sistemas de archivos, administradores de documentos, sistemas operativos, marcos, formatos de archivos y hardware en un solo sistema integrado utilizando un sistema de tipos de datos comunes.
La implementación de referencia está programada en Java 17 y utiliza el Administrador de bases de datos PostgreSQL 15. Se distribuye bajo la licencia Apache 2.0, en un archivo de guerra fácilmente instalable. Para probar la interfaz de software (en modo de solo lectura), sin tener que instalarla, puede explorar el sitio web del proyecto, que se desarrolla utilizando dicho software. En el menú a la izquierda, en la sección "Panel de control" y en los botones en la parte superior/derecha de la página, encontrará las acciones disponibles.
NextTypes integra los tipos primitivos de datos PostgreSQL, como números, texto, binario, fechas, JSON o XML, aunque les dan diferentes nombres para simplificar la nomenclatura y facilitar la integración con otros sistemas. Por ejemplo, en lugar de usar "SmallInt", "Integer" y "Bigint" The Root "int" seguido de la cantidad de bits (int16, int32 e int64) se usa o en lugar de "carácter variable" o "varchar" se usa "cadena" como en algunos lenguajes de programación.
También agrega otros tipos de datos, como HTML o URL, y utilizando la capacidad de PostgreSQL para crear tipos de datos compuestos para columnas, incluye tipos de datos para archivos, documentos, imágenes, audios y videos. El contenido binario de estos campos se puede escanear con el antivirus de clamav. Los tipos de datos complejos, como HTML o imágenes, están formados por elementos a los que se puede acceder individualmente y se pueden aplicar restricciones a ellos, como etiquetas o formatos permitidos.
El sistema de almacenamiento se basa principalmente en SQL, pero es un híbrido relacional/de redes/objetos/archivos. Cada tabla es un tipo de datos y cada fila en una tabla es un objeto. Cada fila tiene una columna con un identificador (ID) que es la clave principal y varias columnas con metadatos similares a los de los archivos: fecha de creación (CDATE), fecha de actualización (UDATE) y copia de seguridad (copia de seguridad). El resto de las columnas son los campos de datos del objeto. También se almacena la fecha de creación (CDATE) y la alteración (adate) de los tipos de datos. Las fechas usan el estándar UTC e incluyen horas, minutos, segundos y microsegundos. El estándar ISO 8601 se usa para su representación en el texto.
Los campos de los objetos pueden ser de un tipo primitivo o apuntar a otros objetos utilizando el identificador como una clave extranjera, formando así una base de datos de red. El identificador es una cadena de texto con un índice único y, por defecto, recibe un UUID. Esta simplificación y uniformidad en las claves primarias y extrañas facilita la automatización y la integración con otros sistemas.
La correspondencia con el modelo de relación de entidad es similar a la del modelo relacional. Cada entidad es un objeto, los atributos son campos, y las relaciones y múltiples atributos se realizan con campos que se refieren a otros objetos.
El identificador y los campos de objetos pueden ser parte de índices de búsqueda no únicos, únicos y de texto completo. La definición de tipos de datos y objetos se puede exportar e importar a/desde JSON, lo que permite copias de copia de seguridad y transferencia de información entre sistemas.
{
"Nombre": "Artículo_Language",
"CDATE": "2015-04-01T14: 30: 16z",
"Adate": "2018-09-26T14: 59: 35.53z",
"campos" : {
"título" : {
"Escriba": "cadena",
"Longitud": 254,
"no_null": verdadero
},
"idioma" : {
"Tipo": "Idioma",
"Longitud": 100,
"no_null": verdadero
},
"texto" : {
"Tipo": "HTML",
"no_null": verdadero
},
"artículo" : {
"Tipo": "Artículo",
"Longitud": 100,
"no_null": verdadero
}
},
"índices": {
"al_ft_search_index": {
"Modo": "Fulltext",
"Fields": ["Título", "Texto"]
}
},
"Acciones": {}
}Las fechas de alteración y actualización permiten la implementación de un sistema de control de concurrencia optimista. Si al alterar un tipo o actualizar un objeto, se indica la última fecha conocida de alteración o actualización, el sistema verifica que esta fecha es la misma que la fecha actual del tipo u objeto para descartar que ha sido modificado por otro usuario en una fecha posterior.
Los metadatos de "copia de seguridad" se utilizan para crear un sistema de copia de seguridad incremental de objetos actualizados con copias completas, cada uno un número especificado de copias incrementales. Cada vez que se actualiza un objeto, los metadatos "copia de seguridad" se cambian a "falso" para indicar que no hay copia de ese objeto y debe copiarse en la siguiente copia de seguridad.
Mediante el uso de características postgreSQL, como DDL transaccional y restricciones aplazables, el sistema permite la creación o modificación de varios tipos de datos y objetos en la misma transacción mientras el sistema está en uso.
Para complementar el sistema de búsqueda de texto completo, se agrega la extracción de metadatos y texto de PDF, OpenDocument y Office Open XML, formatos binarios de Microsoft Office y otros formatos usando TIKA.
NextTypes es un sistema principalmente relacional con algunas características orientadas a objetos que facilitan su uso y automatización de los lenguajes de programación. A diferencia de los sistemas relacionales de objetos, no utiliza una correspondencia de clase de objeto, sino que utiliza una serie de clases y métodos genéricos para todos los tipos y objetos que permiten realizar las acciones básicas (CRUD) de la creación, lectura, actualización y eliminación.
Para acciones complejas como consultas que usan varias tablas, proporciona un sistema con un mayor nivel de abstracción que JDBC que facilita el uso de SQL e integra con los tipos de datos del almacenamiento. Este sistema permite consultas parametrizadas con la ejecución de un solo método y utiliza nombres de tabla y columna como parámetros, que ofrecen protección contra la inyección SQL. También le permite usar una matriz como parámetro.
Las acciones básicas se pueden interceptar de manera similar a los desencadenantes SQL para modificar tipos u objetos o realizar acciones adicionales. Además, se pueden definir y poner a disposición del sistema nuevas acciones.
En la implementación de Java, algunos tipos de datos primitivos en el almacenamiento, como los números, tienen una correspondencia directa con clases en el entorno de tiempo de ejecución de Java. Para otros tipos como HTML, documentos, imágenes o videos, el sistema tiene clases que se integran con los tipos de almacenamiento y permiten la creación y modificación de datos.
El protocolo principal utilizado es HTTP, aunque se pueden crear adaptadores para cualquier otro protocolo. El sistema incluye un adaptador SMTP que permite la recepción de correos electrónicos y su conversión en objetos. Además de HTTP, se crea una interfaz REST con autenticación a través de certificados y contraseñas X.509 (encriptados con BCRYPT), Auth Basic HTTP, protección contra ataques de DOS y administración del archivo de robots y el mapa web web. Esta interfaz permite el acceso a todos los tipos de datos, objetos, campos y elementos con una URL.
Los sistemas de almacenamiento, procesamiento y transmisión forman un sistema MVC que permite el acceso a los datos a través de diferentes vistas o formatos: HTML, WebDAV, CalDAV, JSON, XML, RSS, ICALENDAR u otros sistemas. Cada uno de estos vistas se puede modificar para todos los tipos de datos u objetos o algunos de ellos para adaptarlos a las necesidades del usuario. La codificación UTF-8 se usa en todo el sistema para permitir el uso de texto en diferentes idiomas.
La vista HTML proporciona una interfaz gráfica receptiva y de varios idiomas que permite realizar todas las acciones del sistema de almacenamiento/procesamiento. Está programado en HTML5/CSS3 con iconos RESIZABLES SVG, cumplimiento de WCAG, editores de texto con sintaxis resaltando (CodeMirror) o Wysiwyg (TinyMCE) y protección contra CSRF y XSS. Esta vista integra los tipos de datos HTML5 con los de NextTypes, agregando los componentes necesarios a la interfaz para complementar los controles proporcionados por HTML5. En el tipo de datos "Ejemplo", puede ver los controles para todos los tipos de datos primitivos y referencias de objetos. Puede adaptar la vista HTML modificando el DOM.
Cada objeto tiene un código QR de identificación con el nombre del servidor, el tipo de datos y el identificador del objeto. Este código se puede usar para etiquetar objetos reales o leerlo desde una aplicación móvil. También existe la posibilidad de exportar algunos datos en formato JSON-LD.
Otras vistas permiten el acceso remoto a los datos por cualquier sistema. Mediante el uso de vistas JavaScript y JSON o XML, es posible acceder a todos los datos y llevar a cabo el procesamiento de información en el navegador. La vista WebDAV le permite acceder a datos como un sistema de archivos en el que los tipos de datos y los objetos son carpetas y los campos son archivos. Esto le permite abrir y modificar cualquier campo de un objeto con una aplicación externa. Por ejemplo, puede editar un campo de documentos con una aplicación de procesamiento de textos.
La vista CalDAV es una modificación de la vista WebDav que le permite exponer algunos objetos como eventos calendario. También se puede acceder a esos eventos utilizando la vista icalendar. La vista RSS permite el acceso a listados de objetos con cualquier cliente de ese formato.