釋字及憲法法庭資料庫
← 文件與資料

釋字及憲法法庭資料庫 網站設計說明

本文說明離線網頁版的資料從哪裡來、每個欄位怎麼產生、哪些可以引用、以及怎麼用。 資料建置日期 2026-07-27,收錄止於 115年憲判字第5號。


一、這個網站是什麼

一個單一 HTML 檔案的離線資料庫。所有資料以 JSON 內嵌在檔案裡,沒有伺服器、沒有外部 相依、沒有網路請求。雙擊即開,可以複製到隨身碟或另一台電腦照樣運作。

兩個版本:

檔案 大小 意見書 用途
釋字及憲法法庭資料庫_輕量版.html 約 16 MB 只列標題與官網連結 日常查用,載入約 3 秒
釋字及憲法法庭資料庫.html 約 68 MB 內嵌 1,679 篇全文且可全文檢索 要搜意見書內文時才用

除了意見書全文之外,兩版內容完全相同,同一份程式產生。


二、資料從哪裡來

唯一來源:司法院憲法法庭網站 cons.judicial.gov.tw。沒有使用任何第三方資料庫、 沒有使用模型記憶中的法律知識來填補內容。

抓取方式是逐則請求官網頁面,取出頁面中 id="Print_area" 這個節點(官網「列印版」的 內容區),原封不動存成 HTML 快照放在 90_原始存檔/,再從快照解析出結構化欄位。 意見書則另外下載官網提供的 PDF 原檔,存在 90_原始存檔/意見書PDF/

網址規則

類型 網址
釋字第 N 號 docdata.aspx?fid=100&id= + (310181 + N)
釋字第 813 號 docdata.aspx?fid=100&id=325335不適用上列規則
憲判字 docdata.aspx?fid=38&id=<各案 id>,id 非連號,由官網判決列表取得

釋字第813號是建置過程中實測發現的例外。依規則推算的位址是一個沒有內容的空頁, 真實 id 由釋字第812號頁面的「下一筆」連結追出。

完整性驗證

官網每則解釋頁面右上角自己標示「第 N 筆/共 813 筆」。建置時逐則比對三個數字是否一致: 我方指派的編號、官網標示的筆序、頁面內「解釋字號」欄位的號次。813 筆全數相符,零不符。 這道驗證的意義在於,如果某一則抓錯位址而拿到別則的內容,光看檔案數量是看不出來的, 但筆序與字號會立刻對不上。


三、一筆記錄的資料模型

每則解釋或判決在 _pipeline/資料庫.json 中是一個物件,網頁與 Markdown 筆記都由它產生。

{
  "k":  "釋字0742",
  "ty": "釋字",
  "z":  "釋字第742號",
  "n":  "都市計畫定期通盤檢討變更之救濟案",
  "dt": "2016-12-09",
  "roc":"105年12月09日",
  "decree":"院台大二字第1050031469號",
  "m":  [["原分案號","…"],["聲請人","…"]],
  "q":  "都市計畫定期通盤檢討變更,如其中具體項目…",
  "s":  [["解釋文",[["1","  都市計畫擬定計畫機關…"]]],
         ["理由書",[["1","  當事人對於確定終局裁判…"]]]],
  "o":  [{"t":"許大法官宗力提出之協同意見書","h":"https://…","id":"354653","x":"(全文)",
          "ty":"協同意見書","p":["許宗力"],"a":[],
          "ai":{"one":"立場","main":"核心主張","diff":"與多數意見的差異"}}],
  "l":  ["中華民國憲法第15、16條","都市計畫法第26條","司法院釋字第156號解釋"],
  "u":  "https://cons.judicial.gov.tw/docdata.aspx?fid=100&id=310923",
  "at": "2026-07-27T14:52:31+0800",
  "ai": {"one":"…","issue":"…","holding":"…","place":"…"},
  "j":  {"w":["主筆"],"p":["提出意見書者"],"a":["加入者"],"t":["協同意見書"]}
}

四、逐欄位來源說明

