在XML文档中,应该将命名空间的URI声明放在哪里?

在XML文档中,应该将命名空间的URI声明放在哪里?,xml,web-services,xml-namespaces,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:Re

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

福
酒吧
因此,尽管在这个特定文档中没有“error”名称空间,但它仍然被定义,因此当“body”名称空间被“error”名称空间替换时,
保持不变

还是应该更像这样

<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>

福
酒吧


21
出了点问题。
其中仅根据需要声明名称空间

或者这是一个风格、观点或偏好的问题。比如“靠窗的座位还是靠过道的座位?”


如果不是风格、观点或偏好,那么名称空间放置背后的指导思想是什么?

将它们全部放在顶部。通过让它们更接近使用,你不会节省任何东西

或者,将它们放在使用它们的地方,然后将它们设置为默认名称空间,这样您就可以避免一堆混乱:

<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>

福
酒吧

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

所以当你设置一个名称空间时,除非另外定义,否则所有的子元素都是用名称空间设置的,或者它也适用于所有其他的同级元素?这是为了演示而放在一起的,所以我将根目录更改为名称空间。:-)名称空间应用于它们所定义的元素以及该元素的所有子元素。事实上,现在您的第二个示例是不正确的,因为它们有一个head:schema根元素,但是head名称空间直到Response元素才被定义。
<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>