MediaWiki语义模板报错:属性值含无效字符问题求助
解决MediaWiki语义子对象@category参数解析报错问题
问题描述
我创建了一个兼具视觉展示和语义填充功能的MediaWiki模板,在指定页面使用时,语义子对象部分失效,报错信息如下:
Property "" (as page type) with input value "psicologia|governo|politica|lavoro|+sep=|" contains invalid characters or is incomplete and therefore can cause unexpected results during a query or annotation process.
当前模板代码:
[{{{url}}} {{{title}}}] - {{{categories}}} {{#subobject: |url = {{{url}}} |title = {{{title}}} |@category={{{categories}}} }}
期望运行效果:
{{#subobject: |url = https://www.instagram.com/p/CXeE2j-NT6s/ |title = Bullismo: proposta una legge in Francia per punirlo penalmente. Si rischia anche il carcere |@category=bullismo|violenza|leggi|punizioni|+sep=| }}
原因分析
报错的核心原因是MediaWiki模板解析器会把参数值中的|识别为模板/函数的参数分隔符。当{{{categories}}}的值包含|时,#subobject会错误地将这些|当成自身的参数分隔符,导致@category的参数值被截断,剩余部分被解析为无键的空属性,最终触发无效属性报错。
解决方案
有两种可靠的解决方式,任选其一即可:
方式一:修改模板使用{{#tag:subobject}}语法
将原模板中的{{#subobject: ... }}替换为{{#tag:subobject| ... }},标签内部的|不会被解析为参数分隔符,能完整保留categories参数的原始值:
[{{{url}}} {{{title}}}] - {{{categories}}} {{#tag:subobject| url = {{{url}}} title = {{{title}}} @category={{{categories}}} }}
方式二:调用模板时转义|字符
如果不想修改模板,可在调用模板时将categories参数中的|替换为MediaWiki的转义字符{{!}},确保解析器不会将其识别为参数分隔符:
{{你的模板名 |url=https://www.instagram.com/p/CXeE2j-NT6s/ |title=Bullismo: proposta una legge in Francia per punirlo penalmente. Si rischia anche il carcere |categories=bullismo{{!}}violenza{{!}}leggi{{!}}punizioni{{!}}+sep={{!}} }}
验证效果
应用上述修改后,语义子对象将正确生成期望的代码,不再触发报错,同时视觉展示部分保持正常。
内容的提问来源于stack exchange,提问作者Revious
相关产品推荐
相关产品推荐