下表的「可否引用」是本庫最重要的欄位。原文表示逐字取自官網,可直接引用; 推導表示由官網資料機械轉換而來,可用於檢索與整理,引用時仍應回到原文; AI表示由模型撰寫,任何情況下都不得引用。

網頁上的位置 內部欄位 官網來源 處理方式 可否引用
標題(大字) z + n 「解釋字號」或「判決字號」欄 以正則切出號次與【】內案名 原文
出處列「公布」 roc 「解釋公布院令」或「判決日期」欄 原字串保留 原文
出處列日期(清單上的) dt 同上 民國年加 1911 轉西元,供排序與年代篩選 推導
出處列末段 decree 「解釋公布院令」欄 取日期之後的剩餘文字(院令字號) 原文
出處列「官網原文」連結 u 抓取時使用的網址 原樣記錄 推導
出處列「抓取於」 at 抓取當下時間 ISO 8601 時間戳 推導
第二列(憲判才有) m 「原分案號」「聲請人」欄 原文照錄 原文
解釋爭點/案由 q #section1 或「案由」欄 原文照錄,空白正規化 原文
解釋文/主文/理由書/理由等 s ul.flex 區塊的 li.text 見下節 原文
段前的小號碼 s[][][0] 官網 <label> 原樣沿用官網段次,未重新編號 原文
意見書標題 o[].t 「意見書、抄本等文件」清單,只取標題含「意見書」者 原文照錄 原文
意見書「官網PDF」 o[].h 該清單項的 href 補上網域 推導
意見書內文(完整版) o[].x 官網 PDF 原檔 文字層抽取;無文字層者改 OCR 原文/OCR
相關法條 l #section8「相關法令」清單 去重,保留官網的版本日期括號 原文
大法官(內文第三列) j 意見書標題、主筆大法官記載 見第八節,由標題文字推導 推導,引用請以標題原文為準
意見書類型 o[].ty 意見書標題 比對七種標準類型名稱 推導
意見書白話解說 o[].ai 無,由模型依該篇意見書原文撰寫 見第七節末 不得引用
白話解說 ai 無,由模型依上列原文撰寫 見第六節 不得引用

內文區塊的解析方式

官網把每個區塊寫成 <ul class="paragraphs"><li><label>段號</label><pre>內文</pre></li>…<pre> 標籤保留原始空白,所以官網的全形空白縮排會原封不動保留下來,網頁上也用 white-space: pre-wrap 呈現。沒有做任何斷行重排、標點替換或全半形轉換。

實際出現的區塊標籤與則數:

類型 區塊 則數
釋字 解釋文 813
釋字 理由書 734
釋字 相關文件 577
憲判 主文 57
憲判 理由 57
憲判 主筆大法官記載 57
憲判 大法官就主文所採立場表 57
憲判 判決摘要 56

釋字第1號至第79號沒有獨立的理由書,這是制度沿革,不是資料缺漏。當時的解釋 只有解釋文,理由併於其中或另以「相關文件」形式呈現。


五、段號與引用(重要)

釋字:段前的號碼是官網為解釋文與理由書所編的流水段次。引用寫成 「釋字第742號解釋理由書第3段」,與官網一致。

憲判:憲法法庭判決的正式引用單位是內文中以【】標示的段碼,例如 「【12】」。本庫外層的段號與內文【】段碼經核對是一致的,兩者可互相對照, 但引用時請寫內文的【】段碼,那是判決自己給的編號。


六、白話解說是怎麼產生的

每則的白話解說有四段:一句話結論、爭點拆解、結論與理由、在體系中的位置。

產生方式是把該則的爭點、解釋文(或主文)、理由書(或理由)、相關法條餵給模型, 並下三條硬性限制:

  1. 只能依據所給的原文撰寫,不得動用模型記憶中的任何外部法律知識
  2. 不得杜撰引用。要提到其他號解釋,只能提原文裡明確出現的
  3. 原文若因長度上限被截斷,就只寫看得到的部分,不臆測後續

