2009-12-16 18 views
3

哪個慣例更受歡迎,爲什麼(包括一個優勢和一個優點)?XML元素應該具有分組父項嗎?

此:

<company> 
    <employees> 
     <employee /> 
     <employee /> 
     <employee /> 
    </employees> 
    <buildings> 
     <building /> 
     <building /> 
    </building> 
</company> 

或本:

<company> 
    <employee /> 
    <employee /> 
    <employee /> 
    <building /> 
    <building /> 
</company> 

回答

1

沒有語義原因通過特定元素明確表示集合。最後,兩份文件具有相同的含義 - 它們代表一家擁有所有員工和建築的公司。

不過,也有第一個例子中提供了額外的好處:

  • 它是更具可讀性,可以在編輯器概述中獲益。
  • 您可以創建更加嚴格的模式
  • 它更容易序列化到強類型集合
  • 您可以指定適用於所有元素中

在另一面的集合元素的屬性,第二例如也有自己的一些優點(雖然我覺得這些在可疑至少):

  • 不太健談/使用較少的內存
  • 更容易通過非XML工具進行處理
1

是否有屬性或數據你可能附着到所有員工一組嗎?我通常去的第一個例子(一個分組元素),因爲它給你的自由,

  1. 創建多個組
  2. 附加數據到組作爲一個整體

這是稍微更詳細一點,但會爲您帶來更多的靈活性。

0

要回答你的問題的一個問題...分組元素如何影響可讀性,視覺和編程?

分組方法(與<employees><buildings>)更直觀。

對於XPath查詢,非分組方法稍微簡潔一些,/company/employees/employee/company/employee比較。

所以,它可能是一個6個,另外6個。

2

通常,在編程中處理XML時,通常需要將其轉換爲程序可以使用的對象。大多數XML序列化器都使用元素來表示父元素的屬性。

當你像上例中那樣對它們進行分組時,序列化程序可以將它解釋爲單個集合或數組屬性。在這種情況下,您將擁有一個Company,它具有Employees屬性,該屬性是Employee對象的集合。

如果你做的第二種方式,你會用性能Company對象稱爲「Employee」,「Employee2」,「Employee3」或類似的東西而告終。當你編程時,這不是一個好的對象設計。

+0

當然,但任何值得該死的XML綁定框架都可能會打開包裝器元素,從而使您獲得裸露的集合。 – skaffman

0

我想通過考慮您所代表的數據來處理它。

在C#中,我看到:

// Top Example: 
public class Company 
{ 
    public Employee[] employees; 
    public Building[] buildings; 
} 

// Vs. Bottom Example: 
public Things[] employeesAndBuildings; 

從邏輯上講,建築和員工是不一樣的東西。由於你的公司有幾棟建築和幾個員工,你應該邏輯上將這兩個組分開。

第二個例子更短,取決於讀取格式的內容,讀者可以輕鬆地將兩個項目分開。對於可讀性不過,該格式可以得到更多的不可讀的,當事情以不同的順序去:

<company> 
    <employee /> 
    <building /> 
    <employee /> 
    <building /> 
    <employee /> 
</company> 

我會去的第一個格式。