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 extension
LOAD webbed;
-- Read XML files directly into tables
SELECT * FROM 'data.xml';
SELECT * FROM read_xml('config/*.xml');
-- Parse and extract from XML content using XPath
SELECT xml_extract_text('<book><title>Database Guide</title></book>', '//title');
-- Result: "Database Guide"
-- Parse and extract from HTML content
SELECT html_extract_text('<html><body><h1>Welcome</h1></body></html>', '//h1');
-- Result: "Welcome"
-- Extract HTML tables directly into DuckDB
SELECT * 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 pages
SELECT 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 formats
SELECT xml_to_json('<person><name>John</name><age>30</age></person>');
SELECT json_to_xml('{"name":"John","age":"30"}');
-- Convert HTML to structured document blocks
SELECT 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 lesen
  • xml_extract_text(xml, xpath) - XPath-basierte Textextraktion
  • xml_extract_elements(xml, xpath) - strukturierte Elemente extrahieren
  • xml_extract_attributes(xml, xpath) - Attribute als Structs extrahieren
  • xml_to_json(xml) / json_to_xml(json) - Formatumwandlungen
  • xml_stats(xml) - Dokumentstatistiken und -analyse
  • xml_validate_schema(xml, xsd) - XSD-Schemavalidierung
  • xml_find_undefined_prefixes(xml, xpath) - nicht deklarierte Namensraumpräfixe erkennen
  • xml_add_namespace_declarations(xml, map) - Namensraumdeklarationen einfügen
  • parse_xml(content) - XML-Zeichenketten mit Schema-Inferenz parsen
  • parse_xml_objects(content) - XML-Zeichenketten in den rohen XML-Typ parsen

Wichtige HTML-Funktionen:

  • read_html(pattern) - HTML-Dateien in Tabellen lesen
  • html_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 extrahieren
  • html_extract_images(html) - Bilder mit Attributen extrahieren
  • html_extract_text(html, xpath) - XPath-basierte HTML-Textextraktion
  • parse_html(content) - HTML-Zeichenketten mit Schema-Inferenz parsen
  • parse_html_objects(content) - HTML-Zeichenketten in den rohen HTML-Typ parsen
  • html_to_duck_blocks(html) - HTML in strukturierte Dokumentblöcke umwandeln
  • duck_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.