Le cas d'utilisation de la solution
Je ne suis pas d'accord avec certaines des autres réponses, tout simplement parce que, bien que d'excellentes solutions, elles ne sont probablement pas votre solution. Oui, XML a le mot balisage dans son acronyme, mais ce n'est probablement pas idéal pour votre situation. C'est beaucoup trop complexe, il offre peu d'aide pour séparer les métadonnées du texte d'origine. Essentiellement, cela transformera tout en une forme de métadonnées, créant un ensemble de données en surpoids.
Puisqu'il n'y a probablement pas de solution ou d'approche absolument correcte, la meilleure solution répond à la question:
Comment les données seront-elles utilisées par le système?
De plus, si vous essayez de demander, comment une conception de solution pourrait intrinsèquement ajouter à la valeur du système, de la manière dont elle sera utilisée, alors vous êtes plus près de trouver votre réponse élégante .
Comprendre le problème
Ok assez de commentaires, creusons le problème. C'est le problème tel que je le comprends (évidemment y ajouter sera bénéfique):
- Il y a un texte original
- Hypothèses sur ce texte original:
- Ce texte, peut ou non être composé de plusieurs documents indépendants
- Ce texte, peut ou non être édité par un ou plusieurs utilisateurs
- Ce texte contient des informations connexes . Par là, je suppose (corrigez-moi si je me trompe) que les métadonnées sont liées et non descriptives . Il stocke donc des informations relatives au texte d'origine et non des informations décrivant le texte. Donc , il va stocker des notes sur le texte original, et non par exemple décrire que le texte est un titre qui est gras et est un lien vers un site Web, etc.
- Le texte doit être facilement filtré, distinct des métadonnées
- Le texte doit être protégé contre la corruption et la corruption des métadonnées
- Il devrait y avoir un moyen de stocker des informations relatives au texte d'origine (métadonnées)
- Ces métadonnées ont également besoin de leurs propres (méta) métadonnées, qui contiendraient des informations telles que l'utilisateur (ou les groupes?) Pour lequel les métadonnées sont pertinentes, comme une description des métadonnées, par exemple la météo, c'est une note ou un commentaire, ou description etc.
- Ces métadonnées (et ses (méta) métadonnées) doivent résister aux altérations du texte d'origine, aux altérations des métadonnées et aux altérations des (méta) métadonnées
- Les métadonnées (+ méta-métadonnées) doivent être bien structurées et facilement interrogées, et indexées ou même jointes de manière relationnelle à d'autres ensembles de données. La nature relationnelle des métadonnées ne doit pas seulement se limiter aux requêtes, mais aussi faciliter les mises à jour ou la réécriture et la modification des métadonnées à la suite des activités de données relationnelles.
- La valeur des métadonnées (+ méta-métadonnées) est dans sa nature très liée . Il devient immédiatement contre-productif au moment où il perd sa relation avec le texte d'origine. Ainsi, l' intégrité de sa relation avec le texte d'origine est un impératif de conception obligatoire.
- D'autres hypothèses sur la nature du problème et la manière dont il sera utilisé sont:
- Accès simultané à un système hétérogène. Cela signifie que l'utilisateur peut souhaiter visualiser le texte et modifier les métadonnées, en même temps que l'administrateur (ou un autre processus) effectue des requêtes de données relationnelles sur les métadonnées structurées.
- Le système aura plusieurs utilisateurs
- Le système est moderne. Cela signifie qu'il n'est pas limité par l'espace de stockage, la vitesse de traitement ou les impératifs en temps réel. La fonctionnalité axée sur l'intégrité et le but est une priorité plus élevée que les limitations des ressources informatiques physiques.
- Il y a une chance (quoique faible) que les utilisations et les fonctionnalités du système évoluent ou changent quelque peu, à mesure que le système est utilisé.
Construire la conception de la solution
Comprenant le problème tel que je l'ai décrit ci-dessus, je vais maintenant commencer à suggérer des solutions et des approches possibles qui visent à résoudre le problème ci-dessus.
Composants
Je verrais donc qu'il faudrait un système d'accès utilisateur personnalisé. Il filtrerait les métadonnées pertinentes et non pertinentes du texte d'origine. Cela faciliterait l'édition et la visualisation des métadonnées dans le texte. Cela garantirait l'intégrité de la relation entre les métadonnées et son texte d'origine. Il structurerait les métadonnées et offrirait une source de données à un système de données relationnelles. Il fournira très probablement une multitude d'autres fonctions spécifiques.
Structure
Donc, comme il est important de conserver l'intégrité des métadonnées par rapport au texte d'origine, la meilleure façon de garantir cela est de maintenir les métadonnées en ligne avec le texte d'origine. Cela offrira l'avantage que les données originales peuvent être modifiées en toute confiance sans briser cette intégrité.
Les préoccupations avec cette approche sont la corruption des métadonnées par les données originales et vice versa. L'indexation et la structuration adéquates des métadonnées et de ses (méta) métadonnées d'une manière qui permet des requêtes et des mises à jour et un accès efficace. Le filtrage facile des métadonnées à partir du texte d'origine.
Dans cette optique, je suggère qu'une partie de la solution soit basée sur l'approche de l'utilisation des CARACTÈRES D'ÉVACUATION dans le texte d'origine. Ce n'est pas la même chose que de concevoir votre propre langage de balisage ou d'utiliser un langage de balisage existant tel que XML ou HTML. Il est facile de concevoir un CARACTÈRE D'ÉVACUATION qui a une chance nulle ou presque nulle d'exister dans le texte d'origine.
Mon conseil à cet égard serait d'examiner attentivement les données d'origine, d'essayer de déterminer la nature de la page de codes dans laquelle elles sont stockées, puis de rechercher un CARACTÈRE ou une
SÉQUENCE DE CARACTÈRES idéalil est peu probable ou impossible de se produire. Par exemple, en ASCII, il y a littéralement des caractères de contrôle intégrés avec des valeurs d'octets qui ne sont jamais utilisés dans les interfaces utilisateur standard. La même chose peut être dite pour un système d'information basé sur des polices ou basé sur des données relationnelles. Soyez prudent avec les codecs de données binaires. Selon la nature des données d'origine, il peut être utile de construire un analyseur qui confirme la découverte d'une séquence de contrôle, peut-être en regardant les données qui sont échappées et en vérifiant leur intégrité, soit avec une simple inspection de la structure de l'échappé ou même en incluant un caractère de contrôle calculé pour chaque séquence de données échappée.
Exemples de données avec des séquences d'échappement
Ceci est l'histoire d'un homme. >>>> (#) Pourquoi cette histoire d'un homme n'est pas une femme? (#) ( ) Userid :: 77367 ( ) Commentaire du directeur ( ) DataID :: 234234234 >>>> Un homme qui est allé tondre un pré, est allé tondre un pré. L'homme est parti avec son chien >>>> (#) Demandez au client si l'histoire serait mieux avec un chat à la place (#) >>>> pour tondre le pré. Alors maintenant, c'est l'histoire d'un homme et de son chien qui est allé tondre un pré.
Un homme et son chien sont allés tondre un pré, sont allés tondre un pré, un pré atteint au-dessus de la montagne. >>>> (#) Cela sonne beaucoup mieux avec une forêt (**) Note de suggestion (#) >>>>
L'homme et son chien et sa mission, tondre un pré, un pré atteint au dessus de la montagne n'est atteint qu'en traversant la rivière.
Exemples de données sans séquences d'échappement
Ceci est l'histoire d'un homme. Un homme qui est allé tondre un pré est allé tondre un pré. L'homme est allé avec son chien pour tondre le pré. Alors maintenant, c'est l'histoire d'un homme et de son chien qui est allé tondre un pré.
Un homme et son chien sont allés tondre un pré, sont allés tondre un pré, un pré atteint au-dessus de la montagne.
L'homme et son chien et sa mission, tondre un pré, un pré atteint au dessus de la montagne n'est atteint qu'en traversant la rivière.
De toute évidence, cela est facilement analysé, pas complexe comme un langage de balisage complet et facilement adaptable à votre objectif.
Résolu encore?
Eh bien, je dirais non. Notre solution a encore quelques trous. L'indexation et l'accès structuré de ces données sont médiocres. De plus, il ne serait pas raisonnable d'interroger ce fichier (ou plusieurs fichiers) en même temps que le modifier.
Comment pourrions-nous résoudre ce problème?
Je suggérerais un TABLEAU D'ALLOCATION DE DONNÉES comme en-tête de document. Je suggérerais également la mise en place d'une QUEUE DE MISE À JOUR DE TABLE TRANSACTIONNELLE . Laissez-moi expliquer. Les concepteurs d'un système de fichiers, en particulier d'un système de fichiers à disque rotatif, ont été confrontés à des défis de conception similaires à ceux que vous avez décrits ci-dessus. Ils devaient intégrer des informations sur les fichiers sur le disque avec, ainsi que les données. Une excellente solution pour l'intégrité des relations de ces données était de les dupliquer dans une table d'allocation de fichiers (FAT).
Cela signifie que pour chaque élément de métadonnées individuel, il existe une entrée correspondante dans le tableau de répartition des données . Il est donc rapide, structuré et relationnel, et indépendant des données d'origine. Si des requêtes, des jointures ou des mises à jour doivent être effectuées sur les métadonnées, cela se fait facilement en accédant simplement à la table d'allocation des données .
De toute évidence, il faut veiller à ce que les métadonnées en ligne d'origine reflètent bien les données de la table d'allocation des données. C'est là qu'intervient une file d'attente de mise à jour de table transactionnelle. Chaque modification, ajout ou suppression de métadonnées se fait non pas sur les données elles-mêmes, mais plutôt sur la file d'attente. la file d'attente s'assurera alors que toutes les modifications sont apportées aux données en ligne et de table, ou qu'aucune modification n'est apportée du tout. Il permet également d'effectuer des mises à jour asynchrones, par exemple, toutes les métadonnées d'un certain utilisateur peuvent être supprimées en exécutant une commande de suppression dans la file d'attente. Si les métadonnées en ligne étaient verrouillées et utilisées, la file d'attente n'effectuerait aucune modification tant qu'elle ne pourrait pas le faire à la fois aux données de la table et aux données en ligne.