1

这个问题是几年前提出的:

我自己的实验表明您可以查询例如

{{#ask: [[Person name::+]]
| ?Person name = name
| ?Person firstname = firstname
| limit=500
}}

并按名字排序以显示没有名字的条目。如果按名字排序:

{{#ask: [[Person name::+]]
| ?Person name = name
| ?Person firstname = firstname
| sort=Person firstname
| limit=500
}}

非空名字将不再显示

{{#ask: [[Person name::+]][[Person firstname::!+]]
| ?Person name = name
| ?Person firstname = firstname
| limit=500
}}

不能作为 not 运算符工作!会建议

主动说“不”这是不可能的。

当前的 SMW 版本有什么用?

看起来即使是 not 运算符也无法按预期工作:

{{#ask: [[Person name::+]] [[Person firstname::!Adolf]]
| ?Person name = name
| ?Person firstname = firstname
| limit=500
}}

将只显示名字不是 Adolf 的人,但不显示有名字但没有名字的人条目。

4

1 回答 1

1

据我所知,当前用于选择页面的工具范围不直接支持搜索空属性或缺失属性。

我也不会屏住呼吸等待它的实施,因为执行这样的搜索可能需要一点性能。一个小例子来演示:

场景:您的 wiki 有 3 个属性,Prop1、Prop2、Prop3。wiki 中有 10 页。

查询 1:您正在根据 Prop1 的现有值选择页面。喜欢[[Prop1::Josef]]。SMW 在第 1 页上看到 Prop1 并停止评估第 1 页的其余部分(即 Prop2 和 Prop3)并转到第 2 页。因此,使用此查询,仅评估 10 个属性,对 10 个页面中的每一个进行评估。

查询 2:您正在根据 Prop3 的缺席值选择页面。必须评估每个页面上的每个属性,以确定该页面是否匹配。如果评估 Prop1 以查看 Prop3 是否为空似乎不合逻辑,请记住,查询引擎首先需要确定属性是否为 Prop3,然后才能评估它找到的任何 Prop3 的值。因此,在查询空属性时,查询引擎必须评估每个页面上可能包含此类空属性的每个属性。

这至少是我对没有工具检查空属性或缺失属性的原因的解释。从性能的角度来看,我可以看到它是如何引起大型网站的关注的。我想如果这个功能出现,它可能会在扩展中这样做,以允许人们通过安装这样的扩展来隐式地接受潜在的性能后果。

同时,有一个相当合理的解决方法(我同样需要空的或“未填写”的属性),那就是在缺少模板参数时使用模板来分配特殊属性。

一个简单的例子,模板参数 Prop 应该成为属性 ExampleProp 的值:

<noinclude>
Use this template as:

{{ExampleTemplate
|Prop=
}}
</noinclude><includeonly>
The value of ExampleProp is:
{{#if: {{{Prop}}} | [[ExampleProp::{{{Prop}}}]] | [[ExampleProp::UNDEFINED]] }}
<includeonly>

这样,您可以查询属性 ExampleProp 的值 UNDEFINED 的存在,而不是它的空值。它不漂亮,但它有效。

于 2015-09-17T09:14:00.423 回答