Quantity Node 是表达物理量、数值、货币、字面量等的可变长度 Node 类型。
| 特性 | 说明 |
|---|
| 可变长度 | 4~N字(取决于值的大小) |
| 单位明示 | SI 基本/导出 + 非SI(货币、时间等) |
| 比例支持 | 用10的幂次表达前缀 |
| 特殊字面量 | 时间(timestamp)、字符串(UTF-16)、颜色(RGBA) |
| TID 在末尾 | Node 特性(与实体一致) |
用途: 三元组边的 Object、Verb Edge 的参与者、事件6的参与者、实体的名称/标签、时间表达等。
数据包结构
1st WORD (16位)
┌────────────────────┬────────────────────┐
│ Prefix │ Unit │
│ 10bit │ 6bit │
└────────────────────┴────────────────────┘
2nd WORD (16位)
┌──────┬──────┬──────┬────────────────────┐
│ Sign │ Size │ Type │ Scale │
│ 1bit │ 2bit │ 1bit │ 4bit │
├──────┴──────┴──────┴────────────────────┤
│ Reserved (8bit) │
└─────────────────────────────────────────┘
3rd+ WORD: Value (可变, 取决于Size为1/2/4字)
Last WORD (16位)
┌─────────────────────────────────────────┐
│ TID │
│ 16bit │
└─────────────────────────────────────────┘
| 字段 | 位 | 大小 | 说明 |
|---|
| Prefix | 1-10 | 10 | 0001 000 010 (Quantity Node) |
| Unit | 11-16 | 6 | 64种单位代码 |
| Sign | 17 | 1 | 0=正数, 1=负数 |
| Size | 18-19 | 2 | Value 字数 |
| Type | 20 | 1 | 0=整数, 1=浮点数 |
| Scale | 21-24 | 4 | 10的幂次(偏移8) |
| Reserved | 25-32 | 8 | 保留(货币时为货币代码) |
按Size的数据包大小
| Size | Value 字数 | 总字数 |
|---|
| 00 | 1 (16位) | 4 |
| 01 | 2 (32位) | 5 |
| 10 | 4 (64位) | 7 |
Unit 代码(6位 = 64种)
SI 基本单位(0x00~0x06)
| 代码 | 单位 | 符号 | 物理量 |
|---|
| 0x00 | meter | m | 长度 |
| 0x01 | kilogram | kg | 质量 |
| 0x02 | second | s | 时间 |
| 0x03 | ampere | A | 电流 |
| 0x04 | kelvin | K | 温度 |
| 0x05 | mole | mol | 物质的量 |
| 0x06 | candela | cd | 发光强度 |
SI 导出单位(0x07~0x1C)
| 代码 | 单位 | 符号 | 物理量 |
|---|
| 0x07 | hertz | Hz | 频率 |
| 0x08 | newton | N | 力 |
| 0x09 | pascal | Pa | 压力 |
| 0x0A | joule | J | 能量 |
| 0x0B | watt | W | 功率 |
| 0x0C | coulomb | C | 电荷 |
| 0x0D | volt | V | 电压 |
| 0x0E | farad | F | 电容 |
| 0x0F | ohm | Ω | 电阻 |
| 0x10 | siemens | S | 电导率 |
| 0x11 | weber | Wb | 磁通量 |
| 0x12 | tesla | T | 磁场 |
| 0x13 | henry | H | 电感 |
| 0x14 | celsius | °C | 温度 |
| 0x15 | lumen | lm | 光通量 |
| 0x16 | lux | lx | 照度 |
| 0x17 | becquerel | Bq | 放射性 |
| 0x18 | gray | Gy | 吸收剂量 |
| 0x19 | sievert | Sv | 剂量当量 |
| 0x1A | katal | kat | 催化活性 |
| 0x1B | radian | rad | 平面角 |
| 0x1C | steradian | sr | 立体角 |
非SI单位(0x20~0x2F)
| 代码 | 单位 | 用途 |
|---|
| 0x20 | CURRENCY | 货币(货币代码扩展) |
| 0x21 | percent | %(比例) |
| 0x22 | degree | °(角度) |
| 0x23~0x28 | minute~year | 时间单位 |
| 0x29 | bit | 信息量 |
| 0x2A | byte | 信息量 |
| 0x2B~0x2F | COUNT~INDEX | 无单位数值 |
特殊字面量(0x30~0x3F)
| 代码 | 类型 | Payload | 用途 |
|---|
| 0x30 | TIMESTAMP_SEC | 2/4字 | Unix timestamp(秒) |
| 0x31 | TIMESTAMP_MS | 4字 | Unix timestamp(毫秒) |
| 0x32 | UTF16 | 2+N字 | UTF-16 字符串 |
| 0x33 | RGBA | 2字 | 颜色(32位) |
Scale(4位)
10的幂次。应用偏移8。计算: 实际值 = Value × 10^(Scale - 8)
| 代码 | 值 | 前缀 | 代码 | 值 | 前缀 |
|---|
| 0000 | 10⁻⁸ | - | 1000 | 10⁰(基准) | - |
| 0010 | 10⁻⁶ | μ | 1001 | 10¹ | da |
| 0101 | 10⁻³ | m | 1011 | 10³ | k |
| 0110 | 10⁻² | c | 1110 | 10⁶ | M |
货币扩展(Unit = 0x20)
当为货币(CURRENCY)时,Reserved 8位用作货币代码。
| 代码 | 货币 | ISO | 代码 | 货币 | ISO |
|---|
| 0x00 | 美元 | USD | 0x05 | 韩元 | KRW |
| 0x01 | 欧元 | EUR | 0x06 | 瑞士法郎 | CHF |
| 0x02 | 日元 | JPY | 0x07 | 澳元 | AUD |
| 0x03 | 英镑 | GBP | 0x08 | 加元 | CAD |
| 0x04 | 人民币 | CNY | 0x80 | Bitcoin | BTC |
示例
“100kg” → 4字
1st: [Prefix] + [0x01(kg)]
2nd: +, 1字, int, ×1 → 0x0800
3rd: 0x0064 (100)
4th: TID
解释: +100 × 10⁰ kg = 100kg
“$2,500,000” → 4字(利用比例)
1st: [Prefix] + [0x20(CURRENCY)]
2nd: +, 1字, int, ×10³, USD → 0x0B00
3rd: 0x09C4 (2500)
4th: TID
解释: +2500 × 10³ USD = $2,500,000