Il caso d'uso della soluzione
Non sono d'accordo con alcune delle altre risposte, semplicemente perché, benché ottime soluzioni, probabilmente non sono la tua soluzione. Sì, XML ha la parola markup nel suo acronimo, ma probabilmente non è l'ideale per la tua situazione. È troppo complesso, offre poca assistenza nel mantenere i metadati separati dal testo originale. Fondamentalmente trasformerà tutto in una forma di metadati, creando un set di dati in sovrappeso.
Poiché probabilmente non esiste una soluzione o un approccio assolutamente corretti, la soluzione migliore risponde alla domanda:
Come verranno utilizzati i dati dal sistema?
Inoltre, se provi a chiedere, come un progetto di soluzione potrebbe intrinsecamente aggiungere al valore del sistema, nel modo in cui verrà utilizzato, allora sei più vicino a trovare la tua risposta elegante .
Comprensione del problema
Ok abbastanza commento, scaviamo nel problema. Questo è il problema per come lo capisco (ovviamente aggiungere a questo sarà utile):
- C'è un testo originale
- Ipotesi su questo testo originale:
- Questo testo può essere composto o meno da più documenti indipendenti
- Questo testo, può o meno essere modificato da uno o più utenti
- Questo testo contiene informazioni correlate . Con ciò presumo (correggimi se sbaglio) che i metadati sono correlati e non descrittivi . Quindi memorizza informazioni relative al testo originale e non informazioni che descrivono il testo. Così sarà memorizzare note sul testo originale, e non con l'esempio descrive che il testo è un titolo che è audace e è un link a un sito web, etc.
- Il testo deve essere facilmente filtrato distinto dai metadati
- Il testo dovrebbe essere protetto dall'essere corrotto e corrotto dai metadati
- Dovrebbe esserci un mezzo per memorizzare le informazioni relative al testo originale (metadati)
- Questi metadati necessitano anche dei propri (metadati) metadati, che potrebbero contenere informazioni quali l'utente (o i gruppi?) Per i quali i metadati sono rilevanti, come una descrizione dei metadati, diciamo che è una nota o un commento, oppure descrizione ecc.
- Questi metadati (ed i suoi (meta) metadati) devono resistere alle alterazioni del testo originale, alle alterazioni dei metadati e alle alterazioni dei (meta) metadati
- I metadati (+ Meta-Metadata) devono essere strutturati bene e facilmente interrogati, indicizzati o persino uniti in modo relazionale ad altri set di dati. La natura relazionale dei metadati non dovrebbe essere limitata alle query, ma anche facilitare gli aggiornamenti o riscrivere e alterare i metadati a seguito delle attività relative ai dati relazionali.
- Il valore dei metadati (+ Meta-Metadata) è nella sua natura molto correlata . Diventa immediatamente controproducente nel momento in cui perde la sua relazione con il testo originale. Pertanto, l' integrità della sua relazione con il testo originale è un imperativo del progetto obbligatorio.
- Altre ipotesi sulla natura del problema e su come verrà utilizzato sono:
- Accesso al sistema eterogeneo simultaneo. Ciò significa che l'utente potrebbe voler visualizzare il testo e modificare i metadati, contemporaneamente all'amministratore (o ad un altro processo) che sta eseguendo query di dati relazionali sui metadati strutturati.
- Il sistema avrà diversi utenti
- Il sistema è moderno Ciò significa che non è vincolato dallo spazio di archiviazione, dalla velocità di elaborazione o dagli imperativi in tempo reale. L'integrità e la funzionalità focalizzata sullo scopo è una priorità più alta rispetto alle limitazioni delle risorse di elaborazione fisica.
- Esiste la possibilità (sebbene bassa) che gli usi e le funzionalità del sistema possano evolversi o cambiare in qualche modo, man mano che il sistema viene utilizzato.
Costruire il design della soluzione
Comprendendo il problema come ho già indicato sopra, inizierò ora a suggerire possibili soluzioni e approcci che mirano a risolvere il problema di cui sopra.
componenti
Quindi vedrei che ci dovrebbe essere un sistema di accesso utente personalizzato. Filtrerebbe i metadati pertinenti e irrilevanti dal testo originale. Faciliterebbe la modifica e la visualizzazione dei metadati nel testo. Assicurerebbe l'integrità della relazione tra i metadati e il suo testo originale. Strutturerebbe i metadati e offrirebbe un'origine dati a un sistema di dati relazionali. Molto probabilmente fornirà una serie di altre funzioni orientate allo scopo.
Struttura
Pertanto, poiché è importante mantenere l'integrità dei metadati nel testo originale, il modo migliore per garantire ciò è mantenere i metadati in linea con il testo originale. Ciò offrirà il vantaggio che i dati originali possono essere modificati con sicurezza senza compromettere questa integrità.
Le preoccupazioni con questo approccio sono la corruzione dei metadati da parte dei dati originali e viceversa. L'adeguata indicizzazione e strutturazione dei metadati e dei suoi (meta) metadati in un modo che consenta query e aggiornamenti e un accesso efficiente. Il facile filtraggio dei metadati dal testo originale.
Con questo in mente, suggerirei che una parte della soluzione sia basata sull'approccio dell'uso dei PERSONAGGI DI FUGA all'interno del testo originale. Ciò non equivale a progettare il proprio linguaggio di markup o utilizzare un linguaggio di markup esistente come XML o HTML. È facile progettare un PERSONAGGIO DI FUGA che ha una probabilità pari a zero o quasi zero di esistere nel testo originale.
Il mio consiglio in tal senso è quello di considerare attentamente i dati originali e provare a determinare la natura della tabella codici in cui sono memorizzati e quindi cercare un PERSONAGGIO o
SEQUENZA DI CARATTERI idealeche è improbabile o impossibile che si verifichi. Ad esempio in ASCII ci sono letteralmente caratteri di controllo integrati con valori di byte che non vengono mai utilizzati nelle interfacce utente standard. Lo stesso si può dire per un sistema informativo basato su font o dati relazionali. Fai solo attenzione con i codec di dati binari. A seconda della natura dei dati originali, può essere utile costruire un parser che confermi la scoperta di una sequenza di controllo, magari guardando i dati che sono fuggiti e verificandone l'integrità, sia con una semplice ispezione della struttura dei fuggiti dati, o anche includendo un carattere di controllo che viene calcolato per ciascuna sequenza di dati di escape.
Dati di esempio con sequenze di escape
Questa è la storia di un uomo. >>>> (#) Perché questa storia di un uomo non è una donna? (#) ( ) Userid :: 77367 ( ) Commento del manager ( ) DataID :: 234234234 >>>> Un uomo che è andato a falciare un prato, è andato a falciare un prato. L'uomo è andato con il suo cane >>>> (#) Chiedi al cliente se la storia sarebbe migliore con un gatto (#) >>>> per falciare il prato. Quindi ora questa è la storia di un uomo e del suo cane che sono andati a falciare un prato.
Un uomo e il suo cane andarono a falciare un prato, andarono a falciare un prato, un prato allungato sopra la montagna. >>>> (#) Questo suona molto meglio con una foresta (**) Suggerimento (#) >>>>
L'uomo e il suo cane e la sua missione, falciare un prato, raggiungono un prato sopra la montagna solo attraversando il fiume.
Dati di esempio senza sequenze di escape
Questa è la storia di un uomo. Un uomo che andava a falciare un prato, andava a falciare un prato. L'uomo andò con il suo cane a falciare il prato. Quindi ora questa è la storia di un uomo e del suo cane che sono andati a falciare un prato.
Un uomo e il suo cane andarono a falciare un prato, andarono a falciare un prato, un prato allungato sopra la montagna.
L'uomo e il suo cane e la sua missione, falciare un prato, raggiungono un prato sopra la montagna solo attraversando il fiume.
Ovviamente questo è facilmente analizzabile, non complesso come un intero linguaggio Mark-up e facilmente adattabile al tuo scopo.
Risolto ancora?
Bene, direi di no. La nostra soluzione ha ancora alcuni buchi. L'indicizzazione e l'accesso strutturato di questi dati sono scarsi. Inoltre, non sarebbe ragionevole interrogare questo file (o più file) contemporaneamente a modificarlo.
Come possiamo risolvere questo problema?
Vorrei suggerire una TABELLA DI ASSEGNAZIONE DEI DATI come intestazione del documento. Suggerirei anche di implementare una CODICE DI AGGIORNAMENTO DELLA TABELLA TRANSAZIONALE . Lasciatemi spiegare. I progettisti di un file system, in particolare di un file system a disco rotazionale, hanno affrontato sfide di progettazione simili a quelle sopra descritte. Avevano bisogno di incorporare informazioni sui file sul disco insieme ai dati. Un'ottima soluzione per l'integrità della relazione di questi dati, era DUPLICARLO in una tabella di allocazione dei file (FAT).
Ciò significa che per ogni singolo elemento di metadati è presente una voce corrispondente nella tabella di allocazione dei dati . Quindi è veloce, strutturato e relazionale e indipendente dai dati originali. Se è necessario eseguire query, join o aggiornamenti sui metadati, è possibile farlo semplicemente accedendo alla tabella di allocazione dei dati .
Ovviamente occorre prestare attenzione per garantire che i metadati in-line originali riflettano fedelmente i dati della tabella di allocazione dei dati. È qui che entra in gioco una coda di aggiornamento delle tabelle transazionali. Ogni modifica, aggiunta o rimozione di metadati non viene effettuata sui dati stessi, ma piuttosto sulla coda. la coda assicurerà quindi che tutte le modifiche vengano apportate sia ai dati in linea che a quelli della tabella, oppure che non vengano apportate modifiche. Consente inoltre l'esecuzione di aggiornamenti asincroni, ad esempio tutti i metadati di un determinato utente possono essere eliminati eseguendo un comando di eliminazione sulla coda. Se i metadati inline fossero bloccati e in uso, la coda non eseguirà alcuna modifica fino a quando non sarà in grado di farlo sia ai dati della tabella che ai dati inline.