Aucune déclaration globale correspondante n'est disponible pour la racine de validation
Contexte
Valider un document XML à l'aide d'un schéma.
Problème
La forme la plus simple du problème est affiché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 à partir de xmllint:
Fichier.xml: 4: element recipe: Schemas validity error: Element 'recipe': Aucune déclaration globale correspondante disponible pour la validation racine.
Question
Quelle est la syntaxe correcte (ou quels attributs de schéma sont manquants) pour s'assurer que le schéma donné peut être utilisé pour valider avec succès le document XML donné?
3 réponses
Vous devez modifier votre instance XML. Votre actuelle on dit qu'il est à la recherche d'un type appelé description dans l'espace de noms http://www.namespace.org/recipe. Cependant, les seuls types exposés dans cet espace sont appelés recette et descriptionType.
Définissez donc un type appelé description dans le schéma XSD, ou modifiez votre instance pour référencer correctement le type recipe :
<?xml version="1.0" encoding="utf-8"?>
<r:recipe
xmlns:r="http://www.namespace.org/recipe">
<description>
<title>sugar cookies</title>
</description>
</r:recipe>
Seules les définitions d'éléments globaux peuvent être utilisées comme éléments racine. Votre schéma n'a que des types complexes et donc l'erreur. Changez le <xsd:complexType name="recipe">
en
<xsd:element name="recipe">
<xsd:complexType>
<xsd:choice>
<xsd:element name="description" type="descriptionType"
minOccurs="1" maxOccurs="1" />
</xsd:choice>
</xsd:complexType>
</xsd:element>
Lire plus à ce sujet ici
Dans ma pratique, j'ai obtenu le No matching global declaration available for the validation root
dans deux cas:
- Si XSD ne contient pas un
<xsd:element name="recipe" .../>
expliqué dans la réponse de @aravind-r-yarram. -
Si
<recipe/>
en XML ne contient pas d'attributxmlns
. Dans ce cas, l'ajout dexmlns
aidera:<recipe xmlns="http://www.namespace.org/recipe"> ... </recipe>