Begriffsklärung & Praxis

Frontmatter — Herkunft und Rolle bei der Vector-DB-Indexierung

Woher der Begriff kommt, und was davon relevant ist, wenn Frontmatter als Metadaten-Träger beim Chunking und Indexieren von Dokumenten in einer Vektordatenbank verwendet wird.

1 Herkunft des Begriffs

Vom Buchdruck über statische Website-Generatoren bis zum RAG-Pipeline-Standard
Verlagswesen
Front Matter (Buchdruck)
Alle Seiten vor dem Haupttext eines Buches: Titelseite, Impressum, Inhaltsverzeichnis, Vorwort. Gegenstück: „back matter" (Anhang, Index) am Ende.
~2008, Jekyll
Statische Site-Generatoren
Jekyll übernimmt den Begriff für den YAML-Block am Dateianfang, der Titel, Datum, Layout etc. beschreibt, bevor der Inhalt folgt.
Heute
Allgemeine Konvention
Markdown, Hugo, Astro, Notion-Exporte, Skill-Dateien — und in RAG-Pipelines als Ort für Metadaten, die vor dem Embedding an Chunks gehängt werden.

Front Matter ist nur eines von drei Teilen, in die ein Buch traditionell gegliedert wird — zur Abgrenzung:

Davor
Front Matter
Titelseite, Impressum, Inhaltsverzeichnis, Widmung, Vorwort. Bereitet auf den Inhalt vor, ist selbst aber nicht der Inhalt.
Der Inhalt selbst
Body Matter
Der eigentliche Haupttext: Kapitel, bei Fiktion Prolog/Epilog, bei Sachbüchern Einleitung/Fazit. Das, worum es im Buch geht.
Danach
Back Matter
Ergänzt den Haupttext, ohne selbst Teil davon zu sein: Anhang, Glossar, Bibliografie, Endnoten, Index, Danksagung, Autor-Info.

2 Frontmatter im Vector-DB-Kontext

Warum die Analogie zum Buch hier trägt

Beim Indexieren für eine Vektordatenbank wird ein Dokument typischerweise in Chunks zerlegt, jeder Chunk embeddet und zusammen mit einem Metadaten-Objekt gespeichert. Frontmatter ist der übliche Ort, an dem diese Metadaten im Quelldokument selbst deklariert werden — meist als YAML-Block am Anfang der Datei — statt sie erst zur Laufzeit zu raten oder aus dem Dateisystem abzuleiten.

Der Vorteil: Die Metadaten wandern mit dem Dokument, sind versionierbar (z. B. in Git), von Menschen lesbar und lassen sich beim Ingestion-Schritt 1:1 in das metadata-Feld des Vektor-Records übernehmen — ganz gleich ob Pinecone, Weaviate, Qdrant, Chroma oder pgvector als Backend dient.

Beispiel — Frontmatter einer Wissensdatenbank-Quelle vor dem Chunking
---
title: "SLA-Richtlinie Enterprise-Kunden"
doc_id: "kb-2026-0341"
source: "confluence://legal-space/sla-policy"
version: "3.2"
created_at: 2025-11-04
updated_at: 2026-07-19
author: "j.mustermann@beispiel-gmbh.de"
language: "de"
category: "legal"
tags: ["sla", "enterprise", "support"]
access_level: "internal"
---

Inhalt des Dokuments, der anschließend
gechunkt und embedded wird …

3 Frontmatter-Äquivalente in anderen Dateiformaten

Markdown-Frontmatter ist nur die sichtbarste Variante — z. B. Word, PowerPoint, PDF und E-Mails transportieren dieselbe Art Metadaten anders

Bei Markdown ist Frontmatter ein reiner Community-Konvention-Trick: freier Text, den sich niemand vorschreibt. Andere Dateiformate lösen dasselbe Grundbedürfnis — Metadaten unabhängig vom sichtbaren Inhalt mitzuführen — über eigene, teils sogar standardisierte Mechanismen.

