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

que signifient exactement les attributs xmlns , xmlns:xsi et xsi:schemaLocation ? Comment sont-ils liés? Pourquoi : ?

et il y a 2 URLs dans le xsi:schemaLocation=

  1. http://maven.apache.org/POM/4.0.0 (il se trouve être le même que le xmlns , mais il donne une erreur 404 lors de la visite.)
  2. http://maven.apache.org/xsd/maven-4.0.0.xsd (ceci est une vraie XSD doc)

Si 1 n'existe pas, pourquoi le mettre encore là?

27
demandé sur kjhughes 2015-12-10 16:18:55

2 réponses

attributs relatifs à L'espace de noms dans le schéma XML et XML (XSD)

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

    le préfixe xmlns n'est utilisé que pour déclarer les reliures d'espaces de noms et est par définition lié à l'espace de noms http://www.w3.org/2000/xmlns / .

    dans votre exemple , il déclare que http://maven.apache.org/POM/4.0.0 est le namespace par défaut pour les éléments de votre projet Maven.

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

    schéma XML: Structures définit également plusieurs attributs pour une utilisation directe dans tout document XML. Ces attributs sont dans un espace de noms différent, qui a le nom d'espace de noms 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: dans la 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 établit 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 par L'intermédiaire d'un XSD. Voir comment restreindre la valeur D'un XML élément utilisant xsi: tapez XSD?

      dans votre exemple , xsi:type n'est pas utilisé; inclus ici pour l'exhaustivité concernant xsi .

    • xsi:nil permet à un élément vide d'être considéré comme valide alors que XSD ne l'aurait pas permis autrement.

      dans votre exemple , xsi:nil n'est pas utilisé; inclus ici pour l'exhaustivité concernant xsi .

    • xsi:schemaLocation et xsi:noNamespaceSchemaLocation donnez des conseils au processeur XML sur la façon d'associer un XSD à un document XML. Utilisez xsi:schemaLocation lorsqu'il y a un espace de noms; utilisez xsi:noNamespaceSchemaLocation lorsqu'il n'y a pas d'espace de noms.

      dans votre exemple , il y a un espace de noms, donc vous utilisez correctement xsi:schemaLocation , dont les valeurs sont séparées par des espaces paires de espace de noms "1519600920 et XSD-location-URI . Votre exemple utilise l'espace de noms, http://maven.apache.org/POM/4.0.0 , et les espaces de noms sont des constructions de nommage lexicales que n'ont pas besoin d'être récupérables . Votre exemple utilise également XSD-location-URI, http://maven.apache.org/xsd/maven-4.0.0.xsd , qui est récupérable comme il se doit.

      si votre exemple n'utilisait pas d'espace de noms, vous utiliseriez xsi:noNamespaceSchemaLocation , dont la valeur est un simple XSD-location-URI qui indique l'emplacement du XSD prévu et qui devrait être récupérable.

  • targetNamespace est un attribut de la racine xs:schema élément d'un XSD qui spécifie l'espace de noms de l'élément racine des instances de document XML le XSD est destiné à gouverner. Il doit correspondent à l'espace de nom par défaut ou explicite de la racine de ces documents XML élément.

26
répondu kjhughes 2017-05-23 12:16:24

xmlns définit namespace par défaut, qui stipule que tous les noeuds dans le noeud de projet et sans namespace-alias seront dans http://maven.apache.org/POM/4.0.0 namespace par défaut.

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" définit namespace - 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" namespace. Il contient des paires de valeurs-URI d'espace de noms et le lien de localisation de schéma pour le fichier XSD-schema de cet espace de noms. Il peut contenir plusieurs paires de valeurs - un fichier xsd pour chaque URI d'espace de noms défini. Cela signifie que le lien http://maven.apache.org/xsd/maven-4.0.0.xsd contient le schéma xsd avec la définition de l'espace de noms http://maven.apache.org/POM/4.0.0 .

4
répondu Nodonutsforyou 2018-03-01 11:08:45