Нет соответствия глобальной декларации, доступной для корня проверки
фон
проверка XML-документа с помощью схемы.
простейшая форма задачи показана в двух файлах.
XML-документа
<?xml version="1.0"?>
<recipe
  xmlns:r="http://www.namespace.org/recipe">
<r:description>
  <r:title>sugar cookies</r:title>
</r:description>
</recipe>
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>
полное сообщение об ошибке от xmllint:
.xml: 4: element recipe: Schemas validity error: Element 'recipe': отсутствует соответствующее глобальное объявление для корня проверки.
вопрос
каков правильный синтаксис (или какие атрибуты схемы отсутствуют), чтобы гарантировать, что данная схема может быть использована для успешной проверки данного XML-документа?
3 ответов
необходимо изменить экземпляр XML. Ваш текущий говорит, что он ищет тип под названием описание в пространстве имен http://www.namespace.org/recipe. Однако единственные типы, предоставляемые в этом пространстве имен, называются рецепт и descriptionType.
поэтому либо определите тип с именем описание в схеме XSD или измените свой экземпляр, чтобы вы ссылались на рецепт тип правильно:
<?xml version="1.0" encoding="utf-8"?>
<r:recipe
  xmlns:r="http://www.namespace.org/recipe">
  <description>
    <title>sugar cookies</title>
  </description>
</r:recipe>
в качестве корневых элементов можно использовать только определения глобальных элементов. Ваша схема имеет только сложные типы и, следовательно, ошибку. Изменить <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>
подробнее об этом здесь
в моей практике, я получил No matching global declaration available for the validation root в двух случаях:
- если XSD не содержит <xsd:element name="recipe" .../>объяснено в ответе @aravind-r-yarram.
- 
если <recipe/>в XML не содержит . В таком случае добавлениеxmlnsпоможем:<recipe xmlns="http://www.namespace.org/recipe"> ... </recipe>
