| 2026-10-25T14:41:36 |
Aha00a |
1
|
0
|
= [Interpreter]Query |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
1
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
2
|
`#!Query` 는 [InterpreterSchema] 로 적어 둔 속성으로 페이지를 골라 표나 목록으로 보여 줍니다. 노션의 데이터베이스 뷰, 옵시디언의 Bases 와 같은 쓰임인데, 따로 입력할 것이 없습니다 — 위키가 이미 쌓아 둔 `#!Schema` 값을 읽을 뿐입니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
3
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
4
|
== 기본 문법 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
5
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
6
|
인자는 schema.org class 이름이고(공백으로 여러 개), 본문은 탭으로 구분한 줄입니다. 빈 줄과 `#` 로 시작하는 줄은 무시합니다. `#!Schema` 와 같은 모양입니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
7
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
8
|
[[[#!WikiSyntaxPreview Query Person |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
9
|
where birthDate has |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
10
|
show birthDate birthPlace |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
11
|
sort birthDate |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
12
|
]]] |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
13
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
14
|
== 줄의 종류 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
15
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
16
|
[[[#!Table tsv 1 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
17
|
줄 뜻 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
18
|
`where 속성 연산 값` 조건. 여러 줄이면 모두 만족해야 합니다 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
19
|
`show 속성 …` 이름 칸 뒤에 보일 속성들. 여러 줄이면 이어 붙입니다 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
20
|
`sort 속성 [asc|desc]` 정렬. 기본은 이름순 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
21
|
`group 속성` 그 속성의 값별로 묶어 보입니다. 없는 페이지는 맨 뒤 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
22
|
`limit N` 최대 N 쪽(기본 100, 상한 500) |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
23
|
`view table|list` 표(기본) 또는 목록 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
24
|
]]] |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
25
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
26
|
== 조건 (`where`) |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
27
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
28
|
속성은 값을 여럿 가질 수 있으므로(`sameAs` 처럼), 조건은 값들의 집합에 대해 묻습니다. `=` 는 '''어느 한 값이라도''' 같으면, `!=` 는 '''어느 값도''' 같지 않으면 참입니다. 그래야 값이 하나 더 생겼다고 답이 바뀌지 않습니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
29
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
30
|
[[[#!Table tsv 1 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
31
|
연산 뜻 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
32
|
`=` `!=` 같다 / 다르다. 대소문자를 가리지 않습니다 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
33
|
`~` `!~` 포함한다 / 포함하지 않는다. 대소문자를 가리지 않습니다 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
34
|
`<` `<=` `>` `>=` 크기 비교. 둘 다 숫자면 숫자로, 아니면 글자로 비교합니다(ISO 날짜 `2026-10-24` 는 글자로 비교해도 날짜순입니다) |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
35
|
`has` `none` 속성이 있다 / 없다. 값이 필요 없습니다 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
36
|
`md` 같은 월·일. `--10-23` 과 `1815-10-23` 은 둘 다 «10월 23일» 입니다 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
37
|
]]] |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
38
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
39
|
값 자리에 `today` 를 쓰면 오늘 날짜입니다. `md` 와 쓰면 오늘의 월·일(`--MM-DD`)이 됩니다 — 오늘 생일인 사람은 이렇게 구합니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
40
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
41
|
[[[#!WikiSyntaxPreview Query Person |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
42
|
where birthDate md today |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
43
|
show birthDate |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
44
|
]]] |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
45
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
46
|
== 정한 것과 그 이유 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
47
|
* '''모르는 줄은 오류입니다.''' `shwo` 로 잘못 적은 줄이 조용히 무시되면, 아무것도 안 보이는 것이 «조건에 맞는 페이지가 없다» 와 구별되지 않습니다. 오류 상자가 어느 줄이 문제인지 말합니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
48
|
* '''class 도 `where` 도 없는 질의는 거부합니다.''' 위키의 모든 페이지가 되기 때문입니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
49
|
* '''속성이 없는 페이지는 정렬에서 맨 뒤입니다''', 오름차순이든 내림차순이든. 없는 것이지 가장 작은 것이 아닙니다. 값이 같으면 이름순이라 렌더링마다 순서가 바뀌지 않습니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
50
|
* '''읽을 수 없는 페이지는 목록에도, 개수에도 나오지 않습니다.''' |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
51
|
* '''그릴 때 읽습니다.''' 어떤 페이지가 `#!Schema` 를 저장하는 즉시 이 목록에 나타납니다. 이 인터프리터가 따로 저장하는 것은 없습니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
52
|
* 값은 [InterpreterSchema] 가 그리는 것과 같이 위키 링크로 나옵니다. |
| 2026-10-25T14:48:16 |
Aha00a |
2
|
53
|
* '''연월만 있는 값은 감춥니다.''' `#!Schema` 는 날짜를 그 자체(`1972-10-17`)와 연월(`1972-10`)로 함께 저장하므로(월로 찾으려는 것), 그대로 보이면 생일이 둘인 것처럼 읽힙니다. 같은 속성에 그 연월로 시작하는 더 긴 값이 있으면 짧은 쪽을 보이지 않게 합니다 — 데이터에서는 지우지 않으니 `where` 는 둘 다 봅니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
54
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
55
|
== 아직 없는 것 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
56
|
* 카드·보드·달력 보기. 노션과 옵시디언 Bases 는 갖고 있습니다. 표와 목록으로 시작한 것은 나머지가 «데이터를 어떻게 고르는가» 가 아니라 «어떻게 그리는가» 의 문제라서, 고르는 쪽을 먼저 굳히려는 것입니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
57
|
* 계산 열(노션의 formula·rollup)과 페이지 간 관계 따라가기. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
58
|
* 여러 값 중 어느 것으로 정렬할지 고르기 — 지금은 첫 값(글자순으로 가장 앞)입니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
59
|
* 속성을 `#!Schema` 가 아니라 본문에서 읽기. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
60
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
61
|
== 구현 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
62
|
* `QueryEngine` — 순수 함수: 줄을 읽고(`parse`), 조건을 평가하고, 정렬·묶기·자르기를 합니다. 데이터베이스도 HTML 도 모릅니다. `QueryEngineSpec` 이 확인합니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
63
|
* `InterpreterQuery` — `CalculatedSchemaOrg` 에서 필요한 속성만(`selectFacts`) 읽어 엔진에 주고 그립니다. 한 번에 읽는 행은 2만으로 막아 두었습니다 — 거의 모든 페이지가 가진 속성으로 물으면 «앞의 행들» 로 줄어들 뿐 테이블을 통째로 읽지는 않습니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
64
|
* 같은 데이터 위에 [MacroOnThisDay] 가 먼저 있었습니다. 그것은 «이 날짜에 걸린 페이지» 한 가지를 고정해 둔 질의입니다. |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
65
|
|
| 2026-10-25T14:41:36 |
Aha00a |
1
|
66
|
== 관련 |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
67
|
* [InterpreterSchema] |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
68
|
* [MacroOnThisDay] |
| 2026-10-25T14:41:36 |
Aha00a |
1
|
69
|
* [Dev Mcp] |