No matching global declaration available for the validation root
In my practice, I got the No matching global declaration available for the validation root
in two cases:
If XSD does not contain an
<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:<recipe xmlns="http://www.namespace.org/recipe"> ... </recipe>
You need to change your XML instance. Your current one says that there is a type called description in the namespace http://www.namespace.org/recipe. However, in your XSD definition, 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:
<?xml version="1.0" encoding="utf-8"?>
<r:recipe
xmlns:r="http://www.namespace.org/recipe">
<description>
<title>sugar cookies</title>
</description>
</r:recipe>
UPDATE This is only half the solution - the other half is in @Aravind's answer here: https://stackoverflow.com/a/8426185/569662
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">
to
<xsd:element name="recipe">
<xsd:complexType>
<xsd:choice>
<xsd:element name="description" type="descriptionType"
minOccurs="1" maxOccurs="1" />
</xsd:choice>
</xsd:complexType>
</xsd:element>
Read more about this here