2010-10-06 22 views
0

我目前正在構建一個XML模式,頭部,身體和可能的錯誤。我將那三個部分成不同的命名空間,所以我不知道何時何地,我應該把URI命名空間聲明中我應該在XML文檔中爲名稱空間放置URI聲明?

例如,它應該是:

<head:schema xmlns:head="http://mywebsite.com/ns/head/" xmnls:body="http://mywebsite.com/ns/body/" xmlns:error="http://mywebsite.com/ns/error/"> 
    <head:Response> 
     <head:MyFunctionResponse> 
      <body:DataObject> 
       <body:Parameter>Foo</body:Parameter> 
       <body:Parameter>Bar</body:Parameter> 
      </body:DataObject> 
     </head:MyFunctionResponse> 
    </head:Response> 
</head:schema> 

因此,儘管那裏是沒有這個特定文檔中的「錯誤」命名空間仍然被定義,所以當「主體」命名空間被替換爲「錯誤」命名空間時,<schema>保持不變。

還是應該更像這樣?

<head:schema> 
    <head:Response xmlns:head="http://mywebsite.com/ns/head/"> 
     <head:MyFunctionResponse> 
      <body:DataObject xmnls:body="http://mywebsite.com/ns/body/"> 
       <body:Parameter>Foo</body:Parameter> 
       <body:Parameter>Bar</body:Parameter> 
      </body:DataObject> 
     </head:MyFunctionResponse> 
    </head:Response> 
</head:schema> 

OR

<head:schema> 
    <head:Response xmlns:head="http://mywebsite.com/ns/head/"> 
     <head:MyFunctionResponse> 
      <error:ThrownException xmnls:body="http://mywebsite.com/ns/error/"> 
       <error:Id>21</error:Id> 
       <error:Message>Something went wrong.</error:Message> 
      </error:ThrownException> 
     </head:MyFunctionResponse> 
    </head:Response> 
</head:schema> 

在命名空間只聲明只是因爲它是必要的。

或者這是一個風格,意見或偏好的問題。像「靠窗座位,還是過道座位?」。

如果不是風格,意見或偏好,命名空間位置的指導思想是什麼?

回答

1

把它們全部放在頂部。通過將它們放在更靠近使用位置的位置,您不會節省任何東西

或者,把他們在使用它們,然後讓他們默認的命名空間,這樣可以節省一堆雜亂的:

<schema> 
    <Response xmlns="http://mywebsite.com/ns/head/"> 
     <MyFunctionResponse> 
      <DataObject xmnls="http://mywebsite.com/ns/body/"> 
       <Parameter>Foo</Parameter> 
       <Parameter>Bar</Parameter> 
      </DataObject> 
     </MyFunctionResponse> 
    </Response> 
</schema> 

BTW:這是奇怪的是,你的根元素(架構)是非命名空間中。

+0

所以,當你設置一個名稱空間時,除非另有定義,否則所有子項都設置了名稱空間,還是它對所有未來的兄弟姐妹都適用?這是爲了演示的目的而組合起來的,所以我將把根改爲名稱空間。 :-) – Drew 2010-10-06 22:36:41

+0

命名空間適用於它們在其上定義的元素以及該元素的所有子元素。事實上,現在你的第二個樣本是不正確的,因爲它們有一個head:schema根元素,但是直到Response元素纔會定義頭名稱空間。 – 2010-10-07 10:57:36

相關問題