XSD error: No matching global declaration available for the validation root
XSD error: No matching global declaration available for the validation root
当我尝试验证 XML 文件时出现此错误:
person.xml:3: element person: Schemas validity error : Element {http://www.namespace.org/person}person
: No matching global declaration available for the validation root.
这是 person.xml 文件的内容:
<?xml version="1.0"?>
<p:person xmlns:p="http://www.namespace.org/person">
<firstName>name</firstName>
<surName>surname</surName>
<secondName>n2</secondName>
</p:person>
这是 person.xsd 文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:p="http://www.namespace.org/person"
version="1.0">
<xs:element name="person">
<xs:complexType>
<xs:group ref="credential"/>
</xs:complexType>
</xs:element>
<xs:group name="credential">
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="surName" type="xs:string"/>
<xs:element name="secondName" type="xs:string"/>
</xs:sequence>
</xs:group>
</xs:schema>
错误表明在给定的 XSD 中找不到命名空间元素 {http://www.namespace.org/person}person
,因为 p
元素不在 http://www.namespace.org/person
命名空间中。通过将 targetNamespace="http://www.namespace.org/person"
添加到 XSD 的 xs:schema
根元素来更正此问题。接下来,调整对 credential
组的引用以也使用该命名空间。
总而言之,以下 XML 将对以下 XSD 有效:
XML
<?xml version="1.0"?>
<p:person xmlns:p="http://www.namespace.org/person">
<firstName>name</firstName>
<surName>surname</surName>
<secondName>n2</secondName>
</p:person>
XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:p="http://www.namespace.org/person"
targetNamespace="http://www.namespace.org/person"
version="1.0">
<xs:element name="person">
<xs:complexType>
<xs:group ref="p:credential"/>
</xs:complexType>
</xs:element>
<xs:group name="credential">
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="surName" type="xs:string"/>
<xs:element name="secondName" type="xs:string"/>
</xs:sequence>
</xs:group>
</xs:schema>
当我尝试验证 XML 文件时出现此错误:
person.xml:3: element person: Schemas validity error : Element
{http://www.namespace.org/person}person
: No matching global declaration available for the validation root.
这是 person.xml 文件的内容:
<?xml version="1.0"?>
<p:person xmlns:p="http://www.namespace.org/person">
<firstName>name</firstName>
<surName>surname</surName>
<secondName>n2</secondName>
</p:person>
这是 person.xsd 文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:p="http://www.namespace.org/person"
version="1.0">
<xs:element name="person">
<xs:complexType>
<xs:group ref="credential"/>
</xs:complexType>
</xs:element>
<xs:group name="credential">
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="surName" type="xs:string"/>
<xs:element name="secondName" type="xs:string"/>
</xs:sequence>
</xs:group>
</xs:schema>
错误表明在给定的 XSD 中找不到命名空间元素 {http://www.namespace.org/person}person
,因为 p
元素不在 http://www.namespace.org/person
命名空间中。通过将 targetNamespace="http://www.namespace.org/person"
添加到 XSD 的 xs:schema
根元素来更正此问题。接下来,调整对 credential
组的引用以也使用该命名空间。
总而言之,以下 XML 将对以下 XSD 有效:
XML
<?xml version="1.0"?>
<p:person xmlns:p="http://www.namespace.org/person">
<firstName>name</firstName>
<surName>surname</surName>
<secondName>n2</secondName>
</p:person>
XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:p="http://www.namespace.org/person"
targetNamespace="http://www.namespace.org/person"
version="1.0">
<xs:element name="person">
<xs:complexType>
<xs:group ref="p:credential"/>
</xs:complexType>
</xs:element>
<xs:group name="credential">
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="surName" type="xs:string"/>
<xs:element name="secondName" type="xs:string"/>
</xs:sequence>
</xs:group>
</xs:schema>