參考文獻 GB/T 7714-2015 標準化與鏈接驗核
一、為什麼值得單獨做成一個 skill
這項工作有三個特徵:規則細節多(文獻類型標識、電子文獻的引用日期、 三位作者以上的寫法各不相同)、容易出錯且不回報錯誤(幾十個字符串裡錯一個很難被發現), 以及一次寫錯就很難用肉眼發現。所以重點不是「記住規則」,而是 程式化寫入 + 回讀驗核 + 鏈接驗核這套流程。
二、GB/T 7714-2015 著錄要點
基本結構
[序號] 主要責任者. 題名[文獻類型標識/載體標識]. 出處, 年, 卷(期): 起止頁碼.
常見類型標識
| 類型 | 標識 | 電子化寫法 |
|---|---|---|
| 普通圖書 | [M] | [M/OL] |
| 期刊文章 | [J] | [J/OL] |
| 報紙文章 | [N] | [N/OL] |
| 學位論文 | [D] | [D/OL] |
| 報告 | [R] | [R/OL] |
| 標準 | [S] | — |
| 電子公告 | [EB/OL] | — |
| 專利 | [P] | [P/OL] |
必須注意的三條
- 電子文獻必須著錄引用日期和訪問路徑 —— GB/T 7714-2015 第 4.9 條的要求。
帶 URL / DOI 的文獻,規範寫法應當是
[J/OL]. 期刊名, 年, 卷(期): 頁碼[引用日期]. https://...。 反過來,如果目標期刊/學校不要求,去掉引用日期是可以的,但要知道這是自己在做取捨。 - 責任者超過 3 個時,中文文獻寫「主要責任者, 等」,西文寫「主責任者, et al」。 國標允許全部列出,但同一篇文獻裡要前後統一。
- 西文作者姓在前、名縮寫在後:
Büller HR, Verhamme P, Weitz JI。 不要把 PubMed 的Buller HR直接搬過來丟了變音符號,也不要寫成HR Büller。
三、鏈接驗核(核心工具)
# 每行一個:URL / DOI / PMID / PMC 編號,腳本自動判別類型
python3 scripts/check_refs.py refs.txt
# JSON 輸入,支援顯式指定類型
python3 scripts/check_refs.py refs.json --timeout 20 --workers 8
退出碼:0 = 無明確失效項;1 = 存在失效項。
支援的輸入型態:
| 輸入 | 解析結果 |
|---|---|
10.1056/NEJMoa2513880 或 https://doi.org/... | DOI 鏈接 |
25482425(純數字) | PubMed 鏈接 |
PMC2909362 | PMC 鏈接 |
https://... 或裸域名 | 原樣訪問 |
判定邏輯(重要)
腳本把結果分三桶,不要一看到非 200 就判失效:
| 桶 | 條件 | 處理 |
|---|---|---|
| 可直接訪問 | 200 / 203 / 30x | 通過 |
| 疑似反爬 | 403 / 412 / 429 / 503 / 000(無非致命錯誤) | 改用瀏覽器複核,不是鏈接錯了 |
| 疑似失效 | curl 明確報 could not resolve host 等 DNS/證書錯誤 | 確認後替換或刪除該鏈接 |
已實測的兩個坑:
- PubMed 返回 203,不是失敗。曾經把 203 當成失效,白白浪費一輪排查
curl -s會把 DNS 錯誤靜默掉,導致「域名不存在」和「網路被封鎖」這兩種完全不同的 情況都顯示 000。腳本已改用-sS,靠 stderr 區分
常見站點的訪問特性
| 站點 | 特徵 |
|---|---|
nhc.gov.cn(國家衛健委) | curl 常返回 412 反爬,瀏覽器能正常打開 |
| 萬方 med. 域 | 有反爬,可改用 d.wanfangdata.com.cn/periodical/<xxx> 形式訪問 |
| 知網 | 一般不提供直鏈,文獻能檢索到即可,不必強求 URL |
| NEJM / Lancet | 付費牆,curl 常返回 403;有 DOI 就夠了 |
四、寫入工藝:防止字符錯亂
這是本 skill 最容易被忽視、也最容易造成實際傷害的一點。
不要用長 Heredoc 直接往 docx / json / py 裡寫長列表文獻。
實踐中多次出現字符錯亂:DOI 前綴寫錯(10.7723 誤為 10.19546 之類)、
作者名錯字、政策文號亂碼,且寫入過程不回報錯誤。
正確做法:
# 1) 把文獻列表構造成 Python 資料結構,程式化整塊寫入
refs = [
{"id": 1, "text": "Büller HR, ...", "url": "https://...", "doi": "10.1056/..."},
...
]
# 2) 定義驗核清單
must_have = ["25482425", "10.1056/NEJMoa2513880", "國衛醫發", "Büller"]
bads = ["10.7723", "理相指南", "ERUOIMMUON"]
# 3) 寫完後立刻回讀驗核
content = read_back()
missing = [s for s in must_have if s not in content]
leaked = [s for s in bads if s in content]
assert not missing and not leaked, (missing, leaked)
must_have 放關鍵標識(PMID、DOI、文號、難寫的人名地名),
bads 放已知的錯誤寫法。兩者都要有:前者防丟內容,後者防產生錯誤內容。
五、常見錯誤清單(照著查一遍)
| 錯誤 | 例子 | 正確寫法 |
|---|---|---|
| 合併不同口徑的數值 | 把「2-4%(RCT)」和「2-5%(真實世界)」合併成一個數 | 保留口徑差異,分開寫 |
| 卷期頁寫錯 | Büller 寫成 2009;361:1722 | 實際為 NEJM 2015;372:232-240 |
| 轉引當成原引 | 引了一篇二手綜述裡的數字,卻標註原始 RCT | 追到原文,或明確寫「轉引自」 |
| 政策文件無出處 | 正文引了 5 份文件,參考文獻表裡一條沒有 | 正文引用的每份政策/報告都要入表 |
| 著錄標題與實際不符 | 文獻[1]標題和實際發表的文章不是一篇 | 逐條核對標題 |
| 專有名詞拼寫錯誤 | EUROIMMUN 寫成 ERUOIMMUON | 逐條目視核對專有名詞 |
六、Zotero / CSL 相關
需要調整 Zotero 引用樣式時,直接改 .csl 檔案比用插件配置更可控。
例如 GB/T 7714-2015 numeric 樣式每條文獻末尾都帶 [引用日期],
找出 accessed-date 巨集把巨集體清空為 <group/> 即可全站失效(一處改動)。
同時改 id / title / updated 避免與官方樣式衝突。
但要提醒自己:GB/T 7714-2015 對電子文獻要求著錄引用日期(第 4.9 條), 去掉之後對正式投稿的期刊 / 學位論文可能不符合規範。這是使用者自己的權衡, 應當把這個取捨明確告知,而不是默默去掉。
issued-year 巨集裡保留的一處 accessed 兜底是合理的(issued 缺失時用訪問年份佔位),
不要一起刪掉。
七、檢查清單
- 每條文獻的類型標識與是否
/OL一致 - 超過 3 位作者的處理方式前後統一
- 西文人名姓在前、名縮寫;變音符號沒有丟
- 電子文獻有引用日期(除非明確決定不要)與訪問路徑
- DOI 前綴正確、無半形/全形混用
- 鏈接已跑
check_refs.py,「疑似反爬」項用瀏覽器複核過 - 寫入後
must_have/bads回讀驗核通過 - 正文引用的每條都在文獻表中出現,反之亦然