不了解架构定义root xml元素的方式

时间:2014-09-24 14:36:45

标签: xml schema xml-namespaces

我显然有一些非常基本的东西,我显然无法理解,我希望有人可以提供帮助。下面,我构建了一个非常简单的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,而且我很难掌握它们。)

1 个答案:

答案 0 :(得分:2)

编写模式是为了验证命名空间com.example.test中的元素,因此尝试验证不同命名空间或没有命名空间中的元素是没有用的。命名空间是验证的基础:它假设一个命名空间中的元素规则与不同命名空间的规则完全无关。