Bei Word und PowerPoint (beide im OOXML-Format, technisch ein ZIP-Container) stecken die Metadaten in zwei internen XML-Dateien: docProps/core.xml und docProps/app.xml. Interessant dabei: Die Core-Properties sind explizit auf Dublin Core gemappt — dort taucht der dc:-Präfix aus der letzten Frage tatsächlich 1:1 auf (dc:title, dc:creator, dc:subject, dcterms:created). Der Nutzer setzt diese Felder über Datei → Informationen → Eigenschaften — es gibt aber keine automatisch vorgeschaltete Seite oder Tabelle im Dokument selbst; sichtbare Deckblätter mit Metadaten-Feldern sind immer manuell gestaltete Vorlagen. Frei definierbare Zusatzfelder (das Äquivalent zu category oder access_level) lassen sich über Erweiterte Eigenschaften → Benutzerdefiniert anlegen.

Bei PDFs gibt es zwei parallele Schichten: das ältere Info-Dictionary (Title, Author, Subject, Keywords) und XMP-Metadata — ein eingebettetes XML-Paket, wieder auf Dublin-Core-Basis.

Bei E-Mails ist die Analogie am direktesten: RFC 5322 schreibt einen Header-Block vor einer Leerzeile vor dem eigentlichen Body vor — From, To, Subject, Date, Message-ID, References. Strukturell praktisch identisch zu YAML-Frontmatter, nur ohne ----Trenner. Ein Teil davon setzt der Nutzer (Betreff, Empfänger), ein Teil der Mail-Client automatisch (Datum, Message-ID).

FormatWo die Metadaten steckenWie sie gesetzt werden
Markdown (.md) YAML-Block am Dateianfang Nutzer schreibt den Block direkt als Text
Word / PowerPoint
(.docx / .pptx)
docProps/core.xml + app.xml im OOXML-Container (Dublin-Core-Felder) Nutzer über Eigenschaften-Dialog; frei definierbare Felder über „Benutzerdefiniert"
PDF Info-Dictionary + eingebettetes XMP-Metadaten-Paket Erstellende Anwendung beim Export, nachträglich per Tool (Acrobat, ExifTool) änderbar
E-Mail (.eml) RFC-5322-Header-Block vor einer Leerzeile Teils Nutzer (Betreff, Empfänger), teils automatisch vom Mail-Client (Datum, Message-ID)

Für die Indexierungspipeline heißt das: Bei Office-Formaten, PDFs und E-Mails extrahiert der Parser (z. B. python-docx, python-pptx, extract-msg, Unstructured, LlamaParse, Microsoft markitdown) die nativen Metadaten automatisch — dafür brauchst du kein eigenes Frontmatter. Was diese Formate nicht nativ mitbringen — category, access_level, department im Sinne deiner Pipeline — musst du trotzdem zusätzlich zuführen, etwa über die „Benutzerdefinierten Eigenschaften" bei Office-Dateien oder eine separate Mapping-Tabelle pro Quelle/Ordner.

4 Standard-Metadatenfelder

Es gibt keine verbindliche Norm — aber über gängige RAG-Frameworks (LangChain, LlamaIndex, Unstructured, Vectorize) hat sich ein De-facto-Vokabular etabliert
Nutzer vom Nutzer bei Anlage/Pflege des Dokuments angegeben (Frontmatter, Dokumenteigenschaften) System von der Ingestion-Pipeline automatisch ermittelt — der Verarbeitungskette, die ein Dokument von der Quelle bis in die Vektor-DB schleust (Einlesen, Parsen, Chunking, Embedding, Speichern) Chunking entsteht erst beim Zerlegen in Chunks
Herkunft & Identität
FeldZweckHerkunft
doc_id / origin_idEindeutige ID des Ursprungsdokuments (meist UUID) — für Updates, Re-Indexierung, LöschungSystem
source / source_uriPfad oder URI zur Originalquelle (Dateisystem, Confluence, S3, Web-URL)System
filenameUrsprünglicher Dateiname, unabhängig vom internen SpeicherpfadSystem
originIngestion-Kanal, z. B. file-upload, web-crawler, confluence-syncSystem
content_hash / checksumHash des Inhalts zur Deduplizierung und zum Erkennen von Änderungen (Re-Embedding nur bei Diff)System
Chunk-Position & Struktur automatisch generiert
FeldZweckHerkunft
chunk_idEindeutige ID des einzelnen Chunks, oft {doc_id}_{index}Chunking
chunk_index / total_chunksPosition im Dokument, z. B. „Chunk 20 von 181" — ermöglicht Nachbarschafts-RetrievalChunking
section / headingÜberschrift des Abschnitts, aus dem der Chunk stammt (verbessert Zitierbarkeit)Chunking
page_numberSeitenzahl bei PDFs — wichtig für exakte QuellenangabenChunking
start_char / end_charOffset im Originaltext, für Highlighting oder Re-AssemblyChunking

