XSD(XML Schema)中所有和“字符串”相关的内置数据类型,一次性讲全、讲透,带常用限制技巧,直接拿来就能用!
| 类型名称 | 含义 & 典型用途 | 是否允许空格/换行 | 经典例子 | 备注 |
|---|---|---|---|---|
| xs:string | 最万能的字符串,啥都能放(推荐 90% 场景) | 是 | ” 张三 \n\t “ | 保留所有空白字符 |
| xs:normalizedString | 自动把换行、连续空格、制表符替换成单个空格 | 部分 | “张三” → “张三”(换行被空格替换) | 常用于不需要格式的文本 |
| xs:token | 进一步去掉首尾空格 + 连续空格压缩成一个 | 否 | ” 张三 \n 李四 ” → “张三 李四” | |
| xs:language | 语言代码 | 否 | “zh-CN”、”en-US”、”fr” | 符合 RFC 4646 |
| xs:Name | XML 合法名称(不能以数字开头,不能有空格等) | 否 | “userName”、”order_id” | 可用于元素/属性名 |
| xs:NCName | 无冒号的 Name(不能有命名空间前缀) | 否 | “userName”、”orderId” | 常用于 ID、变量名 |
| xs:ID | XML 文档内唯一 ID | 否 | “user123” | 必须唯一,类似 HTML 的 id |
| xs:IDREF / xs:IDREFS | 引用某个 ID(多个用空格分隔) | 否 | “user123” / “user1 user2” | 实现关联关系 |
| xs:NMTOKEN | 类似 token,但更宽松(不能有空格) | 否 | “user_name”、”v2.1” | 常用于枚举值 |
| xs:NMTOKENS | 多个 NMTOKEN(空格分隔) | 否 | “read write delete” | |
| xs:base64Binary | Base64 编码的二进制 | 是 | “SGVsbG8gd29ybGQ=” | 文件上传常用 |
| xs:hexBinary | 十六进制二进制 | 是 | “48656C6C6F” | 少用 |
| xs:anyURI | URL 或 URI | 是 | “https://example.com/img.jpg” | 自动允许相对路径 |
99% 业务场景推荐写法(直接背下来)
| 业务字段 | 推荐类型 | 推荐额外限制(facet) | 理由 |
|---|---|---|---|
| 用户名 / 姓名 | xs:token | length/minLength/maxLength + pattern | 去掉多余空格,方便比较 |
| 手机号 | xs:string 或 token | 中国大陆手机号 | |
| 邮箱 | xs:string | 正则验证 | |
| 标题 / 商品名 | xs:token | maxLength=”100″ | 去掉首尾空格,限制长度 |
| 密码(明文存储,慎用) | xs:string | minLength=”6″ | 不要用 pattern 防止泄露规则 |
| 身份证号 | xs:string | <xs:pattern value=”\d{17}[\dX] | \d{15}”/> |
| 订单号 / 流水号 | xs:string | 大写+数字 | |
| 描述 / 备注 | xs:string | maxLength=”2000″ | 保留换行和格式,用 string |
| 富文本内容 | xs:string | (通常放 CDATA 或转义) | 或者自定义 mixed 内容 |
| 状态枚举 | xs:string + enumeration | 最清晰 | |
| 文件上传 base64 | xs:base64Binary | maxLength(计算字节) | 防止超大文件 |
实战写法大全(直接复制)
<!-- 1. 用户名(最常用写法) -->
<xs:element name="username" type="xs:token"/>
<xs:simpleType name="UsernameType">
<xs:restriction base="xs:token">
<xs:minLength value="4"/>
<xs:maxLength value="20"/>
<xs:pattern value="[a-zA-Z][a-zA-Z0-9_]{3,}"/> <!-- 字母开头 -->
</xs:restriction>
</xs:simpleType>
<!-- 2. 中国手机号(最严谨) -->
<xs:simpleType name="MobileType">
<xs:restriction base="xs:string">
<xs:pattern value="1[3-9]\d{9}"/>
<xs:length value="11"/>
</xs:restriction>
</xs:simpleType>
<!-- 3. 通用标题 -->
<xs:simpleType name="TitleType">
<xs:restriction base="xs:token">
<xs:maxLength value="100"/>
<xs:minLength value="1"/>
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
<!-- 4. 订单状态枚举(推荐!) -->
<xs:simpleType name="OrderStatus">
<xs:restriction base="xs:string">
<xs:enumeration value="pending"/>
<xs:enumeration value="paid"/>
<xs:enumeration value="shipped"/>
<xs:enumeration value="completed"/>
<xs:enumeration value="canceled"/>
</xs:restriction>
</xs:simpleType>
<!-- 5. 图片 base64 图片(限制 5MB) -->
<xs:element name="photo">
<xs:simpleType>
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="5242880"/> <!-- 5MB × 4/3 ≈ 6.8M chars -->
</xs:restriction>
</xs:simpleType>
</xs:element>
一句话总结(永远不会错)
| 你想表达的意思 | 直接写这个类型 |
|---|---|
| 普通文本、描述、富文本 | xs:string |
| 名字、标题、关键词 | xs:token |
| 需要严格校验格式 | xs:string + pattern |
| 枚举值 | xs:string + enumeration |
| 文件上传 | xs:base64Binary |
| URL 地址 | xs:anyURI |
| XML 中的 id | xs:ID |
记住了:90% 的字符串字段都用 xs:token 就完事了!
要我直接给你一个「用户注册」「商品信息」「订单详情」这三套最标准的字符串字段 XSD 模板吗?秒发!