將 CSS 作為查詢語言的探索

Hacker News·

本文探討將 CSS 作為通用查詢語言的潛力,透過將其選擇器邏輯與 Datalog 進行比較,並提出一種名為 CSSLog 的遞迴版本,用以解決複雜的樣式繼承與邏輯查詢問題。

背景

這篇文章探討了將 CSS 視為一種查詢語言(Query Language)的可能性,甚至將其與邏輯編程語言 Datalog 進行類比。作者 evdc.me 提出,CSS 的選擇器本質上是在描述集合,而屬性宣告則是對這些集合進行操作,若能引入遞迴關係與屬性回饋選擇器的機制,CSS 就能演變成一種名為 CSSLog 的強大查詢工具,用以解決如深層嵌套主題切換等複雜的邏輯問題。

社群觀點

在 Hacker News 的討論中,社群對於將 CSS 邏輯化的看法呈現兩極化。部分開發者對此概念感到興奮,認為 CSS 選擇器在處理樹狀結構數據時比 XPath 更直觀且易於撰寫。例如有留言提到 PHP 新版的 DOM API 已原生支持 CSS 選擇器,這大幅降低了開發者解析 HTML 的門檻。此外,也有人指出 CSS 選擇器的應用早已超出瀏覽器範疇,像是 pyastgrep 工具就能利用 CSS 選擇器來查詢 Python 的語法樹(AST),這證明了這種語法在非樣式領域的潛力。

然而,另一派觀點則對 CSS 日益增長的複雜性感到擔憂。有評論者批評,現代 CSS 引入了過多複雜的語法,如容器查詢或複雜的偽類選擇器,這使得原本優雅簡單的樣式表變得難以閱讀與維護。他們認為,如果需要處理深層的邏輯判斷,或許應該尋求全新的替代方案,而不是在現有的 CSS 基礎上不斷疊加補丁。針對文章中提到的遞迴主題切換案例,有網友質疑作者是否忽略了現有的 :has() 選擇器,認為目前的 CSS 規範其實已經能解決部分所述的痛點,不需要上升到 Datalog 的層次。

對此,原作者在討論串中澄清,這項實驗並非真的要向 CSS 規範提案增加更多語法,而是試圖從 CSS 的語法美學中汲取靈感,並將其應用於邏輯查詢系統。他認為 Datalog 雖然強大,但其學術化的語法對一般工程師來說過於陌生,若能結合 CSS 的宣告式風格、SQL 的關聯性以及 Datalog 的遞迴能力,或許能創造出一種更適合現代開發者的查詢語言。這種跨領域的模式轉移,雖然在實務上可能顯得瘋狂,但對於探索編程語言的邊界具有啟發意義。

延伸閱讀

在討論中,參與者分享了幾個將 CSS 語法應用於不同領域的專案。pyastgrep 是一個能讓開發者使用 CSS 選擇器來搜尋 Python 代碼結構的工具。此外,graphql-css 則是一個有趣的實驗性專案,嘗試將 GraphQL 與 CSS 模式結合。對於偏好傳統查詢方式的開發者,也有人提到 document.evaluate 是在瀏覽器端使用 XPath 的標準做法,而 jq 則是處理 JSON 樹狀結構時最常被拿來類比的工具。

Hacker News

相關文章

  1. 現代 CSS 程式碼片段:別再像 2015 年那樣寫 CSS 了

    2 個月前

  2. 為什麼我花了多年時間試圖讓 CSS 狀態變得可預測

    6 天前

  3. CSS-Doodle

    2 個月前

  4. CSS 毀滅戰士:用 CSS 打造 DOOM 引擎

    大約 1 個月前

  5. 管線化關聯查詢語言,發音為 Prequel

    2 個月前

其他收藏 · 0