輸入給模型的是解釋文前 3,000 字與理由書前 2,500 字。多數則完整涵蓋;少數超長的 解釋,白話解說涵蓋的是前段論述。這是刻意的取捨:白話解說不是原文的替代品, 它是幫你決定「這則要不要細讀」的篩選工具。

在網頁上,白話解說是黃底、左側橘色粗邊、開頭有警語的獨立區塊,永遠排在所有原文 區塊之後。Markdown 筆記裡則以 --- 分隔線隔開,並加上 Obsidian 的 > [!warning] 警示框。兩邊都做到視覺上一眼可辨。


七、意見書文字的三種狀態

狀態 篇數 網頁上的樣子
PDF 有文字層,直接抽取 1,661 灰底引文區塊,逐字原文
PDF 無文字層,以 OCR 擷取 18 同上,段末標明「以繁體中文 OCR 擷取,可能有辨識誤差」
無法處理 1 紅底警示框,只留官網 PDF 連結

那 18 篇的原始 PDF 用 pdftotext 抽出來的中文字是零,確認完全沒有文字層,改以 300 dpi 轉圖後跑繁體中文 OCR,辨識結果的中文字比例都在 96% 以上。這些幾乎全是 林俊益大法官與黃虹霞大法官的意見書,應是當年 PDF 產製方式所致。OCR 段落引用前 務必以官網 PDF 核對用字,尤其是數字、法條號次與人名。

無法處理的那一篇是 112年憲判字第1號黃昭元大法官的部分不同意見書。官網標題把所有 加入的大法官與加入段次都寫進去,長達 218 字,作成檔名後超出檔案系統上限。

每篇意見書的白話解說

1,679 篇有文字的意見書,每篇都有三欄白話解說:立場(贊成結論但補理由、部分贊成部分反對、 或根本反對)、核心主張與多數意見的差異

產生方式與各則的白話解說相同,只依該篇原文撰寫,禁用模型記憶中的外部知識,禁止杜撰引用。 但有一個必須知道的限制:輸入給模型的是該篇的前 1,600 字加末 800 字,中間以「(中略)」標記。 意見書動輒上萬字,全文餵入成本過高,取首尾是因為前言通常交代立場、結尾通常收束結論。

這個取捨會漏東西,而且會誠實地顯示出來。有些意見書的核心論證正好落在中段,那幾篇的 diff 會寫「本文核心論述落在中略之內,內文未明確交代與多數意見之分歧」, 而不是編一段看似合理的分析。看到這種註記,就表示要自己去讀全文,全文就在同一個折疊區塊裡。

早期的「抄本」型檔案(例如「抄本525(含不同意見書(劉大法官鐵錚))」)是解釋文、理由書、 意見書、聲請書合訂的掃描檔,意見書本文往往整段落在中略內,這類的白話解說同樣會明白註記。


八、大法官欄位是怎麼來的

官網沒有「大法官」這個欄位。本庫的大法官資訊是從兩處文字推導出來的:

  1. 意見書標題,例如「蔡大法官明誠提出,陳大法官碧玉、張大法官瓊文加入之部分協同意見書」
  2. 憲判的「主筆大法官記載」,例如「本判決由蔡大法官宗珍主筆。」

麻煩在於官網有兩種書寫順序:「林大法官俊益」(姓+大法官+名)與「詹森林大法官主筆」 (全名+大法官)。直接用正則切會把「及」「與」「號」「判決」這些連接字誤當成姓氏, 產生「及林俊益」「號黃虹霞」這種假姓名。

因此採兩階段做法:先用寬鬆規則掃出候選並清掉頭尾雜字,剔除「是其他姓名之真子字串」的 碎片(例如「太郎」之於「呂太郎」),得到一份 59 人的大法官名冊;再拿名冊回頭比對 每一則標題。這樣就不會無中生有,也不會把兩個名字黏成一個。

提出與加入的判別:以標題中「提出」二字的位置為界,出現在其前的是提出人, 其後的是加入者。「共同提出」的情形兩人都在「提出」之前,會同時列為提出人。

成效與限制

意見書類型同樣由標題推導,比對七種標準名稱:

