@BOK MaterialX

DataView Github

数据注释

Dataview首先是一个数据索引,因此它支持将元数据添加到您的知识库中的相对丰富的方式。Dataview 跟踪_降价页面_和_降价任务_级别的信息,其中每个页面/任务可以具有与其关联的任意数量的复杂(数字、对象、列表)字段。每个_字段_都是具有特定类型的命名值(如“数字”或“文本”)。


页面

您可以通过三种不同的方式将字段添加到降价页面:

  1. Frontmatter:Frontmatter 是一个常见的 Markdown 扩展,它允许将 YAML 元数据添加到页面顶部。所有 YAML 字段都将作为 Dataview 字段提供:

    ---
    alias: "document"
    last-reviewed: 2021-08-17
    thoughts:
      rating: 8
      reviewable: false
    ---
    
  2. 内联字段:对于那些想要更自然的注释的人,Dataview 支持“内联”字段,它提供了一种简单的Key:: Value语法,您可以直接将其嵌入到文件中:

    # Markdown Page
    
    Basic Field:: Value
    **Bold Field**:: Nice!
    

    如果你想在句子中嵌入元数据,或者在同一行中嵌入多个字段,你可以使用括号语法:

    I would rate this a [rating:: 9]! It was [mood:: acceptable].
    

    还有另一种括号语法,它在功能上类似于括号,但在阅读器模式下呈现时隐藏了键:

    This will not show the (very long key:: key).
    
  3. 隐式:Dataview 自动使用大量元数据注释页面,例如文件创建file.cday日期 ( )、任何关联日期 ( file.day)、文件中的链接 ( file.outlinks)、标签 ( file.tags) 等。

一个简单的 Markdown 页面,其中包含两种用户定义的添加元数据的方式:

---
duration: 4 hours
reviewed: false
---
# Movie X

**Thoughts**:: It was decent.
**Rating**:: 6

[mood:: okay] | [length:: 2 hours]

隐式字段

Dataview 会自动为每个页面添加大量元数据:

  • file.name:文件标题(字符串)。
  • file.folder:该文件所属文件夹的路径。
  • file.path:完整的文件路径(字符串)。
  • file.ext: 文件类型的扩展名;通常是“.md”(一个字符串)。
  • file.link:文件的链接(链接)。
  • file.size:文件的大小(以字节为单位)(一个数字)。
  • file.ctime:文件的创建日期(日期+时间)。
  • file.cday:文件的创建日期(只是一个日期)。
  • file.mtime:文件最后修改的日期(日期+时间)。
  • file.mday:文件最后修改的日期(只是一个日期)。
  • file.tags:笔记中所有唯一标签的数组。子标签按每个级别细分,因此#Tag/1/A将存储在数组中[#Tag, #Tag/1, #Tag/1/A]
  • file.etags:注释中所有显式标签的数组;不像file.tags, 不包括子标签。
  • file.inlinks:指向此文件的所有传入链接的数组。
  • file.outlinks:此文件中所有传出链接的数组。
  • file.aliases:笔记的所有别名的数组。
  • file.tasks``- [ ] blah blah blah:此文件中所有任务(即,)的数组。
  • file.lists:文件中所有列表元素的数组(包括任务);这些元素是有效的任务,可以在任务视图中呈现。
  • file.frontmatter:包含所有frontmatter的原始值;主要用于检查原始 frontmatter 值或动态列出 frontmatter 键。

如果文件在其标题(表单yyyy-mm-ddyyyymmdd)中有日期,或者有一个Date字段/内联字段,它还具有以下属性:

  • file.day:与文件关联的明确日期。

如果您使用 Obsidian 默认的“加星标文件”插件,还可以使用以下元数据:

  • file.starred:如果此文件已被“星星”黑曜石插件加注星标。

任务

您还可以使用内联字段语法使用元数据注释您的_任务_(即表单的行):- [ ] blah blah blah

- [ ] Hello, this is some [metadata:: value]!
- [X] I finished this on [completion::2021-08-15].

字段速记

为了支持“常见用例”,Dataview 了解一些常见数据的简写,您可能希望使用以下命令注释任务:

