要定义内容的格式规范(如字段是否可选、是否多选、是否依赖条件),可以借鉴 ABNF(扩充巴科斯范式)、正则表达式、命令行语法符号 或 JSON Schema 中的常见符号。以下是一套简洁、通用的符号表达方法,覆盖你提到的几种情况:
1. 可选(Optional)
表示该内容可以出现 0 次或 1 次。
符号:? 或 [ ](方括号包裹)
示例:
[年龄]→ 年龄字段可选,可有可无。颜色?→ 颜色字段可选。
2. 多选(Multiple Choice / Repeatable)
表示该内容可以出现 0 次、1 次或多次,或从多个固定选项中选取。
2.1 重复出现(0次或多次)
符号:*(星号)或 ...
示例:
标签*→ 标签可以出现 0 次、1 次或多次(如多个标签)。[附件...]→ 附件可选且可重复。
2.2 至少出现一次(1次或多次)
符号:+
示例:
成员+→ 至少有一个成员。
2.3 从有限选项中多选(枚举)
符号:{ } 内用 | 分隔,或使用 (选项1|选项2|...)
示例:
{红|绿|蓝}→ 必须从红、绿、蓝中选一个(单选时也可)。[爱好] = (游泳|跑步|阅读)*→ 爱好可选且可多选,允许重复。
3. 条件选择(Conditional)
表示“当某个条件满足时,才需要选择/填写该内容”。
符号:条件 ? 内容 : 空 或 [内容] if 条件 或 内容 → 条件
示例:
(已婚 ? 配偶姓名 : 无)→ 如果已婚,则需填写配偶姓名,否则无。[出生日期] if 年龄<18→ 当年龄小于18岁时,出生日期字段可选(或必填,依约定)。if(国家="US") then 邮编格式=五位数字→ 条件触发特定格式。
更紧凑的写法(类似三目运算符):
[紧急联系人] when 有家属→ 当有家属时,紧急联系人为可选/必填。
4. 组合示例(完整格式规范定义)
假设你要定义一份“个人资料”格式规范:
姓名 = <必填字符串> // 尖括号表示必填,类型说明
年龄 = [正整数] // 可选
联系方式 = {手机|邮箱|微信}+ // 至少选一个,可多选
职业 = {学生|在职|退休} // 单选(枚举)
配偶姓名 = (已婚 ? 字符串 : 无) // 条件依赖
爱好 = 字符串* // 零或多个字符串
备注 = [文本] // 可选5. 与常用标准的关系
| 你的需求 | 类似标准中的表示法 | 适用场景 |
|---|---|---|
| 可选 | ?(正则/JSON Schema)<br>[ ](命令行) | 表单、配置文件、API参数 |
| 多选 | *、+(正则)<br>{ }(枚举)<br>[]*(JSON Schema) | 列表、枚举字段 |
| 条件选择 | if/then/else(JSON Schema)<br>条件 ? 值1 : 值2(伪代码) | 依赖字段、动态表单 |
如果你需要正式文档(如 API 规范、数据交换格式),建议直接使用 JSON Schema 或 XML Schema,它们内置了 optional、multiple(minItems/maxItems)、if-then 等关键词,比纯符号更严谨。
6. 简单记忆口诀
- 方括可省略:
[ ]表示可有可无。 - 星加任意选:
*零或多,+一或多。 - 竖线是枚举:
A|B|C从几个中选。 - 问号有条件:
条件?内容或if(条件) then 内容。
你可以根据团队习惯选择其中一种风格,保持一致性即可。