Semantic MediaWiki:如何查询具有中间关系的页面



假设我想在"知识图谱"中链接几个维基页面。假设,这里有一个从大到小的地理对象的快速列表,其中箭头表示直接的MediaWiki链接:

Continent:Europe
^__Country:Netherlands
   ^__City:Amsterdam
      ^__Venue:Heineken Music Hall

以上页面包含以下内容:

所属地区:欧洲

{{#set: | self:name = Europe }}
[[Category:Continents]]

国家:荷兰

{{#set: | ref:continent = Continent:Europe | self:name = Netherlands }}
[[Category:Countries]]

城市:阿姆斯特丹

{{#set: | ref:country = Country:Netherlands | self:name = Amsterdam }}
[[Category:Cities]]

地点:喜力音乐厅

{{#set: | ref:city = City:Amsterdam | self:name = Heineken Music Hall }}
[[Category:Venues]]

属性使用以下类型声明:

  • self:name[[has type::text]]
  • ref:continentref:countryref:city[[has type::page]]

据我了解Semantic MediaWiki的工作原理,#ask函数适用于一个级别。假设{{#ask: [[self:name::+]] }}可以获取所有 4 个页面,因为所有页面都设置了 self:name 属性。我还可以通过过滤掉某个类别来缩小搜索结果的范围:{{#ask: [[Category:Venues]] [[ref:city::City:Amsterdam]] }}。这允许立即获得相关的页面(这很容易,因为Venue:Heineken Music Hall页面直接与City:Amsterdam页面相关(。

现在,比方说,我想展示位于 Continent:Europe 的所有场地,因此应该以某种方式隐含地考虑Country:NetherlandsCity:Amsterdam{{#ask: [[Category:Venues]] [[ref:continent::Continent:Europe]] }}不起作用,因为查询将两个永远不会一起出现在同一页中的属性组合在一起。那么,Semantic MediaWiki是否有任何查询语法/能力允许指定中间关系,以便它可以"爬行"和"内部连接",从而为欧洲的所有场所提供服务?

是否可以以某种方式跨指定中间关系的多个页面进行查询?还是 SMW 专为"平面"/标记关系而设计?


更新

我不是很具体地说明我想得到什么。假设,您必须描述一个可以转换为人类可读形式的事件。目前,在非结构化 wiki 中,您可以使用类似于以下内容的自定义模板:

{{Event
| date = 2012-12-03
| country = Netherlands
| city = Amsterdam
| venue = Heineken Music Hall
}}

生成结果如下:

演出于2012年12月3日在荷兰阿姆斯特丹的喜力音乐厅举行。

我正在寻找的是允许在语义媒体维基中编写以下模板的东西:

{{Event
| date = 2012-12-03
| ref:venue = Venue:Heineken Music Hall
}}

因此,国家和城市可能会自动获得上面以某种方式定义的关系,但仍然给出结果:在...,荷兰的表现

首先,冒号:似乎不太安全。我已将其更改为空格。其次,SMW 支持反属性和子查询,因此以下代码回答了核心中的问题:

The performance took place at
{{#ask: [[Category:Venues]] [[Self name::Heineken Music Hall]]}},
{{#ask: [[Category:Cities]] [[-Ref city::<q>[[Self name::Heineken Music Hall]]</q>]]}},
{{#ask: [[Category:Countries]] [[-Ref country::<q>[[-Ref city::<q>[[Self name::Heineken Music Hall]]</q>]]</q>]]}},
{{#ask: [[Category:Continents]] [[-Ref continent::<q>[[-Ref country::<q>[[-Ref city::<q>[[Self name::Heineken Music Hall]]</q>]]</q>]]</q>]]}}

相同但更短:

The performance took place at
{{#ask: [[Category:Venues]] [[Self name::Heineken Music Hall]]}},
{{#ask: [[Category:Cities]] [[-Ref city.Self name::Heineken Music Hall]]}},
{{#ask: [[Category:Countries]] [[-Ref country.-Ref city.Self name::Heineken Music Hall}},
{{#ask: [[Category:Continents]] [[-Ref continent.-Ref country.-Ref city.Self name::Heineken Music Hall}}

输出:

演出在欧洲荷兰阿姆斯特丹喜力音乐厅举行

相关内容

  • 没有找到相关文章

最新更新