问题 MinOccurs 0和nillable true


在我的wsdl中我有一个元素:

<xsd:element minOccurs="0" name="birthDate" nillable="true" type="xsd:dateTime"/>

我知道nillable true允许空值这是否意味着它可以允许xml空标记?即

<birthDate/>

9662
2018-04-20 01:27


起源



答案:


设置 nillable="true" 意思是 <birthDate> 标签可以显示如下:

<birthDate xsi:nil="true"/>

但是,既然你也设定了 minOccurs="0",你也可以省略 <birthDate> 完全从XML标记,它仍然会对您的XSD进行验证。

注意 <birthDate/> 要么 <birthDate></birthDate> 根据XSD规则,不被视为空。

看一下 这个伟大的博客 发表进一步阅读。


12
2018-04-20 01:35



设置nillable =“true”不允许你写 <birthDate/>,它只允许你写 <birthDate xsi:nil="true"/>。这可能解释了为什么没有人实际使用该功能。 - Michael Kay
@MichaelKay感谢您纠正我,我为最初的错误信息道歉。 - Tim Biegeleisen


答案:


设置 nillable="true" 意思是 <birthDate> 标签可以显示如下:

<birthDate xsi:nil="true"/>

但是,既然你也设定了 minOccurs="0",你也可以省略 <birthDate> 完全从XML标记,它仍然会对您的XSD进行验证。

注意 <birthDate/> 要么 <birthDate></birthDate> 根据XSD规则,不被视为空。

看一下 这个伟大的博客 发表进一步阅读。


12
2018-04-20 01:35



设置nillable =“true”不允许你写 <birthDate/>,它只允许你写 <birthDate xsi:nil="true"/>。这可能解释了为什么没有人实际使用该功能。 - Michael Kay
@MichaelKay感谢您纠正我,我为最初的错误信息道歉。 - Tim Biegeleisen


将我的观点添加到上面的答案,许多初学者不知道或不考虑的基本事情是绑定 XSI 具有Schema Instance命名空间的变量。

例如:xmlns:xsi =“http://www.w3.org/2001/XMLSchema-instance”[在xml开始标记中的任何位置添加此属性]。

属性前缀“XSI“在这种情况下必须与XML命名空间绑定”http://www.w3.org/2001/XMLSchema-instance“。此绑定可以在任何父元素或根元素本身中完成,绑定取决于您希望xsi可用的范围。

  • 嵌套到声明的所有元素都获得相同的值
  • 即使你可以使用任何名称来绑定namespcae,为简洁起见,它总是建议使用 XSI 对于 http://www.w3.org/2001/XMLSchema-instance

PS:我意识到xml命名空间绑定和前缀属性的全部重要性,无论何时需要,当我在工作中挣扎时,再多花3个小时来理解,为什么我的xml节点即​​使在nillable属性的情况下也没有得到xsd的验证目前在模式定义中。


0
2018-01-23 19:17