在 XSD 中使用 minoccurrs="0" 和 nillable="false" 作为元素类型字符串是否有效?

问题描述 投票:0回答:3
<xs:element minOccurs="0" name="Name" nillable="false">
        <xs:simpleType>
                <xs:restriction base="xs:string">
                <xs:maxLength value="25"/>
                </xs:restriction>
            </xs:simpleType>
</xs:element>

对于上面的元素,当请求元素为空值时,会验证失败吗?

我没有收到以下 xml 请求的错误 -

 <con:name></con:name> - no error.

请告诉我,如果类型为字符串,minoccurrs 为零,nillable 为 false,则 xml 验证将响应什么。

提前致谢。

xml xsd
3个回答
3
投票

此声明没有理由说明空元素无法通过验证。

minOccurs="0"
表示该元素可以省略:它对元素存在时的验证方式没有影响。

nillable="false"
表示你不能拥有
xsi:nil="true"
属性。但您没有此属性,因此这不会使其无效。您不需要将其设为
nillable
,因为元素的类型无论如何都允许空内容,因此无需将其标记为
nil
(除非您想区分
""
的值与
 的值) "unknown"


1
投票

我认为该 xml 片段的验证不会失败。 首先, minOccurs 指的是序列中元素的最小数量,因此它适用于 con:name 的父元素(如果有),但不适用于元素本身。

出现指示器用于定义元素出现的频率。

'nillable' 指的是 nil 属性:nil="true" 用于将 null 值分配给元素。

更多详细信息请访问 http://www.dimuthu.org/blog/2008/08/18/xml-schema-nillabletrue-vs-minoccurrs0/comment-page-1/


1
投票

nillable

它作用于限制其值的元素内部的数据,

nillable="false"
这意味着您不能将元素值设置为
null
。一个元素,其中
nillable="true"
可以在其中具有
null
,并且它将具有属性
xsi:nil="true"
,将其标记为
null

minOccurs

它是对元素的规则/限制,告诉元素可以在以下 xml 中重复多少次,

minOccurs="0"
告诉元素在
xml
中不是必需的,无论有没有它都是有效的
xml 
根据架构。

另一方面,值

minOccurs="1"
表明该元素必须至少出现在
Xml
中一次,否则
XSD Validation
将失败。


现在对于答案,除非您添加

<xs:minLength value="1" />
,否则验证不会失败,因为数据类型是
xs:string
,您正在考虑的
null
empty
字符串,通过输入
<xs:minLength value="1" />
您是告诉字符串必须有 1 个字符并且不能为空。

<xs:element minOccurs="0" name="Name" nillable="false">
    <xs:simpleType>
        <xs:restriction base="xs:string">
        <xs:maxLength value="25"/>
        <xs:minLength value="1" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>

因为这不是

null
而是空的,所以为什么我们用
null
检查字符串是否为
c#
String.IsNullOrEmpty(String)
中的空,并且它们之间的区别可能无法理解,如下所示。

© www.soinside.com 2019 - 2024. All rights reserved.