nillable和minOccurs XSD元素属性

时间:2009-12-14 19:50:41

标签: xml xsd wsdl

我来回设置元素minOccurs="0"nillable="true"

我正在阅读this文章,现在我的WSDL中我不确定是否使用它们都是值得的。本文提供了一个很好的示例,表示可能在其中散布空值的数组,因为仅使用minOccurs="0"无法实现这一点。现在,我一直在使用的约定是,如果一个元素不是可选的,那么它就不是可用的。 根据我的理解和我的问题所在的区别在于,通过将nillable属性应用于元素,我说你可以传递相当于NULL值的XSD?否则,没有nillable属性的元素必须在限制内放置一个值吗?

1 个答案:

答案 0 :(得分:56)

您需要决定是将XML视为XML,还是将XML视为从此处传输Java(或其他)对象的方式。

在XML中,nillable允许构造<myelement xsi:nil='true'/>作为显式缺失值的指示符,如SQL NULL。这在语义上与仅<myelement/>不同。两者都完全不同。因此,在查看XML时,您必须区分四种情况:

<!-- nothing -->
<myElement attr1='true'>some content</myElement>
<myElement/>
<myElement xsi:nil='true'/>

另一方面,如果您主要关注Java - 可能是因为您使用的是SOAP,那么您需要考虑Java对象如何来回映射。

对于从Object继承的任何Java项,JAXB和其他映射技术需要一种处理空值的方法。 Nillable是这样做的方式。如果你禁止对可以作为对象的东西进行支持,那么工具包会恼人地使用数组来找到表示缺席的方法。

另一方面,如果你有一个数组,请记住数组本身是一个对象,并且可以为null。因此,每个工具包都必须区分零元素数组和空元素。

另一方面,如果你有一个基本类型(例如int),nillable将导致问题,因为没有从xsi:nil到基元的映射。