基于 Org 节点网络的属性探究
注:这是一篇立足于Org所指属性的,旨在探究的、实验性的记录。
概述
Org mode 为我们提供了一种以树型结构组织文本、数据的方式。基于树型结构,子节点的属性可以累加到父节点,并逐级上升。其应用之一即 Org mode 内置的 clock table 特性——以一种树型累加的方式统计任务耗时。但有时,同一个(子)节点在不同视角/视图/场景下,可能/可以(在逻辑上)同时属于不同的结构。
举个例子,假设有几个任务节点:编码a, 测试a, 分析b, 编码b. 这些任务节点上都带有 Org clock 数据(一种节点属性)。对于这些任务节点,我们有两种分析时间投入的角度:以项目为视角;以日期为视角。
以项目为视角:
* 分析
#+BEGIN: clocktable :maxlevel 3
#+CAPTION: Clock summary at [2025-08-27 Wed 08:50]
| Headline | Time | | |
|--------------+--------+------+------|
| *Total time* | *9:30* | | |
|--------------+--------+------+------|
| 项目 | 9:30 | | |
| \_ 项目A | | 6:00 | |
| \_ 编码a | | | 2:00 |
| \_ 测试a | | | 4:00 |
| \_ 项目B | | 3:30 | |
| \_ 分析b | | | 1:25 |
| \_ 编码b | | | 2:05 |
#+END:
* 项目
** 项目A
*** 编码a
:LOGBOOK:
CLOCK: [2025-08-18 Mon 09:30]--[2025-08-18 Mon 11:30] => 2:00
:END:
*** 测试a
:LOGBOOK:
CLOCK: [2025-08-20 Wed 14:00]--[2025-08-20 Wed 18:00] => 4:00
:END:
** 项目B
*** 分析b
:LOGBOOK:
CLOCK: [2025-08-22 Fri 10:25]--[2025-08-22 Fri 11:50] => 1:25
:END:
*** 编码b
:LOGBOOK:
CLOCK: [2025-08-25 Mon 09:45]--[2025-08-25 Mon 11:50] => 2:05
:END:
以日期为视角:
* 分析
#+BEGIN: clocktable :maxlevel 3
#+CAPTION: Clock summary at [2025-08-27 Wed 08:53]
| Headline | Time | | |
|--------------+--------+------+------|
| *Total time* | *9:30* | | |
|--------------+--------+------+------|
| 日期 | 9:30 | | |
| \_ 33周投入 | | 7:25 | |
| \_ 编码a | | | 2:00 |
| \_ 测试a | | | 4:00 |
| \_ 分析b | | | 1:25 |
| \_ 34周投入 | | 2:05 | |
| \_ 编码b | | | 2:05 |
#+END:
* 日期
** 33周投入
*** 编码a
:LOGBOOK:
CLOCK: [2025-08-18 Mon 09:30]--[2025-08-18 Mon 11:30] => 2:00
:END:
*** 测试a
:LOGBOOK:
CLOCK: [2025-08-20 Wed 14:00]--[2025-08-20 Wed 18:00] => 4:00
:END:
*** 分析b
:LOGBOOK:
CLOCK: [2025-08-22 Fri 10:25]--[2025-08-22 Fri 11:50] => 1:25
:END:
** 34周投入
*** 编码b
:LOGBOOK:
CLOCK: [2025-08-25 Mon 09:45]--[2025-08-25 Mon 11:50] => 2:05
:END:
两种视角分别对应两种树型结构:
(项目 (项目A (编码a 测试a)) (项目B (分析b 编码b)))
(日期 (33周投入 (编码a 测试a 分析b)) (34周投入 (编码b)))
问题:由于两种视角共同依赖相同的任务节点,如果只使用 Org mode 内置的特性,为实现这两种不同的分析视角,我们将不得不把任务节点分别拷贝至各类视角的节点中。