没有匹配的全局声明可用于validation根目录

背景

使用模式validationXML文档。

问题

问题的最简单forms显示在两个文件中。

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的完整错误信息:

file.xml:4:元素配方:模式有效性错误:元素“recipe”:没有匹配的全局声明可用于validation根目录。

什么是正确的语法(或什么模式属性丢失),以确保给定的模式可以用来成功地validation给定的XML文档?

你需要改变你的XML实例。 你目前的人说,它正在名字空间http://www.namespace.org/recipe寻找名为description的types。 但是,在该名称空间中暴露的唯一types称为recipedescriptionType

因此,在XSD架构中定义一个名为description的types,或者更改您的实例,以便正确引用配方types:

 <?xml version="1.0" encoding="utf-8"?> <r:recipe xmlns:r="http://www.namespace.org/recipe"> <description> <title>sugar cookies</title> </description> </r:recipe> 

只有全局元素定义可以用作根元素。 您的模式只有复杂的types,因此错误。 将<xsd:complexType name="recipe">更改为

 <xsd:element name="recipe"> <xsd:complexType> <xsd:choice> <xsd:element name="description" type="descriptionType" minOccurs="1" maxOccurs="1" /> </xsd:choice> </xsd:complexType> </xsd:element> 

阅读更多关于这里