2010-03-10 31 views
2

使用xml-Schema和命名空間驗證xml文檔時,實例文檔除了聲明命名空間本身之外,還必須在其全局元素前加一個命名空間來限定它。爲什麼要在實例文檔中限定全局元素?

有人會認爲在這種情況下,默認名稱空間足以限定元素,但xml-Schema顯然有另一種意見。

這是爲什麼?關於xml-Schema無法應對的默認命名空間是什麼?

回答

1

我相信這是通過設計來支持變色龍命名空間並避免變色龍組件的名稱衝突。我的意思是,通過不提供一個namsepace我們默認變色龍的設計。但是,如果不提供targetNamspace作爲默認namspace,則最終會出現問題和錯誤。

注:部分內容來自XFront.com

一個共同開發的集架構設計指南的

這裏是你的規則一般摘錄: 除了沒有命名空間的架構,每個XML架構至少使用兩個名稱空間 - targetNamespace和XMLSchema名稱空間。有三種方法來設計的架構,關於處理這兩個命名空間:

  1. 讓XMLSchema的默認命名空間,並明確限定所有引用到的targetNamespace組件。

  2. 反之亦然 - 使targetNamespace成爲默認命名空間,並明確限定XMLSchema命名空間中的所有組件。

  3. 不要使用默認命名空間 - 顯式限定對targetNamespace中組件的引用,並顯式限定XMLSchema命名空間中的所有組件。

確實沒有關於哪種方法是正確的最佳做法。首先,這完全取決於設計師。

儘管如此,在我的研究中,我發現: - 限定用於構造模式的組件(模式,元素,complexType,序列等)通常不會造成混淆,因爲限定符總是相同。也就是說,人們習慣於看到xsd:schema,xsd:element等。

  • 另一方面,目標名稱空間在模式之間可能差別很大。因此,可能產生的名稱空間前綴可能差別很大。例如,lib:Book,波士頓:地鐵。這種變化常常是混亂的根源。

我希望這能回答你的問題。

+0

尼卡回答喬。如果這將被批准爲正確的(奧斯卡),你將在星期二得到賞金。我將在未來四天內離開互聯網。 BR - – 2010-07-28 16:21:46

相關問題