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