模块讨论: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)