2009-06-22 8 views
1

OneNote MS utilise une hiérarchie de données qui est essentiellement une arborescence simple, même si l'information est affichée via une interface à onglets plutôt qu'une arborescence. Vous commencez avec des «cahiers», qui peuvent avoir des «sections», qui ont des «pages». J'essaie de modéliser ça. Dans mon cas, une page serait liée au contenu d'un RichEdit.Delphi: Imiter la structure de données de MS OneNote

Mon problème n'est pas que je ne peux pas trouver un moyen de le faire. Mon problème est que je ne sais pas laquelle de plusieurs possibilités sera finalement la plus simple. C'est là que j'espère que vous arriverez.

Je pourrais, par exemple, utiliser une base de données régulière [MyBase]. Un ensemble de données Page a des champs pour son nom et les données RichEdit. Les pages seraient imbriquées dans les sections, et les sections seraient imbriquées dans les cahiers. Si j'y ai pensé pendant un certain temps, il semble que ce soit quelque chose qui pourrait être modélisé avec de simples listes de chaînes, surtout si chaque élément de la liste comprenait des valeurs séparées par des virgules pour un ID et une position dans la hiérarchie, ainsi comme nom de cahier/section/page.

Mais cela semble aussi comme quelque chose qui pourrait être bien adapté pour XML ... si je devais en savoir plus sur XML :-)

Que faites-vous des gens plus expérimentés pensent?

Merci, comme toujours ...

Répondre

2

Si vous le stockez dans un système de fichiers, pourquoi ne pas utiliser .... des dossiers? C'est ce que fait OneNote. Un "cahier" et un "groupe de section" sont simplement des dossiers de système de fichiers réguliers. Le seul autre niveau est une section qui est le fichier .one. Il y a une hiérarchie très limitée là (ce sont juste les pages, dont chacune peut être marquée comme sous-pages mais elles ne sont pas vraiment liées à un parent.)

Inside the.un fichier que vous pouvez utiliser XML pour représenter vos pages, bien que ce ne soit pas ce que fait OneNote. OneNote utilise un format de fichier binaire afin de faciliter les modifications rapides, la synchronisation au niveau de l'objet, l'accès multi-utilisateur et le stockage compact.

Si vous recherchez des informations sur les "fichiers à accès aléatoire", vous pouvez vous faire une idée de la manière de procéder. Mais essayez d'éviter d'utiliser le format XML si vous pensez qu'il peut devenir volumineux car il deviendra fastidieux de faire des modifications. Vous auriez besoin de charger le fichier XML entier, d'apporter des modifications en mémoire, puis de tout réécrire.

2

Je pense que cela dépend de la façon dont vous souhaitez enregistrer les données. Si vous plantez pour utiliser une base de données pour l'accès partagé, la vitesse et de grandes quantités de données: normalisez simplement les données et créez la structure que vous avez proposée. Si vous voulez que l'utilisateur enregistre des données localement sur un système de fichiers, je pense que XML sera une bonne solution car elle vous permet de stocker les données dans un fichier structuré.

Alors ... comment voulez-vous que l'utilisateur stocke et utilise les données?

+0

Merci pour la réponse ... Je veux que les utilisateurs enregistrent des données localement sur un système de fichiers. Peut-être qu'il est temps pour moi d'en savoir plus sur XML en Delphi :-) –

3

Que vous utilisiez une base de données ou un fichier XML, essayez de placer vos routines d'accès aux données dans un module de données. Laissez vos unités GUI appeler les méthodes publiques du module de données et assurez-vous que ces appels ne dépendent pas de la façon dont vos données sont stockées. De cette façon, vous pouvez commencer avec une approche, et passer à l'autre en éditant simplement votre module de données.

3

Une chose que vous pourriez essayer serait d'utiliser un système de stockage structuré. Le concept est simple, vous travaillez avec un fichier de données comme vous le feriez pour un disque et des dossiers ... chose est que les dossiers et les fichiers sont tous sous votre contrôle exclusif. Le seul problème est qu'il ne s'adapte pas bien à plusieurs utilisateurs, mais XML non plus. (une bonne bibliothèque de stockage structurée est disponible sur blog de gabr)

Pour un système «multi-utilisateur», votre meilleure option sera de mettre en œuvre en utilisant des tables. Vous pouvez probablement obtenir un bon début à des choses en utilisant Microsoft Access et ADO, qui migre vers MS Sql Server très facilement. À partir de votre brève description, je m'attendrais à ce que vous ayez trois tableaux, NOTES, SECTIONS, PAGES. Les pages auraient une relation de clé étrangère (detail/master) vers les sections et les sections auraient une relation de clé étrangère avec Notebooks.

1

Je pense à vos données comme un arbre.

node { 
    id 
    parent_id 
    content 
    type 
} 

Les noeuds avec paren_id = 0 sont des blocs-notes. Le type est facultatif mais pourrait être utile. contenu sur la page et le cahier vous donnera une page/cahier de description de l'ordinateur portable gratuitement: D

Je vais utiliser une simple table sur sqlite ou MyBase ou autre. Je pense qu'un peu db est meilleur que Xml parce que xml vous force à charger toutes les données en mémoire.

Questions connexes