XSD怎么定义一个列表类型 xs:list

xs:list 是 XSD 中通过简单类型派生得到的空格分隔值列表机制,需用 包裹 定义,支持内置或自定义原子类型作为 itemType,不支持复杂类型;其值为单文本节点,适用于轻量配置场景。

xs:list 是 XSD 中用于定义“由空格分隔的简单类型值列表”的内置机制,它本身不是一种独立的数据类型,而是一种**简单类型派生方式**——通过在已有简单类型(如 xs:integer、xs:string)基础上应用 list 衍生规则得到。

核心要点:xs:list 不是直接声明的类型,而是通过 +

你不能写 type="xs:list",必须用 包裹 ,并指定其 itemType(即列表中每个元素的类型)。

基本语法结构

以下定义了一个由空格分隔的整数列表类型:


  

然后可在元素中使用:

✅ 合法值示例:1 2 342 -7 0 100 ❌ 非法值示例:1,2,3(逗号分隔)、1 2.5(含非整数)、1 2(多个空格允许,但首尾空格会被自动截断)

支持 itemType 的常见类型

  • 内置原子类型:xs:string、xs:integer、xs:decimal、xs:boolean、xs:date 等
  • 自定义简单类型(需先定义):比如一个限制了长度的字符串类型,再作为 itemType 构成 list
  • 不支持:复杂类型、带属性的类型、xs:anyType

实用技巧与注意事项

  • 值之间用任意空白字符分隔(空格、制表符、换行),XML 解析器会自动归一化为单个空格
  • 列表长度无默认限制,如需约束数量,需配合 /(注意:这两个 facet 作用于整个字符串值,不是元素个数!)→ 更可靠的方式是用 或在业务层校验
  • 若要限制“元素个数”,推荐改用 + + ,这是语义更清晰的重复元素方式
  • xs:list 生成的实例 XML 是单个文本节点,例如:1 2 3;而重复元素方式是多个子节点:12

基本上就这些。xs:list 本质是轻量级的空格分隔文本解析,适合配置类、ID 列表等简单场景,别把它当数组用——需要结构化、可扩展或带元数据的列表,优先选重复元素(maxOccurs)。