模組討論:Citation/CS1/Utilities
本模組有內容譯自英語維基百科頁面「Module:Citation/CS1/Utilities」(原作者列於其歷史記錄頁)。 |
修改CS1系列引文格式模板(第五階段):新增chapter-url-access、map-url-access參數;臨時修復語言代碼顯示問題;改善模板信息的顯示方式;模板內部邏輯大規模拆分整理
- 下列討論已經關閉,請勿修改。如有任何意見,請至合適的討論頁進行,並不要再次編輯本討論。
本站CS1系列模板先後歷經四輪小規模更新,目前英文站模板較常用而本站模板過去沒有的參數,如url-access,url-status,name-list-style,各種文獻標識符及對應的-access參數均在這四輪更新中逐步引進。Category:含有未知參數的引用的頁面中頁面的數量也從去年的四千餘個降低至目前的約1500個 ,足見更新之成效。本輪CS1模板更新,表面上主要涉及以下三方面:
- 一是啟用chapter-url-access(section-url-access為其別名)和map-url-access參數,分別用於填寫chapter-url(section-url)和map-url的訪問狀態(有限度免費訪問/需要註冊/訂閱等)。效果如下:
- 例1:
{{cite book |last=Glut |first=Donald F. |title=Dinosaurs: The Encyclopedia. 3rd Supplement |year=2003 |publisher=McFarland & Company, Inc. |location=Jefferson, North Carolina |isbn=0-7864-1166-X |chapter=Appendix: Dinosaur Tracks and Eggs |pages=[https://archive.org/details/dinosaursencyclo00glut_2/page/613 613–652] |chapter-url-access=registration |chapter-url=https://archive.org/details/dinosaursencyclo00glut_2 |url=https://archive.org/details/dinosaursencyclo00glut_2/page/613 }}
- 更新前:Glut, Donald F. Appendix: Dinosaur Tracks and Eggs. Dinosaurs: The Encyclopedia. 3rd Supplement. Jefferson, North Carolina: McFarland & Company, Inc. 2003: 613–652. ISBN 0-7864-1166-X.
- 更新後:Glut, Donald F. Appendix: Dinosaur Tracks and Eggs. Dinosaurs: The Encyclopedia. 3rd Supplement. Jefferson, North Carolina: McFarland & Company, Inc. 2003: 613–652. ISBN 0-7864-1166-X.
- 例1:
- 二是臨時在本地修復了由於mediawiki內部代碼缺乏更新而引起的語言參數不正常顯示的問題。見上方討論。
- 三是調整完善了模板的一些顯示方式,特別是錯誤信息的顯示,較為明顯的改動有:
- a. 本輪更新後,模板未填寫作者(author系列參數)或貢獻者(contributor系列參數),但填寫編者(editor系列參數)時,模板將依所填寫的編者參數生成元數據(COinS)作者欄位的信息。考慮到部分性質的來源(如百科全書),編者等同於實質上的作者,這一處理應當是合理的。
- b. CS1系列模板中各模板支持的參數略有不同。例如,{{cite news}}模板填寫卷(volume參數)是沒有意義的,{{cite book}}模板填寫郵件列表(mailing-list)參數是沒有意義的。現在模板的處理方式是直接丟棄這些參數而不告知使用者。本輪更新後,遇到相應的情況模板會紅字報錯,並將頁面納入追蹤分類Category:引文格式1錯誤:已知參數被忽略。這有助於編者及時發現參數使用方面的錯誤(其中有一些還很隱蔽,例如bookTitle參數很容易被「望文生義」成「書名」,但實際上僅有{{cite conference}}模板支持,{{cite book}}模板反而不支持)。以下是一些例子:
- 例2b1:
{{cite book| author=Herbst, T. M.; Rix, H.-W.|year=1999 |editor=Guenther, Eike; Stecklum, Bringfried; Klose, Sylvio|title=Star Formation and Extrasolar Planet Studies with Near-Infrared Interferometry on the LBT |book-title=Optical and Infrared Spectroscopy of Circumstellar Matter, ASP Conference Series, Vol. 188. |isbn=1-58381-014-5|pages=341–350 |bibcode=1999ASPC..188..341H |publisher=Astronomical Society of the Pacific |location=San Francisco, Calif.}} 注:bookTitle参数仅{{cite conference}}模板支持
- 更新前:Herbst, T. M.; Rix, H.-W. Guenther, Eike; Stecklum, Bringfried; Klose, Sylvio , 編. Star Formation and Extrasolar Planet Studies with Near-Infrared Interferometry on the LBT. San Francisco, Calif.: Astronomical Society of the Pacific. 1999: 341–350. Bibcode:1999ASPC..188..341H. ISBN 1-58381-014-5.
|book-title=
被忽略 (幫助) - 更新後:Herbst, T. M.; Rix, H.-W. Guenther, Eike; Stecklum, Bringfried; Klose, Sylvio , 編. Star Formation and Extrasolar Planet Studies with Near-Infrared Interferometry on the LBT. San Francisco, Calif.: Astronomical Society of the Pacific. 1999: 341–350. Bibcode:1999ASPC..188..341H. ISBN 1-58381-014-5.
|book-title=
被忽略 (幫助) - 例2b2:
{{cite web| author=Vijverberg et al. | title=Similar mode of action of pyrethroids and DDT on sodium channel gating in myelinated nerves | url=http://www.nature.com/nature/journal/v295/n5850/abs/295601a0.html | journal=Nature | volume=42 | issue=295 | year=1982 | accessdate=2012-04-28}}注:{{cite web}}不支持volume与issue
- 更新前:Vijverberg; 等. Similar mode of action of pyrethroids and DDT on sodium channel gating in myelinated nerves. Nature. 1982 [2012-04-28]. 參數
|journal=
與模板空引用 (幫助)
不匹配(建議改用空引用 (幫助)
或|website=
) (幫助);|volume=
被忽略 (幫助);|issue=
被忽略 (幫助) - 更新後:Vijverberg; 等. Similar mode of action of pyrethroids and DDT on sodium channel gating in myelinated nerves. Nature. 1982 [2012-04-28]. 參數
|journal=
與模板空引用 (幫助)
不匹配(建議改用空引用 (幫助)
或|website=
) (幫助);|volume=
被忽略 (幫助);|issue=
被忽略 (幫助) - 例2b3:
{{cite journal/Antigng|author=許宗傑| title=《清代澎湖方志研究》 | date=2011-01 | degree=中國文化大學中國文學系碩士 |url=https://hdl.handle.net/11296/723f6b | pages=15-16 | registration=yes }}注:仅{{cite thesis}}支持degree参数
- 更新前:許宗傑. 《清代澎湖方志研究》: 15–16. 2011-01.
|degree=
被忽略 (幫助) - 更新後:許宗傑. 《清代澎湖方志研究》: 15–16. 2011-01.
|degree=
被忽略 (幫助)
- 例2b1:
- c. 此外,引用模板內部的參數之間存在較為複雜的關係,可能出現「某個參數填寫以後另一個參數的值被丟棄」的情況。當前模板的做法是直接丟棄有關參數。本輪更新後,將儘可能地以紅字報告「只需其一」錯誤,方便編者查錯。如下例所示:
- d. 特別地,當日期與年份同時填寫,兩者的參數值都有效,但彼此不兼容的情況下,將紅字報錯:
- e. 最後,完善了部分界面文字的顯示方式:
- 例2e1:
{{cite thesis|title=xxx研究|publisher=xx大学学报|year=2022}}
- 更新前:xxx研究 (學位論文). xx大學學報. 2022.
- 更新後:xxx研究 (學位論文). xx大學學報. 2022.
- 例2e2:
{{cite speech|title=Economic Isolationism Isn't an Option|first=Mike |last=Eskew |author-link= |event=Executive Speeches |location=Washington, D.C. |date=December 30, 2004 |url= |access-date= |medium=演讲 }}
- 更新前:Eskew, Mike. Economic Isolationism Isn't an Option (演講). Executive Speeches. Washington, D.C. December 30, 2004.
- 更新後:Eskew, Mike. Economic Isolationism Isn't an Option (演講). Executive Speeches. Washington, D.C. December 30, 2004.
- 例2e3:
{{cite book |title=Title |url=//example.com |archive-url=//archive.org |archive-date=2020-07-29 |url-status=bot: unknown}}
- 更新前:Title. (原始內容存檔於2020-07-29). 無效
|url-status=bot: unknown
(幫助) - 更新後:Title. (原始內容存檔於2020-07-29). 無效
|url-status=bot: unknown
(幫助) - 例2e4:
{{cite newsgroup |title=Title |newsgroup=sommat.sommat.sommat |publisher=Publisher}}注:当前模板显示实际上没有填写的|url=参数有问题,是因为模板的内部逻辑将输入的|publisher=参数当成url的一部分处理,更新后已正确反映这一点
- 更新前:Title. Newsgroup: Publisher 請檢查
|publisher=
值 (幫助).|newsgroup=
和|publisher=
只需其一 (幫助) - 更新後:Title. Newsgroup: Publisher 請檢查
|publisher=
值 (幫助).|newsgroup=
和|publisher=
只需其一 (幫助)
- 例2e1:
但實際上,本輪更新中最主要的更改是針對模板內部。當前CS1模塊調用的主模塊Module:Citation/CS1過於冗長(接近15萬字節),長到頁面都不顯示語法高亮。該模塊做的事情,簡單來說是先初始化,然後檢查一下輸入的參數是否在白名單之中,再調用一個一千多行的函數citation0(現已更名do_citation)輸出引文。與do_citation函數相配套,整個主模塊設置了大量的輔助函數——小到字符串處理大到人名列表,錯誤信息的分類維護都有涉及。雖然英文站嘗試將主模塊中一部分高使用量的函數拆分出來,另立模塊Module:Citation/CS1/Utilities加以收納,但主模塊又長又雜的狀況幾無改善(英文站相應模塊的問題更為嚴重,而且越來越嚴重)。
為解決這一問題,本輪更新將通過三種手段縮減主模塊乃至其中關鍵函數do_citation的長度:
- 一是新設/啟用/調整子模塊。
- 本輪更新將啟用:
- Module:Citation/CS1/COinS模塊,拆分出原先主模塊中處理引用元數據的邏輯。
- 同時新設以下四個子模塊:
- Module:Citation/CS1/Error模塊,集中處理錯誤/維護分類和信息。舊系列模塊中到處亂跑的全局變量z也將封裝入該模塊,不再導出。同時,還修復了舊模塊中「引文格式1錯誤」分類重複加入的問題。
- Module:Citation/CS1/People模塊,拆分出既有主模塊中涉及人名及其列表的邏輯。目前僅僅只是將垃圾代碼轉移了地方,有待後續清理。
- Module:Citation/CS1/Links模塊,集中處理和維基內鏈/外鏈相關的操作。
- Module:Citation/CS1/Languages模塊,拆分出主模塊中與語言相關的代碼。上節所述問題二的修復也是通過在該模塊中引入本地翻譯表local_table實現的。
- 並將既有Module:Citation/CS1/Utilities調整為收錄無副作用且簡單的純函數,主要涉及字串處理以及格式轉換。
- 本輪更新將啟用:
- 二是儘可能抽象出各處代碼的共同邏輯並將之函數化,同時清理主模塊中硬編碼的界面文字(甚至還有譯文)並將之轉移至配置模塊Module:Citation/CS1/Configuration中。該輪更新後,配置模塊新增args_support表,存放實現上節所述第三項(b)部分功能所需使用的信息;新增extra_text_pattern表,轉移主模塊中檢查|page=,|edition=等參數中冗餘文字所使用的正則表達式。其餘轉移的界面文字則放入message,presentation,keywords,error_conditions等既有表中。
- 三是刪除/修復了部分死代碼,例如永遠不成立的條件表達式等。
通過上述措施,主模塊Module:Citation/CS1大小減半,do_citation行數減至約700行(雖然還是很長),也能正常顯示語法高亮。Module:Citation/CS1/Identifiers模塊、Module:Citation/CS1/Whitelist模塊作相應配套性修改。
- 測試見:Module_talk:Citation/CS1/testcases/urlaccess/Antigng、Module_talk:Citation/CS1/testcases/Antigng、Module_talk:Citation/CS1/testcases2/Antigng、Module_talk:Citation/CS1/testcases/errors/Antigng、Module_talk:Citation/CS1/testcases/identifiers/Antigng。與過往幾輪更新不同,本輪更新因涉及模塊的大規模拆分,可能有下列潛在負面影響:
- 一是模板的開銷變大,以至於大頁面更容易超出模板限制。
- 二是本輪更新後將與英文站相應模板徹底不兼容,未來英文站的更新將難以簡單移植入本站。
最後,歡迎大家用沙盒版本的CS1模板(例如:{{Cite web/Antigng}},{{Cite book/Antigng}})進行測試。--Antigng(留言) 2022年4月12日 (二) 17:34 (UTC)
- @Antigng 請問,{{cite book}}裏面的
id={{XXX}}
,這個參數id的選項是否可以多加幾個,比如說幾十年前沒有ISBN、且沒有錄入OCLC的書籍,用類似NDL 12345677. NLC 12345677
去定位。--Kethyga(留言) 2022年4月13日 (三) 02:48 (UTC)- @Kethyga:目前引文模板中
|id=
參數起到的就是後備用途,也就是所有模板本身沒有支持的文獻標識符參數都可以填寫在|id=
參數中;該參數沒有任何格式上的限制,想填什麼填什麼。當然如果您的需求是像|doi=
,|pmid=
一樣另設文獻標識符參數並統一格式,可以在後續更新中予以考慮。由於本人對之不甚熟悉,可能需要麻煩您提供相關參數的定義,以及合法的範圍等信息。--Antigng(留言) 2022年4月13日 (三) 03:22 (UTC)- 重新測試了下,Special:diff/71124395,可以用形如
|id={{NLC|12345678|01}}. {{NDL|12345678}}
的方式添加多個。之前想法固定在只能添加一個模板上了。--Kethyga(留言) 2022年4月13日 (三) 06:35 (UTC)
- 重新測試了下,Special:diff/71124395,可以用形如
- @Kethyga:目前引文模板中
- (!)意見:目前沙盒版本「chapter-url-access=free」會出現「可免費查閱」的綠鎖,但根據英文版的解釋,一般而言這類網址是被假定為可免費訪問,所以兼容free參數值是沒有必要的。應該是:
- url-access/article-url-access/chapter-url-access/contribution-url-access/entry-url-access/map-url-access/section-url-access = registration / limited / subscription
- bibcode-access / doi-access / hdl-access / jstor-access / ol-access / osti-access / s2cid-access = free--BlackShadowG Pray for Ukraine 2022年4月14日 (四) 13:25 (UTC)
- 簡單來說,編者提供的連結(如:url、chapter-url)默認是能免費查閱的,只需要標記需要付費或註冊的即可;文獻標識符自動生成的連結(如:doi、jstor)默認是不能免費查閱的,只需要標記免費的即可。--BlackShadowG Pray for Ukraine 2022年4月14日 (四) 13:31 (UTC)
- 已修正,請複查。--Antigng(留言) 2022年4月14日 (四) 14:38 (UTC)
- 公示七日。--Antigng(留言) 2022年4月20日 (三) 15:31 (UTC)
- 本討論已經關閉,請勿修改。如有任何意見,請至合適的討論頁進行,並不要再次編輯本討論。
引文模板不應該報錯全部的零寬空格
Cat:引文格式1錯誤:不可見字符現在只要有U+200B就會報錯,實際上有些零寬字符是合理且必要的,比如emoji和孟加拉文使用其連接字符。
建議將其改為維護而不是錯誤。--落花有意12138 2023年12月16日 (六) 12:44 (UTC)
- en:Module:Citation/CS1/Configuration有為特定文字或Emoji添加例外。--Cookai餅塊🍪(💬留言) 2023年12月24日 (日) 10:10 (UTC)
- 等等,Module:Citation/CS1/Configuration也有
indic_script
,但Module:Citation/CS1沒有把它排除。--Cookai餅塊🍪(💬留言) 2023年12月24日 (日) 10:19 (UTC) - 請問此問題有辦法解決嗎?《亂世勇者》的97號來源出現此情況,但不知道該如何解決。--H2226(留言) 2024年1月7日 (日) 10:11 (UTC)
- 要改的是Module:Citation/CS1/Utilities的
has_invisible_chars
,en的has_invisible_chars
在en:Module:Citation/CS1,看有沒有高人要來修。--Cookai餅塊🍪(💬留言) 2024年4月24日 (三) 04:58 (UTC) - 因此話題遲無進展,故暫時作結,來日再議。—— Eric Liu 創造は生命(留言・留名・學生會) 2024年6月25日 (二) 02:58 (UTC)