Anwendungsfall der Lösung
Ich bin mit einigen der anderen Antworten nicht einverstanden, weil sie, obwohl sie großartige Lösungen sind, wahrscheinlich nicht Ihre Lösung sind. Ja, XML enthält das Wort Markup im Akronym, aber es ist wahrscheinlich nicht ideal für Ihre Situation. Es ist viel zu komplex und bietet wenig Unterstützung, um die Metadaten vom Originaltext zu trennen. Im Wesentlichen wird alles in eine Form von Metadaten umgewandelt, wodurch ein übergewichteter Datensatz erstellt wird.
Da es wahrscheinlich keine absolut korrekte Lösung oder Vorgehensweise gibt, beantwortet die beste Lösung die Frage:
Wie werden die Daten vom System verwendet?
Wenn Sie sich fragen, wie ein Lösungsdesign den Wert des Systems in der Art und Weise, wie es verwendet wird, von Natur aus steigern kann, sind Sie der Suche nach Ihrer eleganten Antwort näher .
Das Problem verstehen
Okay, genug Kommentar, lasst uns das Problem untersuchen. Dies ist das Problem, wie ich es verstehe (offensichtlich wird es von Vorteil sein, es zu ergänzen):
- Es gibt einen Originaltext
- Annahmen über diesen Originaltext:
- Dieser Text kann aus mehreren unabhängigen Dokumenten bestehen oder nicht
- Dieser Text kann von einem oder mehreren Benutzern bearbeitet werden oder nicht
- Dieser Text enthält verwandte Informationen. Dadurch gehe ich davon aus (korrigiere mich, wenn ich falsch liege), dass die Metadaten zusammenhängen und nicht beschreibend sind . Es werden also Informationen zum Originaltext gespeichert und keine Informationen, die den Text beschreiben. So wird es speichert Notizen über den ursprünglichen Text, und nicht mit gutem Beispiel beschreiben , dass der Text ist eine Überschrift, die ist fett und ist ein Link zu einer Webseite, usw.
- Der Text sollte sich leicht von den Metadaten unterscheiden lassen
- Der Text sollte vor Beschädigung durch und Beschädigung der Metadaten geschützt werden
- Es sollte ein Mittel zum Speichern von Informationen geben, die sich auf den Originaltext beziehen (Metadaten).
- Diese Metadaten benötigen auch eigene (Meta-) Metadaten, die Informationen enthalten, für welche Benutzer (oder Gruppen?) Die Metadaten relevant sind, z. B. eine Beschreibung der Metadaten, beispielsweise, ob es sich um eine Notiz oder einen Kommentar handelt oder beschreibung etc.
- Diese Metadaten (und ihre (Meta-) Metadaten) müssen Änderungen im Originaltext, Änderungen der Metadaten und Änderungen der (Meta-) Metadaten standhalten
- Die Metadaten (+ Meta-Metadaten) muss gut strukturiert sein und einfach abgefragt, und indiziert oder sogar verbunden in einer relationalen Weise zu anderen Datensätzen. Der relationale Charakter der Metadaten sollte sich nicht nur auf Abfragen beschränken, sondern auch Aktualisierungen oder das Zurückschreiben und Ändern der Metadaten infolge der relationalen Datenaktivitäten erleichtern .
- Der Wert der Metadaten (+ Meta-Metadaten) ist sehr ähnlich . Es wird sofort kontraproduktiv, sobald es seine Beziehung zum Originaltext verliert. Daher ist die Integrität der Beziehung zum Originaltext ein zwingendes Designkriterium.
- Andere Annahmen über die Art des Problems und wie es verwendet wird, sind:
- Gleichzeitiger heterogener Systemzugriff. Das heißt, der Benutzer möchte möglicherweise den Text anzeigen und Metadaten bearbeiten, während der Administrator (oder ein anderer Prozess) relationale Datenabfragen für die strukturierten Metadaten durchführt.
- Das System wird mehrere Benutzer haben
- Das System ist modern. Das heißt, es ist nicht durch Speicherplatz, Verarbeitungsgeschwindigkeit oder Echtzeitanforderungen beschränkt. Die auf Integrität und Zweck fokussierte Funktionalität hat eine höhere Priorität als die Einschränkungen der physischen Computerressourcen.
- Es besteht eine (wenn auch geringe) Wahrscheinlichkeit, dass sich die Verwendung und Funktionalität des Systems während der Verwendung des Systems verändert oder verändert.
Aufbau des Lösungsdesigns
Nachdem ich das oben beschriebene Problem verstanden habe, werde ich nun mögliche Lösungen und Ansätze vorschlagen, die darauf abzielen, das oben genannte Problem zu lösen.
Komponenten
Ich würde also sehen, dass es ein benutzerdefiniertes Benutzerzugriffssystem geben muss. Es würde relevante und irrelevante Metadaten aus dem Originaltext herausfiltern. Dies würde das Bearbeiten und Anzeigen von Metadaten im Text erleichtern. Dies würde die Integrität der Beziehung zwischen den Metadaten und dem Originaltext sicherstellen. Es würde die Metadaten strukturieren und eine Datenquelle für ein relationales Datensystem bereitstellen. Es wird höchstwahrscheinlich eine Vielzahl anderer zweckgebundener Funktionen bieten.
Struktur
So , da es wichtig ist , die Metadaten der Integrität auf den ursprünglichen Text zu halten, ist der beste Weg , um dies zu gewährleisten, ist die Metadaten zu halten inline mit dem ursprünglichen Text. Dies bietet den Vorteil, dass die Originaldaten sicher bearbeitet werden können, ohne diese Integrität zu beeinträchtigen.
Die Bedenken bei diesem Ansatz sind die Beschädigung der Metadaten durch die Originaldaten und umgekehrt. Die angemessene Indizierung und Strukturierung der Metadaten und ihrer (Meta-) Metadaten auf eine Weise, die Abfragen und Aktualisierungen sowie einen effizienten Zugriff ermöglicht. Das einfache Filtern von Metadaten aus dem Originaltext.
In diesem Sinne würde ich vorschlagen, dass ein Teil der Lösung auf dem Ansatz basiert, ESCAPE CHARACTERS im Originaltext zu verwenden. Dies ist nicht dasselbe wie das Entwerfen einer eigenen Auszeichnungssprache oder das Verwenden einer vorhandenen Auszeichnungssprache wie XML oder HTML. Es ist einfach, ein ESCAPE-ZEICHEN zu entwerfen , bei dem die Wahrscheinlichkeit, dass es im Originaltext existiert, Null oder nahezu Null beträgt .
Mein Rat in dieser Hinsicht wäre, die Originaldaten sorgfältig zu prüfen und die Art der Codepage zu bestimmen, in der sie gespeichert sind, und dann nach einem idealen CHARACTER oder
einer idealen CHARACTER SEQUENCE zu suchendas ist unwahrscheinlich oder unmöglich. In ASCII gibt es beispielsweise buchstäblich integrierte Steuerzeichen mit Bytewerten, die in Standardbenutzeroberflächen niemals verwendet werden. Gleiches gilt für ein schriftbasiertes oder relationales datenbasiertes Informationssystem. Seien Sie vorsichtig mit Binärdaten-Codecs. Abhängig von der Art der Originaldaten kann es hilfreich sein, einen Parser zu erstellen, der die Entdeckung einer Kontrollsequenz bestätigt, indem möglicherweise die zu maskierenden Daten überprüft und ihre Integrität überprüft wird, entweder durch eine einfache Überprüfung der Struktur der zu maskierenden Daten Daten oder sogar durch Einfügen eines Steuerzeichens, das für jede maskierte Datensequenz berechnet wird.
Beispieldaten mit Escape-Sequenzen
Dies ist eine Geschichte eines Mannes. >>>> (#) Warum handelt es sich bei dieser Geschichte um einen Mann nicht um eine Frau? (#) ( ) Userid :: 77367 ( ) Kommentar des Managers ( ) DataID :: 234234234 >>>> Ein Mann, der eine Wiese mähen wollte, ging eine Wiese mähen. Der Mann ging mit seinem Hund >>>> (#) Fragen Sie den Kunden, ob die Geschichte mit einer Katze besser wäre (#) >>>>, um die Wiese zu mähen. Das ist also die Geschichte eines Mannes und seines Hundes, die eine Wiese mähen wollten.
Ein Mann und sein Hund gingen, um eine Wiese zu mähen, gingen, um eine Wiese zu mähen, eine Wiese, die über den Berg reichte. >>>> (#) Das klingt viel besser mit einem Wald (**) Hinweis auf Vorschläge (#) >>>>
Der Mann und sein Hund und sein Auftrag, eine Wiese zu mähen, eine Wiese, die über den Berg reicht, wird nur beim Überqueren des Flusses erreicht.
Beispieldaten ohne Escape-Sequenzen
Dies ist eine Geschichte eines Mannes. Ein Mann, der ging, um eine Wiese zu mähen, ging, um eine Wiese zu mähen. Der Mann ging mit seinem Hund, um die Wiese zu mähen. Das ist also die Geschichte eines Mannes und seines Hundes, die eine Wiese mähen wollten.
Ein Mann und sein Hund gingen, um eine Wiese zu mähen, gingen, um eine Wiese zu mähen, eine Wiese, die über den Berg reichte.
Der Mann und sein Hund und sein Auftrag, eine Wiese zu mähen, eine Wiese, die über den Berg reicht, wird nur beim Überqueren des Flusses erreicht.
Offensichtlich ist dies leicht zu analysieren, nicht komplex als gesamte Markup-Sprache und leicht an Ihren Zweck anzupassen.
Schon gelöst?
Nun, ich würde nein sagen. Unsere Lösung hat noch einige Lücken. Die Indizierung und der strukturierte Zugriff auf diese Daten sind schlecht. Es ist auch nicht sinnvoll, diese Datei (oder mehrere Dateien) gleichzeitig mit der Bearbeitung abzufragen.
Wie könnten wir dieses Problem lösen?
Ich würde eine DATA ALLOCATION TABLE als Dokumentenkopf vorschlagen . Ich würde auch vorschlagen, eine TRANSACTIONAL TABLE UPDATE QUEUE zu implementieren . Lassen Sie mich erklären. Die Entwickler eines Dateisystems, insbesondere eines Rotationsdatenträger-Dateisystems, standen vor ähnlichen Designherausforderungen wie die oben beschriebenen. Sie mussten Informationen zu den Dateien auf der Festplatte zusammen mit den Daten einbetten. Eine großartige Lösung für die Beziehungsintegrität dieser Daten bestand darin, sie in einer Dateizuordnungstabelle ( File Allocation Table, FAT) zu duplizieren .
Dies bedeutet, dass für jedes einzelne Metadatenelement ein entsprechender Eintrag in der Datenzuordnungstabelle vorhanden ist . So ist es schnell, strukturiert und relational und unabhängig von den Originaldaten. Wenn für die Metadaten Abfragen, Verknüpfungen oder Aktualisierungen erforderlich sind, können Sie auf einfache Weise auf die Datenzuordnungstabelle zugreifen .
Natürlich muss darauf geachtet werden, dass die ursprünglichen Inline-Metadaten die Daten der Datenzuordnungstabelle widerspiegeln . Hier kommt eine Transaktions-Tabellen-Aktualisierungswarteschlange ins Spiel. Jede Änderung, Hinzufügung oder Entfernung von Metadaten wird nicht an den Daten selbst vorgenommen, sondern an der Warteschlange. Die Warteschlange stellt dann sicher, dass entweder alle Änderungen sowohl an den Inline- als auch an den Tabellendaten vorgenommen werden oder dass überhaupt keine Änderungen vorgenommen werden. Außerdem können asynchrone Aktualisierungen durchgeführt werden. Beispielsweise können alle Metadaten eines bestimmten Benutzers durch Ausführen eines Löschbefehls in der Warteschlange gelöscht werden. Wenn die Inline-Metadaten gesperrt waren und verwendet wurden, führte die Warteschlange keine Änderungen durch, bis dies sowohl für die Tabellendaten als auch für die Inline-Daten möglich war.