No matching global declaration available for the validation root

不羁岁月 提交于 2019-11-30 01:44:12

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

Aravind R. Yarram

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

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 an xmlns attribute. In such case adding the xmlns will help:

    <recipe xmlns="http://www.namespace.org/recipe">
        ...
    </recipe>
    
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!