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

基于xs:ID定义纯数字唯一ID类型时XML校验报错咨询

报错原因

xs:ID类型的底层数据格式是NCName(无冒号名称),XML规范对NCName的强制要求是首字符必须是英文字母或下划线,不能以数字、英文句号等字符开头,你当前maso的值是纯数字1,不符合NCName的格式要求,所以校验失败。

解决方案

这里提供两种适配不同需求的解决方式:

方案1:坚持使用xs:ID类型

需要同时调整XSD规则和XML的maso取值格式,给ID值加固定前缀避免数字开头:

  1. 修改XSD的maso类型定义,调整pattern适配带前缀的格式:
<xs:simpleType name="maso_Type">        
    <xs:restriction base="xs:ID">
        <xs:pattern value="ID_[0-9]+"/>
    </xs:restriction>   
</xs:simpleType>
  1. 修改XML中所有maso的取值,加统一前缀,比如<maso>ID_1</maso>即可通过校验。

方案2:保留纯数字maso格式,用unique约束实现唯一性

如果不想修改现有XML的纯数字maso取值,可以放弃xs:ID,改用xs:integer定义maso类型,同时在XSD的根节点定义中添加全局唯一约束,一样可以实现maso值全局不重复的效果:

  1. 先修改maso的类型定义为integer:
<xs:simpleType name="maso_Type">        
    <xs:restriction base="xs:integer">
        <xs:pattern value="[0-9]+"/>
    </xs:restriction>   
</xs:simpleType>
  1. 在XSD的cuahang根元素定义中添加unique约束:
<xs:element name="cuahang">
  <xs:complexType>
    <!-- 此处保留你原本cuahang的内部节点结构定义 -->
  </xs:complexType>
  <!-- 新增maso全局唯一约束 -->
  <xs:unique name="unique_maso">
    <xs:selector xpath=".//sach/maso"/>
    <xs:field xpath="."/>
  </xs:unique>
</xs:element>

这种方案不需要调整现有XML的内容,也能满足maso值全局唯一的需求,适配性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:03:03