全站通知:

帮助:SMW/旧教程存档

来自bilibili游戏中心 - WIKI
跳到导航 跳到搜索

SMW简介

Semantic MediaWiki(SMW)是一个免费、开源的MediaWiki扩展。它可以帮助wiki进行搜索、组织、标记、浏览、计算和共享数据。传统wiki只包含文本信息,计算机无法对其进行理解和计算。SMW为wiki添加了语义注释(Semantic Annotations)数据,从而使wiki具有数据库的功能。

SMW首次发布于2005年,目前有超过十名开发者,数以百计的站点使用了SMW。另外,目前已有许多相关扩展可以扩充SMW的编辑、显示和浏览数据的功能。Semantic MediaWiki有时也指整个SMW和其相关扩展系列。

关于本页面

本页面仅针对SMW常用语义进行简要说明,详细的机制和更深一层次的说明可以参见:Semantic MediaWiki和THBWiki中的帮助:SMW说明。

前言

BWIKI提倡大家多使用SMW语义来处理一些数据向的内容。

简单机制介绍

  1. 语义注释函数:通过语义注释,给页面定义属性,给属性赋值。例如:#set等(其他略)
  2. 行内查询函数:主要用途为检索所需的页面,并显示所需的属性值。例如:#ask,#show
  3. 其他功能性函数:提供一些便利功能的,例如:#info等(其他略)
  4. 主要使用逻辑:使用语义注释函数(#set)在页面上储存数据,然后使用行内查询函数(#ask、#show)按照一定的定义和分类进行行内查询,最后输出结果。分页面储存便于多人协作,但同时也增加了维护的总量。

属性与类型

属性和类型是在SMW中输入语义数据的基本方式。属性可以认为是“页面数据的分类”。

它们可以用很简单的方式来标注,语法格式与MediaWiki的链接很类似:

[[属性名::属性值]]

上面这个语句给名称为“属性名”的属性定义了“属性值”。写了这个语句的页面将只会显示“属性值”,而不会把这个标注显示出来。

文本注释

比较分类与属性

属性命名

属性命名十分重要。属性名称需要避免出现歧义和混乱。

这里是一个简单的命名属性的例子:

33是一个[[种族::机娘]]
不要使用数据类型的名字
数据类型的名字见特殊:类型,关于数据类型的详细介绍见数据类型。
不要使用保留符号
  • ::(半角双冒号):单个冒号则不会有问题。
  • -(连字符):连字符不可作为首字母,因为它是反向属性的操作符号。
  • .(点):用于链接级联属性。
  • |(管道符)
  • #(数字符):在页面类型中,用于声明子对象。

属性声明

Semantic MediaWiki内置了若干数据类型,用户可以根据需要为属性选择合适的数据类型。为了能为属性定义类型,SMW还内置了一个特殊属性——属性:设有类型(Has type)

这里举22的例子。对于她的“发色”属性,我们需要定义它为文字类型。只需到属性:发色页面,添加下面这行代码:

[[has type::文本型]]

SMW有内置若干种类似“设有类型”这样的特殊属性,不论这些特殊属性是否有属性页面,它们都能起作用,并且与一般的属性作用不同。


数据类型在属性判定时十分重要。
  • 首先,数据类型决定工具如何处理给出的属性值。比如如何显示这些值、查询时如何排序这些值。
  • 其次,数据类型能够帮助工具理解哪些值是相等的,比如“1234567”、“1,234,567”、“1.234567e6”都表示同一个数值。
  • 最后,一些数据类型具有特殊的行为,在下方有详细描述。


由于以上原因,每个属性都应被定义合适的数据类型。

之前段落内举的例子之所以没有特别声明数据类型(如22的“发色”),是因为这个属性使用的就是默认数据类型页面,显示为一个链接。

但即使页面类型是默认类型,最好也在属性页上声明一下,以免在万一更改了默认类型时出现混淆。

SMW管理员可以改变默认类型。

数据类型的声明与显示效果如下:

数据类型

特殊属性

反向属性

单位

单位转换

自定义单位

解析函数

语义注释函数

set

语法格式
 {{#set:
 |属性名1=值1,值2|+sep=,
 |属性名2=值1;值2;值3;|+sep=;
 |属性名3=值1
 |属性名3=值2
 |属性名4=值1|值2|值3
 |属性名5=值1
 …
 }}
语法解释:
允许单行声明单个属性名的单个属性值或多个属性值。例如例子中的属性名5和属性名1/2/4的写法
允许多行声明单个属性名的多个属性值。例如例子中过的属性名3的写法
|+sep=用来声明单行属性名多个属性值中间的分隔符。如果不通过|+sep=来声明,默认使用|为分隔符。例如例子中的属性名1用|+sep=声明了多个属性值之间的分隔符为,;属性名2中用|+sep=声明了多个属性值之间的分隔符为;;而属性名4直接使用了默认分隔符|来分割多个属性值。
查看声明是否生效
BWIKI页面上的"WIKI功能按钮"中点击浏览属性按钮,就可以看到该页面已经声明的属性有哪些。

subobject

行内查询函数

ask

解析函数#ask用于基本行内查询,可以指定查询的条件,并按照给定的格式显示。

此处仅说明函数的结构,关于查询条件的写法,见检索页面;关于显示格式的写法,见显示帮助:SMW#信息与结果格式

下面是一个简单的使用#ask函数的例子:

 {{#ask:[[分类:你想检索的分类]] [[属性::属性值(用于缩小查询范围)]]
|?你想展示属性1(在展示模板中为{{{2}}})
|?你想展示属性2(在展示模板中为{{{3}}})
|link=none
|sort=你想用于排序的属性
|order=desc
|template=最后展示用的模板
|headers=hide
|format=template
|limit=1000
}}

我们来归纳下:

{{#ask:>>查询条件<<
|?>>展示信息<<
|>>输出结果式<<
}}
查询条件
  • 查询所有属性必须在分类所属的页面有声明(#set
  • 查询条件放在#ask:的后面,作为第一个参数,其他控制显示的参数用管道符|隔开。
  • 虽然并不需要严格按照上方那样写,但分行书写更易读,对其他编辑者更友好。
  • 在日常编写中,不论是本功能还是其他模板,每个参数起一行,每行从管道符|开始,是一个好习惯。

还需要注意以下几点:

  • 管道符|用于分隔查询条件和输出参数。
  • #ask函数中的全部查询条件被当作一个参数,所以不要用管道符|分隔它们。
  • 可以在#ask函数中可以自由使用空格和换行,SMW是一个灵活的扩展。
  • 当查询多个属性时,显示的格式可能会依据属性自动更改。SMW会给查询的结果使用合适的默认格式,但你也可以精确控制查询结果的格式。
显示信息

只要知道检索页面(查询条件)、显示信息与结果格式(输出参数)的基础用法,就可以执行非常多种查询了。

但是在一些情况下,显示成表格并不是最好的选择,所以我们需要指定更多的参数来控制。

上文的例子中我们就添加了两项简单的控制,限制了显示的条数,更改了第一列(页面标题列)的名字。

为了实现对显示结果的惊喜控制,行内查询的#ask函数可以使用非常多参数。

#ask函数的一般语法结构如下:

show

其他用途函数

语义搜索

语义模板

特殊页面

特殊页面:询问

SMW为大家提供了一个用于查询和输出的特殊页面:特殊:询问特殊:特殊页面里寻找语义搜索),提供多种输出方式。 QQ截图20200907153902.png

  1. 设定查询条件:
  2. 设定输出的属性:这里在特殊页面上需要使用?属性名的用法,如果有弹出属性勾选之后会消失
  3. 设定参数:输出结果根据选择的结果式不同而需要设定不同的参数,这个结果式会在代码里以format=形式展示。一般为了自由输出样式大家会采用format=template也就是以模板输出参数的意思。
  4. 使用输出的代码:

QQ截图20200907155934.png

特殊页面浏览

SMW在BWIKI上的使用实例