我显然有一些非常基本的东西,我显然无法理解,我希望有人可以提供帮助。下面,我构建了一个非常简单的XML模式和XML文档。两者都是良好的形式。但是当我尝试根据模式验证文档时,我收到以下错误:
Not valid.
Error - Line 2, 17: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 17;
cvc-elt.1: Cannot find the declaration of element 'SpecialRequest'.
我使用的是在线验证器:http://www.utilities-online.info/xsdvalidation/
这是我的架构和XML。
架构:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="com.example.test"
elementFormDefault="qualified"
targetNamespace="com.example.test"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="SpecialRequest">
<xs:sequence>
<xs:element name="content_type" nillable="true" type="xs:string" />
<xs:element name="content_data" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="SpecialRequest" type="tns:SpecialRequest" />
</xs:schema>
XML:
<?xml version="1.0" encoding="UTF-8"?>
<SpecialRequest>
</SpecialRequest>
验证器无法找到SpecialRequest
元素。我不明白。我错过了什么?感谢。
P.S。
我拿出任何识别信息来简化事情并隐藏客户的身份。这就是你看到com.example.test的原因。
编辑:我收到了以下文件进行验证,但我仍然只知道发生了什么:
<?xml version="1.0"?>
<tns:SpecialRequest xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="com.example.test">
<tns:content_type>Some type</tns:content_type>
<tns:content_data>Some data</tns:content_data>
</tns:SpecialRequest>
我是否总是必须在元素中使用命名空间? (我认为我的问题是我只使用过没有命名空间的XML,而且我很难掌握它们。)
答案 0 :(得分:2)
编写模式是为了验证命名空间com.example.test中的元素,因此尝试验证不同命名空间或没有命名空间中的元素是没有用的。命名空间是验证的基础:它假设一个命名空间中的元素规则与不同命名空间的规则完全无关。