web-dev-qa-db-fra.com

xmlns, xmlns: xsi, xsi: schemaLocation et targetNamespace?

Pour le fragment XML suivant:

<project xmlns="http://maven.Apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 
                             http://maven.Apache.org/xsd/maven-4.0.0.xsd">

Qu'est-ce que le xmlns, xmlns:xsi, et xsi:schemaLocation attributs exactement signifient? Comment sont-ils liés? Quel est le : pour?

Et il y a 2 URL dans le xsi:schemaLocation=

  1. http://maven.Apache.org/POM/4.0. (c'est la même chose que xmlns mais cela donne une erreur 404 lors de la visite.)
  2. http://maven.Apache.org/xsd/maven-4.0.0.xsd (il s'agit d'un document XSD réel)

Si 1 n'existe pas, pourquoi le mettre quand même?

40
smwikipedia

Attributs liés aux espaces de noms dans XML et schéma XML (XSD)

  • xmlns fait partie de espaces de noms W3C dans la recommandation XML :

    Le préfixe xmlns n’est utilisé que pour déclarer des liaisons d’espace de nom et est par définition lié au nom d’espace de nom http://www.w3.org/2000/xmlns / .

    Dans votre exemple , il déclare que http://maven.Apache.org/POM/4.0.0 est l’espace de noms par défaut des éléments de votre projet Maven.

  • xmlns:xsi déclare un préfixe d’espace de nom standard (xsi) pour un espace de nom principal utilisé dans XSD: http://www.w3.org/2001/XMLSchema-instance

    XML ​​Schema: Structures définit également plusieurs attributs à utiliser directement dans tout document XML. Ces attributs se trouvent dans un espace de noms différent, qui porte le nom d'espace de nom http://www.w3.org/2001/XMLSchema-instance . Par souci de concision, le texte et les exemples de cette spécification utilisent le préfixe xsi: pour désigner ce dernier espace de noms; en pratique, n'importe quel préfixe peut être utilisé.

    Dans votre exemple , il déclare la liaison conventionnelle du préfixe xsi de l'espace de noms à http://www.w3.org/2001/XMLSchema-instance, qui configure correctement l’utilisation des attributs suivants:

    • xsi:type permet à une instance XML d'associer des informations de type d'élément directement plutôt que via un fichier XSD. Voir Comment restreindre la valeur d'un élément XML à l'aide de xsi: type in XSD?

      Dans votre exemple , xsi:type N'est pas utilisé; inclus ici pour la complétude concernant xsi.

    • xsi:nil _ permet à un élément vide d'être considéré comme valide alors que le XSD n'aurait peut-être pas été autorisé autrement.

      Dans votre exemple , xsi:nil N'est pas utilisé; inclus ici pour la complétude concernant xsi.

    • xsi:schemaLocation et xsi:noNamespaceSchemaLocation _ fournit des indications au processeur XML sur la manière d’associer un XSD à un document XML. Utilisation xsi:schemaLocation quand il y a un espace de noms; utilisation xsi:noNamespaceSchemaLocation quand il n'y a pas d'espace de noms.

      Dans votre exemple , il y a un espace de noms, vous utilisez donc correctement xsi:schemaLocation, dont les valeurs sont des paires séparées par des espaces de espace de noms et XSD-emplacement-URI. Votre exemple utilise l’espace de nom, http://maven.Apache.org/POM/4.0.0, et les espaces de noms sont des constructions de nommage lexicales qui ne doit pas être rétrivable. Votre exemple utilise également l’URI XSD-location-URI, http://maven.Apache.org/xsd/maven-4.0.0.xsd, qui est rétrivable comme il se doit.

      Si votre exemple n'utilisait pas d'espace de nom, utilisez xsi:noNamespaceSchemaLocation, dont la valeur est un simple XSD-emplacement-URI qui indique l'emplacement du fichier XSD souhaité et qui devrait être récupérable.

  • targetNamespace est un attribut sur le xs:schema élément racine d’un XSD spécifiant l’espace de nom de l’élément racine des instances de document XML que le XSD est censé régir. Il doit correspondre à l'espace de nom par défaut ou explicite des éléments racine de ces documents XML.

52
kjhughes

xmlns définit un espace de noms par défaut, qui indique que tous les noeuds du projet et sans alias d'espace de nom seront dans http://maven.Apache.org/POM/4.0.0 espace de noms par défaut.

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" définit l’espace de nom - http://www.w3.org/2001/XMLSchema-instance, et lui donne un nouvel alias - xsi

xsi:schemaLocation est un attribut schemaLocation de "http://www.w3.org/2001/XMLSchema-instance" espace de noms. Il contient des paires de valeurs - l'URI d'espace de nom et le lien d'emplacement de schéma pour le fichier xsd-schema de cet espace de nom. Il peut contenir plusieurs paires de valeurs - un fichier xsd pour chaque URI d'espace de nom défini. Cela signifie lien http://maven.Apache.org/xsd/maven-4.0.0.xsd contient un schéma xsd avec la définition de http://maven.Apache.org/POM/4.0.0 espace de noms.

7
Nodonutsforyou