XSD验证错误:元素'{http://www.example.com}范围':不期望此元素.预计是(范围)

div*_*ivB 8 xml validation schema xsd xmllint

我创建了以下XSD(使用Eclipse):

  <?xml version="1.0" encoding="UTF-8"?>
  <schema targetNamespace="http://www.example.com" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.com">
    <element name="Make">
      <complexType>
        <sequence>
          <element name="Scope"></element>
        </sequence>
      </complexType>
    </element>
  </schema>
Run Code Online (Sandbox Code Playgroud)

并使用这个简单的XML进行验证

  <?xml version="1.0"?>
  <Make xmlns="http://www.example.com">
    <Scope>
    </Scope>
  </Make>
Run Code Online (Sandbox Code Playgroud)

得到:

  xmllint.exe --noout --schema sources.xsd sources.xml
  sources.xml:3: element Scope: Schemas validity error : Element '{http://www.example.com}Scope': This element is not expected. Expected is ( Scope ).
  sources.xml fails to validate
Run Code Online (Sandbox Code Playgroud)

在我看来,这必须是正确的:XML文件位于名称空间http://www.example.com(验证器说的也是).

对于XSD,我将默认命名空间设置为XSD模式(这是Eclipse所做的,所以它应该是正确的!)并且我给出了正确的targetNamespace.我也试过用

<element name="tnd:Scope" />
Run Code Online (Sandbox Code Playgroud)

但是,这也不起作用.

这是xmllint中的错误还是问题出在哪里?

关于divB

Fil*_*urt 4

@dbasemans答案的替代方法是将指定elementFormDefault合格

 <schema targetNamespace="http://www.example.com"
     xmlns="http://www.w3.org/2001/XMLSchema"
     xmlns:tns="http://www.example.com"
     elementFormDefault="qualified">
Run Code Online (Sandbox Code Playgroud)

使用xsdxs前缀作为您的架构命名空间可能被认为是常见的,因此可能需要选择按照dbaseman 的建议修改您的架构。