Bonjour à tous,

il y a quelquechose que j'ai du mal à comprendre au niveau des espaces de nommages. Par exemple dans le code suivant, quel est le namespace de mon attribut exemple ?
<balise xmlns="uri">
<ici exemple="truc"/>
</balise>

Est-ce "uri" ou rien ?

Tangui
Modifié par SirWam (30 Dec 2005 - 18:05)
Bonjour,

L'espace de nom par défaut ne s'applique pas aux attributs. Donc m'appuyant sur ta question, je répondrais "rien".

Mais j'attire l'attention sur le fait que cette réponse est ambiguë car pouvant signifier :
1/ pas d'espace de nom
2/ espace de nom null ou correspondant à la chaîne vide

Cette ambiguïté redouble (ou s'annule selon les points de vue) lorsque l'on sait que les normes se contredisent :
- Namespaces in XML 1999 + Errata, 6 December 2002 : "The empty string, though it is a legal URI reference, cannot be used as a namespace name", donc le 2/ ci-dessus est impossible.
- dans l'utilisation pratique des espaces de nom dans d'autres normes XML et dans XSLT en particulier (plus exactement XPATH), tout noeud disposant d'un nom étendu (élément, attribut, espace de nom, processing instruction) comprend 2 composantes : nom local et espace de nom, si bien que 1/ ci-dessus n'est pas possible (à noter que pour les espace de nom et processing instruction, la composante espace de nom est définie comme étant automatiquement une chaîne vide).

Personnellement je privilégier la vision pratique, à savoir qu'il ne peut pas ne pas y avoir d'espace de nom, mais que l'espace de nom peut être une chaîne vide. Et c'est conforme au fonctionnement de la fonction namespace-uri().
Du coup plutôt que "rien", je répondrais espace de nom null ou vide
Ok j'ai bien compris mais ça me semble un peu illogique : un espace de nom servant à identifier le dialecte auquel appartient un élément ou un attribut, mon attribut n'appartiendrait à... aucun langage (vu que son namespace est null) ?

Par exemple si on veut avec Xslt parser un document XML pour ne recopier que les éléments et les attributs XHtml (par exemple), c'est pas un peu galère, puisqu'il faut aussi recopier les attributs dont le namespace est nul mais qui sont du XHtml... ?

Cya
a écrit :
Ok j'ai bien compris mais ça me semble un peu illogique : un espace de nom servant à identifier le dialecte auquel appartient un élément ou un attribut, mon attribut n'appartiendrait à... aucun langage (vu que son namespace est null) ?
Effectivement le choix qui a été fait dans la norme de dire que l'espace de nom par défaut ne s'applique pas aux attributs me semble bien curieux. Je n'en connais pas la raison. Mais il faut tout de même noter qu'il est quand même possible de donner un espace de nom non vide à un attribut à l'aide d'un préfixe.
a écrit :
Par exemple si on veut avec Xslt parser un document XML pour ne recopier que les éléments et les attributs XHtml (par exemple), c'est pas un peu galère, puisqu'il faut aussi recopier les attributs dont le namespace est nul mais qui sont du XHtml... ?
Non pas tant que ça, sauf si tu as des éléments Xhtml qui portent des attributs non Xhtml avec un espace de nom identique à celui des attributs XHTML. Mais dans ce cas c'est quand même ton doc de départ qui est tordu non ?
Ok mais quand je veux créer un attribut avec DOM2, je fais un
createAttributeNS(null, 'attributeName')

mais si je fais
createAttributeNS('http://www.w3.org/1999/xhtml', 'attributeName')

sur un élément XHtml (donc avec le même namespace), est-ce incorrect ?

Enfin bon je vais chercher la raison de ce choix sinon ça va me torturer l'esprit encore longtemps Smiley ravi

Merci et a+