You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSD中基于xs:decimal的自定义类型是否允许空值?如何配置?

关于XSD自定义decimal类型的空值/Null支持问题

1. 当前定义是否允许空值/Null?

不允许。你现在的abc类型是基于xs:decimal的限制类型,而xs:decimal作为内置简单类型,默认只接受有效的十进制数值,既不允许空字符串(""),也不支持XML标准的null(通过xsi:nil="true"标识的空状态)。你的restriction块里没有添加任何支持空值的配置,所以这个类型只能接受合法的十进制数字。

2. 如何修改以支持空值/Null?

根据你需要支持的“空值”具体类型(XML Null 或 空字符串),有两种常见的修改思路:

方式一:支持XML Null(xsi:nil="true")

如果你希望使用该类型的元素可以标记为“存在但无值”,不需要修改abc类型本身,只需在元素定义时添加nillable="true"属性:

<xs:element name="myDecimalElement" type="abc" nillable="true"/>

这样该元素既可以填入符合abc类型的十进制值,也可以写成:

<myDecimalElement xsi:nil="true"/>

方式二:让类型本身支持空字符串或Null

如果你希望类型本身能直接接受空字符串或者XML Null,可以使用xs:union将abc类型与空相关的类型结合:

仅支持XML Null的类型定义:
<xs:simpleType name="abc">
  <xs:union memberTypes="xs:decimal xs:null"/>
</xs:simpleType>
仅支持空字符串的类型定义:
<xs:simpleType name="abc">
  <xs:union memberTypes="xs:decimal">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:length value="0"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:union>
</xs:simpleType>
同时支持XML Null和空字符串:
<xs:simpleType name="abc">
  <xs:union memberTypes="xs:decimal xs:null">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:length value="0"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:union>
</xs:simpleType>

小提示

  • xsi:nil="true"和空字符串是两个不同的概念:前者表示元素“存在但无值”,后者表示元素的值是一个空字符串,需要根据业务需求选择合适的方式。
  • xs:union是扩展简单类型、让它支持多类型(包括空相关类型)的常用手段,适合需要在类型层面统一支持空值的场景。

内容的提问来源于stack exchange,提问作者Naveen Ajjappa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:53:15