Compétence Obsidian Bases
Flux de travail
- Créer le fichier : Créez un fichier
.basedans le vault avec un contenu YAML valide - Définir la portée : Ajoutez des
filterspour sélectionner les notes (par tag, dossier, propriété ou date) - Ajouter des formules (optionnel) : Définissez les propriétés calculées dans la section
formulas - Configurer les vues : Ajoutez une ou plusieurs vues (
table,cards,listoumap) avecorderspécifiant les propriétés à afficher - Valider : Vérifiez que le fichier est un YAML valide sans erreurs de syntaxe. Vérifiez que toutes les propriétés et formules référencées existent. Problèmes courants : chaînes non échappées contenant des caractères YAML spéciaux, guillemets mal appairés dans les expressions de formule, référence à
formula.Xsans définirXdansformulas - Tester dans Obsidian : Ouvrez le fichier
.basedans Obsidian pour confirmer que la vue s'affiche correctement. S'il affiche une erreur YAML, vérifiez les règles de guillemets ci-dessous
Schéma
Les fichiers base utilisent l'extension .base et contiennent du YAML valide.
# Les filtres globaux s'appliquent À TOUTES les vues de la base
filters:
# Peut être une seule chaîne de filtre
# OU un objet filtre récursif avec and/or/not
and: []
or: []
not: []
# Définissez les propriétés de formule qui peuvent être utilisées dans toutes les vues
formulas:
formula_name: 'expression'
# Configurez les noms d'affichage et les paramètres des propriétés
properties:
property_name:
displayName: "Display Name"
formula.formula_name:
displayName: "Formula Display Name"
file.ext:
displayName: "Extension"
# Définissez les formules de synthèse personnalisées
summaries:
custom_summary_name: 'values.mean().round(3)'
# Définissez une ou plusieurs vues
views:
- type: table | cards | list | map
name: "View Name"
limit: 10 # Optionnel : limiter les résultats
groupBy: # Optionnel : grouper les résultats
property: property_name
direction: ASC | DESC
filters: # Filtres spécifiques à la vue
and: []
order: # Propriétés à afficher dans l'ordre
- file.name
- property_name
- formula.formula_name
summaries: # Mappez les propriétés aux formules de synthèse
property_name: Average
Syntaxe des filtres
Les filtres réduisent les résultats. Ils peuvent être appliqués globalement ou par vue.
Structure des filtres
# Filtre unique
filters: 'status == "done"'
# AND - toutes les conditions doivent être vraies
filters:
and:
- 'status == "done"'
- 'priority > 3'
# OR - au moins une condition peut être vraie
filters:
or:
- 'file.hasTag("book")'
- 'file.hasTag("article")'
# NOT - exclure les éléments correspondants
filters:
not:
- 'file.hasTag("archived")'
# Filtres imbriqués
filters:
or:
- file.hasTag("tag")
- and:
- file.hasTag("book")
- file.hasLink("Textbook")
- not:
- file.hasTag("book")
- file.inFolder("Required Reading")
Opérateurs de filtre
| Opérateur | Description |
|---|---|
== |
égal à |
!= |
pas égal à |
> |
supérieur à |
< |
inférieur à |
>= |
supérieur ou égal à |
<= |
inférieur ou égal à |
&& |
et logique |
\|\| |
ou logique |
| <code>!</code> | non logique |
Propriétés
Trois types de propriétés
- Propriétés de note - Du frontmatter :
note.authorou simplementauthor - Propriétés de fichier - Métadonnées du fichier :
file.name,file.mtime, etc. - Propriétés de formule - Valeurs calculées :
formula.my_formula
Référence des propriétés de fichier
| Propriété | Type | Description |
|---|---|---|
file.name |
String | Nom du fichier |
file.basename |
String | Nom du fichier sans extension |
file.path |
String | Chemin complet du fichier |
file.folder |
String | Chemin du dossier parent |
file.ext |
String | Extension du fichier |
file.size |
Number | Taille du fichier en octets |
file.ctime |
Date | Date de création |
file.mtime |
Date | Date de modification |
file.tags |
List | Tous les tags du fichier |
file.links |
List | Liens internes du fichier |
file.backlinks |
List | Fichiers liés à ce fichier |
file.embeds |
List | Embeds dans la note |
file.properties |
Object | Toutes les propriétés du frontmatter |
Le mot-clé this
- Dans la zone de contenu principal : fait référence au fichier base lui-même
- Lors d'un embedding : fait référence au fichier qui intègre
- Dans la barre latérale : fait référence au fichier actif du contenu principal
Syntaxe des formules
Les formules calculent des valeurs à partir de propriétés. Définies dans la section formulas.
formulas:
# Arithmétique simple
total: "price * quantity"
# Logique conditionnelle
status_icon: 'if(done, "✅", "⏳")'
# Formatage de chaîne
formatted_price: 'if(price, price.toFixed(2) + " dollars")'
# Formatage de date
created: 'file.ctime.format("YYYY-MM-DD")'
# Calculer les jours depuis création (utilisez .days pour Duration)
days_old: '(now() - file.ctime).days'
# Calculer les jours jusqu'à la date limite
days_until_due: 'if(due_date, (date(due_date) - today()).days, "")'
Fonctions clés
Fonctions les plus couramment utilisées. Pour la référence complète de tous les types (Date, String, Number, List, File, Link, Object, RegExp), consultez FUNCTIONS_REFERENCE.md.
| Fonction | Signature | Description |
|---|---|---|
date() |
date(string): date |
Analyser une chaîne en date (YYYY-MM-DD HH:mm:ss) |
now() |
now(): date |
Date et heure actuelles |
today() |
today(): date |
Date actuelle (heure = 00:00:00) |
if() |
if(condition, trueResult, falseResult?) |
Conditionnel |
duration() |
duration(string): duration |
Analyser une chaîne de durée |
file() |
file(path): file |
Obtenir un objet fichier |
link() |
link(path, display?): Link |
Créer un lien |
Type Duration
Lors de la soustraction de deux dates, le résultat est un type Duration (pas un nombre).
Champs Duration : duration.days, duration.hours, duration.minutes, duration.seconds, duration.milliseconds
IMPORTANT : Duration ne supporte PAS .round(), .floor(), .ceil() directement. Accédez d'abord à un champ numérique (comme .days), puis appliquez les fonctions numériques.
# CORRECT : Calculer les jours entre deux dates
"(date(due_date) - today()).days" # Retourne le nombre de jours
"(now() - file.ctime).days" # Jours depuis création
"(date(due_date) - today()).days.round(0)" # Jours arrondis
# FAUX - causera une erreur :
# "((date(due) - today()) / 86400000).round(0)" # Duration ne supporte pas la division puis round
Arithmétique des dates
# Unités de durée : y/year/years, M/month/months, d/day/days,
# w/week/weeks, h/hour/hours, m/minute/minutes, s/second/seconds
"now() + \"1 day\"" # Demain
"today() + \"7d\"" # Une semaine à partir d'aujourd'hui
"now() - file.ctime" # Retourne Duration
"(now() - file.ctime).days" # Obtenir les jours en nombre
Types de vues
Vue Table
views:
- type: table
name: "My Table"
order:
- file.name
- status
- due_date
summaries:
price: Sum
count: Average
Vue Cards
views:
- type: cards
name: "Gallery"
order:
- file.name
- cover_image
- description
Vue List
views:
- type: list
name: "Simple List"
order:
- file.name
- status
Vue Map
Nécessite les propriétés latitude/longitude et le plugin Maps community.
views:
- type: map
name: "Locations"
# Paramètres spécifiques à la carte pour les propriétés lat/lng
Formules de synthèse par défaut
| Nom | Type d'entrée | Description |
|---|---|---|
Average |
Number | Moyenne mathématique |
Min |
Number | Plus petit nombre |
Max |
Number | Plus grand nombre |
Sum |
Number | Somme de tous les nombres |
Range |
Number | Max - Min |
Median |
Number | Médiane mathématique |
Stddev |
Number | Écart-type |
Earliest |
Date | Date la plus ancienne |
Latest |
Date | Date la plus récente |
Range |
Date | Latest - Earliest |
Checked |
Boolean | Nombre de valeurs vraies |
Unchecked |
Boolean | Nombre de valeurs fausses |
Empty |
Any | Nombre de valeurs vides |
Filled |
Any | Nombre de valeurs non vides |
Unique |
Any | Nombre de valeurs uniques |
Exemples complets
Base Task Tracker
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
Base Reading List
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
Index Daily Notes
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
Embedding Bases
Embed dans les fichiers Markdown :
![[MyBase.base]]
<!-- Vue spécifique -->
![[MyBase.base#View Name]]
Règles de guillemets YAML
- Utilisez des guillemets simples pour les formules contenant des guillemets doubles :
'if(done, "Yes", "No")' - Utilisez des guillemets doubles pour les chaînes simples :
"My View Name" - Échappez correctement les guillemets imbriqués dans les expressions complexes
Dépannage
Erreurs de syntaxe YAML
Caractères spéciaux non échappés : Les chaînes contenant :, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, ` doivent être guillemées.
# FAUX - deux-points dans une chaîne non guillemée
displayName: Status: Active
# CORRECT
displayName: "Status: Active"
Guillemets mal appairés dans les formules : Quand une formule contient des guillemets doubles, enveloppez la formule entière dans des guillemets simples.
# FAUX - guillemets doubles dans des guillemets doubles
formulas:
label: "if(done, "Yes", "No")"
# CORRECT - guillemets simples enveloppant les guillemets doubles
formulas:
label: 'if(done, "Yes", "No")'
Erreurs de formule courantes
Math Duration sans accès au champ : Soustraire deux dates retourne une Duration, pas un nombre. Accédez toujours à .days, .hours, etc.
# FAUX - Duration n'est pas un nombre
"(now() - file.ctime).round(0)"
# CORRECT - accédez d'abord à .days, puis arrondissez
"(now() - file.ctime).days.round(0)"
Vérifications null manquantes : Les propriétés peuvent ne pas exister sur toutes les notes. Utilisez if() pour protéger.
# FAUX - plante si due_date est vide
"(date(due_date) - today()).days"
# CORRECT - protégez avec if()
'if(due_date, (date(due_date) - today()).days, "")'
Référence à des formules indéfinies : Assurez-vous que chaque formula.X dans order ou properties a une entrée correspondante dans formulas.
# Ceci échouera silencieusement si 'total' n'est pas défini dans formulas
order:
- formula.total
# Correction : définissez-la
formulas:
total: "price * quantity"