TootlikkusObsidian

Obsidian Bases

Loob ja muudab Obsidian Basesi faile vaadete, filtrite ja valemitega.

Kkepano (Steph Ango)·Tootlikkus·MIT

Kogu oskus — vaikeversiooni hoitakse GitHubis; sinu muudatused jäävad sinu enda klooni.

Kasuta seda oskustLaadi alla .zip
Kuidas see töötab?
  • ChatGPT avab uue vestluse, kuhu oskus on laaditud. Kui see on lingi jaoks liiga pikk, kopeeritakse see lõikelauale — lihtsalt kleebi.
  • Claude töötab samamoodi. Püsivaks paigaldamiseks laadi alla .zip ja lae see üles: Claude → Settings → Capabilities → Skills (Pro/Team/Enterprise).
  • Kopeeri oskus kopeerib oskuse, et saaksid selle kleepida mis tahes assistenti, sh Grok.

Obsidian Bases oskus

Töövoog

  1. Loo fail: Loo vaulti .base fail kehtiva YAML-sisuga
  2. Määra ulatus: Lisa filters, et valida, millised märkmed ilmuvad (sildi, kausta, omaduse või kuupäeva järgi)
  3. Lisa valemid (valikuline): Määra arvutatud omadused jaotises formulas
  4. Seadista vaated: Lisa üks või mitu vaadet (table, cards, list või map) koos order-iga, mis määrab, milliseid omadusi kuvada
  5. Valideeri: Kontrolli, et fail on kehtiv YAML ilma süntaksivigadeta. Kontrolli, et kõik viidatud omadused ja valemid on olemas. Tavalised probleemid: tsiteerimata stringid, mis sisaldavad YAML-i erimärke, mitteklapivad jutumärgid valemites, viitamine formula.X-ile ilma X-i määratlemata jaotises formulas
  6. Testi Obsidianis: Ava .base fail Obsidianis, et kinnitada, et vaade renderdub õigesti. Kui kuvatakse YAML-viga, kontrolli allpool olevaid tsiteerimisreegleid

Skeema

Base-failid kasutavad laiendit .base ja sisaldavad kehtivat YAML-i.

# Global filters apply to ALL views in the base
filters:
  # Can be a single filter string
  # OR a recursive filter object with exactly ONE key: and, or, or not
  and:
    - 'status == "active"'
    - not:
        - 'file.hasTag("archived")'

# Define formula properties that can be used across all views
formulas:
  formula_name: 'expression'

# Configure display names and settings for properties
properties:
  property_name:
    displayName: "Display Name"
  formula.formula_name:
    displayName: "Formula Display Name"
  file.ext:
    displayName: "Extension"

# Define custom summary formulas
summaries:
  custom_summary_name: 'values.mean().round(3)'

# Define one or more views
views:
  - type: table | cards | list | map
    name: "View Name"
    limit: 10                    # Optional: limit results
    groupBy:                     # Optional: group results
      property: property_name
      direction: ASC | DESC
    filters:                     # View-specific filters follow the same rules
      and:
        - 'status == "active"'
    order:                       # Properties to display in order
      - file.name
      - property_name
      - formula.formula_name
    summaries:                   # Map properties to summary formulas
      property_name: Average

Filtri süntaks

Filtrid kitsendavad tulemusi. Neid saab rakendada globaalselt või vaate kohta.

Filtri struktuur

# Single filter
filters: 'status == "done"'

# AND - all conditions must be true
filters:
  and:
    - 'status == "done"'
    - 'priority > 3'

# OR - any condition can be true
filters:
  or:
    - 'file.hasTag("book")'
    - 'file.hasTag("article")'

# NOT - exclude matching items
filters:
  not:
    - 'file.hasTag("archived")'

# Nested filters
filters:
  or:
    - file.hasTag("tag")
    - and:
        - file.hasTag("book")
        - file.hasLink("Textbook")
    - not:
        - file.hasTag("book")
        - file.inFolder("Required Reading")

Filtri operaatorid

Operaator Kirjeldus
== võrdub
!= ei võrdu
> suurem kui
< väiksem kui
>= suurem või võrdne
<= väiksem või võrdne
&& loogiline ja
\|\| loogiline või
! loogiline eitus

Omadused

