## ED-01-001 – Einführung des Domain-Objekts `ContextItem`

- Übergeordnetes Dokument: ED-01_Context_Mapping.md

### Ziel

Einführung des Domain-Objekts `ContextItem` als Bestandteil des Reconcilix Domain Models.

`ContextItem` repräsentiert eine einzelne Kontextinformation, die einen `SourceValue` fachlich ergänzt und zukünftige kontextabhängige Matching-Verfahren unterstützt.

In diesem Arbeitsschritt erfolgt ausschließlich die Erweiterung des Domain Models.

Es werden weder Transport-Mappings noch Persistierung oder Candidate-Discovery implementiert.

---

### Motivation

OpenRefine kann neben dem eigentlichen Suchwert zusätzliche Context Properties übertragen.

Diese Informationen sollen im Domain Model unabhängig vom Transportformat verfügbar sein.

Hierfür wird das neue Domain-Objekt `ContextItem` eingeführt.

Die zulässigen Context Types werden durch das kontrollierte Vokabular `VOC001_Context_Types` definiert.

---

### Domain Model

Neues Domain-Objekt:

```text
ContextItem
------------
contextTypeUri
value
```

Erweiterung des bestehenden Domain-Objekts:

```text
SourceValue
-----------
...
contextItems*
```

Ein `SourceValue` kann beliebig viele ContextItems besitzen.

Ein ContextItem gehört immer genau zu einem SourceValue.

---

### Eigenschaften

#### contextTypeUri

URI eines Context Types gemäß

```
docs/transport/vocabulary/VOC001_Context_Types.md
```

Beispiele

```
https://reconcilix.vocnet.org/context/0001
https://reconcilix.vocnet.org/context/0004
https://reconcilix.vocnet.org/context/0010
```

#### value

Kontextinformation.

Der Datentyp wird bewusst nicht eingeschränkt.

Beispiele

- XML
- Text
- Koordinaten
- Datumsangaben

Die Interpretation erfolgt erst in späteren Verarbeitungsschritten.

---

### Domain-Invarianten

Ein ContextItem

- besitzt genau einen Context Type.
- besitzt genau einen Wert.
- besitzt keine eigene Identität außerhalb seines SourceValue.
- wird ausschließlich über seinen SourceValue verwaltet.

---

### Nicht Bestandteil

Nicht Bestandteil dieses Arbeitsschritts sind

- Transport-Mapping
- Persistierung
- Candidate Discovery
- Validierung gegen VOC001
- Interpretation des Context Values

---

### Auswirkungen

Betroffene Domain-Klassen

- SourceValue
- neues Domain-Objekt ContextItem

Weitere Komponenten bleiben unverändert.

---

### Abnahmekriterien

- Domain-Objekt `ContextItem` implementiert.
- `SourceValue` kann mehrere ContextItems aufnehmen.
- Bestehende Funktionen verhalten sich ohne ContextItems unverändert.
- Alle bestehenden Domain-Tests bleiben erfolgreich.