類型 篇數
協同意見書 810
部分不同意見書 321
不同意見書 287
部分協同部分不同意見書 111
部分協同意見書 110
部分不同部分協同意見書 12
一部協同一部不同意見書 5
(僅標「意見書」) 24

引用時請以意見書標題原文為準,不要引用本庫整理出的姓名欄位。姓名欄位的用途是 檢索與統計,不是出處。


九、相關法條這一欄的特性

官網的「相關法令」欄不只放法律條文,也放司法院解釋判例。因此 30_法條/ 底下 4,238 個節點裡,有 508 個其實是「司法院釋字第○○號解釋」, 92 個含「判例」。

這是官網資料的原貌,我沒有把它們拆開,因為那 508 個釋字節點恰好構成一份 現成的解釋互引網絡:打開 30_法條/司法院釋字第443號解釋.md,就看到本庫中 所有把釋字443列為相關法令的解釋,依公布日期排序。

被引用最多的前幾個節點:憲法第23條 173 次、憲法第15條 137 次、憲法第16條 78 次、 憲法第19條 77 次、憲法第7條 65 次。釋字之中被引最多的是釋字443(27 次)與釋字371(25 次)。

870 則之中只有 1 則沒有相關法條資料。


十、網頁介面各元件

檢索框:即時子字串比對,不做斷詞。以空白分隔多個詞時取交集(必須全部出現)。 命中的字在右側內文與左側清單摘要都會標黃,清單摘要會自動跳到命中處的前後文, 而不是固定顯示爭點開頭。

搜尋範圍下拉:預設「全部欄位」,也可以只搜單一欄位。

選項 涵蓋內容
全部欄位 以下全部
字號・案名 z + n
爭點・案由 q
解釋文・主文 解釋文、主文
理由書・理由 理由書、理由、判決理由
意見書 標題+內文(輕量版只有標題)
相關法條 l
白話解說 AI 生成的四段
其他區塊 相關文件、判決摘要、主筆大法官記載、大法官就主文所採立場表
大法官 主筆、提出意見書者、加入者的姓名

分欄搜尋的用處是排除雜訊。例如「比例原則」在全部欄位是 318 則,限縮到理由書是 176 則, 差額大多是白話解說裡提到而原文沒用這四個字的。要做嚴謹的文本統計,就該限縮到原文欄位。

人名的寬鬆比對:官網的意見書標題寫「林大法官俊益」(姓+大法官+名),但 PDF 內文 署名與引註寫「林俊益」。兩種寫法沒有交集,純子字串比對會各自命中不同的集合。 本庫的做法是在索引與查詢兩端都額外準備一份去掉「大法官」三字的副本, 因此輸入「林俊益」或「林大法官俊益」得到的結果相同(103 則),兩種寫法也都會標黃。 單獨搜尋「大法官」三字時不套用這個規則,以免整個詞被消掉。

類型下拉:釋字/憲判。年代下拉:1949–1989、1990–2004、2005–2014、2015 以後, 依 dt 西元年切分。僅有意見書:只留 o 非空者,共 329 則(另 541 則無意見書)。

清單:最多顯示 500 筆,超過會提示縮小範圍。每筆顯示字號、案名、公布日期、 意見書篇數、爭點前 88 字。

進階篩選:控制列下方的「進階篩選」按鈕會開啟一個面板,把所有可篩的欄位一次列出來, 可以同時填好幾欄再按送出,各條件之間是「且」。面板包含八個文字欄位(字號・案名、爭點・案由、 解釋文・主文、理由書・理由、意見書內容、相關法條、白話解說、其他區塊),加上 大法官姓名、大法官身分(不限/提出/加入/主筆)、意見書類型、意見書篇數下限、 公布年區間。同一欄內以空白分隔多個詞時,一樣是「且」。

篩選條件列:送出後,清單上方會列出目前生效的每一條件,例如 「理由書・理由 比例原則」「大法官 林俊益」「身分 提出」「公布年自 2010」。 每個條件右邊的 × 可以單獨移除該條件並即時重算,右側有「全部清除」。 快速檢索框與進階條件會一起生效,不會互相取消。

