web-dev-qa-db-fra.com

xml: comment référencer un fichier .xsd sur un fichier .xml?

Je veux voir le fichier xml dans le navigateur comme je le définis dans le fichier .xsd. Veuillez vérifier les deux fichiers suivants pour moi et indiquer ce que je dois faire. Ces deux fichiers se trouvent dans le même dossier.

employé.xml

 <?xml version="1.0"?>

<employee xmlns="http://www.w3schools.com" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:schemaLocation="employee.xsd">

  <firstname>John</firstname>
  <lastname>Smith</lastname>
</employee>

employee.xsd

<xs:element name="employee">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string" fixed="red" />
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
29
RedsDevils

Vous avez fait deux erreurs: une dans le fichier de schéma et une autre dans la syntaxe de la valeur de xsi:schemaLocation attribut du fichier XML.

L'erreur principale est que votre fichier employee.xsd n'est qu'un fragment du schéma XML. Vous devez compléter le contenu du fichier employee.xsd. Par exemple,

<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://www.w3schools.com/RedsDevils"
    elementFormDefault="qualified"
    xmlns="http://www.w3schools.com/RedsDevils employee.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="employee">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="firstname" type="xs:string" fixed="red" />
                <xs:element name="lastname" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

et employee.xml:

<?xml version="1.0" encoding="utf-8"?>
<employee xmlns="http://www.w3schools.com/RedsDevils"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.w3schools.com/RedsDevils employee.xsd">

    <firstname>John</firstname>
    <lastname>Smith</lastname>
</employee>

Étant donné que vous définissez l'espace de noms par défaut dans le fichier XML, l'attribut d'emplacement de schéma xsi:schemaLocation doit être constitué de l'espace de noms et du chemin d'accès au schéma divisé par le blanc. J'ai changé le nom de l'espace de noms pour qu'il soit un peu plus unique: "http://www.w3schools.com/RedsDevils" au lieu de "http://www.w3schools.com".

À la fin, je peux ajouter que le fichier XML employee.xml ne correspond pas au schéma employee.xsd car l'élément <firstname>John</firstname> a la valeur other comme red, mais c'est probablement exactement cela que vous vouliez tester.

40
Oleg