2008-10-16 21 views
2

Je fais un organiseur personnel à des fins d'apprentissage, et je n'ai jamais travaillé avec XML, donc je ne suis pas sûr si ma solution est la meilleure. Voici la structure de base du fichier XML que je suis venu avec:structure XML pour un organiseur personnel

<calendar> 
    <year value="2008"> 
     <month value="october"> 
      <day value="16"> 
       <activity name="mike's birthday" time="21:00" address="mike's apartment" urgency="10"> 
        activity description. 
       </activity> 
      </day> 
     </month> 
    </year> 
</calendar> 

L'attribut d'urgence doit être sur une échelle de 1 à 10.
Je l'ai fait une recherche rapide sur Google et n'a pas pu trouver un bon exemple. Peut-être que ce n'est pas la meilleure solution, et j'aimerais savoir si c'est adéquat. Je fais l'application en PHP si cela a de la pertinence.

Répondre

2

Votre chemin est tout à fait adéquat pour moi. Cependant, je préfère les balises enfants aux attributs, donc mon chemin serait plus comme:

<activity> 
    <name>Mike's Birthday</name> 
    <time>2100</time> 
    <address>Mike's Place</address> 
    <urgency>10</urgency> 
    <description>activity description</description> 
</activity> 

Mais comme je l'ai dit, votre chemin est très bien.

Question rapide, cependant - pourquoi pas une base de données?

+0

Attendez, XML n'est pas une base de données? (langue dans la joue, sarcasme, etc) ;-D –

+0

Un des buts quand on m'a proposé le développement de cette application était d'apprendre la manipulation de XML. Je vais jouer avec MySQL plus tard. Merci d'avoir répondu! –

+0

@bullettime: Pas de problème! J'ai pensé que ce projet était en partie un outil d'apprentissage XML, et que vous êtes sur la bonne voie dans la mesure du possible. Bonne chance pour tout! –

0

Vous pouvez aplatir cette hiérarchie jusqu'à:

<calendar> 
    <activity 
     id="123456" 
     name="mike's birthday" 
     year="2008" 
     month="10" 
     day="16" 
     time="21:00" 
     address="mike's apartment" 
     urgency="10"> 
      activity description. 
     </activity> 
</calendar> 

ou ..

<calendar> 
    <activity id="12345"> 
     <name>mike's birthday</name> 
     <year>2008</year> 
     <month>10<month> 
     <day>16</day> 
     <time>21:00</time> 
       <urgency>10</urgency> 
     <address>mike's apartment<address> 
     <description>activity description.</description> 
    </activity> 
</calendar> 

Ce serait rendre la vie un peu moins douloureuses requêtes faisant XPath. J'ai également ajouté un attribut id pour que vous puissiez identifier une activité de manière unique.

+0

Cette structure ressemble à une meilleure option. Merci! –

+0

C'est vrai; Toutefois, il est plus difficile de déterminer s'il existe des événements sur un jour spécifique, car vous devez explorer chaque activité. –

+0

Je suis d'accord avec Adam, même si le XML de Kev est beaucoup plus propre que ce que j'ai trouvé. C'est précisément pour ces pensées que j'ai posé cette question ici sur stackoverflow. Merci à vous deux –

0

Je pense que votre structure ira bien pour ce que vous faites.

Si vous envisagez d'utiliser cette partie pour en savoir plus sur le langage XML, vous pouvez envisager d'utiliser un mélange d'attributs et d'éléments afin de vous familiariser avec les collections de chacun. Une fois que vous serez plus à l'aise avec XML, vous commencerez probablement à définir des règles que vous utiliserez pour déterminer quelles propriétés deviennent des attributs et quelles propriétés deviennent des éléments.

Avec le bon code, vous pouvez déplacer des informations entre les fichiers XML et les tables de base de données. Vous pouvez également commencer à apprendre le XSL pour pouvoir vous entraîner à bouger les choses sans changer le fichier XML d'origine (ou, une fois que les données sont dans une table, ne pas même avoir un fichier XML original).

+0

Plus je lis sur XML plus je trébuche sur d'autres termes comme XSL, XPath, etc. J'ai d'abord pensé que PHP DOM était suffisant, mais il semble que j'ai encore beaucoup à apprendre. Merci d'avoir répondu. –

0

Il peut être utile d'examiner xCal, une représentation conforme à la norme XML de la norme iCalendar, pour des idées potentiellement bien pensées.

+0

iCalendar semble être beaucoup plus complexe que mon application doit l'être. Merci néanmoins –

1

Vous êtes peut-être arrivé naïvement, mais la caractéristique principale de votre conception XML est qu'elle est optimisée pour la recherche par date. Si votre document XML est volumineux et que vous effectuez beaucoup de recherche par date (ce qui, je le soupçonne, est le cas d'utilisation le plus courant dans un organiseur personnel), c'est une bonne chose.

exécution de ce modèle XPath:

/calendar/year[@value='2008']/month[@value='10']/day[@value='7']/activity 

examinera beaucoup moins de nœuds que la volonté en utilisant le modèle que vous aurez besoin d'utiliser plus simple organisation aplatie à Kev:

/calendar/activity[@year='2008' and @month='10' and @day='7'] 

qui a essentiellement regarder chaque noeud dans le document.Notez, en passant, que je suppose que les attributs month et day sont numériques. C'est important parce que vous voudrez certainement trier ces données à un moment donné, et à moins que vous n'ayez à maintenir l'ordre de tri dans le document (ce que je reconnais, un argument peut être fait pour), vous ' Nous voulons que ces attributs soient faciles à trier.

Il est également important que vous soyez cohérent dans la façon dont vous stockez des données numériques dans ces attributs. (Si vous voulez être intelligent dans les réunions, vous pouvez dire que vous êtes en train d'établir des représentations canoniques de vos types de données.) Si vous utilisez des zéros en tête, par exemple, aucun de ces modèles XPath ne fonctionnera de manière fiable, car @day='7' ne correspond pas à l'attribut day défini sur "07". (Vous pouvez contourner cela en convertissant les attributs en nombres dans votre XPath en utilisant la fonction number(), mais mieux vaut d'abord éviter le problème.)

+0

Je dois absolument jeter un coup d'œil à XPath. Merci –

+0

XPath est vraiment ce qui rend XML utile d'utiliser. –