前端知识管理数据分析【免费下载链接】obsidian-dataviewA data index and query language over Markdown files, for https://obsidian.md/.项目地址https://gitcode.com/gh_mirrors/ob/obsidian-dataview点击查看免费下载在 Obsidian 中使用 Dataview 管理任务时annotated隐式字段可以快速筛选出「带元数据注释的任务」而group by子句则能把任务按任意字段分组呈现。本文以仓库内 test-vault 中的 Annotated Tasks.md 为骨架结合官方文档与源码实现讲解如何用task where annotated与task group by p两类查询驾驭任务元数据。一、关联文档是什么一个可运行的查询示例库Annotated Tasks.md 是仓库test-vault/tasks/目录下的一个真实可运行的示例笔记文件内容本身只有两段 Dataview 查询task where annotated以及分组版本task where p group by p它演示了 Dataview 任务查询的两个核心能力利用annotated隐式字段过滤只列出「文本中包含元数据字段」的任务利用group by对任务分组按某个字段示例中的p把任务归组展示。围绕这两段查询官方文档 Metadata on Tasks and Lists 提供了完整的字段语义说明源码则给出了底层实现依据。以下逐层展开。二、annotated是什么任务级元数据的布尔标志官方定义根据文档 Implicit Fields 中的字段表annotated的定义是字段名数据类型说明annotatedBoolean任务文本中包含任何元数据字段时为true否则为false。也就是说一个任务只要在文本里出现了任意一处内联字段inline field它的annotated值即为true完全没有任何字段注释的普通任务则为false。源码级验证在 src/data-model/markdown.ts 的ListItem.serialize方法中annotated的实现就是一行判断annotated: this.fields.size 0,即该列表项任务或普通列表项解析出的fields 集合Map大小大于 0时annotated为真。这里的fields来自任务行内所有内联字段的解析结果见this.fields this.fields || new Map()位于 src/data-model/markdown.ts。对应的序列化接口定义在 src/data-model/serialized/markdown.tsannotated?: boolean;由此可以确认annotated与任务是否勾选完成无关只与是否存在字段注释有关。一个未勾选[ ]但带有[due:: 2021-08-29]注释的任务annotated同样为true。三、如何让任务变成annotated内联字段与 Field Shorthands任务级别的元数据使用与页面相同的内联字段语法参见 add-metadata.md。在任务行内书写[key:: value]即可绑定字段到该任务- [ ] Hello, this is some [metadata:: value]! - [X] I finished this on [completion:: 2021-08-15].上面两个任务都包含字段因此annotated均为true。Emoji 简写Field Shorthands除了标准内联字段Dataview 还支持 Tasks 插件风格的 Emoji 日期简写。其特点是省略内联字段的方括号语法无需写[️:: 2021-08-29]并映射为文本型字段名字段名简写语法due️YYYY-MM-DDcompletion✅YYYY-MM-DDcreated➕YYYY-MM-DDstartYYYY-MM-DDscheduled⏳YYYY-MM-DD示例- [ ] Due this Saturday ️2021-08-29 - [x] Completed last Saturday ✅2021-08-22 - [ ] I made this on ➕1990-06-14 - [ ] Task I can start this weekend 2021-08-29 - [x] Task I finished ahead of schedule ⏳2021-08-29 ✅2021-08-22需要说明的是当前版本仅支持上述日期类简写优先级与重复recurrence简写不受支持。由于 Emoji 简写在数据层面也会产生字段这类任务同样属于annotated true——因此task where annotated能同时捕获「内联字段注释」与「Emoji 日期简写」两类任务。四、task where annotated查询详解基本用法回到关联文档的第一段查询task where annotated在 TASK 查询中任务本身就是顶层数据因此隐式字段可以不带前缀直接使用参见文档 Accessing Implicit Fields in Queries。该查询返回所有「包含任意元数据字段」的任务。若在非 TASK 查询中访问任务字段则需要通过file.lists/file.tasks间接访问并借助列表函数如any逐项判断LIST WHERE any(file.tasks, (t) t.annotated)该写法会返回所有「含有带注释任务」的笔记链接。结合其它任务隐式字段的组合筛选annotated常与下列任务隐式字段组合使用形成更精细的筛选条件字段名类型含义statusText[ ]括号内的状态字符一般为空格未完成或x完成也支持自定义状态插件checkedBoolean状态字符非空即括号内不是空格不一定等于xcompletedBoolean本任务是否被标记为x完成不考虑子任务自定义状态如[-]时checked为真而completed为假fullyCompletedBoolean本任务及其所有子任务是否全部完成textText任务纯文本含字段注释line/lineCountNumber任务所在行号 / 占用的 Markdown 行数pathText任务所在文件的完整路径等价于页面的file.pathsectionLink任务所在章节的链接tagsList任务文本中的标签outlinksList任务中定义的链接linkLink任务附近最近可链接块的链接childrenList任务的子任务 / 子列表taskBoolean是否为任务否则是普通列表项annotatedBoolean是否含元数据字段parentNumber父级任务的所在行号无则为nullblockIdText使用^blockId定义的块 ID无则为null例如筛选「带注释且未完成」的任务task where annotated and !completed任务属性继承页面字段向上流动一个容易被忽略的事实是任务会继承其所在页面的全部字段文档 Implicit Fields 中的 info 提示。因此若页面有rating字段在 TASK 查询中同样可以在任务上访问它。不过要注意annotated判断的是任务自身文本中的字段this.fields.size 0页面级字段不会让任务的annotated变为true。五、group by分组查询详解关联文档中的第二段查询task where p group by p在 test-vault 中p是示例笔记里自定义的字段名占位符真实使用时替换为你的实际字段即可例如按due分组task where due group by due分组查询的语义group by是 Dataview 查询的顶层子句与where、sort等并列其效果是把结果按指定字段的值聚合为组。查询类型由首行关键字决定——TASK、TABLE、LIST、CALENDAR四选一参见 src/query/parse.ts 对TABLE|LIST|TASK|CALENDAR的解析以及 src/query/query.ts 中的QueryType定义。task关键字不区分大小写因此关联文档中用小写task书写同样有效。分组后每组通常呈现为「组值 组内任务」的层级结构适合按日期、状态、负责人等维度组织任务视图。参考同目录下的 Grouped Sorted Tasks.md还可以在分组前先排序保证组内顺序稳定task where p sort p asc group by p与排序、筛选的组合test-vault 中 Sorted Tasks.md实际文件为 Sorted Tasks.md展示了不含分组的排序写法可作为对照task where p sort p asc将annotated过滤与group by结合即可得到「只统计带元数据注释的任务并按字段分组」的查询task where annotated and due sort due asc group by due六、annotated字段的典型使用场景审计未标注任务列出所有不含任何元数据字段的任务检查是否有遗漏的日期、负责人等注释task where !annotated统计带注释任务配合GROUP BY或聚合函数如length统计库中带元数据任务的数量与分布。联动 Emoji 简写由于简写会映射为字段task where annotated也能覆盖「使用 Tasks 风格 Emoji 日期」的笔记实现两种注释风格的统一检索。七、从源码理解任务字段的生命周期结合 src/data-import/markdown-file.ts 的解析逻辑completed: rawElement.task X || rawElement.task x与 src/data-import/inline-field.ts 对completed/due/done等特殊 Emoji 字段的解析可以看到完整链路Markdown 文件被解析为列表项ListItem任务状态字符写入task.completed等属性行内字段写入fieldsMapserialize时根据this.fields.size 0生成annotated布尔值src/data-model/markdown.ts查询引擎按where/group by子句对序列化后的任务对象求值并渲染。因此annotated的判定完全取决于解析阶段字段收集的完备性只要任务行存在任意内联字段或 Emoji 日期简写fields.size即大于 0。这也解释了为何annotated与勾选状态completed相互独立——它们是两个维度上的布尔标志。八、小结annotated是任务级隐式布尔字段语义为「任务文本是否含元数据字段」源码实现为this.fields.size 0src/data-model/markdown.ts可与completed、checked、due等字段自由组合筛选。group by可按任意字段对 TASK 查询结果分组与where、sort组合后可以构建「带注释任务」的维度化视图。关联文档 Annotated Tasks.md 是一个可直接放入自己 Vault 运行的示例完整的任务字段语义可查阅 metadata-tasks.md内联字段语法见 add-metadata.md查询结构说明见 query-types.md 与 structure.md。将task where annotated与group by结合使用你可以轻松从任意规模的 Markdown 任务库中提炼出「已标注元数据的任务」并按维度聚合让任务管理真正数据化。赞分享前端知识管理数据分析【免费下载链接】obsidian-dataviewA data index and query language over Markdown files, for https://obsidian.md/.项目地址https://gitcode.com/gh_mirrors/ob/obsidian-dataview点击查看免费下载相关推荐Obsidian Dataview 查询语言实战示例详解从 DQL 语法到源码级原理Obsidian Dataview 查询语言实战示例详解从 DQL 语法到源码级原理 本文围绕 Dataview 官方示例文档中的 5 个经典 DQLDat前端知识管理数据分析Obsidian Dataview查询示例大全100实用查询代码片段Obsidian Dataview查询示例大全100实用查询代码片段 一、基础查询入门 1.1 核心查询类型概览 Obsidian Dataview提供四种前端知识管理数据分析Wagtail 3.0.1 版本全解析WAGTAILADMIN_BASE_URL 新警告与 8 项关键修复Wagtail 3.0.1 版本全解析WAGTAILADMIN_BASE_URL 新警告与 8 项关键修复 本文基于仓库内 docs/releases/3.0前端知识管理数据分析上一篇30行代码实现文本到图像的魔术imagen-pytorch中T5文本嵌入核心技术解析下一篇Screenshot-to-code代码架构评审工具自动化架构检查创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
