1

假设我想在“知识图”中链接几个 wiki 页面。比方说,这里有一个地理对象的快速列表,从大到小,其中箭头表示直接的 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:continent, ref:country, ref: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因此应该以某种方式隐含地考虑。无法工作,因为查询组合了两个在同一页面上永远不会一起出现的属性。那么,Semantic MediaWiki 是否有任何查询语法/能力允许指定中间关系,以便它可以“抓取”和“内部连接”给欧洲的所有场所Country:NetherlandsCity:Amsterdam{{#ask: [[Category:Venues]] [[ref:continent::Continent:Europe]] }}

是否可以跨多个页面查询以某种方式指定中间关系?还是 SMW 仅针对“扁平”/标记关系设计?


更新

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

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

产生以下结果:

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

我正在寻找的是允许在 Semantic MediaWiki 中编写以下模板的东西:

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

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

4

1 回答 1

1

首先,冒号:似乎使用起来不太安全。我已将其更改为空格。其次,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}}

输出:

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

于 2016-03-04T17:39:19.873 回答