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
@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)
使用xsd或xs前缀作为您的架构命名空间可能被认为是常见的,因此可能需要选择按照dbaseman 的建议修改您的架构。