El caso de uso de la solución
No estoy de acuerdo con algunas de las otras respuestas, simplemente porque, si bien son excelentes soluciones, probablemente no sean su solución. Sí, XML tiene la marca de palabra en sus siglas, pero probablemente no sea ideal para su situación. Es demasiado complejo, ofrece poca ayuda para mantener los metadatos separados del texto original. Básicamente, convertirá todo en una forma de metadatos, creando un conjunto de datos con sobrepeso.
Como es probable que no haya una solución o enfoque absolutamente correcto, la mejor solución responde a la pregunta:
¿Cómo serán utilizados los datos por el sistema?
Además, si intenta preguntar, cómo un diseño de solución podría agregar de manera inherente al valor del sistema, en la forma en que se utilizará, entonces está más cerca de encontrar su respuesta elegante .
Entendiendo el problema
Ok suficiente comentario, profundicemos en el problema. Este es el problema tal como lo entiendo (obviamente, agregarlo será beneficioso):
- Hay un texto original
- Suposiciones sobre este texto original:
- Este texto, puede o no estar compuesto por varios documentos independientes
- Este texto, puede o no ser editado por uno o más usuarios
- Este texto contiene información relacionada . Por eso estoy asumiendo (corríjame si estoy equivocado) que los metadatos están relacionados y no son descriptivos . Por lo tanto, almacena información relacionada con el texto original, y no información que describe el texto. Así que va a guardar notas sobre el texto original, y no por ejemplo describir que el texto es un encabezado que es audaz y es un enlace a una página web, etc.
- El texto debe filtrarse fácilmente, distinto de los metadatos.
- El texto debe protegerse para que no se corrompa y corrompa los metadatos.
- Debe haber un medio para almacenar información relacionada con el texto original (metadatos)
- Estos metadatos también necesitan sus propios metadatos (meta), que contendrían información como para qué usuario (o grupos) son relevantes los metadatos, como una descripción de los metadatos, por ejemplo, si es una nota o un comentario, o descripción etc.
- Estos metadatos (y sus metadatos) deben soportar alteraciones en el texto original, alteraciones de los metadatos y alteraciones de los metadatos (meta).
- Los metadatos (+ meta-metadatos) deben estructurarse bien y consultarse fácilmente, indexarse o incluso unirse de manera relacional a otros conjuntos de datos. La naturaleza relacional de los metadatos no solo debe limitarse a las consultas, sino también facilitar las actualizaciones o la reescritura y la alteración de los metadatos como resultado de las actividades de datos relacionales.
- El valor de los metadatos (+ meta-metadatos) está en su naturaleza muy relacionada . Se vuelve inmediatamente contraproducente en el momento en que pierde su relación con el texto original. Por lo tanto, la integridad de su relación con el texto original es un imperativo de diseño obligatorio.
- Otros supuestos sobre la naturaleza del problema y cómo se utilizará son:
- Acceso al sistema heterogéneo concurrente. Es decir que el usuario puede desear ver el texto y editar metadatos, al mismo tiempo que el administrador (u otro proceso) realiza consultas de datos relacionales en los metadatos estructurados.
- El sistema tendrá varios usuarios.
- El sistema es moderno. Es decir que no está limitado por el espacio de almacenamiento, la velocidad de procesamiento o los imperativos en tiempo real. La funcionalidad centrada en la integridad y el propósito es una prioridad más alta que las limitaciones físicas de los recursos informáticos.
- Existe una posibilidad (aunque baja) de que los usos y la funcionalidad del sistema puedan evolucionar o cambiar un poco, a medida que se utiliza el sistema.
Construyendo el diseño de la solución
Comprendiendo el problema como lo he descrito anteriormente, ahora comenzaré a sugerir posibles soluciones y enfoques que tengan como objetivo resolver el problema anterior.
Componentes
Por lo tanto, vería que debería haber un sistema de acceso de usuario personalizado. Filtraría metadatos relevantes e irrelevantes del texto original. Facilitaría la edición y visualización de metadatos en el texto. Aseguraría la integridad de la relación entre los metadatos y su texto original. Estructuraría los metadatos y ofrecería una fuente de datos a un sistema de datos relacionales. Lo más probable es que proporcione una gran cantidad de otras funciones orientadas a un propósito.
Estructura
Por lo tanto, dado que es importante mantener la integridad de los metadatos en el texto original, la mejor manera de garantizar esto es mantener los metadatos en línea con el texto original. Esto ofrecerá el beneficio de que los datos originales se pueden editar con confianza sin romper esta integridad.
Las preocupaciones con este enfoque son la corrupción de los metadatos por los datos originales y viceversa. La adecuada indexación y estructuración de los metadatos y sus (meta) metadatos de una manera que permita consultas y actualizaciones y un acceso eficiente. El fácil filtrado de metadatos del texto original.
Con esto en mente, sugeriría que una parte de la solución se base en el enfoque de usar PERSONAJES DE ESCAPE dentro del texto original. Esto no es lo mismo que diseñar su propio lenguaje de marcado o usar un lenguaje de marcado existente como XML o HTML. Es fácil diseñar un CARÁCTER DE ESCAPE que tenga una probabilidad de cero o casi cero de existir en el texto original.
Mi consejo para usted a este respecto sería considerar cuidadosamente los datos originales, y tratar de determinar la naturaleza de la página de códigos en la que está almacenada y luego buscar un CARÁCTER ideal o
SECUENCIA DE CARÁCTEReso es poco probable o imposible de ocurrir. Por ejemplo, en ASCII hay literalmente caracteres de control integrados con valores de bytes que nunca se usan en las interfaces de usuario estándar. Lo mismo puede decirse de un sistema de información basado en fuentes o en datos relacionales. Solo tenga cuidado con los códecs de datos binarios. Dependiendo de la naturaleza de los datos originales, puede ser valioso construir un analizador que confirme el descubrimiento de una secuencia de control, tal vez observando los datos que se escapan y verificando su integridad, ya sea con una simple inspección de la estructura del escapado. datos, o incluso mediante la inclusión de un carácter de control que se calcula para cada secuencia de datos escapada.
Datos de ejemplo con secuencias de escape
Esta es una historia de un hombre. >>>> (#) ¿Por qué es esta historia sobre un hombre y no una mujer? (#) ( ) Userid :: 77367 ( ) Comentario del gerente ( ) DataID :: 234234234 >>>> Un hombre que fue a cortar un prado, Fui a cortar un prado. El hombre fue con su perro >>>> (#) Pregúntele al cliente si la historia sería mejor con un gato (#) >>>> para cortar el prado. Así que ahora esta es la historia de un hombre y su perro que fueron a cortar un prado.
Un hombre y su perro, fueron a cortar un prado, fueron a cortar un prado, un prado alcanzado sobre la montaña. >>>> (#) Esto suena mucho mejor con un bosque (**) Sugerencia Nota (#) >>>>
El hombre y su perro y su misión, para cortar un prado, un prado alcanzado sobre la montaña solo se alcanza al cruzar el río.
Datos de ejemplo sin secuencias de escape
Esta es una historia de un hombre. Un hombre que fue a cortar un prado, fue a cortar un prado. El hombre fue con su perro a cortar el prado. Así que ahora esta es la historia de un hombre y su perro que fueron a cortar un prado.
Un hombre y su perro, fueron a cortar un prado, fueron a cortar un prado, un prado alcanzado sobre la montaña.
El hombre y su perro y su misión, para cortar un prado, un prado alcanzado sobre la montaña solo se alcanza al cruzar el río.
Obviamente, esto se analiza fácilmente, no es complejo como un lenguaje de marcado completo y se adapta fácilmente a su propósito.
Resuelto todavía?
Bueno, yo diría que no. Nuestra solución todavía tiene algunos agujeros. La indexación y el acceso estructurado de estos datos es deficiente. Además, no sería razonable consultar este archivo (o varios archivos) al mismo tiempo que lo edita.
¿Cómo podríamos resolver ese problema?
Sugeriría una TABLA DE ASIGNACIÓN DE DATOS como encabezado del documento. También sugeriría implementar una COLA DE ACTUALIZACIÓN DE TABLA TRANSACCIONAL . Dejame explicar. Los diseñadores de un sistema de archivos, particularmente un sistema de archivos de disco rotativo, enfrentaron desafíos de diseño similares a los que usted describió anteriormente. Necesitaban insertar información sobre los archivos en el disco junto con los datos. Una gran solución para la integridad de la relación de estos datos fue DUPLICARLA en una Tabla de asignación de archivos (FAT).
Esto significa que para cada elemento de metadatos individual, hay una entrada correspondiente en la tabla de asignación de datos . Por lo tanto, es rápido, estructurado y relacional, e independiente de los datos originales. Si es necesario realizar consultas, uniones o actualizaciones en los metadatos, entonces se hace fácilmente simplemente accediendo a la Tabla de asignación de datos .
Obviamente, se debe tener cuidado para garantizar que los metadatos en línea originales sean un reflejo verdadero de los datos de la tabla de asignación de datos. Ahí es donde entra en juego una Cola de actualización de tabla transaccional. Cada cambio, adición o eliminación de metadatos no se realiza en los datos en sí, sino en la cola. la cola se asegurará de que se realicen todos los cambios en los datos en línea y en la tabla, o que no se realice ningún cambio. También permite realizar actualizaciones asincrónicas, por ejemplo, todos los metadatos de un determinado usuario se pueden eliminar ejecutando un comando de eliminación en la cola. Si los metadatos en línea estaban bloqueados y en uso, la cola no realizaría ningún cambio hasta que pudiera hacerlo tanto en los datos de la tabla como en los datos en línea.