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有问题或者我不理解架构验证的概念。
答案 0 :(得分:2)
首先,您的架构无法按预期工作,因为您的“凭据”元素未引用“凭据”complexType。 (当没有指定其他类型时,“credentials”元素默认允许任何格式良好的XML - 这就是为什么即使“username”被声明为“float”,你的文档也是有效的。)
可以更正如下:
<xs:element name="credentials" type="credentials"/>
然后,您能解释一下如何验证文档吗?实际上,它应该由您的解析器正确处理,但验证可能已被关闭。
答案 1 :(得分:0)
我认为你会遇到命名空间问题。
实例文档中的每个命名空间都需要一个模式文档(为此目的将&#34; null&#34;名称空间作为名称空间计算),如果名称空间不是&#34; t&#34; null&# 34;,模式文档的targetNamespace属性必须存在。