Pas de correspondance mondial de la déclaration à la disposition de la validation de la racine
Fond
Valider un document XML à l'aide d'un schéma.
Problème
La forme la plus simple du problème est illustrée dans deux fichiers.
Document XML
<?xml version="1.0"?>
<recipe
xmlns:r="http://www.namespace.org/recipe">
<r:description>
<r:title>sugar cookies</r:title>
</r:description>
</recipe>
Document XSD
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
version="1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:r="http://www.namespace.org/recipe">
<xsd:complexType name="recipe">
<xsd:choice>
<xsd:element name="description" type="descriptionType"
minOccurs="1" maxOccurs="1" />
</xsd:choice>
</xsd:complexType>
<xsd:complexType name="descriptionType">
<xsd:all>
<xsd:element name="title">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="5" />
<xsd:maxLength value="55" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:all>
</xsd:complexType>
</xsd:schema>
Erreur
Le message d'erreur complet de xmllint:
fichier.xml:4: élément de la recette: Schémas de validité d'erreur : Élément de la "recette": Pas de correspondance mondial de la déclaration à la disposition de la validation de la racine.
Question
Quelle est la bonne syntaxe (ou de ce schéma attributs manquants) pour s'assurer que le schéma donné peut être utilisé pour valider le document XML donné?
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de changer votre instance XML. Votre actuelle on dit qu'il y a un type appelé description dans l'espace de noms http://www.namespace.org/recipe. Cependant, dans votre définition XSD, les seuls types exposés dans cet espace sont appelés recette et descriptionType.
Donc, soit définir un type appelé description dans le schéma XSD, ou de changer votre exemple si vous faites référence à la recette type correctement:
Mise à JOUR Ce n'est que la moitié de la solution - l'autre moitié est en @Aravind de réponse ici: https://stackoverflow.com/a/8426185/569662
description
,title
etc. doit également avoir de l'espace de noms (r:description
etc.).Mondial de définitions d'éléments peuvent être utilisés comme éléments racines. Votre schéma uniquement a des types complexes et, par conséquent l'erreur. Modifier la
<xsd:complexType name="recipe">
àEn savoir plus sur ce ici
Dans ma pratique, j'ai eu l'
No matching global declaration available for the validation root
dans deux cas:<xsd:element name="recipe" .../>
expliqué dans @aravind-r-yarram de réponse.Si
<recipe/>
dans le XML ne contient pas dexmlns
attribut. Dans ce cas, l'ajout de laxmlns
aidera: