Semantic mediawiki捕获当前页面中属性的所有值

时间:2014-01-04 17:03:48

标签: mediawiki-templates semantic-mediawiki

我想总结使用模板输入的数据,每个页面可能会多次出现。我希望此摘要仅基于当前页面。

我似乎无法弄清楚如何捕获由每页模板多次分配给属性的所有值。我尝试过的所有语义查询只返回给定页面上属性的唯一值。

例如,如果我的模板有三个字段和属性:

</noinclude><includeonly>
'''GeneralFoodF:'''  [[GeneralFoodP::{{{GeneralFoodF|}}}]] 

'''SpecificFoodF:'''  [[SpecificFoodP::{{{SpecificFoodF|}}}]] 

'''RatingFoodF:'''  [[RatingFoodP::{{{RatingFoodF|}}}]] 
</includeonly>

我将这个模板的四次出现添加到具有以下值的特定页面:

   {{FoodT
   |GeneralFoodF=Fruit
   |SpecificFoodF=Apple
   |RatingFoodF=4
   }}
   {{FoodT
   |GeneralFoodF=Vegetable
   |SpecificFoodF=Spinach
   |RatingFoodF=5
   }}
   {{FoodT
   |GeneralFoodF=Fruit
   |SpecificFoodF=Pear
   |RatingFoodF=5
   }}
   {{FoodT
   |GeneralFoodF=Fruit
   |SpecificFoodF=Apple
   |RatingFoodF=3
   }}

然后我执行#show查询:

{{#show: {{PAGENAME}} | mainlabel =- | headers = hide | link=none | ?GeneralFoodP}}

它返回:水果,蔬菜,当我期望它返回:水果,蔬菜,水果,水果。维基页面文本是正确的并显示所有四个条目,但我似乎无法使用语义查询捕获重复条目。如何捕获在给定页面上输入的属性值的所有(包括重复)?

1 个答案:

答案 0 :(得分:1)

考虑一个属性意味着什么:如果一辆汽车拥有属性is red,如果你的状态是两次,它就不会变得更红。颜色仍然是红色,而不是“红色”。因此,您向我们展示的结果是完全可以预期的。

根据您的需要,您可能需要考虑使用子对象。它们是对象,就像页面一样,但没有自己的页面,它们可以有一个或多个属性:

{{#subobject:
 |GeneralFoodF=Fruit
 |SpecificFoodF=Apple
 |RatingFoodF=3
 |Belongs to={{PAGENAME}}
}}

然后,您可以像这样查询该页面的所有子对象:

{{#ask: [[Belongs to::{{PAGENAME}}]]
 |?GeneralFoodF
 |?SpecificFoodF
 |?RatingFoodF
}}

或所有页面上的类似子对象:

{{#ask: [[SpecificFoodF::+]]
 |?GeneralFoodF
 |?SpecificFoodF
 |?RatingFoodF
}}

也可以命名Subobjetcs,但在您的情况下,您希望匿名(有效地将它们全部唯一的,自动创建的名称)。

请参阅: