XSD中禁止的原始数据类型的空元素

时间:2011-02-18 15:57:56

标签: xsd cxf xsd-validation

我在处理Web服务响应时遇到了Apache CXF的解析错误。它归结为一个空元素被返回:

<myValue />

元素定义如下:

<xsd:element name="myValue" type="xsd:float" minOccurs="0">

现在我在CXF邮件列表上看到empty value is not allowed by the XSD-spec

  

嗯,没有解决方法   这不是一个错误。一个空的   element对任何Decimal都无效   或日期类型或类似的东西。
  因此,它应该抛出一个例外   你有什么期望呢?

现在问题是:我在XML Schema规范中哪里可以找到这个约束?

2 个答案:

答案 0 :(得分:2)

  

我在XML Schema规范中哪里可以找到这个约束?

http://www.w3.org/TR/xmlschema-2/#float-lexical-representation

  

浮点数值有词汇   表示由a组成   尾数跟随,可选地,由   字符“E”或“e”,后跟一个   指数。
  ...
  指数和指数的表示   尾数必须遵循词汇规则   用于整数和小数   ...
  特殊价值观积极和   负无穷大而不是数字   有词汇表示INF,-INF   和NaN,分别。

因此xs:float至少需要一个xs:decimal ...

的尾数
  

decimal有一个词法表示   由有限长度的序列组成   十进制数字(#x30-#x39)   以小数分隔的句点   指示符。可选的前导标志是   允许的。

...空字符串不是有效的xs:decimal

如果您没有此元素的值,则应尽量不要包含此元素。您的架构似乎允许省略此元素,因为minOccurs具有值0。其他解决方案是插入合适的替换值,例如0NaN

答案 1 :(得分:0)

这不是一个明确的约束。 您应该能够将xsd更改为

<xsd:element name="myValue" type="xsd:float" minOccurs="0" default="0" />

然后能够为浮动提供一个空元素,而不会导致xml无效。

上面的示例意味着如果元素为空,则其值为0.注意,默认属性不适用于缺少的元素:缺少元素只是缺失,是否具有声明的默认值。 http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

  

如果元素没有任何内容,则架构处理器为元素提供的值等于默认属性的值。但是,如果元素未出现在实例文档中,则架构处理器根本不提供该元素。

到目前为止我还没有用过这个,但是为了防止个人错过了w3c规范,我已经在线验证器检查了一个带有默认的空xs:float元素的xml被接受了(至少是这个在线验证器:http://www.freeformatter.com/xml-validator-xsd.html)。