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