webbed
Umfassende Verarbeitungserweiterung für Web-Auszeichnungssprachen (XML und HTML) mit SAX-Streaming für große Dateien, intelligenter Schema-Inferenz, XPath-basierter Datenextraktion und HTML-Tabellenparsing.
Maintainer: teaguesterling
Installation und Laden
INSTALL webbed FROM community;LOAD webbed;Beispiel
-- Load the extensionLOAD webbed;
-- Read XML files directly into tablesSELECT * FROM 'data.xml';SELECT * FROM read_xml('config/*.xml');
-- Parse and extract from XML content using XPathSELECT xml_extract_text('<book><title>Database Guide</title></book>', '//title');-- Result: "Database Guide"
-- Parse and extract from HTML contentSELECT html_extract_text('<html><body><h1>Welcome</h1></body></html>', '//h1');-- Result: "Welcome"
-- Extract HTML tables directly into DuckDBSELECT * FROM html_extract_tables('<table><tr><th>Name</th><th>Age</th></tr><tr><td>John</td><td>25</td></tr></table>');
-- Extract links and images from HTML pagesSELECT html_extract_links('<a href="https://example.com">Click here</a>');SELECT html_extract_images('<img src="photo.jpg" alt="Photo" width="800">');
-- Parse XML strings directly (without files)SELECT * FROM parse_xml('<books><book><title>DuckDB</title><price>29.99</price></book></books>');
-- Convert between XML and JSON formatsSELECT xml_to_json('<person><name>John</name><age>30</age></person>');SELECT json_to_xml('{"name":"John","age":"30"}');
-- Convert HTML to structured document blocksSELECT html_to_duck_blocks('<h1>Title</h1><p>Paragraph with <strong>bold</strong> text.</p>');Über webbed
DuckDB XML ist eine umfassende Erweiterung, die leistungsfähige XML- und HTML-Verarbeitung nach DuckDB bringt und SQL-native Analyse strukturierter Dokumente ermöglicht. Die Erweiterung deckt vier Kernbereiche ab:
XML-Verarbeitung und -Analyse: XML-Dokumente mit vollständigen XPath-1.0-Ausdrücken parsen, validieren und Daten extrahieren. Zu den Funktionen gehören xml_extract_text(), xml_extract_elements(), xml_extract_attributes(), xml_valid() und xml_stats() für umfassende Dokumentanalyse. Die Erweiterung behandelt Namensräume mit intelligenter Erkennung im Modus auto, Kommentare, CDATA-Abschnitte und bietet Hilfen wie xml_pretty_print() und xml_minify().
HTML-Verarbeitung und Web Scraping: Fortgeschrittenes HTML-Parsing mit spezialisierten Funktionen zur Extraktion von Webdaten. Text mit html_extract_text() extrahieren, HTML-Tabellen mit html_extract_tables() in strukturierte Daten überführen, Links mit Metadaten über html_extract_links() und Bilder mit Attributen über html_extract_images() extrahieren. Gut geeignet für Web Scraping und die Analyse von HTML-Dokumenten.
Dokumentblock-Verarbeitung: HTML-Dokumente mit html_to_duck_blocks() und duck_blocks_to_html() in strukturierte Blockdarstellungen und zurück wandeln. Unterstützt Absätze, Überschriften, Codeblöcke, Tabellen, Listen, Inline-Formatierung (fett, kursiv, Links usw.) und den Erhalt von Frontmatter. Integriert sich mit der Erweiterung duck_block_utils für volle Markdown-Unterstützung.
Intelligente Schema-Inferenz und Dateilesen: XML-/HTML-Dokumente automatisch in relationale Tabellen flachklopfen, mit intelligenter Typerkennung für Datumswerte, Zahlen, Booleans und verschachtelte Strukturen. Funktionen wie read_xml() und read_html() bieten direkte Datei-zu-Tabelle-Umwandlung mit konfigurierbaren Optionen einschließlich datetime_format-Voreinstellungen, nullstr für eigene NULL-Werte und Schema-Anpassung. SAX-Streaming (v2.0) verarbeitet Dateien über 16 MB automatisch mit einem Push-Parser, der XML in 64-KB-Blöcken verarbeitet — der Spitzenspeicher bleibt proportional zu einem einzelnen Datensatz, nicht zur Dateigröße.
Wichtige XML-Funktionen:
read_xml(pattern)- XML-Dateien mit automatischer Schema-Inferenz lesenxml_extract_text(xml, xpath)- XPath-basierte Textextraktionxml_extract_elements(xml, xpath)- strukturierte Elemente extrahierenxml_extract_attributes(xml, xpath)- Attribute als Structs extrahierenxml_to_json(xml)/json_to_xml(json)- Formatumwandlungenxml_stats(xml)- Dokumentstatistiken und -analysexml_validate_schema(xml, xsd)- XSD-Schemavalidierungxml_find_undefined_prefixes(xml, xpath)- nicht deklarierte Namensraumpräfixe erkennenxml_add_namespace_declarations(xml, map)- Namensraumdeklarationen einfügenparse_xml(content)- XML-Zeichenketten mit Schema-Inferenz parsenparse_xml_objects(content)- XML-Zeichenketten in den rohen XML-Typ parsen
Wichtige HTML-Funktionen:
read_html(pattern)- HTML-Dateien in Tabellen lesenhtml_extract_tables(html)- HTML-Tabellen als strukturierte Daten extrahieren (erfordert oft Nachbearbeitung wegen der möglichen Komplexität von HTML-Tabellen)html_extract_links(html)- alle Links mit Metadaten extrahierenhtml_extract_images(html)- Bilder mit Attributen extrahierenhtml_extract_text(html, xpath)- XPath-basierte HTML-Textextraktionparse_html(content)- HTML-Zeichenketten mit Schema-Inferenz parsenparse_html_objects(content)- HTML-Zeichenketten in den rohen HTML-Typ parsenhtml_to_duck_blocks(html)- HTML in strukturierte Dokumentblöcke umwandelnduck_blocks_to_html(blocks)- Dokumentblöcke zurück nach HTML wandeln
Umfassende Dokumentation und Beispiele finden Sie unter https://duckdb-webbed.readthedocs.io.
Aufgebaut auf libxml2 für robustes, standardkonformes Parsing mit umfassender Fehlerbehandlung und speichersicherer RAII-Implementierung. 91 Testsuiten mit 3011 Assertions, einschließlich DOM/SAX-Äquivalenz, adversarieller/sicherheitsbezogener und Multi-File-Parallelitätstests. Die Erweiterung unterstützt gemischte Dateisysteme, konfigurierbare Schema-Inferenz und die effiziente Verarbeitung großer Dokumentsammlungen.
Hinzugefügte Funktionen
| function_name | function_type | description | comment | examples |
|---|---|---|---|---|
| duck_blocks_to_html | scalar | NULL | NULL | |
| html_escape | scalar | NULL | NULL | |
| html_extract_images | scalar | NULL | NULL | |
| html_extract_links | scalar | NULL | NULL | |
| html_extract_table_rows | scalar | NULL | NULL | |
| html_extract_tables | table | NULL | NULL | |
| html_extract_tables_json | scalar | NULL | NULL | |
| html_extract_text | scalar | NULL | NULL | |
| html_to_duck_blocks | scalar | NULL | NULL | |
| html_unescape | scalar | NULL | NULL | |
| json_to_xml | scalar | NULL | NULL | |
| parse_html | scalar | NULL | NULL | |
| parse_html | table | NULL | NULL | |
| parse_html_objects | table | NULL | NULL | |
| parse_xml | table | NULL | NULL | |
| parse_xml_objects | table | NULL | NULL | |
| read_html | table | NULL | NULL | |
| read_html_objects | table | NULL | NULL | |
| read_xml | table | NULL | NULL | |
| read_xml_objects | table | NULL | NULL | |
| to_xml | scalar | NULL | NULL | |
| xml | scalar | NULL | NULL | |
| xml_add_namespace_declarations | scalar | NULL | NULL | |
| xml_common_namespaces | scalar | NULL | NULL | |
| xml_detect_prefixes | scalar | NULL | NULL | |
| xml_extract_all_text | scalar | NULL | NULL | |
| xml_extract_attributes | scalar | NULL | NULL | |
| xml_extract_cdata | scalar | NULL | NULL | |
| xml_extract_comments | scalar | NULL | NULL | |
| xml_extract_elements | scalar | NULL | NULL | |
| xml_extract_elements_string | scalar | NULL | NULL | |
| xml_extract_text | scalar | NULL | NULL | |
| xml_find_undefined_prefixes | scalar | NULL | NULL | |
| xml_libxml2_version | scalar | NULL | NULL | |
| xml_lookup_namespace | scalar | NULL | NULL | |
| xml_minify | scalar | NULL | NULL | |
| xml_mock_namespaces | scalar | NULL | NULL | |
| xml_namespaces | scalar | NULL | NULL | |
| xml_oom_selftest | scalar | NULL | NULL | |
| xml_pretty_print | scalar | NULL | NULL | |
| xml_stats | scalar | NULL | NULL | |
| xml_to_json | scalar | NULL | NULL | |
| xml_valid | scalar | NULL | NULL | |
| xml_validate_schema | scalar | NULL | NULL | |
| xml_well_formed | scalar | NULL | NULL | |
| xml_wrap_fragment | 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 |
|---|---|---|---|---|
| HTML | 16 | VARCHAR | STRING | true |
| XML | 16 | VARCHAR | STRING | true |
| XMLFragment | 16 | VARCHAR | STRING | true |
Hinzugefügte Einstellungen
Diese Erweiterung fügt keine Einstellungen hinzu.