Que signifie «xmlns» en XML?

J’ai vu la ligne suivante dans un fichier XML:

xmlns:android="http://schemas.android.com/apk/res/android" 

J’ai également vu xmlns dans beaucoup d’autres fichiers XML que j’ai rencontrés.

Qu’Est-ce que c’est?

Il définit un espace de noms XML .

Dans votre exemple, le préfixe d’espace de noms est ” android ” et l’ URI d’espace de noms est ” http://schemas.android.com/apk/res/android

Dans le document, vous voyez des éléments tels que:

Considérez le préfixe d’espace de noms comme une variable avec un alias de nom abrégé pour l’URI d’espace de noms complet. Cela équivaut à écrire en ce qui concerne ce que cela signifie quand un parsingur XML lit le document.

REMARQUE: Vous ne pouvez pas réellement utiliser l’URI d’espace de noms complet à la place du préfixe d’espace de noms dans un document d’instance XML.

Découvrez ce tutoriel sur les espaces de noms: http://www.sitepoint.com/xml-namespaces-explained/

Cela signifie un espace de noms XML .

Fondamentalement, chaque élément (ou atsortingbut) dans XML appartient à un espace de noms, une manière de “qualifier” le nom de l’élément.

Imaginez que vous et moi inventions tous les deux notre XML. Vous inventez le XML pour décrire les gens, j’invente le mien pour décrire les villes. Nous incluons tous les deux un élément appelé name . Le vôtre se réfère au nom de la personne, et le mien au nom de la ville – OK, c’est un peu artificiel.

  Rob 37  London 123.000 0.00   

Si nos deux XML étaient combinés en un seul document, comment distinguerions-nous les deux noms? Comme vous pouvez le voir ci-dessus, il y a deux éléments de name , mais ils ont tous deux des significations différentes.

La réponse est que vous et moi allions tous deux assigner un espace de noms à notre XML, ce qui serait unique:

  Rob 37  London 123.000 0.00   

Maintenant que nous avons qualifié notre XML, il n’y a pas d’ambiguïté quant à la signification de chaque élément de name . Toutes les balises commençant par personxml: sont des balises appartenant à votre XML, toutes celles qui commencent par cityxml: sont les miennes.

Il y a quelques points à noter:

  • Si vous excluez des déclarations d’espace de noms, les éléments sont considérés comme étant dans l’espace de noms par défaut.

  • Si vous déclarez un espace de noms sans l’identificateur, c’est-à-dire xmlns="http://somenamespace" , plutôt que xmlns:rob="somenamespace" , il spécifie l’espace de noms par défaut du document.

  • L’espace de nommage proprement dit, souvent un IRI , n’a aucune conséquence réelle. Cela devrait être unique, donc les gens ont tendance à choisir un IRI / URI qu’ils possèdent, mais cela n’a pas de plus grand sens que cela. Parfois, les utilisateurs placent le schéma (définition) pour le code XML à l’adresse IRI spécifiée, mais cela ne concerne que certaines personnes.

  • Le préfixe n’a aucune conséquence non plus. La seule chose qui compte est de savoir quel espace de nommage le préfixe est défini. Plusieurs balises commençant par des préfixes différents, toutes mappées sur le même espace de noms sont considérées comme identiques.

    Par exemple, si les préfixes personxml et mycityxml tous deux mappés sur le même espace de noms (comme dans l’extrait de code ci-dessous), cela n’a aucune importance si vous personxml ou mycityxml un élément donné. par un parsingur XML. Le fait est qu’un parsingur XML ne se soucie pas de ce que vous avez choisi comme préfixe, mais uniquement de l’espace de noms qu’il mappe. Le préfixe est juste une indirection pointant vers l’espace de noms.

      
  • Les atsortingbuts peuvent être qualifiés mais ne le sont généralement pas. Ils n’héritent pas non plus de leur espace de noms de l’élément sur lequel ils se trouvent, contrairement aux éléments (voir ci-dessous).

De plus, les espaces de noms d’éléments sont hérités de l’élément parent. En d’autres termes, je pourrais également écrire le XML ci-dessus comme

  Rob 37  London 123.000 0.00   

xmlns – espace de noms xml. C’est juste une méthode pour éviter les conflits de noms d’éléments. Par exemple:

   5   5   

Deux éléments de node différents dans un fichier xml. Sans espaces de noms, ce fichier ne serait pas valide.

Je pense que la plus grande confusion est que l’espace de noms XML pointe vers un type d’URL ne contenant aucune information. Mais la vérité est que la personne qui a inventé sous l’espace de noms:

 xmlns:android="http://schemas.android.com/apk/res/android" 

pourrait aussi l’appeler comme ça:

 xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il" 

Ceci est juste un identifiant unique. Cependant, il est établi que vous devez y placer une URL unique qui peut éventuellement indiquer la spécification des balises / atsortingbuts utilisés dans cet espace de noms. Ce n’est pas nécessaire.

Pourquoi devrait-il être unique? Les espaces de noms ayant pour but de les rendre uniques, l’atsortingbut par exemple appelé background de votre espace de noms peut être distingué de l’ arrièreplan d’un autre espace de noms.

En raison de cette unicité, vous n’avez pas à craindre que si vous créez votre atsortingbut personnalisé, vous allez avoir une collision de noms.

Vous avez des espaces de noms afin que vous puissiez avoir des éléments globalement uniques. Cependant, 99% du temps, cela n’a pas vraiment d’importance, mais quand vous le placez dans la perspective du Web sémantique , cela commence à devenir important.

Par exemple, vous pouvez créer un mash-up XML de différents schémas simplement en utilisant les xmlns appropriés. Par exemple, créer un ami avec un ami avec vCard , etc.

Les espaces de noms XML fournissent une méthode pour éviter les conflits de noms d’éléments. En XML, les noms d’élément sont définis par le développeur. Cela entraîne souvent un conflit lors de la tentative de mélange de documents XML provenant de différentes applications XML.

Les conflits de noms en XML peuvent facilement être évités en utilisant un préfixe de nom. Lorsque vous utilisez des préfixes en XML, vous devez définir un espace de noms pour le préfixe.

L’espace de nom peut être défini par un atsortingbut xmlns dans la balise de début d’un élément. La déclaration d’espace de noms a la syntaxe suivante. xmlns: prefix = “URI” .