如何通过XSD验证XML验证失败

时间:2014-12-17 13:15:22

标签: xml validation xsd xsd-validation

Hy,我是XSD和XML的新手。我有以下XML消息,我正在验证模式。我正在使用不同的在线编辑器。例如这个editor。它正在验证我的XML结构,但我的问题是,如果我将一个元素的类型更改为从字符串浮动,它仍然验证我的XML结构。所以我很困惑,这意味着我的XSD不正确。

XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<credentials xmlns:cdm="http://com.example/test/current">
   <cdm:username>jawad</cdm:username>
   <cdm:password>jawad123</cdm:password>
</credentials>

XSD文件:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  
xmlns:cdm="http://com.example/test/current"
xmlns = "http://com.example/test/current"
elementFormDefault="qualified"
attributeFormDefault="unqualified">

<xs:element name="credentials"></xs:element>

<xs:complexType name="credentials">
    <xs:sequence>
        <xs:element name="username" type="xs:string" minOccurs="1" maxOccurs="1"/>
        <xs:element name="password" type="xs:string" minOccurs="1" maxOccurs="1"/>
    </xs:sequence>
</xs:complexType>

</xs:schema>

注意:

如果我将“username”元素的类型更改为“float”,编辑器应该显示验证失败错误,但它仍在验证它,所以我的xsd有问题或者我不理解架构验证的概念。

2 个答案:

答案 0 :(得分:2)

首先,您的架构无法按预期工作,因为您的“凭据”元素未引用“凭据”complexType。 (当没有指定其他类型时,“credentials”元素默认允许任何格式良好的XML - 这就是为什么即使“username”被声明为“float”,你的文档也是有效的。)

可以更正如下:

<xs:element name="credentials" type="credentials"/>

然后,您能解释一下如何验证文档吗?实际上,它应该由您的解析器正确处理,但验证可能已被关闭。

答案 1 :(得分:0)

我认为你会遇到命名空间问题。

实例文档中的每个命名空间都需要一个模式文档(为此目的将&#34; null&#34;名称空间作为名称空间计算),如果名称空间不是&#34; t&#34; null&# 34;,模式文档的targetNamespace属性必须存在。