Background
Validate an XML document using a schema.
Problem
The simplest form of the problem is shown in two files.
XML Document
<?xml version="1.0"?>
<recipe
xmlns:r="http://www.namespace.org/recipe">
<r:description>
<r:title>sugar cookies</r:title>
</r:description>
</recipe>
XSD Document
<?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>
Error
The full error message from xmllint:
file.xml:4: element recipe: Schemas validity error : Element 'recipe': No matching global declaration available for the validation root.
Question
What is the correct syntax (or what schema attributes are missing) to ensure that the given schema can be used to successfully validate the given XML document?
In my practice, I got the
No matching global declaration available for the validation root
in two cases:<xsd:element name="recipe" .../>
explained in @aravind-r-yarram's answer.If
<recipe/>
in XML does not contain anxmlns
attribute. In such case adding thexmlns
will help:You need to change your XML instance. Your current one says that it is looking for a type called description in the namespace http://www.namespace.org/recipe. However, the only types exposed in that namespace are called recipe and descriptionType.
So either define a type called description in the XSD schema, or change your instance so you are referencing the recipe type correctly:
Only global element definitions can be used as root elements. Your schema only has complex types and hence the error. Change the
<xsd:complexType name="recipe">
toRead more about this here