我应该在哪里为XML文档中的命名空间添加URI声明?

时间:2010-10-06 22:18:43

标签: xml web-services xml-namespaces

我目前正在构建一个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>

因此,尽管此特定文档中没有“错误”命名空间,但它仍然被定义,因此当“body”命名空间被“错误”命名空间替换时,<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>

<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 个答案:

答案 0 :(得分: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>

顺便说一句:你的根元素(模式)是非命名空间的,这很奇怪。