2010-04-19 82 views
3

我總是想到像這樣的xml設置的數據結構。即:xml應代表一個集合還是一個列表?

<class> 
<person>john</person> 
<person>sarah</person> 
</class> 

等同於:

<class> 
<person>sarah</person> 
<person>john</person> 
</class> 

問題一:是這兩件事情logicly equivalant?


你被允許在xml中製作這樣的東西嗎?

<methodCall> 
    <param>happy</param> 
    <param>sad</param> 
</methodCall> 

或者你需要做的是這樣的:

<methodCall> 
    <param arg="1">happy</param> 
    <param arg="2">sad</param> 
</methodCall> 

問題二:是這兩件事情在邏輯上等同?


問題三:是一個XML通常就像一組或列表處理?

回答

6
  1. 如果您不關心排序順序,它們在邏輯上是等效的。
  2. 兩者都是合法的XML。它們在邏輯上不等同於第二個樣本具有附加信息。
  3. XML被視爲一個層次結構,而不是一個集合或列表。

XML可以表示一個列表,它可以表示一個集合。它不是結構化的。擁有多個相同的項目並不是一個錯誤,所以在這方面它不是基於設置的。

+1

+1 @sixtyfootersdude附註:XML有一些名爲「文檔順序」的內容。節點的順序在XML中是相關的,所以即使樣本1.1和1.2中存在「邏輯等價」(這是一個解釋問題),這些文檔也不是* acutally *等價的(@ Oded的第1點)。 – Tomalak 2010-04-19 20:11:28

1

XML節點構成一個列表,而不是一個集合,雖然更準確,但它們實際上更像是一個樹狀結構。考慮的是,你可以在XML做到這一點:

<example> 
    <foo/> 
    <foo/> 
</example> 

顯然,如果它是一組,作爲第一個/example/foo元素集合中已存在的最後一個/example/foo元素將不可訪問。但是,不管它們看起來是否相同,它們實際上是不同的節點,這意味着它們不能用沒有一些額外工作的集合來表示,而列表是代表XML文檔的節點的自然結構(只要因爲它們在樹中處於相同的「高度」)。

1

這可能是更好的分成三個獨立的問題,但無論如何:

1)元素的順序是XML重要,但它可能不是你的應用程序。 考慮代表一本書的XML:顯然段落的順序是最重要的。因此,你的第二個例子中的XML很好。

2)它們不是等價的XML文檔,但是您的應用程序可能會選擇將它們視爲等效。或不。 XML是一種描述事物的格式;這取決於應用程序來解釋它們。您可能希望查看XML模式以驗證文檔的方式。

3)元素可以在XML中複製,它們的順序很重要。然而,給定的文檔模式可以強制執行關於唯一性和/或排序的規則。因此,可以表示組和列表。我想你可以將默認的原始XML視爲有序列表。

相關問題