Diese Gruppe steht bewusst nicht in der Frontmatter: Sie hängt von der gewählten Chunk-Größe und Overlap-Strategie ab und existiert erst, nachdem der Chunker gelaufen ist — bei jedem Re-Indexierungslauf können sich die Werte ändern.

Zeit & Versionierung
FeldZweckHerkunft
created_at / updated_atErstellungs- bzw. letztes Änderungsdatum der Quelle — für zeitliche Filterung („nur aktuelle Version")Nutzer
ingested_atZeitpunkt der Indexierung in die Vektor-DB (unabhängig vom Dokumentdatum)System
versionDokumentversion, relevant wenn mehrere Fassungen parallel existieren könnenNutzer
embedding_modelWelches Embedding-Modell verwendet wurde — wichtig bei Modellwechsel/MigrationSystem
Klassifikation & Zugriff
FeldZweckHerkunft
category / typeGrobe Einordnung, z. B. policy, ops, legalNutzer
tags[]Frei vergebbare Schlagwörter für feingranulare FilterungNutzer
department / ownerOrganisatorische Zuordnung, unterstützt Multi-Tenant-TrennungNutzer
access_level / aclBerechtigungsstufe (z. B. public, internal, confidential) — essenziell, damit die Suche keine Inhalte zurückgibt, für die der fragende User keine Berechtigung hatNutzer
languageSprachcode — relevant bei mehrsprachigen Korpora und sprachspezifischen Embedding-ModellenNutzer
Anlehnung an Dublin Core
Der Präfix dc: ist ein XML/RDF-Namespace (http://purl.org/dc/elements/1.1/), nötig nur in XML/RDF-Serialisierungen wie RSS/Atom, OAI-PMH oder XMP-Metadaten in PDFs. In einem flachen JSON-Metadatenobjekt für eine Vector-DB entfällt der Präfix — man übernimmt nur die Begriffsebene, nicht die Schreibweise:
title (≙ dc:title)
author (≙ dc:creator)
created_at (≙ dc:date)
tags / category (≙ dc:subject)
doc_id (≙ dc:identifier)
language (≙ dc:language)
Anlehnung an schema.org
datePublished → created_at
dateModified → updated_at
author → author
keywords → tags
url → source_uri

5 Erwähnenswertes für die Praxis

Punkte, die in reinen Feldlisten oft untergehen
Metadaten-Vererbung: Dokument- vs. Chunk-Ebene
Frontmatter beschreibt meist das ganze Dokument. Beim Chunking wird dieses Set typischerweise an jeden Chunk vererbt und um chunk-spezifische Felder (chunk_id, section) ergänzt. Ohne diese Vererbung verliert man nach dem Chunking den Bezug zur Quelle.
Metadaten-Größe begrenzen
Viele Vektor-DBs limitieren die Metadaten-Payload pro Vektor (z. B. Pinecone: 40 KB pro Vektor). Frontmatter sollte kompakt bleiben — lange Freitexte gehören in den Chunk-Inhalt, nicht ins Metadatenfeld.
Metadaten-Filterung vor der Ähnlichkeitssuche
Der eigentliche Nutzen strukturierter Frontmatter-Felder liegt oft nicht im Embedding selbst, sondern in Pre-Filtering: Die Vektorsuche wird per Metadaten-Filter (z. B. department = "support") vorab eingeschränkt, bevor die kostenintensive Ähnlichkeitsberechnung läuft.
#
snake_case als De-facto-Konvention
Frameworks wie Vectorize, LangChain und LlamaIndex verwenden durchgängig snake_case für Feldnamen. Eine einheitliche Namenskonvention über alle Quellen hinweg erleichtert spätere Filter-Queries erheblich.
Kein universeller Zwangsstandard — aber Konvergenz
Es gibt keine ISO-Norm für RAG-Metadaten. LangChain (Document.metadata) und LlamaIndex (Node.metadata) lassen bewusst freie Dicts zu. In der Praxis konvergieren aber fast alle Pipelines auf dieselbe Kernmenge: source, doc_id, chunk_id, created_at/updated_at, category/tags.