Kolm omaduste tüüpi

  1. Märkme omadused — Frontmatterist: note.author või lihtsalt author
  2. Faili omadused — Faili metaandmed: file.name, file.mtime jne
  3. Valemi omadused — Arvutatud väärtused: formula.my_formula

Faili omaduste viide

Omadus Tüüp Kirjeldus
file.name String Faili nimi
file.basename String Faili nimi ilma laiendita
file.path String Täielik tee failini
file.folder String Vanemkausta tee
file.ext String Faililaiend
file.size Number Faili suurus baitides
file.ctime Date Loomise aeg
file.mtime Date Muutmise aeg
file.tags List Kõik sildid failis
file.links List Sisemised lingid failis
file.backlinks List Failid, mis sellele failile lingivad
file.embeds List Manused märkmes
file.properties Object Kõik frontmatteri omadused

Märksõna this

Valemi süntaks

Valemid arvutavad väärtusi omadustest. Määratletud jaotises formulas.

formulas:
  # Simple arithmetic
  total: "price * quantity"

  # Conditional logic
  status_icon: 'if(done, "✅", "⏳")'

  # String formatting
  formatted_price: 'if(price, price.toFixed(2) + " dollars")'

  # Date formatting
  created: 'file.ctime.format("YYYY-MM-DD")'

  # Calculate days since created (use .days for Duration)
  days_old: '(now() - file.ctime).days'

  # Calculate days until due date
  days_until_due: 'if(due_date, (date(due_date) - today()).days, "")'

Võtmefunktsioonid

Kõige sagedamini kasutatavad funktsioonid. Kõigi tüüpide (Date, String, Number, List, File, Link, Object, RegExp) täieliku viite jaoks vaata FUNCTIONS_REFERENCE.md.

Funktsioon Signatuur Kirjeldus
date() date(string): date Parseeri string kuupäevaks (YYYY-MM-DD HH:mm:ss)
now() now(): date Praegune kuupäev ja kellaaeg
today() today(): date Praegune kuupäev (aeg = 00:00:00)
if() if(condition, trueResult, falseResult?) Tingimuslik
duration() duration(string): duration Parseeri kestuse string
file() file(path): file Hangi failiobjekt
link() link(path, display?): Link Loo link

Duration tüüp

Kahe kuupäeva lahutamisel on tulemus Duration tüüp (mitte number).

Duration väljad: duration.days, duration.hours, duration.minutes, duration.seconds, duration.milliseconds

OLULINE: Duration EI toeta otse .round(), .floor(), .ceil(). Ligipääse esmalt numbrilisele väljale (nagu .days), seejärel rakenda numbri funktsioone.

# CORRECT: Calculate days between dates
"(date(due_date) - today()).days"                    # Returns number of days
"(now() - file.ctime).days"                          # Days since created
"(date(due_date) - today()).days.round(0)"           # Rounded days

# WRONG - will cause error:
# "((date(due) - today()) / 86400000).round(0)"      # Duration doesn't support division then round

Kuupäevaaritmeetika

# Duration units: y/year/years, M/month/months, d/day/days,
#                 w/week/weeks, h/hour/hours, m/minute/minutes, s/second/seconds
"now() + \"1 day\""       # Tomorrow
"today() + \"7d\""        # A week from today
"now() - file.ctime"      # Returns Duration
"(now() - file.ctime).days"  # Get days as number

Vaate tüübid

Table View

views:
  - type: table
    name: "My Table"
    order:
      - file.name
      - status
      - due_date
    summaries:
      price: Sum
      count: Average

Cards View

views:
  - type: cards
    name: "Gallery"
    order:
      - file.name
      - cover_image
      - description

List View

views:
  - type: list
    name: "Simple List"
    order:
      - file.name
      - status

Map View

Nõuab latitude/longitude omadusi ja Maps community pluginat.

views:
  - type: map
    name: "Locations"
    # Map-specific settings for lat/lng properties

Vaikimisi kokkuvõttevalemid

Nimi Sisendtüüp Kirjeldus
Average Number Matemaatiline keskmine
Min Number Väikseim number
Max Number Suurim number
Sum Number Kõigi numbrite summa
Range Number Max − Min
Median Number Matemaatiline mediaan
Stddev Number Standardhälve
Earliest Date Varaseim kuupäev
Latest Date Hiliseim kuupäev
Range Date Latest − Earliest
Checked Boolean Tõesete väärtuste arv
Unchecked Boolean Väärade väärtuste arv
Empty Any Tühjade väärtuste arv
Filled Any Mittetühjade väärtuste arv
Unique Any Unikaalsete väärtuste arv

