# Unified Document Model (UDM) ## Konzept & Zielsetzung Das Unified Document Model definiert eine **generische, formatunabhängige Baumstruktur**, in die jeder Dokumenttyp (PDF, DOCX, PPTX, XLSX, HTML, ZIP) durch einen Extractor überführt wird. Dadurch können AI-Workflows, Nodes und Tools mit einem einzigen Objektmodell arbeiten – unabhängig vom Quellformat. ### Designprinzipien - **3-Ebenen-Garantie**: Jedes Dokument hat exakt drei Verschachtelungsebenen (ausgenommen ZIP als Meta-Container). - **Einheitliche Blattknoten**: Alle atomaren Inhalte sind `ContentBlock`-Objekte mit identischer Attributstruktur. - **Generische Traversierung**: Workflow-Nodes (Loop, Filter, Transform, Map) arbeiten formatunabhängig über dieselbe Baumstruktur. - **Keine formatspezifischen Zwischenschichten**: Konzepte wie "Paragraph", "Row" oder "Cell" werden in den `ContentBlock` absorbiert, nicht als eigene Ebenen modelliert. --- ## Architekturübersicht ``` ┌─────────────────────────────────────────────────────┐ │ Level 1 — Document │ │ ┌───────────────────────────────────────────────┐ │ │ │ Level 2 — StructuralNode │ │ │ │ ┌─────────────────────────────────────────┐ │ │ │ │ │ Level 3 — ContentBlock (Blattknoten) │ │ │ │ │ └─────────────────────────────────────────┘ │ │ │ └───────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────┘ ``` ### Ebenen im Detail | Ebene | Typ | Beschreibung | |-------|-----|-------------| | **Level 1** | `Document` | Wurzelknoten. Repräsentiert ein einzelnes Quelldokument. | | **Level 2** | `StructuralNode` | Strukturelle Gliederungseinheit: Seite, Abschnitt, Slide oder Sheet. | | **Level 3** | `ContentBlock` | Atomarer Inhalt: Text, Bild, Tabelle, Code, Medien, Link oder Formel. | --- ## Datenmodell ### Document (Level 1) Der Wurzelknoten pro Quelldatei. ```typescript interface Document { id: string; role: "document"; source_type: "pdf" | "docx" | "pptx" | "xlsx" | "html"; source_path: string; metadata: Metadata; children: StructuralNode[]; } ``` | Feld | Typ | Beschreibung | |------|-----|-------------| | `id` | `string` | Eindeutige ID (UUID) | | `role` | `"document"` | Immer `"document"` auf Level 1 | | `source_type` | `string` | Originalformat der Quelldatei | | `source_path` | `string` | Pfad der Originaldatei (relativ zum Workspace oder Archiv) | | `metadata` | `Metadata` | Dokument-Metadaten | | `children` | `StructuralNode[]` | Liste der strukturellen Einheiten | --- ### StructuralNode (Level 2) Die Gliederungseinheit innerhalb eines Dokuments. ```typescript interface StructuralNode { id: string; role: "page" | "section" | "slide" | "sheet"; index: number; label: string | null; metadata: Metadata; children: ContentBlock[]; } ``` | Feld | Typ | Beschreibung | |------|-----|-------------| | `id` | `string` | Eindeutige ID | | `role` | `string` | Art der Struktureinheit (formatabhängig, aber aus fester Menge) | | `index` | `number` | 0-basierte Position innerhalb des Dokuments | | `label` | `string?` | Optionaler Name (Sheet-Name, Abschnittsüberschrift, Slide-Titel) | | `metadata` | `Metadata` | Zusätzliche Informationen zur Struktureinheit | | `children` | `ContentBlock[]` | Liste der atomaren Inhalte | #### Rollen-Zuordnung pro Format | Quellformat | `role` | Entspricht im Original | |-------------|--------|----------------------| | PDF | `page` | Seite | | DOCX | `section` | Abschnitt (Heading-basierte Gliederung) | | PPTX | `slide` | Folie | | XLSX | `sheet` | Tabellenblatt | | HTML | `section` | Semantischer Bereich (`
`, `
`, `