XML 验证:'No matching global declaration available for the validation root'

XML Validation: 'No matching global declaration available for the validation root'

我看过几篇关于这个问题的不同帖子,但是 none 的建议解决方案解决了我的问题,这似乎表明我存在一些根本性的误解。我的印象是我的 XML 和 XSD 之间存在名称间距问题,但我不确定如何解决它?

我在验证 XML 时遇到以下错误:

Element '{http://www.w3.org/2001/XMLSchema}schema': No matching global declaration available for the validation root., line 1`

XML:

<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT_FILE
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="path\to\my.xsd">
    <DOCUMENT>
        <BRANCH_NUMBER>num</BRANCH_NUMBER>
    </DOCUMENT>
</DOCUMENT_FILE>

XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0">
  <xsd:element name="DOCUMENT_FILE">
    <xsd:complexType>
      <xsd:sequence minOccurs="1" maxOccurs="1">
        <xsd:element name="DOCUMENT" minOccurs="1" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:sequence minOccurs="1" maxOccurs="1">
              <xsd:element name="BRANCH_NUMBER" minOccurs="1" maxOccurs="1" type="xsd:string"/>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

您的 XML 对您的 XSD 有效。 (您的基本理解是正确的。)您如何指定 XSD.

的路径可能只是一个小问题

XSD 在同一目录中:

替换

xsi:noNamespaceSchemaLocation="path\to\my.xsd">

xsi:noNamespaceSchemaLocation="my.xsd">

XSD在另一个相对指定的本地目录:

xsi:noNamespaceSchemaLocation="path/to/my.xsd">

XSD 在另一个绝对指定的本地目录中:

xsi:noNamespaceSchemaLocation="file:///path/to/my.xsd">

XSD 在远程目录中:

xsi:noNamespaceSchemaLocation="https://example.com/path/to/my.xsd">

另见

  • How to reference a local XML Schema file correctly?
  • How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?

聊天后更新: 我们更仔细地阅读了错误消息,意识到这是关于验证 XSD 本身失败,而不是 XML.以上关于 XSD 路径规范的提示可能对未来的读者有用,所以无论如何我都会按原样保留这个答案。

底线:如果您看到有关 schema 元素的验证错误,请检查您实际上是在调用验证例程时指定的 XML 文件已更正,而不是 XSD 文件代替。