Täielikud näited

Task Tracker Base

filters:
  and:
    - file.hasTag("task")
    - 'file.ext == "md"'

formulas:
  days_until_due: 'if(due, (date(due) - today()).days, "")'
  is_overdue: 'if(due, date(due) < today() && status != "done", false)'
  priority_label: 'if(priority == 1, "🔴 High", if(priority == 2, "🟡 Medium", "🟢 Low"))'

properties:
  status:
    displayName: Status
  formula.days_until_due:
    displayName: "Days Until Due"
  formula.priority_label:
    displayName: Priority

views:
  - type: table
    name: "Active Tasks"
    filters:
      and:
        - 'status != "done"'
    order:
      - file.name
      - status
      - formula.priority_label
      - due
      - formula.days_until_due
    groupBy:
      property: status
      direction: ASC
    summaries:
      formula.days_until_due: Average

  - type: table
    name: "Completed"
    filters:
      and:
        - 'status == "done"'
    order:
      - file.name
      - completed_date

Reading List Base

filters:
  or:
    - file.hasTag("book")
    - file.hasTag("article")

formulas:
  reading_time: 'if(pages, (pages * 2).toString() + " min", "")'
  status_icon: 'if(status == "reading", "📖", if(status == "done", "✅", "📚"))'
  year_read: 'if(finished_date, date(finished_date).year, "")'

properties:
  author:
    displayName: Author
  formula.status_icon:
    displayName: ""
  formula.reading_time:
    displayName: "Est. Time"

views:
  - type: cards
    name: "Library"
    order:
      - cover
      - file.name
      - author
      - formula.status_icon
    filters:
      not:
        - 'status == "dropped"'

  - type: table
    name: "Reading List"
    filters:
      and:
        - 'status == "to-read"'
    order:
      - file.name
      - author
      - pages
      - formula.reading_time

Daily Notes Index

filters:
  and:
    - file.inFolder("Daily Notes")
    - '/^\d{4}-\d{2}-\d{2}$/.matches(file.basename)'

formulas:
  word_estimate: '(file.size / 5).round(0)'
  day_of_week: 'date(file.basename).format("dddd")'

properties:
  formula.day_of_week:
    displayName: "Day"
  formula.word_estimate:
    displayName: "~Words"

views:
  - type: table
    name: "Recent Notes"
    limit: 30
    order:
      - file.name
      - formula.day_of_week
      - formula.word_estimate
      - file.mtime

Basese manustamine

Manusta Markdown-failidesse:

![[MyBase.base]]

<!-- Specific view -->
![[MyBase.base#View Name]]

YAML-i tsiteerimisreeglid

Tõrkeotsing

YAML-i süntaksivead

Tsiteerimata erimärgid: Stringid, mis sisaldavad :, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, `, peavad olema tsiteeritud.

# WRONG - colon in unquoted string
displayName: Status: Active

# CORRECT
displayName: "Status: Active"

Mitteklapivad jutumärgid valemites: Kui valem sisaldab topeltjutumärke, mässi kogu valem ühekordsetesse jutumärkidesse.

# WRONG - double quotes inside double quotes
formulas:
  label: "if(done, "Yes", "No")"

# CORRECT - single quotes wrapping double quotes
formulas:
  label: 'if(done, "Yes", "No")'

Tavalised valemivead

Duration-matemaatika ilma väljale ligipääsuta: Kuupäevade lahutamine tagastab Durationi, mitte numbri. Ligipääse alati .days, .hours jne.

# WRONG - Duration is not a number
"(now() - file.ctime).round(0)"

# CORRECT - access .days first, then round
"(now() - file.ctime).days.round(0)"

Puuduvad null-kontrollid: Omadused ei pruugi kõigil märkmetel olla. Kasuta kaitsmiseks if().

# WRONG - crashes if due_date is empty
"(date(due_date) - today()).days"

# CORRECT - guard with if()
'if(due_date, (date(due_date) - today()).days, "")'

Määratlemata valemitele viitamine: Veendu, et igal formula.X-il order-is või properties-is on vaste jaotises formulas.

# This will fail silently if 'total' is not defined in formulas
order:
  - formula.total

# Fix: define it
formulas:
  total: "price * quantity"

Viited