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 extensionLOAD markdown;
-- Read Markdown files with glob patternsSELECT content FROM read_markdown('docs/**/*.md');
-- Parse into block-level elements (duck_block shape)SELECT element_type, content, levelFROM read_markdown_blocks('README.md')ORDER BY element_order;
-- Extract code blocks from Markdown textSELECT cb.language, cb.codeFROM ( SELECT UNNEST(md_extract_code_blocks('```python\nprint("Hello")\n```')) as cb);
-- Build rich text with inline elementsSELECT 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 tableCOPY (SELECT * FROM my_table) TO 'output.md' (FORMAT MARKDOWN);
-- Round-trip: read blocks, transform, write backCOPY ( 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()undread_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,attributesundelement_orderparsen - 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 lesenread_markdown_sections()- Dateien in hierarchische Abschnitte mit Filteroptionen parsenread_markdown_blocks()- Dateien in blockweise Elemente parsen (duck_block-Form)duck_block_to_md()- Einzelnes Block-/Inline-Element nach Markdown umwandelnduck_blocks_to_md()- Elementliste in ein Markdown-Dokument umwandelnduck_blocks_to_sections()- Blöcke in hierarchische Abschnitte umwandelnmd_extract_code_blocks()- Codeblöcke mit Sprache und Metadaten extrahierenmd_extract_links()- Links mit Text, URL und Titelinformationen extrahierenmd_extract_images()- Bilder mit Alternativtext und Metadaten extrahierenmd_extract_tables_json()- Tabellen als strukturiertes JSON extrahierenmd_to_html()- Markdown-Inhalt nach HTML umwandelnmd_to_text()- Markdown in Klartext für die Volltextsuche umwandelnmd_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 exportierendocument- Markdown aus Abschnitten mit Überschriften und Inhalt rekonstruierenblocks/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.