markdown

Markdown-Dateien lesen, analysieren und schreiben mit blockweiser Dokumentdarstellung und Unterstützung für Inline-Elemente

Maintainer: teaguesterling

Installation und Laden

INSTALL markdown FROM community;
LOAD markdown;

Beispiel

-- Load the extension
LOAD markdown;
-- Read Markdown files with glob patterns
SELECT content FROM read_markdown('docs/**/*.md');
-- Parse into block-level elements (duck_block shape)
SELECT element_type, content, level
FROM read_markdown_blocks('README.md')
ORDER BY element_order;
-- Extract code blocks from Markdown text
SELECT cb.language, cb.code
FROM (
SELECT UNNEST(md_extract_code_blocks('```python\nprint("Hello")\n```')) as cb
);
-- Build rich text with inline elements
SELECT duck_blocks_to_md([
{kind: 'inline', element_type: 'text', content: 'Check out ', level: 1, encoding: 'text', attributes: MAP{}, element_order: 0},
{kind: 'inline', element_type: 'link', content: 'our docs', level: 1, encoding: 'text', attributes: MAP{'href': 'https://duckdb-markdown.readthedocs.io/'}, element_order: 1}
]);
-- Export query results as Markdown table
COPY (SELECT * FROM my_table) TO 'output.md' (FORMAT MARKDOWN);
-- Round-trip: read blocks, transform, write back
COPY (
SELECT kind, element_type, content, level, encoding, attributes
FROM read_markdown_blocks('doc.md')
) TO 'copy.md' (FORMAT MARKDOWN, markdown_mode 'blocks');

Über markdown

Die Markdown-Erweiterung fügt DuckDB umfassende Markdown-Verarbeitung hinzu und ermöglicht strukturierte Analyse, Transformation und Erzeugung von Markdown-Dokumenten.

Dokumentation: https://duckdb-markdown.readthedocs.io/

Wichtige Funktionen:

  • Dateilesefunktionen: Markdown-Dateien mit read_markdown(), read_markdown_sections() und read_markdown_blocks() lesen, mit Unterstützung für Glob-Muster, Metadatenextraktion und blockweises Parsen
  • Blockweise Darstellung: Dokumente ins duck_block-Format mit den Spalten kind (block/inline), element_type, content, level, encoding, attributes und element_order parsen
  • Unterstützung für Inline-Elemente: Rich-Text-Inhalte mit Fett, Kursiv, Links, Code, Mathematik und mehr über die einheitliche duck_block-Struktur aufbauen
  • COPY TO Markdown: Abfrageergebnisse als Markdown-Tabellen, Dokumente oder blockweise Darstellungen mit vollem Roundtrip exportieren
  • Inhaltsextraktion: Codeblöcke, Links, Bilder und Tabellen aus Markdown-Inhalt mit strukturierten LIST-Rückgabetypen extrahieren
  • Dokumentverarbeitung: Markdown nach HTML/Text umwandeln, Inhalt prüfen, Metadaten extrahieren und Dokumentstatistiken erzeugen
  • Replacement-Scan-Unterstützung: Markdown-Dateien direkt mit der Syntax FROM '*.md' und voller Glob-Musterunterstützung abfragen
  • Nativer MARKDOWN-Typ: Eigener MARKDOWN-Typ mit automatischem VARCHAR-Casting für nahtlose Integration
  • Plattformübergreifende Unterstützung: Funktioniert unter Linux, macOS, WebAssembly und Windows
  • GitHub Flavored Markdown: Verwendet cmark-gfm für genaues Parsen moderner Markdown-Funktionen
  • Hohe Leistung: Tausende Dokumente effizient mit über 4.000 Abschnitten/Sekunde verarbeiten

Kernfunktionen:

  • read_markdown() - Markdown-Dateien mit umfassender Parameterunterstützung lesen
  • read_markdown_sections() - Dateien in hierarchische Abschnitte mit Filteroptionen parsen
  • read_markdown_blocks() - Dateien in blockweise Elemente parsen (duck_block-Form)
  • duck_block_to_md() - Einzelnes Block-/Inline-Element nach Markdown umwandeln
  • duck_blocks_to_md() - Elementliste in ein Markdown-Dokument umwandeln
  • duck_blocks_to_sections() - Blöcke in hierarchische Abschnitte umwandeln
  • md_extract_code_blocks() - Codeblöcke mit Sprache und Metadaten extrahieren
  • md_extract_links() - Links mit Text, URL und Titelinformationen extrahieren
  • md_extract_images() - Bilder mit Alternativtext und Metadaten extrahieren
  • md_extract_tables_json() - Tabellen als strukturiertes JSON extrahieren
  • md_to_html() - Markdown-Inhalt nach HTML umwandeln
  • md_to_text() - Markdown in Klartext für die Volltextsuche umwandeln
  • md_stats() - Dokumentstatistiken abrufen (Wortzahl, Lesezeit usw.)
  • md_extract_metadata() - Frontmatter-Metadaten als MAP extrahieren

COPY-TO-Modi:

  • table (Standard) - Jede Abfrage als formatierte Markdown-Tabelle exportieren
  • document - Markdown aus Abschnitten mit Überschriften und Inhalt rekonstruieren
  • blocks / duck_block - Roundtrip der blockweisen Darstellung mit Unterstützung für Inline-Elemente

Beispielhafte Anwendungsfälle:

  • Dokumentationsanalyse über ganze Repositories
  • Bewertung und Prüfung der Inhaltsqualität
  • Groß angelegte Dokumentationssuche und -indizierung
  • Extraktion und Analyse von Codebeispielen
  • Dokumenttransformationspipelines
  • Rich-Text-Erzeugung mit Inline-Formatierung
  • Knowledge-Base-Verarbeitung und Inhaltsverwaltung

Leistung:

Praxis-Benchmark: Verarbeitung von 287 Markdown-Dateien (2.699 Abschnitte, 1.137 Codeblöcke, 1.174 Links) in 603 ms.

Vollständige Testsuite mit 1190 bestandenen Assertions in 24 Testdateien.

Hinzugefügte Funktionen

function_name function_type description comment examples
duck_block_to_md scalar NULL NULL
duck_blocks_to_md scalar NULL NULL
duck_blocks_to_sections scalar NULL NULL
md_extract_code_blocks scalar NULL NULL
md_extract_frontmatter scalar NULL NULL
md_extract_images scalar NULL NULL
md_extract_links scalar NULL NULL
md_extract_metadata scalar NULL NULL
md_extract_section scalar NULL NULL
md_extract_sections scalar NULL NULL
md_extract_table_rows scalar NULL NULL
md_extract_tables_json scalar NULL NULL
md_extract_tags scalar NULL NULL
md_extract_wikilinks scalar NULL NULL
md_section_breadcrumb scalar NULL NULL
md_stats scalar NULL NULL
md_to_html scalar NULL NULL
md_to_text scalar NULL NULL
md_valid scalar NULL NULL
parse_markdown_to_duck_blocks scalar NULL NULL
read_markdown table NULL NULL
read_markdown_blocks table NULL NULL
read_markdown_sections table NULL NULL
value_to_md scalar NULL NULL

Überladene Funktionen

Diese Erweiterung fügt keine Funktionsüberladungen hinzu.

Hinzugefügte Typen

type_name type_size logical_type type_category internal
markdown 16 VARCHAR STRING true
md 16 VARCHAR STRING true

Hinzugefügte Einstellungen

Diese Erweiterung fügt keine Einstellungen hinzu.