个人组织者的XML结构

时间:2008-10-16 18:31:29

标签: xml calendar organizer

我正在做一个用于学习目的的个人管理器,我从未使用过XML,所以我不确定我的解决方案是否是最好的。这是我附带的XML文件的基本结构:

<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>

紧急属性应该是1到10的等级。
我在谷歌上做了一个快速搜索,但找不到一个好的例子。也许这不是最好的解决方案,我想知道它是否足够。如果有任何相关性,我正在使用PHP进行应用程序。

5 个答案:

答案 0 :(得分:2)

你的方式对我来说已经足够了。但是,我更喜欢子标签属性,所以我的方式更像是:

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

但就像我说的那样,你的方式很好。

快速提问 - 为什么不是数据库?

答案 1 :(得分:1)

您可能已经天真地到达了这一点,但您的XML设计的主要特点是它针对按日期搜索进行了优化。如果您的XML文档很大,而且您按日期进行了大量搜索(我怀疑这是个人管理器中最常见的用例),这是一件好事。

执行此XPath模式:

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

将检查比使用Kev更简单的扁平化组织需要使用的模式更少的节点:

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

基本上必须查看文档中的每个节点。

顺便说一句,请注意,我假设monthday属性是数字。这很重要,因为你几乎肯定想要在某个时候对这些数据进行排序,除非你要维护文档中的排序顺序(我承认,可以为其做出论证),你'我希望这些属性的形式很容易对它们进行排序。

在这些属性中存储数值数据的方式也很重要。 (如果您希望在会议中听起来很聪明,可以说您正在建立数据类型的规范表示。)例如,如果您使用前导零而不是其他零,那么这些XPath模式都不会可靠地工作,因为@day='7'与设置为day的{​​{1}}属性不匹配。 (你可以通过使用"07"函数将属​​性转换为XPath中的数字来解决这个问题,但首先避免问题会更好。)

答案 2 :(得分:0)

您可以将该层次结构缩小为:

<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>

或..

<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>

在XPath查询中,它会让生活变得更加痛苦。我还添加了一个id属性,以便您可以唯一地标识活动。

答案 3 :(得分:0)

我认为你的结构对于你正在做的事情会很好。

如果您计划部分地使用它来学习XML,您可以考虑使用属性和元素的混合,以便您可以练习使用每个元素的集合。一旦您对XML更加熟悉,您可能会开始定义规则,用于确定哪些属性成为属性以及哪些属性成为元素。

使用正确的代码,您可以在XML文件和数据库表之间来回移动信息。您也可以开始学习XSL,这样您就可以在不更改原始XML文件的情况下练习移动(或者,一旦数据在表中,甚至没有原始XML文件)。

答案 4 :(得分:0)

对于一些可能经过深思熟虑的想法,可能值得查看xCal,这是符合XML标准的iCalendar标准表示。