【问题标题】:XSD validation is not happening while setting nillable="false"设置 nillable="false" 时未进行 XSD 验证
【发布时间】:2020-08-11 16:33:35
【问题描述】:

这是我要针对以下 XML 架构进行验证的 xml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<Students>
<Name></Name>
<Phone>0123987654</Phone>
<Address>
In front of PNB
</Address>
<Dob>2002-09-24</Dob>
</Students>

XML 架构

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Students">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" nillable="false"  />
<xs:element name="Phone" type="xs:integer"/>
<xs:element name="Address" type="xs:string"/>
<xs:element name="Dob" type="xs:date" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

在验证过程中,虽然名称字段为空并且在架构中设置了 nillable="false",但我没有注意到任何错误。名称字段不应为空,如果未提供错误值,则应引发验证错误。 任何人都可以建议解决方案如何通过 MinLength 实现与 simpletype 相同的解决方案,这对我来说是可能的,但复杂类型不确定如何进一步进行。

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    XSD nillable 属性是一种允许空内容的方法,而不是一种禁止它的方法。

    这是the W3C spec for XSD 1.1的摘录:

    如果 {nillable} 为真,那么一个没有文本或元素内容的元素可以是·有效· 尽管 {type 定义} 需要内容,如果它带有属性 xsi:nil 和值为真

    所以nillable="true" 定义了一个 exception 到一些其他规则,该规则将 forbid 一个空元素。该异常是通过在实例上指定xsi:nil="true" 来专门触发的。

    设置nillable="false" 只是断言您不能将xsi:nil 属性添加到元素,它不会影响元素是否可以为空。除非被架构的其他部分修改,否则这是所有元素的默认设置,如下面的规范所示:

    {nillable} nillable [attribute] 的·实际值,如果存在,否则为 false。

    要指定一个元素不能为空,你需要一些其他规则,比如声明一个简单类型,它指定字符串的基本类型和最小长度为 1:

    <xs:simpleType name="nonEmptyString">
        <xs:restriction base="xs:string">
            <xs:minLength value="1" />
        </xs:restriction>
    </xs:simpleType>
    

    【讨论】:

    • 添加说明,nillable="false"(无论如何都是默认值)阻止您将xsi:nil="true" 添加到实例中,它不会阻止实例为空。
    • @MichaelKay 我进行了编辑,希望能更清楚地说明这一点。
    • 您能否通过使用 minlength 引用相同的示例来共享代码 sn-p 。
    • 要强制 Name 元素至少包含一个字符,请将 xs:simpleType 定义为具有 xs:string 的限制,并带有 &lt;minLength value="1"/&gt; 方面,然后将 Name 定义为具有此类型而不是 @987654332 @.
    猜你喜欢
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2011-03-10
    • 2012-04-13
    相关资源
    最近更新 更多