22

你知道这些标签在 XML/XSD 上是否有区别吗?

<a_element /> and <a_element xsi:nil="true"/>

例如:

<SpreadCurve>
      <Index>3M</Index>
      <IndexNumber>4587</IndexNumber>
      <BusinessArea xsi:nil="true" />
</SpreadCurve>

and

<SpreadCurve>
      <Index>3M</Index>
      <IndexNumber>4587</IndexNumber>
      <BusinessArea />
</SpreadCurve>

这些是等价的吗?

如果我有一个 XSD 元素:

<xsd:element name="BusinessArea" type="xsd:string"/>

这意味着默认情况下它是 xsi:nil="false"。这意味着它不会接受该元素的空值。

我的疑问是,它会接受这个吗?

<BusinessArea />

这对 XSD 究竟意味着什么?

此致

4

4 回答 4

13

你会得到这个,因为你的 XSD BusinessArea 应该被定义为 nillable="true"。就像是:

<xsd:element name="BusinessArea" nillable="true">
.....
</xsd:element> 

这意味着 BusinessArea 元素可以具有空值,即为空。

如果 XML 中的元素不包含任何值,那么它必须具有属性 xsi:nil="true":

<BusinessArea xsi:nil="true" />

这应该是无效的:

<BusinessArea />

你展示的两个例子不应该是等价的。

检查这个以了解 xsi:nil 和 nillable:

http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_over_st0.html

http://www.w3.org/TR/xmlschema-0/#Nils

于 2010-09-21T13:41:30.497 回答
4

XML Schema:Structures 引入了一种机制,用于发出信号,当一个元素没有内容时,它应该被接受为·有效·,尽管内容类型不需要甚至不一定允许空内容。如果一个元素的属性xsi:nil 的值为true,它可能是没有内容的有效的。如此标记的元素必须为空,但如果相应的复杂类型允许,则可以携带属性。

来源:http ://www.w3.org/TR/xmlschema-1/#xsi_nil

于 2010-09-21T13:33:17.660 回答
2
<a_element />  

相当于 anempty string并且将对 xsd:string 有效,但对 xsd:date、xsd:datetime、xsd:decimal 等类型无效。

<a_element xsi:nil="true"/>

是的等价物,null并且将对架构定义中具有 nillable="true" 的所有元素呈现有效

于 2015-06-22T06:38:58.633 回答
0

我的理解是它们不一样。至少如果您想根据模式验证 xml。如果在您的架构中您将元素定义为可空,假设:

<xsd:element name="SomeName" type="xsd:double" nillable="true"/>

您需要在 xml 中显式将该元素设置为 null,如下所示:

<SomeName xsi:nill="true" />

如果在您的 xml 中,元素就像<SomeName />根据架构将无效。

于 2010-09-21T13:31:00.740 回答