2010-10-06 5 views
0

Je suis en train de construire un schéma XML, avec une tête, un corps et potentiellement des erreurs. Je partagerai ces trois parties dans différents espaces de noms, alors je me demande où et quand je mettrais les déclarations d'espace de noms URI dansOù dois-je mettre une déclaration d'URI pour un espace de noms dans un document XML?

Par exemple, faut-il:.

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

Donc, bien qu'il n'y ait pas "error" namespace dans ce document particulier, il est encore défini, de sorte que lorsque l'espace de noms "body" est remplacé par un espace de noms "error", <schema> reste le même.

Ou devrait-il être plus comme ça?

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

OU

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

où l'espace de noms est déclaré seulement comme il est nécessaire.

Ou est-ce une question de style, d'opinion ou de préférence. Comme "siège de fenêtre, ou siège de l'allée?".

Si ce n'est pas le style, l'opinion ou la préférence, quelles sont les idées directrices derrière le placement des espaces de noms?

Répondre

1

Mettez-les tous en haut. Vous n'économisez rien en les mettant plus près de leur utilisation.

Ou, mettez-les où ils sont utilisés, puis les rendre l'espace de noms par défaut de sorte que vous pouvez économiser beaucoup d'encombrement:

<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: Il est étrange que votre élément racine (schéma) est ONU- namespaced.

+0

Ainsi, lorsque vous définissez un espace de noms, sauf définition contraire, tous les enfants sont définis avec l'espace de noms, ou fonctionne-t-il également pour tous les autres frères et sœurs? Et c'était quelque chose mis en place à des fins de démonstration, donc je vais changer la racine pour avoir un espace de noms. :-) – Drew

+0

Les espaces de noms s'appliquent à l'élément sur lequel ils sont définis et à tous les enfants de cet élément. En fait, vos deuxièmes échantillons sont maintenant incorrects, car ils ont un élément racine: schema root, mais l'espace de noms head n'est défini que jusqu'à l'élément Response. –

Questions connexes