句法

  • 截止日期:🗓️YYYY-MM-DD
  • 完成日期:✅YYYY-MM-DD
  • 创建日期:➕YYYY-MM-DD

例子

  • 星期六做这个🗓️2021-08-29。
  • 上周六完成✅2021-08-22。
  • 我在 ➕1990-06-14 上做的。

请注意,如果您不喜欢表情符号,您仍然可以对这些字段进行文本注释([due:: ][created:: ][completion:: ])。

隐式字段

与页面一样,Dataview 为每个任务添加了许多隐式字段:

  • 任务从其父页面继承_所有字段_rating- 因此,如果您的页面中有一个字段,您也可以在您的任务中访问它。
  • status:此任务的完成状态,由[ ]括号内的字符确定。通常一个用于未完成任务的空间" "和一个用于完成任务的 X "X",但允许支持替代任务状态的插件。
  • checked: 是否以任何方式检查了此任务(即,它的状态不是不完整/为空)。
  • completed:这个_具体的_任务是否已经完成;这不考虑任何子任务的完成/未完成。如果任务已被标记为“X”,则该任务被明确视为“已完成”。
  • fullyCompleted:此任务及其所有子任务是否已完成。
  • text: 这个任务的文本。
  • line:此任务显示的行。
  • lineCount:此任务占用的 Markdown 行数。
  • path: The full path of the file this task is in.
  • section: A link to the section this task is contained in.
  • tags: Any tags inside of the text task.
  • outlinks: Any links defined in this task.
  • link: A link to the closest linkable block near this task; useful for making links which go to the task.
  • children: Any subtasks or sublists of this task.
  • task: If true, this is a task; otherwise, it is a regular list element.
  • completion: The date a task was completed; set by [completion:: ...] or shorthand syntax.
  • due: The date a task is due, if it has one. Set by [due:: ...] or shorthand syntax.
  • created: The date a task was created; set by [created:: ...] or shorthand syntax.
  • annotated: True if the task has any custom annotations, and false otherwise.
  • parent: The line number of the task above this task, if present; will be null if this is a root-level task.
  • blockId: The block ID of this task / list element, if one has been defined with the ^blockId syntax; otherwise null.

Field Types

All fields in dataview have a type, which determines how dataview will render, sort, and operate on that field. Dataview understands several distinct field types to cover common use cases:

  • Text: The default catch-all. If a field doesn't match a more specific type, it is just plain text.

    Example:: This is some normal text.
    
  • Number: Numbers like '6' and '3.6'.

    Example:: 6
    Example:: 2.4
    Example:: -80
    
  • Boolean: true/false, as the programming concept.

    Example:: true
    Example:: false
    
  • Date: ISO8601 dates of the general form YYYY-MM[-DDTHH:mm:ss.nnn+ZZ]. Everything after the month is optional.

    Example:: 2021-04-18
    Example:: 2021-04-18T04:19:35.000
    Example:: 2021-04-18T04:19:35.000+06:30
    
  • Duration: Durations of the form <time> <unit>, like 6 hours or 4 minutes. Common english abbreviations like 6hrs or 2m are accepted. You can specify multiple units using an optional comma separator: 6 hours, 4 minutes or 6hr4min.

    Example:: 7 hours
    Example:: 4min
    Example:: 16 days
    Example:: 9 years, 8 months, 4 days, 16 hours, 2 minutes
    Example:: 9 yrs 8 min
    
  • Link: Plain Obsidian links like [[Page]] or [[Page|Page Display]].

    • If you reference a link in frontmatter, you need to quote it, as so: key: "[[Link]]". This is default Obsidian-supported behavior.

      Example:: [[A Page]]
      Example:: [[Some Other Page|Render Text]]
      
  • List: Lists of other dataview fields. In YAML, these are defined as normal YAML lists; for inline fields, they are just comma-separated lists.

    Example:: 1, 2, 3
    Example:: "yes", "or", "no"
    
  • Object: A map of name to dataview field. These can only be defined in YAML frontmatter, using the normal YAML object syntax:

    field:
      value1: 1
      value2: 2
      ...