Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
语义MediaWiki:如何查询具有中间关系的页面?_Mediawiki_Semantic Mediawiki - Fatal编程技术网

语义MediaWiki:如何查询具有中间关系的页面?

语义MediaWiki:如何查询具有中间关系的页面?,mediawiki,semantic-mediawiki,Mediawiki,Semantic Mediawiki,假设我想在“知识图”中链接几个wiki页面。比方说,这里有一个从大到小的地理对象快速列表,其中箭头表示直接的MediaWiki链接: Continent:Europe ^__Country:Netherlands ^__City:Amsterdam ^__Venue:Heineken Music Hall 以上页面包含以下内容: 欧洲大陆 国家:荷兰 城市:阿姆斯特丹 地点:喜力音乐厅 使用以下类型声明属性: self:name:[[has type::text]] ref

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

Continent:Europe
^__Country:Netherlands
   ^__City:Amsterdam
      ^__Venue:Heineken Music Hall
以上页面包含以下内容:

欧洲大陆

国家:荷兰

城市:阿姆斯特丹

地点:喜力音乐厅

使用以下类型声明属性:

  • self:name
    [[has type::text]]
  • ref:大陆
    ref:国家
    ref:城市
    [[has type::page]]
据我所知,语义MediaWiki是如何工作的,
#ask
函数只在一个级别工作。比如说,
{{#ask:[[self:name::+]}
可以获取所有4个页面,因为所有页面都设置了
self:name
属性。我还可以通过过滤掉某个类别来缩小搜索结果的范围:
{{{询问:[类别:场馆][[ref:city::city:Amsterdam]}
。这样可以直接获取相关页面(这很容易,因为
地点:喜力音乐厅
页面直接与
城市:阿姆斯特丹
页面相关)

现在,我想展示位于
大陆:欧洲
的所有场馆,因此
国家:荷兰
城市:阿姆斯特丹
应该以某种方式隐含考虑<代码>{{#ask:[[Category:Vincements]][[ref:Continental::Continental:Europe]]}无法工作,因为查询将两个从不在同一页面上同时出现的属性组合在一起。那么,Semantic MediaWiki是否有任何查询语法/能力允许指定中间关系,以便它可以“爬行”和“内部连接”,从而提供欧洲的所有场所

是否可以跨多个页面查询,以某种方式指定中间关系?或者SMW是专为“平面”/“标记”关系设计的


更新

我对我想要的东西不是很明确。比如说,你必须描述一个可以转换成人类可读形式的事件。目前,在非结构化wiki中,您可能会使用类似以下内容的自定义模板:

{{Event
| date = 2012-12-03
| country = Netherlands
| city = Amsterdam
| venue = Heineken Music Hall
}}
生成以下结果:

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

我要寻找的是能够在语义MediaWiki中组成以下模板的东西:

{{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>]]}}
输出:

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

{{#set: | ref:city = City:Amsterdam | self:name = Heineken Music Hall }}
[[Category:Venues]]
{{Event
| date = 2012-12-03
| country = Netherlands
| city = Amsterdam
| venue = Heineken Music Hall
}}
{{Event
| date = 2012-12-03
| ref:venue = Venue:Heineken Music Hall
}}
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}}