2008-10-16 31 views
2

我正在爲學習目的做一個個人組織者,而且我從未使用過XML,因此我不確定我的解決方案是否最好。下面是我來了以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中執行應用程序,如果它有任何相關性。

回答

2

你的方式對我來說已經足夠了。不過,我更喜歡孩子標籤屬性,所以我的路會更喜歡:

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

但是就像我說,你的方法就好了。

快速的問題,但 - 爲什麼不是數據庫?

+0

等待,XML不是數據庫嗎? (臉頰上的舌頭,諷刺等); -D – 2008-10-16 18:37:22

+0

當我被提議開發這個應用程序時,其中一個目標就是學習XML操作。稍後我會搞亂MySQL。感謝你的回答! – 2008-10-16 18:41:27

+0

@bullettime:沒問題!我認爲這個項目部分是一個XML學習工具,並且你走在正確的道路上。祝你一切順利! – 2008-10-16 18:56:57

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屬性,以便您可以唯一標識一個活動。

+0

這個結構看起來像一個更好的選擇。謝謝! – 2008-10-16 18:50:00

+0

這是真的;但是,由於您必須鑽取每項活動,因此很難確定某一天是否有任何活動。 – 2008-10-16 18:55:05

0

我認爲你的結構對你正在做的事情會很好。

如果您打算將這部分用於瞭解XML,您可以考慮使用混合的屬性和元素,以便您可以練習使用這些屬性和元素的集合。一旦您更熟悉XML,您可能會開始定義規則,您將使用這些規則來確定哪些屬性成爲屬性,哪些屬性成爲元素。

使用正確的代碼,您可以在XML文件和數據庫表之間來回移動信息。你也可以開始學習XSL,這樣你就可以在不改變原始XML文件的情況下練習移動東西(或者一旦數據在表中,甚至沒有原始XML文件)。

0

對於一些可能深思熟慮的想法,可能需要查看xCal,這是iCalendar標準的XML兼容表示形式。

1

您可能已經很天真地達到了這個目的,但是XML設計的主要特點是它針對日期搜索進行了優化。如果您的XML文檔很大,並且您按日期進行了大量搜索(我懷疑這是個人管理器中最常見的用例),這是一件好事。

執行這個XPath模式:

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

將使用模式檢查許多比意志更少的節點你需要用千電子伏的簡單展平組織使用:

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

其中主要有查看文檔中的每個節點。

請注意,順便說一下,我假定monthday屬性是數字。這很重要,因爲你幾乎可以肯定想在某個時間點對這些數據進行排序,除非你要保持文檔中的排序順序(我承認可以進行爭論),但是,我們希望這些屬性可以很容易地排序。

同樣重要的是,如何將數值數據存儲在這些屬性中。 (如果你想在會議中聽起來很聰明,你可以說你正在建立你的數據類型的典型表示。)例如,如果你使用某些時候而不是其他的前導零,那麼這些XPath模式都不會可靠工作,因爲@day='7'將不匹配day屬性設置爲"07"。 (您可以使用number()函數將屬性轉換爲XPath中的數字,但首先避免該問題更好。)