0

我想要实现的示例

我有许多补丁页面(“补丁 1.4”、“补丁 1.5”等)列出了对项目所做的更改,其中受影响/更改的内容链接到相应的页面(“确认对话框”、“foo” , ETC。):

补丁 1.4

  • 修复了 [[确认对话框]] 中的拼写问题

补丁 1.5

  • 添加了两个选项:[[foo]]、[[bar]]

在有关已更改内容的页面上(“确认对话框”,“foo”,...),我想自动显示所有相应的更改:

  • [[Patch 1.5]]:增加了两个选项:[[foo]]、[[bar]]

Semantic MediaWiki 的子对象可以做到这一点

#subobject允许我为补丁页面上的每个更改创建一个(匿名)对象:

{{#subobject:|
|Changes=Added two options: [[foo]], [[bar]]
|Affects=Foo|Bar
}}

在每一页(“foo”等)上,我可以包含一个#ask子对象查询来列出所有匹配的子对象:

{{#ask: [[Affects::{{FULLPAGENAME}}]]
 |? Changes
}}

伟大的。

问题:我必须复制更改条目。

在补丁页面上,更改条目如下所示:

* Added two options: [[foo]], [[bar]] {{#subobject:|
|Changes=Added two options: [[foo]], [[bar]]
|Affects=Foo|Bar
}}

所以我必须两次指定“添加了两个选项:[[foo]],[[bar]]”:一次用于可见内容,一次用于不可见子对象。

(语义)MediaWiki 中有没有办法做到这一点而不必复制内容?

理想的解决方案只需要我附上更改条目并在其旁边指定受影响的页面,例如:

* {{ Added two options: [[foo]], [[bar]] }}((foo|bar))

由于每个补丁页面可以列出数百个更改,我不想为每个更改创建单独的页面。

4

1 回答 1

2

如果我清楚地理解了您的问题,您似乎只需要一个简单的查询:

{{#ask: [[-Has subobject::{{FULLPAGENAME}}]] 
| ?Changes
| format = ul
| headers = hide
| mainlabel = -
}}

由于使用 SMW 标记可能很乏味且容易出错,因此您也可以使用 MediaWiki 模板。您可以简化添加补丁更改:

模板:更改

<includeonly><!--
-->{{#subobject:|
   | Changes = {{{1|}}}
   | Affects = {{{2|}}}|+sep=;
   }}<!--
--></includeonly><nowiki/>

{{{1}}}并且{{{2}}}是位置参数,并且Affects子对象属性使用;分隔符(因为管道|不明确,可能会破坏模板、解析器函数等)。这<nowiki/>是一种从呼叫站点页面上的空白膨胀中节省下来的技巧。

您还可以添加一个特殊的模板来封装更改查询:

模板:补丁更改

<includeonly><!--
-->{{#ask: [[-Has subobject::{{{1|{{FULLPAGENAME}}}}}]] 
   | ?Changes
   | format = ul
   | headers = hide
   | mainlabel = -
   }}<!--
--></includeonly><nowiki/>

默认情况下,模板要求当前页面的更改列表(如果位置参数 #1 参数为空),或者您可以稍后在调用站点显式覆盖它(例如,{{Patch changes|Patch 1.5}})。

补丁 1.4

{{Change | Fixed spelling in the [[confirmation dialog]] | Confirmation dialog}}

{{Patch changes}}

补丁 1.5

{{Change | Added two options: [[foo]], [[bar]] | Foo; Bar}}

{{Patch changes}}

分别。

这些链接以后可能有用:

于 2016-04-29T10:39:31.833 回答