跳至列:內文上方一排連結,列出目前顯示中的區塊(解釋爭點、解釋文、理由書、意見書、 相關法條、白話解說),點一下直接捲到該處。被「顯示區塊」關掉的區塊不會出現在跳至列。

意見書折疊:意見書預設全部收起,只見標題列,標題左側有類型標籤(協同/不同/部分…)。 點標題列展開單篇,展開後先出現該篇的白話解說(黃底警語區塊),再接逐字全文。 上方有「全部展開」「全部收合」。

單則內意見書比較:每篇標題列前有核取方塊,勾選數篇後按「比較所選意見書」, 產生同一則之內的意見書對照表,列為意見書類型、提出/加入、白話解說、全文、官網PDF。 一樣可以「複製為表格」輸出成 Markdown。這張表與跨案件的多案比較是兩個不同的功能: 前者比同一則裡各大法官的分歧,後者比不同則之間的見解。

顯示區塊標籤:內文上方一排可切換的標籤(爭點/解釋文・主文/理由書・理由/意見書/ 相關法條/白話解說/其他區塊),點一下開關該區塊。旁邊有「全選」與「全不選」。 例如只留「爭點」與「白話解說」,就得到一個純判準速覽的畫面。 選擇會沿用到下一則,所以可以維持同一種閱讀模式連續翻案。

多案比較:左側清單每則字號前有核取方塊,勾選即加入比較清單(不會跳轉頁面)。 清單上方出現比較列,按「產生比較表」得到一張表:欄是案件,列是欄位。 比較表固定含「公布日期」與「大法官」兩列,其餘各列由同一組「顯示區塊」標籤控制, 取消勾選就把該列從表中拿掉。 表格橫向捲動,左側欄位名固定;單格內容過長時可在格內捲動。搜尋關鍵詞在表中一樣標黃。

「複製為表格」會把整張比較表複製成 Markdown 表格,含各案的完整原始出處網址, 可直接貼進論文草稿或筆記。

複製引用:產生「司法院釋字第742號解釋【案名】,網址」或「憲法法庭111年憲判字第1號判決【案名】,網址」。

網址 hash:選定某則後網址列會變成 …#釋字0742,可以存成書籤直接跳到該則。


十一、使用範例

例一 建立某一憲法條文的違憲審查沿革

想寫「憲法第8條人身自由保障的審查密度演變」,需要所有以憲法第8條為審查依據的解釋。

打開 30_法條/憲法第8條.md,裡面是 27 則,已依公布日期排序。回到網頁逐則點開, 看爭點與白話解說的「在體系中的位置」快速判斷哪幾則真正處理審查密度,再細讀理由書。

例二 主題式蒐集

想找刑事程序中的正當法律程序解釋。在檢索框輸入 正當法律程序,加上年代篩選 2005 以後,看命中筆數與清單的爭點摘要。用白話解說的「一句話結論」快速刷過, 挑出真正相關的幾則再細讀。

要更精準時,用兩個詞:正當法律程序 羈押

例三 論文寫作時取逐字引文

鎖定釋字第742號,在右側找到理由書第3段,直接複製那一段。段前的小號碼就是官網段次, 註腳寫「司法院釋字第742號解釋理由書第3段」。要引整則出處時按右上角「複製引用」。

引用意見書時寫成「林俊益大法官提出之協同意見書,司法院釋字第742號解釋」。 若該篇標了 OCR,先點官網 PDF 連結把要引的句子核對一次。

例四 追一則解釋後來被怎麼處理

想知道釋字第156號後來的發展。檢索 釋字第156號,命中的就是所有在原文中提到它的 解釋與判決。釋字742 的白話解說會直接告訴你它「補充釋字第156號」。

例五 查某位大法官的立場

想看林俊益大法官在哪些案子寫過意見書。用完整版檢索 林俊益,會同時命中意見書 標題與內文。若只想要標題命中,用 Markdown 庫的 grep 更乾淨:

