问题是几年前提出来的:
我自己的实验表明你可以查询例如。
{{#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版本可以使用什么?
看起来即使是非运算符也无法正常工作:
{{#ask: [[Person name::+]] [[Person firstname::!Adolf]]
| ?Person name = name
| ?Person firstname = firstname
| limit=500
}}
只会显示姓名不是Adolf的人,但不会显示姓名但没有姓名的人员。
答案 0 :(得分:1)
据我所知,当前选择页面的工具范围并非直接支持搜索空或缺少的属性。
我不会屏住呼吸等待它实施,因为执行这样的搜索可能会有一点性能。一个小例子来证明:
场景:您的wiki有3个属性,Prop1,Prop2,Prop3。维基有10页。
查询1:您正在根据Prop1的现有值选择页面。像[[Prop1::Josef]]
一样。 SMW在第1页看到Prop1并停止评估第1页的其余部分(即Prop2和Prop3)并继续进行Page2。因此,使用此查询,仅评估10个属性,对10个页面中的每个页面进行一次评估。
查询2:您正在根据Prop3的缺席值选择页面。必须评估每个页面上的每个属性,以确定该页面是否匹配。如果评估Prop1以查看Prop3是否为空似乎不合逻辑,请记住查询引擎首先需要确定属性是否为Prop3,然后才能评估它找到的任何Prop3的值。因此,在查询空属性时,查询引擎必须评估每个可能包含此类空属性的页面上的每个属性。
这至少是我解释为什么没有设施可以检查空的或缺席属性的原因。从性能角度来看,我可以看到它如何引起大型网站的关注。我想如果这个功能出现了,它可能会在扩展中这样做,以允许人们通过安装这样的扩展来隐含地接受潜在的性能后果。
与此同时,还有一个相当合理的解决方法(我有同样需要空或#34;未填写"属性),并且使用模板在模板时分配特殊属性参数丢失。
一个简单的例子,其中模板参数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的存在,而不是其空白。它并不漂亮,但它确实有效。