제노그램
제노그램이란
제노그램은 전통적인 가계도의 이름-날짜를 넘어서는 가족 다이어그램입니다. 3세대 이상에 걸친 가족의 감정적, 의학적 질감을 기록합니다. 치료사, 사회복지사, 유전 상담사는 제노그램을 통해 단절, 과잉 개입, 반복되는 질환 등 일반 사례 노트에서는 보기 어려운 패턴을 표면화합니다.
Schematex는 임상 훈련에 사용되는 McGoldrick, Gerson & Petry (2020) 표준 과 널리 채택된 GenoPro 32가지 감정 관계 분류 체계를 따릅니다. 이론과 역사에 대해서는 Wikipedia: Genogram을 참조하십시오. 이 페이지에서는 현재 파서가 지원하는 문법을 설명합니다.
1. 첫 번째 제노그램
가장 작고 임상적으로 유용한 제노그램: 부모 둘과 자녀 하나.
네 가지 규칙으로 전체 사용법의 80%를 커버할 수 있습니다.
- 키워드
genogram으로 시작하며, 선택적으로 따옴표로 묶인 제목이 뒤따릅니다. - 각 인물을 별도 줄에 선언합니다:
id [속성]. 속성은 대괄호 안에 쉼표로 구분하여 입력합니다. - 커플 연산자로 두 인물을 연결합니다 — 여기서는
--(결혼); 여섯 가지 모두는 §4.1을 참조하십시오. 뒤에 따옴표 문자열을 붙이면 관계 레이블이 됩니다. - 커플 줄 아래에 들여쓰기하여 자녀를 추가합니다.
주석은 자체 줄에서
#,//, 또는 Mermaid 스타일의%%로 시작해야 합니다. 줄 끝 인라인 주석(bob [male, 1978] # ...)은 지원되지 않으며 파서를 오류로 만듭니다 — §8 참조.
2. 개인
개인 줄은 id [attr1, attr2, …] 형식입니다. 속성은 쉼표로 구분되며, 순서에 무관하고, 모두 선택 사항입니다.
ID 규칙. [a-zA-Z][a-zA-Z0-9_-]* 패턴과 일치해야 합니다. ID는 내부적으로 대소문자를 구분하지 않지만 원래 대소문자를 표시 레이블로 유지합니다(label:"…" 로 재정의 가능).
현재 파서가 허용하는 속성:
| 속성 | 값 | 효과 |
|---|---|---|
| 성별 | male, female, unknown, other | 모양: 사각형, 원, 다이아몬드, 다이아몬드 |
| 상태 | deceased, stillborn, miscarriage, abortion | 시각적 수정자 (X 표시, 크기 조정된 모양 등) |
| 출생 연도 | 4자리 숫자, 예: 1980 | 첫 번째 4자리 토큰 = 출생 연도 |
| 사망 연도 | 출생 후 4자리 숫자, 예: 1980, 2055 | 두 번째 4자리 토큰 = 사망 연도 |
index | 플래그 | 동심원 모양 = 식별된 환자 |
unknown-siblings | 플래그 | ? 가 있는 다이아몬드 — 알 수 없는 수의 형제자매 1명 이상을 위한 플레이스홀더 |
age:N | 예: age:42 | 모양 내부에 나이 표시 |
death:YYYY | 예: death:2020 | 명시적 사망 연도 |
label:"…" | 예: label:"Dr. Smith" | 표시 레이블 재정의 |
sibling-of:<id> | 예: sibling-of:monica | 참조된 형제자매와 동일한 세대에 고정, 점선 괄호로 표시 — 알 수 없는 혈통을 가진 알려진 친척에 사용. |
conditions:… | §5 참조 | 의학적/심리적 상태 |
key:value | 임의의 사용자 정의 값 | 메타데이터로 저장 |
3. 모양
| 시각 표현 | 성별 값 | 의미 |
|---|---|---|
| ☐ 사각형 | male | 남성 |
| ○ 원 | female | 여성 |
| ◇ 다이아몬드 | unknown, other, 또는 속성 생략 | 알 수 없음 / 미지정 |
상태 수정자는 기본 모양 위에 추가됩니다:
4. 연결
4.1 커플 연산자
파서는 이 순서대로 시도합니다. 첫 번째로 매칭되는 것이 우선됩니다 — 따라서 -x- 가 -- 보다 우선합니다.
| 연산자 | 유형 | 예제 | 의미 |
|---|---|---|---|
-x- | 이혼 | a -x- b | 이혼 |
-/- | 별거 | a -/- b | 별거 (결혼 상태) |
-// | 별거 | a -// b | 별거 (-/- 의 별칭) |
-o- | 약혼 | a -o- b | 약혼 |
== | 혈연 | a == b | 혈연 관계 커플 |
-- | 결혼 | a -- b | 결혼 |
~ | 동거 | a ~ b | 동거 / LTR (현재) |
~/~ | 동거 종료 | a ~/~ b | 동거 종료 (미혼). 생물학적 부모가 미혼으로 함께 살다가 관계가 끝난 경우 LATAM 아동 보호 사례에서 흔히 사용 — -x- 이혼(결혼 없음)이나 -/- 별거(여전히 결혼 상태)와는 구별됩니다. |
뒤에 따옴표 문자열을 붙이면 관계 레이블이 됩니다(a -- b "m. 2005").
4.2 오른쪽에 인라인 개인 선언
오른쪽 인물이 아직 선언되지 않은 경우 인라인으로 선언할 수 있습니다:
4.3 자녀 (커플 아래 들여쓰기)
커플 줄 아래 들여쓰기 = "이 커플의 자녀입니다." 커플의 들여쓰기보다 더 깊은 들여쓰기이면 무엇이든 작동합니다; 관례적으로 공백 2개를 더 사용합니다. 자녀는 선언 순서대로 렌더링됩니다(출생 연도가 있을 경우 렌더링에서 출생 연도 기준으로도 정렬됩니다).
특수 자녀 속성:
| 속성 | 효과 |
|---|---|
adopted | 입양 선 스타일 |
foster | 위탁 관계 |
guardian | 비부모 친척(예: 조부모 양육권)에 의한 후견. foster 와 동일한 기본 요소 — 생물학적 부모도 선언되어 있을 때 보조 "현재 양육자" 링크로 그려집니다. |
twin-identical | 동일 커플의 다른 twin-identical 자녀와 그룹화 |
twin-fraternal | 다른 twin-fraternal 자녀와 그룹화 |
unknown-siblings | ? 글리프가 있는 단일 다이아몬드 — "1명 이상의 형제자매, 수와 신원 불명" (족보 관례). |
4.3.1 이중 부모 가족 (위탁, 입양, 후견)
생물학적 부모가 여전히 사건에 포함되어 있으면서 비생물학적 양육자에게 배치된 자녀는 두 커플 모두 아래에 선언할 수 있습니다. 첫 번째 선언(생물학적 커플 아래)에서 전체 속성으로 자녀를 선언하고, 현재 양육자 아래에서 [foster] / [adopted] / [guardian] 만으로 재선언합니다. 첫 번째 선언이 레이아웃을 지배하며, 두 번째는 자녀를 생물학적 위치에서 이동시키지 않는 보조 점선 "현재 양육자" 링크로 그려집니다.
동일한 기본 요소가 입양(폐쇄형/개방형), 위탁 배치, 친척에 의한 후견에 사용됩니다 — 키워드만 다릅니다. 재선언은 상충하지 않는 속성(성별, 출생 연도, 레이블, index 마커)을 원본과 병합합니다; 상충하는 male 과 female 을 선언하면 자동으로 덮어쓰지 않고 파스 오류가 발생합니다.
4.3.2 수 불명의 형제자매
사례 파일에 "자녀에게 형제자매가 있다"고 언급되어 있지만 이름이 없는 경우, 별도 줄에 ? 단축 표현을 사용하거나 일반 id에 [unknown-siblings] 를 사용합니다. 두 방법 모두 "?" 글리프가 있는 단일 다이아몬드로 렌더링됩니다 — "하나 이상의 형제자매, 신원 불명"을 위한 표준 족보 마커.
4.3.3 형제자매 관계 (알려진 친척, 알 수 없는 혈통)
부모를 만들지 않고 "X는 Y의 형제자매"를 표현하려면 sibling-of: <id> 속성을 사용합니다. 렌더러는 X를 Y의 세대에 고정하고 두 인물 위에 점선 괄호를 그립니다 — 알 수 없는 혈통을 가진 알려진 친척에 대한 표준 족보 관례.
4.4 감정 관계
별도 줄, 파서 패턴 A -TYPE- B (비방향) 또는 A -TYPE-> B (방향). 선택적 따옴표 레이블이 끝에 옵니다. 감정 줄 이전에 두 개인 모두가 이미 선언되어 있어야 합니다.
harry -cutoff- petunia # 비방향
harry -hostile- dudley "since 1991"
uncle -abuse-> nephew # 방향 (화살표)현재 파서가 허용하는 32가지 유형 모두:
| 카테고리 | 유형 |
|---|---|
| 긍정적 / 친밀 | harmony, close, bestfriends, love, inlove, friendship |
| 부정적 / 적대적 | hostile, conflict, enmity, distant-hostile, cutoff |
| 양가적 | close-hostile, fused, fused-hostile |
| 거리감 | distant, normal, nevermet |
| 학대 (방향) | abuse, physical-abuse, emotional-abuse, sexual-abuse, neglect |
| 통제 (방향) | manipulative, controlling, jealous |
| 특수 | focused, focused-neg, distrust, admirer, limerence |
5. 의학적 상태
문법: conditions: name(fill) [+ name(fill, #color)]…
father [male, 1945, conditions: heart(full, #E53935)]
mother [female, 1948, conditions: diabetes(half-left) + anxiety(half-right, #26A69A)]name— 원하는 임의의 식별자 (범례/툴팁에 표시됨).fill— 필수, 모양의 어느 영역이 색칠될지 결정합니다. 아래 표 참조.color— 선택적 16진수. 기본값은 렌더러 테마에 따라 다릅니다.- 여러 상태는
+로 연결됩니다. 각각 자체(fill)이 필요합니다.
채우기 위치:
fill 값 | 영역 |
|---|---|
full | 전체 모양 |
half-left / half-right | 왼쪽 / 오른쪽 절반 |
half-top / half-bottom | 위쪽 / 아래쪽 절반 |
quad-tl / quad-tr / quad-bl / quad-br | 사분면 하나 |
striped | 대각선 줄무늬 패턴 (무증상 보인자) |
dotted | 점 패턴 |
6. 레이블 및 주석
- 제목:
genogram "Smith Family"— 첫 번째 줄에만. - 인물 레이블 재정의:
alice [female, label:"Dr. Alice Smith"]. - 관계 레이블: 커플 또는 감정 줄 끝에 따옴표 문자열 —
alice -- bob "m. 2005". - 주석: 줄 시작(앞쪽 공백 이후)에
#,//, 또는%%. 인라인 주석은 지원되지 않습니다.
genogram "Smith Family"
# this line is a comment — fine
%% Mermaid-style comment — also fine
alice [female, 1980] # ← THIS trailing comment breaks the parser7. 예약어 및 이스케이핑
줄 시작에 예약된 키워드: genogram (헤더 키워드).
줄 내부의 예약된 연산자 토큰 — ID에 다음 시퀀스를 사용하지 마십시오:
--, ~, ~/~, ==, -x-, -/-, -//, -o-, 그리고 감정 관계 유형과 매칭되는 -<type>- / -<type>->.
예약된 id ? — 자녀 줄의 단독 ? 는 unknown-siblings 마커가 있는 합성 플레이스홀더를 자동 생성합니다. ? 를 실제 id로 사용하지 마십시오.
공백이 포함된 문자열은 큰따옴표로 묶어야 합니다: 제목, 레이블, label:"…". 작은따옴표와 백틱은 인식되지 않습니다.
8. 자주 발생하는 실수
실제 파서 오류, 발생 원인, 해결 방법.
| 작성한 내용 | 파서의 반응 | 해결 방법 |
|---|---|---|
alex [nonbinary, 1995] | Unknown property 'nonbinary' | unknown 또는 other 사용 (nonbinary는 §13 로드맵) |
alice [female, transgender] | Unknown property 'transgender' | 아직 파싱 불가 (§13 로드맵) |
dad -- mom ← 동일 들여쓰기에서 child [male, 2010] 가 따라옴 | 자녀가 커플의 자녀가 아닌 새 최상위 개인으로 파싱됨 | 자녀 줄을 커플 줄보다 더 깊게 들여쓰기 (공백 2개면 충분) |
A -- B 에서 A 가 선언된 적 없음 | Unknown individual 'A' | 위 줄에 A [sex, year] 를 선언 |
1번 줄에 father -- mother "married" (헤더 없음) | Expected "genogram" header | 파일을 genogram 또는 genogram "Title" 로 시작 |
conditions: diabetes + cancer (괄호 없음) | Invalid condition format 'diabetes' | 채우기 추가: conditions: diabetes(half-left) + cancer(half-right) |
[triplet-identical] | Unknown property 'triplet-identical' | 세쌍둥이는 아직 파싱 불가 (§13 로드맵) |
dad -- mom # first marriage | 줄 끝 인라인 # 주석이 레이블의 일부로 처리되거나 오류 발생 | 주석을 별도 줄로 이동 |
성별이 다른 동일 id 두 번 선언 (x [male] 후 x [female]) | Conflicting sex for 'x': previously 'male', now 'female' | 하나를 선택하거나 id 중 하나를 이름 변경 |
child [foster] 재선언 시 생물학적 부모가 선언된 적 없음 | child 가 위탁 커플의 일반 자녀가 됨 (보조 링크 없음) | 의도적인 동작 — 보조 링크는 이전 선언의 기존 주 부모-자녀 관계가 필요합니다 |
9. 문법 (EBNF)
document = header (blank | comment | individual | couple-block | emotional)*
header = "genogram" ( WS quoted-string )? NEWLINE
quoted-string = '"' any-char-but-quote* '"'
individual = INDENT id ( "[" attrs "]" )? NEWLINE
couple-block = INDENT id WS coupleOp WS right-side ( WS quoted-string )? NEWLINE
( deeper-indent child )*
child = INDENT id ( "[" attrs "]" )? NEWLINE
| INDENT "?" NEWLINE // unknown-count sibling shorthand
right-side = id ( "[" attrs "]" )?
emotional = INDENT id WS "-" type "-" id ( WS quoted-string )? NEWLINE
| INDENT id WS "-" type "->" id ( WS quoted-string )? NEWLINE
coupleOp = "~/~" | "-//" | "-x-" | "-/-" | "-o-" | "==" | "--" | "~"
type = "harmony" | "close" | "bestfriends" | "love" | "inlove"
| "friendship" | "hostile" | "conflict" | "enmity"
| "distant-hostile" | "cutoff" | "close-hostile" | "fused"
| "fused-hostile" | "distant" | "normal" | "nevermet"
| "abuse" | "physical-abuse" | "emotional-abuse"
| "sexual-abuse" | "neglect" | "manipulative" | "controlling"
| "jealous" | "focused" | "focused-neg" | "distrust"
| "admirer" | "limerence"
id = [a-zA-Z] [a-zA-Z0-9_-]*
attrs = attr ("," attr)*
attr = "male" | "female" | "unknown" | "other"
| "deceased" | "stillborn" | "miscarriage" | "abortion"
| "adopted" | "foster" | "guardian"
| "twin-identical" | "twin-fraternal"
| "index" | "unknown-siblings"
| digit digit digit digit // year
| "age" ":" digits
| "death" ":" digit digit digit digit
| "label" ":" quoted-string
| "sibling-of" ":" id
| "conditions" ":" condition ("+" condition)*
| key ":" value // custom
condition = name "(" fill ("," "#" hex)? ")"
fill = "full" | "half-left" | "half-right" | "half-top" | "half-bottom"
| "quad-tl" | "quad-tr" | "quad-bl" | "quad-br"
| "striped" | "dotted"
comment = INDENT ( "#" | "//" | "%%" ) any NEWLINE권위 있는 소스: src/diagrams/genogram/parser.ts. 이 문서가 파서와 다를 경우 파서가 우선합니다 — 이슈를 열어주십시오.
10. 표준 준수
Schematex 제노그램은 구조적 기호, 커플 연산자, 세대 정렬에 관해 McGoldrick, Gerson & Petry (2020), Genograms: Assessment and Treatment, 4판을 따릅니다. 감정 관계 분류 체계는 GenoPro의 32가지 분류를 따릅니다(34가지 유형 전체를 구현하지는 않습니다; focused-admirer 와 하나의 중복 항목은 focused 와 admirer 로 통합됩니다).
현재 구현된 내용과 표준 비교:
- ✅ 핵심 구조적 기호 (남성/여성/알 수 없음, 사망, 사산, 유산, 낙태)
- ✅ McGoldrick 6가지 커플 연산자 시스템
- ✅ GenoPro 32가지 감정 유형, 임상적으로 지정된 경우 방향 포함
- ✅ 의학적 상태 사분면 채우기 시스템 (4위치 + 줄무늬/점 패턴)
- ✅ 인덱스 인물 (동심원 모양)
- ✅ 쌍둥이 그룹화 (일란성 / 이란성)
- ⏳ Bennett 2022 성별 포용성 추가사항 — §13 참조
- ⏳ 기증자 / 대리모 / 의붓자녀 연결 유형 — §13 참조
참고 자료:
- McGoldrick, M., Gerson, R., & Petry, S. (2020). Genograms: Assessment and Treatment (4th ed.).
- Hardy, K.V. & Laszloffy, T.A. (1995). The cultural genogram. J Marital Fam Ther, 21(3), 227–237.
- GenoPro symbol reference — https://genopro.com/genogram/
11. 관련 예제
예제 갤러리에서 바로 사용할 수 있는 시나리오:
13. 로드맵
계획됨 — 아직 파싱 불가. 현재 생성된 DSL에 이를 사용하지 마십시오; 파서가 거부합니다.
- Bennett 2022 성별 포용성 —
nonbinary,intersex를 성별 값으로;transgender를 마커로. 현재src/core/types.ts에 타입이 정의되어 있지만 파서의VALID_SEX집합에 아직 포함되지 않습니다. - 세쌍둥이 및 고차 다태 —
triplet-identical,triplet-fraternal. - 현대적 가족 구조 —
surrogate,donor,step을 자녀 유형 속성으로. - 상태 카테고리 단축 표현 —
(fill)없이conditions: cardiovascular + depression, 사분면과 기본 색상 자동 할당. - 동반자 관계 연산자 —
~dp~/ 명시적 DP 레이블. - 유산 주석 — 개인에 대한 문화적 제노그램 유산 식별자.
- 가구 경계 상자 — 동일 거주지를 공유하는 노드 그룹화 (위탁 배치, 다세대 가구).
더 빨리 필요한 기능이 있으면 GitHub 이슈에서 추적하십시오.
Found this useful?
Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.