微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

设置nillable =“ false”时未进行XSD验证

如何解决设置nillable =“ false”时未进行XSD验证

这是我要针对以下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来实现,因为对于我来说,简单类型是可能的,但复杂类型不确定如何进一步进行。

解决方法

XSD nillable属性是允许空内容的一种方式,而不是不允许的空方式。

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

如果{nillable}为true,则无文本或元素内容的元素可以有效,尽管{type definition}可能需要内容,如果它带有属性xsi:nil且值为true >

因此nillable="true"为其他规则禁止定义了 exception 。通过在实例上指定xsi:nil="true"专门触发该异常。

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

{nillable} 可设定的[属性]的实际值,如果存在,则为false。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。