在语义媒体维基中是否可以进行空属性查询?

时间:2015-06-24 13:29:43

标签: semantic-mediawiki

问题是几年前提出来的:

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

{{#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的人,但不会显示姓名但没有姓名的人员。

1 个答案:

答案 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的存在,而不是其空白。它并不漂亮,但它确实有效。