You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Semantic MediaWiki:如何向查询传递多可选属性值并灵活适配

解决方案:Semantic MediaWiki动态传入多值查询条件

核心思路

Semantic MediaWiki的#ask查询无法直接解析预先生成的字符串变量(比如你之前尝试的TempString),必须动态生成多值条件片段,直接嵌入查询语句中。以下是两种适配场景的可行方案:


方案1:基于页面存储的表单属性值

如果表单提交后,多选项值已存储在当前页面的某一属性(比如你提到的Variable)中,可通过#arraymap函数将属性值拼接为查询所需的[[Property-A::值1||值2]]格式:

{{#ask:
 [[Category:Category-A]]
 {{#arraymap: {{#show: {{PAGENAME}} | ?Variable | format=plainlist | sep=; }} | ; | x | [[Property-A::x]] | || }}
 |?Property-A
 |format=tree
 |parent=PartOf
}}

关键说明:

  • #show 获取当前页面Variable属性的所有值,用sep=;指定分隔符为分号;
  • #arraymap 按分号分割每个值,将每个值转换为[[Property-A::x]]格式,再用||(OR逻辑)拼接起来;
  • 确保已安装Parser Functions扩展(#arraymap依赖此扩展)。

方案2:基于模板直接传递的表单参数

如果表单直接将多选项值以分隔符拼接的参数(比如selected-values)传给模板,或使用多个独立参数,可分别处理:

场景A:单参数传入分隔符拼接的多值

{{#ask:
 [[Category:Category-A]]
 {{#arraymap: {{{selected-values|}}} | ; | x | [[Property-A::x]] | || }}
 |?Property-A
 |format=tree
 |parent=PartOf
}}

只需让表单将选中的多个值用分号拼接后,传入selected-values参数即可。

场景B:多个独立参数(固定数量的可选值)

如果表单使用多个独立参数(比如val1、val2、val3),可通过#if逐个判断并拼接条件:

{{#ask:
 [[Category:Category-A]]
 {{#if: {{{val1|}}} | [[Property-A::{{{val1}}}]] | }}
 {{#if: {{{val2|}}} | || [[Property-A::{{{val2}}}]] | }}
 {{#if: {{{val3|}}} | || [[Property-A::{{{val3}}}]] | }}
 |?Property-A
 |format=tree
 |parent=PartOf
}}

为什么你的原方案无效?

你之前尝试将拼接好的字符串存入TempString再传入查询,SMW会将TempString视为单个字面量值,而非解析其中的||逻辑分隔符。必须直接在#ask的条件块中动态生成每个值的查询片段,才能让SMW正确识别多值OR逻辑。

内容的提问来源于stack exchange,提问作者user2037572

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:12:43