2009-08-20 137 views
5

可能重複:
Should I use Elements or Attributes in XML?正確的XML格式

我正在寫在XML配置文件,我非常新來的整個XML熱潮。

我很好奇的SO社區想着如何把不同價值應以XML來表示,我看到一對夫婦的方式來做到這一點。

例如,當應的值是屬性,並且當它應該被嵌套標籤內?

<node1 message="Hello world" id="1" /> 

對戰

<node1> 
    <message>Hello world</message> 
    <id>1</id> 
</node1> 

顯然,這是一個非常簡單的例子......但有親的和反對的做某些類型的屬性與子節點?還是兩者兼得?

+1

這個問題有很多很多重複的內容,例如:http://stackoverflow.com/questions/1096797,http://stackoverflow.com/questions/33746,http://stackoverflow.com/questions/ 241819和http://stackoverflow.com/questions/152313。 – 2009-08-20 13:48:19

回答

14

我通常將屬性視爲元數據,或關於或限定節點內數據的數據。

例如在你上面的例子中,我可能會把這個消息作爲一個文本節點,並且有一個與它相關的屬性ID。

這裏沒有對或錯,但我覺得上述啓發式有用。您可能想要儘可能多地存儲屬性的一種場景是SAX解析,其中您的元素回調具有所有屬性的參數。即您可以爲所有屬性獲取一個回調,而不是每個數據一個回調。但是,這是以這種方式構建文檔的一個非常特殊的原因,我會在做這件事之前仔細考慮。

+1

這是一個很好的思考方式。 – nickf 2009-08-20 12:39:54

+0

是的,這是一種常用的方法。見例如http://www.ibm.com/developerworks/xml/library/x-eleatt.html – 2009-08-20 12:41:16

+0

謝謝!絕對是一個很好的方式來設計我的配置 – espais 2009-08-20 13:15:47

1

我會把ID(和引用,簡稱等)作爲一個屬性。剩下的就取決於你。我見過很多「僅屬性」模式,對於某些類型的數據(短字符串,日期等)並沒有那麼糟糕,並且使得編寫SAXParser變得更容易,但對我而言並不是「正確」的。

有人支持,即數據的屬性或字段,這樣用戶就可以決定。

我個人認爲,上述屬性作爲元數據是做事理智的方式。

1

最佳做法是將元素優先於屬性。元素更容易從DOM樹訪問,並提供關於它描述的數據的結構數據。通過結構數據,我的意思是說,你可以確定元素的父母和孩子是誰與他們應該是什麼或者可以是什麼。從架構的角度來看,這是非常重要的,架構定義的XML在結構上是自我意識的。屬性的唯一好處是簡潔,這也可能很重要。如果你可以用一個屬性來做什麼,否則需要三個或四個嵌套標籤,那麼你應該使用一個屬性。

2

與元件指定是肯定更冗長和令人厭煩,在另一方面,它是不可能具有屬性爲充分驗證。

如果你有兩個屬性,其中一個必須指定,可以驗證這一點,如果他們是在架構內的子元素,帶有屬性是否需要與否的屬性,你只能說。

W3Schools Attributes頁:

一些使用屬性的問題是:

  • 屬性不能包含多個值(元素可以)
  • 屬性不能包含樹結構(元素可以)
  • 屬性不易擴展(用於將來的更改)

在這個(略有人爲設計)的例子中,車輛可能有兩個機翼和車輪或某種組合,其中屬性我們不能強制至少有一個被定義,而對於元素,我們可以使用一個選擇元素minOccurs確保至少定義了一個元素。

name屬性始終是必需的,因此它可以是屬性或沒有驗證問題的元素。

<vehicle name="plane" wheels="3" wings="2"/> 
<vehicle name="sled" runners="2"/> 
<vehicle name="robin reliant" wheels="3"/> 

<vehicle name="plane"> 
    <wheels>3</wheels> 
    <wings>2</wings> 
</vehicle> 
<vehicle name="sled"> 
    <runners>2</runners> 
</vehicle> 
<vehicle name="robin reliant"> 
    <wheels>3</wheels> 
</vehicle> 
+0

+1的評論重新考慮它。多個值/樹結構等,但我不明白「使用與數據無關的信息屬性」。這似乎不太正確! – 2009-08-20 12:47:47

+0

它有點奇怪的措辭,我會讀它作爲元數據的使用屬性,雖然我不知道這是什麼意思 – 2009-08-20 12:49:16

+0

我已經考慮了一些,我仍然不清楚它是什麼意思,將它刪除它 – 2009-08-20 13:13:00

1

需要考慮的另一點是:屬性不能有明顯的空白。