[266] 옵시디언 이벤트 기반 타임라인 구현 소개
페이지 정보
본문
Obsidian에서 Dataview 플러그인을 활용하여 역사 연구 및 글쓰기를 위한 이벤트 기반 타임라인을 구현하는 방법을 단계별로 설명하겠습니다. 이 방법은 Obsidian의 마크다운 파일과 Dataview 플러그인을 사용하여 날짜별 이벤트를 정리하고, 이를 표 형식으로 시각화하는 방식입니다.
1.기본 설정
1.1 폴더 생성
- Obsidian 내에서
events
라는 폴더를 생성합니다. - 모든 이벤트 파일은 이 폴더에 저장됩니다.
1.2 Dataview 플러그인 설치
- Obsidian 설정(Settings) > 플러그인(Plugins) > 커뮤니티 플러그인(Community Plugins)으로 이동합니다.
Dataview
를 검색하여 설치한 뒤 활성화합니다.
1.3 날짜 형식 설정
- Dataview의 설정(Settings)에서 날짜 형식을
yyyy-MM-dd
로 지정합니다. - 연도만 입력하거나(예:
2023
), 연도와 월만 입력할 경우(예:2023-05
) 아래와 같은 형식으로 입력해야 합니다:- 연도만:
2023 -- --
- 연도와 월만:
2023-05 --
- 연도만:
2.이벤트 템플릿 생성
2.1 이벤트 템플릿 작성
새로운 이벤트 파일을 생성할 때 사용할 템플릿을 작성합니다:
---
tags: event
date:
---
2.2 템플릿 적용
- Obsidian에서 템플릿 플러그인을 활성화한 뒤, 위 내용을 기본 템플릿으로 설정합니다.
- 새로운 이벤트를 생성할 때 해당 템플릿이 자동으로 적용되도록 설정합니다.
3.이벤트 파일 작성
3.1 기본 이벤트 작성
- 각 이벤트는 개별 마크다운 파일로 작성됩니다.
- 예를 들어, "리처드 닉슨의 출생" 이벤트는 다음과 같이 작성됩니다:
---
tags: event, nixon
date: 1913-01-09
---
3.2 주요 카테고리 태그 추가
- 특정 카테고리(예: 역사적 사건, 특정 인물 등)에 속하는 이벤트에는 추가 태그를 붙입니다:
- 역사적 사건:
tags: event, historic
- 특정 인물 관련:
tags: event, nixon
- 역사적 사건:
3.3 출생 및 사망 이벤트 작성
- 인물의 출생과 사망은 별도의 파일로 작성하며, 제목은 다음과 같은 형식을 따릅니다:
- 출생:
Birth of Richard Nixon
- 사망:
Death of Richard Nixon
- 출생:
4.타임라인 표시
4.1 Dataview 쿼리 작성
타임라인을 표시할 별도의 노트를 생성하고 아래 Dataview 쿼리를 추가합니다:
TABLE WITHOUT ID
choice(contains(tags, "historic"), "📅", "") +
choice(contains(tags, "nixon"), "🔸", "") +
choice(contains(tags, "johnson"), "🔺", "")
AS "",
date AS "Date",
choice(file.size > 60, "<span class="more-text">" +
file.link +
"</span>", file.link) AS "Event"
FROM
#event AND !"_templates"
SORT
string(date) ASC
4.2 주요 기능 설명
- 아이콘 표시: 태그에 따라 각 이벤트 앞에 아이콘을 표시합니다.
- 예: 역사적 사건(
historic
)에는 📅, 닉슨 관련 이벤트(nixon
)에는 🔸.
- 예: 역사적 사건(
- 추가 내용 여부 표시: 파일 크기를 기준으로 추가 내용이 있는 경우 작은 점(
▪
)을 표시합니다. - 정렬: 날짜 순서대로 정렬되며, 연도 또는 월만 입력된 경우에도 올바르게 정렬되도록 문자열로 처리합니다.
5.CSS 스타일링
Dataview 표의 가독성을 높이기 위해 CSS를 추가합니다.
.table-view-table a{
border: none;
}
.table-view-table{
font-size: 0.8em;
font-family:var(--font-mono);}
.table-view-table .more-text a:after{
content:' ▪';
color:var(--color-6);
}
위 CSS는 Obsidian의 스타일 설정(Custom CSS)에 추가하여 적용합니다.
6.필터링 및 확장 기능
6.1 날짜 범위 필터링
특정 기간만 표시하려면 쿼리에 아래 조건을 추가합니다:
WHERE string(date) < "1960"
6.2 특정 인물 관련 이벤트 필터링
특정 인물과 관련된 이벤트만 표시하려면 다음과 같은 쿼리를 사용합니다:
TABLE WITHOUT ID
date AS Date,
file.link AS Event
FROM #event
WHERE contains(file.name, "Nixon")
SORT string(date) ASC
7.추가 기능 구현
7.1 나이 계산 기능 (DataviewJS)
특정 인물이 어떤 사건 당시 몇 살이었는지 계산하는 스크립트를 작성할 수 있습니다:
const person = "Richard Nixon";
const age = parseInt(String(dv.current().date).substring(0, 4)) - parseInt(String(dv.page("Birth of " + person).date).substring(0, 4));
dv.paragraph(person + " is " + age + " years old.");
7.2 출생 및 사망 연도 표시 (DataviewJS)
인물 페이지에 출생 및 사망 연도를 자동으로 표시하는 스크립트를 작성할 수 있습니다:
dv.el("p",
"(" +
String(dv.page("Birth of " +
dv.current().file.name).date).substring(0, 4) +
" — " +
String(dv.page("Death of " +
dv.current().file.name).date).substring(0, 4) + ")",
{ cls: "born-died" }
)
8.데이터 변환 (스프레드시트 → 마크다운)
기존 스프레드시트 데이터를 Obsidian 마크다운 파일로 변환하려면 아래 Python 스크립트를 사용합니다:
import csv
FILENAME = 'chrono.csv'
# read csv
with open(FILENAME, newline='') as csvfile:
data = list(csv.reader(csvfile))
notes = []
# Spreadsheet notes are categorized by column
tags = {
0: "",
2: "nixon",
4: "johnson",
6: "italy"
}
# Convert CSV timeline to list of dicts
for row in range(0, len(data)):
for n in range(0, len(data[row]), 2):
if data[row][n] != '':
date = data[row][n]
if len(date) == 4:
date += ' --'
if len(date) == 7:
date += ' --'
title = data[row][n+1]
title = title.replace(':', '--')
tag = tags[n]
notes.append(
{
"title": title,
"tag": tag,
"date": date
}
)
break
# Create a Markdown file for each entry
for note in notes:
f = open(note['title'] + '.md', 'x')
f.write('---\n')
tag = note['tag']
if tag != '':
tag = ', ' + tag
f.write('tags: event' + tag + '\n')
f.write('date: ' + note['date'] + '\n')
f.write('---\n')
f.close()
위 단계를 따라하면 Obsidian에서 강력한 타임라인 시스템을 구축할 수 있습니다!