【问题标题】:How to fail an XML Validation by XSD如何通过 XSD 使 XML 验证失败
【发布时间】:2015-02-16 01:14:58
【问题描述】:

嘿,我是 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 有问题还是我不​​理解模式验证的概念.

【问题讨论】:

    标签: xml validation xsd xsd-validation


    【解决方案1】:

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

    可以修改如下:

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

    那么,你能解释一下你是如何验证文件的吗?实际上,它应该被您的解析器正确处理,但验证可能已被关闭。

    【讨论】:

    • 谢谢。它是通过放置 targetNamespace 并定义元素的类型来解决的,就像你上面所说的那样。现在它可以正确验证了。
    • @user3141034 如果这解决了问题,你应该把它标记为答案
    【解决方案2】:

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

    您需要为实例文档中的每个命名空间提供一个架构文档(为此将“null”命名空间计为命名空间),如果命名空间不是“null”,则架构文档的 targetNamespace 属性必须为现在。

    【讨论】:

      猜你喜欢
      • 2019-06-23
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多