XSD 里那些不属于「字符串」「数值」「日期」三大类的类型,通常被称为「杂项类型」,但在真实项目里很多超级好用、甚至是必备的。下面直接给你一份最精华、最实用的 XSD 杂项类型速查表 + 推荐写法,看完这张表你就彻底无敌了。
| 类型名称 | 含义 & 典型用途 | 推荐指数 | 经典实例写法 | 真实项目场景举例 |
|---|---|---|---|---|
| xs:boolean | 真/假 | 5 stars | true / false / 1 / 0 | 开关、是否启用、是否删除 |
| xs:base64Binary | Base64 编码的二进制文件 | 5 stars | “SGVsbG8=” | 图片、文件上传、证书 |
| xs:hexBinary | 十六进制二进制 | 2 stars | “48656C6C6F” | 极少用(MD5/SHA1 可考虑) |
| xs:anyURI | URL、路径、URN | 5 stars | “https://example.com/a.jpg”、”../img/” | 图片地址、跳转链接、静态资源 |
| xs:QName | 带命名空间的前缀名称 | 3 stars | “po:purchaseOrder” | WebService、动态类型反射(一般不用) |
| xs:NOTATION | 几乎没人用 | 0 stars | — | 忽略 |
| xs:normalizedString | 替换换行/制表符为空格(不建议) | 1 star | — | 永远用 xs:token 代替 |
| xs:token | 去首尾空格 + 压缩连续空格(字符串之王) | 5 stars | ” 张三 \n 李四 ” → “张三 李四” | 所有名字、标题、关键词、搜索词 |
| xs:language | RFC 语言代码 | 4 stars | “zh-CN”、”en-US”、”fr” | 多语言切换、i18n |
| xs:ID | 文档内唯一标识 | 5 stars | “user_123” | XML 内联 ID(类似 HTML id) |
| xs:IDREF / xs:IDREFS | 引用 ID(多个用空格分隔) | 4 stars | “user_123” / “user1 user2” | 实现父子关系、关联引用 |
| xs:NMTOKEN | 不能有空格的 token(类似枚举值) | 3 stars | “active”、”pending” | 状态码、类型标识 |
| xs:NMTOKENS | 多个 NMTOKEN | 3 stars | “read write delete” | 权限列表 |
| xs:byte | -128 ~ 127 | 1 star | 极少用 | 用 xs:int 代替 |
| xs:unsignedInt | 0 ~ 42 亿 | 3 stars | 4294967295 | 点击量、播放量(够用就行) |
| xs:unsignedLong | 0 ~ 1.8×10¹⁹ | 4 stars | 18446744073709551615 | 超大计数器、雪花ID低64位 |
真实项目永远只用这 8 个杂项类型就打遍天下
| 业务场景 | 永远写这个类型 | 推荐额外限制(直接复制) |
|---|---|---|
| 是否启用、是否删除 | xs:boolean | 默认 default=”false” |
| 图片/附件上传 | xs:base64Binary | + maxLength 限制大小(5MB ≈ 7000000 字符) |
| 商品图、头像、跳转链接 | xs:anyURI | + pattern 强制 https 或相对路径 |
| 所有名字、标题、关键词 | xs:token | + maxLength=”100″ |
| 语言切换 | xs:language | — |
| XML 内唯一 ID | xs:ID | — |
| 关联父级/关联用户 | xs:IDREF | — |
| 权限列表、标签 | xs:NMTOKENS 或 xs:token + pattern | “read write delete” |
实战最常用写法(直接复制进项目)
<!-- 1. 是否启用(最标准) -->
<xs:element name="enabled" type="xs:boolean" default="true"/>
<!-- 2. 图片 base64(限制 5MB) -->
<xs:element name="photo">
<xs:simpleType>
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="7000000"/> <!-- ≈5MB -->
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- 3. 外链图片地址(强制 https) -->
<xs:simpleType name="HttpsUrl">
<xs:restriction base="xs:anyURI">
<xs:pattern value="https://.*"/>
</xs:restriction>
</xs:simpleType>
<!-- 4. 所有标题、用户名、搜索词(永远用 token) -->
<xs:simpleType name="Title">
<xs:restriction base="xs:token">
<xs:minLength value="1"/>
<xs:maxLength value="200"/>
</xs:restriction>
</xs:simpleType>
<!-- 5. 多语言代码 -->
<xs:element name="lang" type="xs:language" default="zh-CN"/>
<!-- 6. 权限列表 -->
<xs:element name="permissions" type="xs:NMTOKENS"/>
<!-- 示例:<permissions>read write delete</permissions> -->
终极记忆口诀(贴在显示器上)
| 你想表达什么 | 永远只写这个类型 |
|---|---|
| 是/否、开关 | xs:boolean |
| 图片、文件上传 | xs:base64Binary |
| 网址、图片链接 | xs:anyURI |
| 名字、标题、关键词 | xs:token |
| 语言 zh-CN / en-US | xs:language |
| XML 内唯一 ID | xs:ID |
| 引用另一个元素的 ID | xs:IDREF / xs:IDREFS |
| 其他全部忽略 | — |
记住:杂项类型里只有 boolean、base64Binary、anyURI、token、language、ID/IDREF 是你这辈子会真正用到的,其余全部可以当不存在!
需要我再甩你一套「用户管理」「商品上传」「权限系统」三套完整的杂项字段 XSD 模板吗?秒发!