Semantic Mediawiki
SemanticMediaWiki Logo.png
官方站点 semantic-mediawiki.org
Mediawiki官网页面 Semantic Mediawiki

Semantic Mediawiki又称“SMW”、“双马尾”,是MediaWiki的一个大型扩展插件集(expansion),它主要用来为基于Mediawiki搭建的站点提供数据存储和查询(data query)解决方案。 Semantic Mediawiki是一款开源插件,最早由德国人Markus KrötzschDenny Vrandecic创建。是全球范围内应用最为广泛的Mediawiki数据查询扩展。(类似的解决方案还有Cargo和Wiki Data)

SMW的定位

  • SMW是一款功能性明确的MW“扩展”,实际上它比一般意义上的扩展(Expension)要庞大且复杂的多,安装、配置、使用都远比一般插件扩展复杂,更丰富的功能意味着更高的使用门槛和性能消耗。
  • SMW的功能是为维基页面set data然后提供类数据库的query方式。如前文所述,SMW不是唯一的数据查询解决方案,它的两个主要类比概念是Cargo和Wikidata
    • Cargo更为轻量和简洁,但是更新和实用型上相较SMW还有一些差距。
    • Wikidata是维基媒体基金会(wikimedia)下属的项目,由SMW的早期参与者另起炉灶开发,代表着维基数据化的未来,但是当下在实用性和泛用性上还逊色于SMW。

维基数据化是MediaWiki的未来,如果把wikidata看作是维基的3.0时代,SMW则代表了维基的“2.5时代”,是目前最成熟,使用最多的维基数据化解决方案。

SMW的应用

目前全球范围内对SMW应用最多的MediaWiki站点(站群)主要集中在与游戏主题相关的数据站上,例如Gamepedia和灰机Game。

  • 游戏类维基对数据的录入、展示、查询、更新有着极为苛刻的要求
  • 游戏类维基的数据结构较为统一,清晰,最适合数据化架构

灰机的SMW

目前灰机全面支持SMW,但是SMW并没有作为默认开启的组件,需要站长、管理员在站点管理面板手动开启SMW选项后才能生效。 一经开启后,SMW和以下组件会被启用:

  • Semantic Mediawiki
  • Semantic Forms
  • Semantic Result Formats
  • Arrays
  • Data命名空间
详情请阅读:help:命名空间

已知的不兼容问题

由于灰机使用了MySQL5.6,导致部分SMW查询语法在灰机上会产生runtime exception的致命错误。该问题已经确认为SMW的bug(只兼容到MySQL5.5),包括可能不限于部分ask函数中的查询条件(例如条件组合和逻辑与的缩写方式等)。SMW官方确认会在下一个版本中予以修复(尚无时间表)

SMW特殊页面

  • 特殊:询问(Special:Ask)
  • 特殊:按属性搜索(Special:Search by property)
  • 特殊:浏览(Special:Browse)
  • 特殊:概念(Special:Concepts)
  • 特殊:属性(Special:Properties)

SMW基础概念

“亚巴顿”页面上的属性(左栏)及其具体数值(右栏)

property与value

通过赋值,每个页面都可能拥有若干属性(property),以右图为例,亚巴顿的属性“Agility”的数值就是“17”

  • 取值:通过#show函数,我们可以取到任意一个页面的任意一个值(只要存在)
    • {{#show:<页面名称>|?<属性名称>|link=}}

例如{{#show:亚巴顿|?agility|link=none}}即可得到“17”

详情请阅读:help:Semantic Mediawiki/嵌入式查询

使用ASK函数查询(query)

查询结果
  • show函数只能展示一个数值,如果我们是想查询多个数值,就必须用到#ask函数
详情请阅读:help:Semantic Mediawiki/嵌入式查询
    • {{#ask:<条件>|?<属性名称1>|?<属性名称2>|?<属性名称3>……|其他参数}}

ask函数默认返回一个表格,例如{{#ask:[[category:防具物品]]|?name en|?Item cost}}得到结果如左图。

需要注意的是,这里只是简单的介绍一下ask能做什么,对于SMW而言,#ask是最核心,最复杂的函数,这里不再展开赘述,如何灵活掌握和应用ask函数需要大量的实践和摸索。

如何查看页面上的已有数值(property)

通过特殊页面:“特殊:浏览(Special:Browse)”来实现

  • 写法一:www.yoursite.huiji.wiki/wiki/特殊:浏览/页面名称
  • 写法二:ww.yoursite.huiji.wiki/wiki/Special:Browse/页面名称

#set函数

我们在上面讲了如何取值,下面着重介绍如何赋值。解析器函数#set允许用户在页面中设定一个或若干数据(property及其value)

详情请阅读:帮助:解析器函数#set

#subobject函数与子对象

subobject(子对象)与页面的关系

上述的#set函数是通过在页面上直接建立属性,这里“页面(PAGE)”就是对象。除此之外,SMW还允许每个页面上外挂若干个“子对象”,然后子对象也可以像页面一样拥有自己的属性和数值,结构见右图。

添加子对象

详情请阅读:帮助:解析器函数#subobject

查询子对象

详情请阅读:help:Semantic Mediawiki/子对象查询
avatar