findstr /s /m /c:"林大法官俊益" 10_釋字\*.md 20_憲判\*.md

例六 比較同一議題的數則見解

想比較公然侮辱罪相關的憲法審查。檢索 公然侮辱,在左側清單把釋字第435號、 113年憲判字第3號、第4號三則的核取方塊勾起來,按「產生比較表」。

先把「顯示區塊」只留爭點與白話解說,快速看出三則各自處理什麼;確認要細比之後, 再把「解釋文・主文」加回來,三則主文就並排在同一張表裡逐字對照。 按「複製為表格」得到 Markdown 表格,貼進論文草稿當作比較的底稿, 表格最後一列會附上三則的官網網址。

例七 用進階篩選鎖定一個很窄的問題

想找「2010 年以後、理由書用到比例原則、而且林俊益大法官提出過協同意見書」的案子。

按「進階篩選」,在「理由書・理由」填 比例原則,「大法官姓名」填 林俊益, 「大法官身分」選提出意見書,「意見書類型」選協同意見書,「公布年」自 2010,送出。 結果 21 則,四個條件同時生效,清單上方會把它們一條一條列出來, 想放寬哪一條就點該條件的 ×,筆數即時重算。

大法官身分的區分是有意義的。以詹森林大法官為例,不限身分是 85 則, 限「提出」是 70 則,限「加入」是 20 則,限「主筆」是 4 則。 研究某位大法官的立場光譜時,主筆、自己提出、加入他人,這三種參與方式的意義並不相同。

例八 拆解一則案子內部的意見分歧

以 113年憲判字第8號死刑案為例。打開該則,捲到意見書區(或點跳至列的「意見書」), 會看到 5 篇收合的標題列,各自標著類型。想快速掌握誰站哪邊,就逐篇點開看白話解說的 「立場」一行,例如詹森林大法官那篇是「死刑制度違憲且不容例外;不贊同多數意見肯認 死刑於一定範圍內合憲」。

要細比就勾選其中幾篇按「比較所選意見書」,五個欄位並排。確認要引用時,展開全文逐字取用, 並以標題原文寫註腳。

例九 做量化統計

_pipeline/資料庫.json 是完整的機器可讀資料,適合做敘述統計。例如各年代解釋數與 意見書篇數分布:

import json, collections
D = json.load(open('_pipeline/資料庫.json', encoding='utf-8'))
by = collections.Counter()
op = collections.Counter()
for r in D:
    d = (int(r['dt'][:4]) // 10) * 10
    by[d] += 1
    op[d] += len(r['o'])
for k in sorted(by):
    print(f'{k}年代 {by[k]:3d} 則 意見書 {op[k]:4d} 篇 平均 {op[k]/by[k]:.1f}')

要抽出所有出現某個關鍵詞的段落,連同字號與段次一起輸出:

import json
D = json.load(open('_pipeline/資料庫.json', encoding='utf-8'))
kw = '比例原則'
for r in D:
    for label, paras in r['s']:
        for no, text in paras:
            if kw in text:
                print(f"{r['z']} {label}第{no}段")

這個輸出可以直接變成論文附錄的引文清單。

例十 在對話裡用

安裝了 roc-constitutional-vault skill 之後,直接說「幫我整理正當法律程序在羈押審查 的釋字」或「釋字第384號理由書怎麼定義實質正當」,我會去讀本地資料庫的逐字原文回答, 並附字號與段次。我不會從白話解說區塊取材,也不會憑記憶補寫原文。


十二、重建與增補

網頁不是手工維護的,是由 _pipeline/資料庫.json 產生的。要改版面或欄位,改 _pipeline/建置資料庫.py 裡的 CSSAPP 兩個字串,再跑一次 補完.py 即可, 不需要重新抓資料。

官網有新判決時:

python _pipeline\建置資料庫.py
python _pipeline\補完.py

已抓過的不會重抓。新判決需先把它的 id 加進 建置資料庫.pyJUD_IDS。 新增的則需要另外產生白話解說,那部分要在對話中請我做。


十三、目前未收