# 관계와 값
관계는 **출발 카드의 relations**에 저장합니다. targetCardId는 같은 컬렉션 안의 카드를 가리켜야 합니다.

```json
{
  "type": "has_property",
  "targetCardId": "mass",
  "value": 12.5,
  "unit": "kg"
}
```

위 예시는 출발 카드가 `class` 또는 `instance`, 대상 `mass` 카드가 `property`일 때의 값 관계입니다. unit은 value가 있을 때만 사용할 수 있습니다.

## 기본 관계와 역할
| type | 의미 | 출발 → 도착 |
| --- | --- | --- |
| `subclass_of` | 하위 분류 | 분류 → 분류 |
| `instance_of` | 분류의 개체 | 개체 → 분류 |
| `part_of` | 부분 | 분류 → 분류 / 개체 → 개체 |
| `has_property` | 특징 | 분류 → 속성 / 개체 → 속성 |
| `tier` | 티어 | 분류 → 속성 / 개체 → 속성 |
| `equivalent_to` | 동등 | 분류 → 분류 / 개체 → 개체 / 속성 → 속성 |
| `disjoint_with` | 배타 | 분류 → 분류 |
| `prerequisite` | 선수 지식 | 분류 → 분류·개체·속성 / 개체 → 분류·개체·속성 / 속성 → 분류·개체·속성 |

`subclass_of`는 하위에서 상위로, `part_of`는 부분에서 전체로 저장합니다. `prerequisite`는 **현재 카드 → 이해에 필요한 카드**입니다. ‘A를 배우고 B로 진행한다’는 학습 순서와 혼동하지 마세요.

## 컬렉션 전용 관계
동의어·유의어·반의어처럼 기본 관계와 의미가 다른 연결은 직접 정의합니다.

```json
{
  "customRelations": [
    {
      "id": "custom:synonym",
      "label": "동의어",
      "localizedLabels": { "en-US": "Synonym", "ja": "同義語", "zh-TW": "同義詞" }
    }
  ]
}
```

카드에서는 `{"type":"custom:synonym","targetCardId":"다른-카드-ID"}`로 사용합니다. 정의한 관계는 역할 없음 카드를 포함해 모든 역할끼리 연결할 수 있습니다. 같은 관계 이름도 다른 컬렉션에 자동으로 공유되지 않습니다.

## 의미를 정확하게 유지하기
`equivalent_to`는 단순히 비슷하다는 뜻이 아니고, `disjoint_with`는 반의어의 일반 표현이 아닙니다. 의미가 확인된 직접 관계만 저장하세요. 자동 추론 결과를 별도의 사실처럼 생성·저장하는 기능은 현재 프로토콜에 없습니다.

반대 방향을 자동으로 중복 저장할 필요는 없습니다. 관계지도의 표시 방향과 필터는 앱의 탐색 규칙이며 저장된 관계의 방향과 구분하세요.
