Etendue des namespaces XML

Etendue des namespaces XML - XML/XSL - Programmation

Marsh Posté le 24-01-2008 à 02:12:04    

Salut à tous,
 
Si quelqu'un pouvait me donner un éclaircissement au sujet de l'étendue des namespaces XML, je l'en remercie d'avance. Plus précisément, je me demande :
 


<?xml version="1.0" encoding="UTF-8" ?>
<ns1:root xmlns:ns1="http://www.domain.com/NS1">
  <a attr="attr">
    <b/>
  </a>
</ns1:root>


L'élément a, son attribut attr et l'élément b font partie du namespace http://www.domain.com/NS1 ?
 
--------------------------------------------------


<?xml version="1.0" encoding="UTF-8" ?>
<ns2:root xmlns:ns1="http://www.domain.com/NS1" xmlns:ns2="http://www.domain.com/NS2">
  <ns1:a attr="attr">
    <b/>
  </ns1:a>
</ns2:root>


L'attribut attr de a ainsi que l'élément b font partie du namespace http://www.domain.com/NS1 ?
 
--------------------------------------------------


<?xml version="1.0" encoding="UTF-8" ?>
<ns2:root xmlns="http://www.domain.com/NS0" xmlns:ns1="http://www.domain.com/NS1" xmlns:ns2="http://www.domain.com/NS2">
  <c/>
  <ns1:a attr="attr">
    <b/>
  </ns1:a>
</ns2:root>


Ici, aucun élément ne fait partie du namespace http://www.domain.com/NS0 ?
L'élément c fait partie du namespace http://www.domain.com/NS2 ?
L'élément a et son attribut attr ainsi que l'élément b font bien partie de namespace http://www.domain.com/NS1 ?
 
--------------------------------------------------


<?xml version="1.0" encoding="UTF-8" ?>
<root xmlns="http://www.domain.com/NS0" xmlns:ns1="http://www.domain.com/NS1" xmlns:ns2="http://www.domain.com/NS2">
  <c/>
  <ns1:a attr="attr">
    <ns2:b>
      <d attr="attr"/>
    </ns2:b>
  </ns1:a>
</root>


Les éléments root et c font partie du namespace http://www.domain.com/NS0 ?
L'élément a et son attribut attr font partie du namespace http://www.domain.com/NS1 ?
Les éléments b et d ainsi que son attribut attr font partie du namespace http://www.domain.com/NS2 ?
 
--------------------------------------------------
 
Merci d'avance pour vos lumières !

Reply

Marsh Posté le 24-01-2008 à 02:12:04   

Reply

Marsh Posté le 24-01-2008 à 13:34:49    

Normalement, pour le premier code :

Code :
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <ns1:root xmlns:ns1="http://www.domain.com/NS1">
  3.  <a attr="attr">
  4.    <b/>
  5.  </a>
  6. </ns1:root>


a et b ne sont pas dans le namespace ns1, vu qu'il faut préfixer le nom de l'élément par ns1 pour qu'ils soient dans le namespace. Ils seront dans un namespace nul, sans valeur, vu qu'il n'y a pas de namespace par défaut.

 

Le namespace par défaut est déclaré par un xmlns sans préfixe :

Code :
  1. <ns1:pouet xmlns:ns1="http://domaine.com/ns1" xmlns="http://domaine.com/some-namespace>
  2.  <tagada />
  3.  <ns1:truc />
  4. </pouet>


Là <tagada> n'est pas préfixé, mais comme y'a un namespace par défaut, il appartiendra à ce namespace par défaut.

 

cf. Namespace Defaulting


Message édité par FlorentG le 24-01-2008 à 13:35:49
Reply

Marsh Posté le 24-01-2008 à 14:36:39    

Merci.
 
En fait, le truc que je trouve le plus étrange (mais peut-être que je ne vois pas toute la beauté de la chose) c'est que les descendants d'un élément namespacé explicitement avec un prefix ne font pas partie du même namespace de cet élément. J'en prend pour exemple ta réponse ainsi que Namespace Scoping.
 
De même, les attributs doivent toujours être préfixés (même si l'élément auquel ils appartiennent est préfixé et qu'il existe un namespace par défaut), sans quoi ils ne feront partie d'aucun namespace. Uniqueness of Attributes.
 
En fait, à tête reposée, ça colle avec ce que j'ai pu lire ici et là...
 
En tous cas merci !
 
 

Reply

Marsh Posté le 24-01-2008 à 14:50:39    

Seyev a écrit :

En fait, le truc que je trouve le plus étrange (mais peut-être que je ne vois pas toute la beauté de la chose) c'est que les descendants d'un élément namespacé explicitement avec un prefix ne font pas partie du même namespace de cet élément.


Au contraire, ça permet d'avoir des descendants appartenant au namespace par défaut. Sinon soit ce serait impossible. Soit faudrais un préfixe genre #default ou je sais pas quoi.

Reply

Marsh Posté le 24-01-2008 à 15:08:42    

Mouais. C'est vrai qu'il existe la possibilité du xmlns="..." pour que les descendants appartiennent au même namespace. D'un autre coté, on aurait toujours pu y revenir avec un xmlns=""...


Message édité par Seyev le 24-01-2008 à 15:09:15
Reply

Marsh Posté le 24-01-2008 à 15:35:36    

Seyev a écrit :

Merci.
 
En fait, le truc que je trouve le plus étrange (mais peut-être que je ne vois pas toute la beauté de la chose) c'est que les descendants d'un élément namespacé explicitement avec un prefix ne font pas partie du même namespace de cet élément. J'en prend pour exemple ta réponse ainsi que Namespace Scoping.


ben non, sinon c'est la merde pour mixer les préfixes quand on en a un par défaut.
 
Par contre, il est possible de déclarer un namespace par défaut sur n'importe quel élément, et dans ce cas ça s'applique à tous les descendants.

Seyev a écrit :

De même, les attributs doivent toujours être préfixés (même si l'élément auquel ils appartiennent est préfixé et qu'il existe un namespace par défaut), sans quoi ils ne feront partie d'aucun namespace. Uniqueness of Attributes.


 
Ouaip, sinon il devient impossible d'utiliser des attributs avec un namespace vide ({}), c'est à dire:

  • La grande majorité des attributs, pour commencer
  • Un truc super utile quand une multitude d'éléments (y compris dans des namespaces différents) ont des attributs en commun


:)


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed