[266] 옵시디언 이벤트 기반 타임라인 구현 소개

알림
|
X

페이지 정보

작성자 shunnna 211.♡.202.48
작성일 2025.01.07 08:52
83 조회
0 추천

본문


Obsidian에서 Dataview 플러그인을 활용하여 역사 연구 및 글쓰기를 위한 이벤트 기반 타임라인을 구현하는 방법을 단계별로 설명하겠습니다. 이 방법은 Obsidian의 마크다운 파일과 Dataview 플러그인을 사용하여 날짜별 이벤트를 정리하고, 이를 표 형식으로 시각화하는 방식입니다.


1.기본 설정

1.1 폴더 생성

  • Obsidian 내에서events라는 폴더를 생성합니다.
  • 모든 이벤트 파일은 이 폴더에 저장됩니다.

1.2 Dataview 플러그인 설치

  1. Obsidian 설정(Settings) > 플러그인(Plugins) > 커뮤니티 플러그인(Community Plugins)으로 이동합니다.
  2. 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에서 강력한 타임라인 시스템을 구축할 수 있습니다!

댓글 0
홈으로 전체메뉴 마이메뉴 새글/새댓글
전체 검색