• 欢迎来到THBWiki!如果您是第一次来到这里,请点击右上角注册一个帐户
  • 有任何意见、建议、求助、反馈都可以在 讨论板 提出
  • THBWiki以专业性和准确性为目标,如果你发现了任何确定的错误或疏漏,可在登录后直接进行改正

帮助:SMW

来自THBWiki
跳到导航 跳到搜索

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

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

简介

为什么要使用SMW
比如你需要查找“在Comic Market 91上发布的Jpop风格同人专辑”,如果是在非SMW平台wiki上,你可能需要翻阅大量专辑页面才能收集。
而使用了SMW后,你只需使用下面这个语句:
{{#ask:
[[分类:同人专辑]]
[[发售展会名称::Comic Market 91]]
[[专辑风格::Jpop]]
| ?制作方
| limit =10
}}
便可以得到搜索结果列表,此处限制显示10项:
 制作方
46 ChordeRZYTOKINE
AxeleratorGET IN THE RING
Bres -ブレス-Stersion
Misty
Brilliant StoryAmateras Records
C91会場限定おまけCD森羅万象
C91会場限定おまけCD Instrumental versions暁Records
C91新譜 とらのあな限定版 特典CD幽闭星光
Crimson Tide釣師
DESTINY七幻シュトラーセ
EMOTIONALISMMurder Ground
...更多结果
从而使wiki起到类似数据库的作用,方便查询。

代码测试说明

如果某段说明上方没有任何标志或警示
则该段落的功能/函数不会影响本维基正常运行。
请在测试时使用沙盒,或自己的用户页面“用户:你的用户名”。

如果某段说明上方有如下警示:

请仔细阅读并遵循本段内测试说明来进行测试,并在测试后及时删除测试代码。

请不要随意创建属性
使用文本注释set函数等功能时,可能会创建新的属性。这不利于有序地管理SMW属性。
如需测试以上功能,请只使用专门用于测试的属性来进行测试。
测试用属性有:
使用的方法:
[[测试string::用于说明Semantic MediaWiki的使用方法]]
效果:
用于说明Semantic MediaWiki的使用方法
前往属性:测试string查看效果。
使用后,如果不是必须保留(例如在本页面中作为例子存在的测试代码),请将测试代码删除。
页面事实框
如果需要测试已有的属性
请在测试后,将测试用的代码删除
否则该测试定义的属性值将出现在该属性列表中,可能会造成部分wiki页面使用查询功能时得到错误的结果。
保存页面之前的检查
点击“显示预览”按钮(在保存页面按钮的右侧)。
在页面的末尾会出现“关于页面名称的事实”区域,里面写着当前页面所具备的属性和值。
以本页面为例,前文使用了属性:测试string,此项属性便写在该区域里,见右图。
请在检查属性使用无误后保存。
另,预览页面末尾还有所用模板、映射方案、解析器运作信息等,都十分有用。

如果某段说明上方有如下标志:

则该段落内绿色部分的代码可以自由测试,其余代码请勿随意测试。

语义搜索及相关函数测试
语义搜索功能,如函数askshow,可以自由使用。
可以更改这些代码内部的参数,关于这些函数和功能的使用方法,请参看各自段落。
测试请在沙盒中进行,或者使用自己的用户页面“用户:你的用户名”。

属性与类型

属性和类型是在SMW中输入语义数据的基本方式。
属性可以认为是“页面数据的分类”。
它们可以用很简单的方式来标注,语法格式与MediaWiki的链接很类似:

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

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

本段落下文中介绍了属性的基本用法,和属性的类型。

文本注释

举一个简单的例子:如本维基上的博丽灵梦页面,你可能需要为它添上标签:

[[人类]]

在该页面上,这个标签被称为“种族属性”。

但在SMW中,你可以这样来写:

[[种族::人类]]

在括号内部,将属性名称放在::前面,将属性值放在其后。
则在该页面上,这个链接仍显示为“人类”。增加的文字种族是一个属性的名字,它将页面归为与“人类”相关。其他类似的角色页面中,也可以应用这样的标注。

和分类类似,每个属性都有自己的页面,页面以属性:开头,方便用户统一使用这些属性。你可以直接在顶部搜索框中搜索已有的属性。属性页面可以为空,但强烈建议写明属性用途。

文本注释和属性声明都是大小写敏感的,因此建议启用MediaWiki的一些环境设置(如$wgCapitalLinks详见)。
任意更改这些环境设置可能导致查询的内容有误或不可查询。

将链接转换为属性
有许多方法能将链接转换为属性:
显示效果 代码 注意事项
将值人类添加到属性“种族”中。
将值[[种族::人类]]添加到属性“种族”中。
让链接显示为种族为人类
让链接显示为[[种族::人类|种族为人类]]。
如果不需要显示属性,则在链接显示文字中输入空格。
如果不需要显示属性[[种族::人类| ]],则在链接显示文字中输入空格。
管道符|后的空格是必要的。如果略去空格,则会触发管道符技巧(Pipe trick)。即使输入空格,SMW也不会输出任何字符。如果需要输出空格,应使用转义字符 代替空格。

这种情况建议使用set函数。

如果需要使用::写一个指向某属性值的链接,而不是要创建属性,则在开头增加冒号。如:
种族::人类
[[:种族::人类]]
SMW 2.3.0版本起,属性值可以包含::,而不会导致多创建一个属性。如:
IPv6地址是fc00:123:8000::/%6。
IPv6地址是[[IPv6地址::fc00:123:8000::/%6]]。
用这种方法时,属性值不可以包含方括号[、维基链接...、四冒号::::

这种情况建议使用set函数。
警告:此功能本维基不适用,本地SMW版本2.1.1

可以将一个值赋给多个属性,使用::分隔属性名称。如:
人类
[[种族::外观::人类]]
SMW 2.3.1版本起需要禁用严格模式设置,才可使用本功能。

这种情况建议使用set函数。
警告:此功能本维基直接启用,本地SMW版本2.1.1

将文本中的值转换为属性
除了指向其他页面的链接,维基页面上也有其他有用的信息。比如博丽灵梦页面给出了她的能力。你可以这样写:
主要拥有在空中飞翔程度的能力
如果读完上文,你应该能想到,这应该是“能力”属性的值。你可以这样写以添加属性:
[[能力::主要拥有在空中飞翔程度的能力]]
一般你并不想把上面这个能力变为一个链接,这时你需要对“能力”属性定义类型(关于各种类型,见数据类型)。
此处,将“能力”属性类型定义为文字(Type Text),则上面的代码将不会变为链接,而是显示为文字:
主要拥有在空中飞翔程度的能力
同时使用分类和属性进行归档
比较分类与属性
使用#set进行静默注释
set函数。

比较分类与属性

MediaWiki提供了[[分类:...]]的注释,可以对各个页面进行归类整理。
Semantic MediaWiki则增加了一项归档用的功能——属性(Property)。

分类与属性
划分一块领域的事物时,分类非常有用,比如划分同人志同人专辑
而对于同一分类下的各个成员,则可以用不同的属性来描述它们,比如制作方发售展会等。
  • 分类用于划分特性相同的事物到同一个组:
  • 属性用于描述分类里各个事物的特性:
层次结构
子分类用于细分分类内的事物,另外,“所属的子分类”(Subcategory of)是SMW特殊属性中的一种。
所属的子属性”(Subproperty of)也为特殊属性。详见本页特殊属性段落对其的描述。
如何进行归档
没有一刀切的规定来限制你如何使用分类和属性。但你可以参照以下经验:
  • 最广泛的分类是主题名字空间,比如本页面名称前面的“帮助”,它可以将所有页面划分为几类。
  • 分类可以将相近事物划为一组,也可以在一组里再进行细分,或者使子分类有一定程度的交叉或重叠。
  • 属性可以直接描述事物的特性。
具体的归档方式要根据需要来进行。如果只需划分大类,可只用分类。如果想要划分细致并且便于检索详细特性,则需使用属性。
属性无法做到的事
无法查询某页面是否“不存在某属性”。
解决方法为:
  • 使用模板方式编写,每项属性对应模板的一个输入参数;
  • 使用if函数来检查模板输入参数是否存在;
  • 将某项输入参数不存在的页面分类到“分类:没有某项参数的页面”。
即可在该分类下检查不存在某项属性的页面,如分类:没有首发展会的同人作品

属性命名

属性命名十分重要。属性名称需要避免出现歧义和混乱。
这里是一个简单的命名属性的例子:

灵梦是一个[[种族::人类]]。
不要使用数据类型的名字
数据类型的名字见特殊:类型,关于数据类型的详细介绍见数据类型
不要使用保留符号
保留符号不能出现在属性名称里,因为它们在语义查询时有特殊的语法作用,如果用于属性名称会造成查询时逻辑错误。
比如:
  • ::(半角双冒号):单个冒号则不会有问题。
  • -(连字符):连字符不可作为首字母,因为它是反向属性的操作符号。
  • .(点):用于链接级联属性。
  • |(管道符)
  • #(数字符):在页面类型中,用于声明子对象。

属性声明

Semantic MediaWiki内置了若干数据类型,用户可以根据需要为属性选择合适的数据类型。

为了能为属性定义类型,SMW还内置了一个特殊属性——属性:设有类型(Has type)。
还是灵梦的例子。对于她的“能力”属性,我们需要定义它为文字类型。
只需到属性:能力页面,添加下面这行代码:

[[设有类型::文字]]

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

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

之前段落内举的例子之所以没有特别声明数据类型(如灵梦的“种族”),是因为这个属性使用的就是默认数据类型页面,显示为一个链接。
但即使页面类型是默认类型,最好也在属性页上声明一下,以免在万一更改了默认类型时出现混淆。
SMW管理员可以改变默认类型

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

作用 代码
将值“主要拥有在空中飞翔程度的能力”赋给属性“能力”。
灵梦的能力为[[能力::主要拥有在空中飞翔程度的能力]]。
赋一个数字类型的值,但在文章中显示成别的文字。
紫的年龄为[[年龄::1200|十七]]岁。
在属性页面中,指定属性的数据类型。
这个属性是[[设有类型::数字]]类型的。
URL类型来显示网页链接。
欢迎来到[[主页链接::https://thwiki.cc]]。
Email类型来显示一个发邮件的链接。
你可以通过[[邮件地址::admin@thwiki.cc]]联系本站站长[[囧仙]]。
数据类型列表
往下滚动一点查看下面一个段落,数据类型

数据类型

给属性使用不同的数据类型,就可以用来描述不同的类型的值。下面为本维基内全部18种数据类型的说明:

本维基名称(页面) 英文名称 说明 来源
特殊:类型页面上的顺序排列
Email Email 用于存储电子邮件地址。 Semantic MediaWiki
URI的注解 Annotation URI 用于存储URI,导出时与URL类型有不同。 Semantic MediaWiki
URL URL 用于存储URI、URN或URL。 Semantic MediaWiki
代码 Code 用于存储各类代码,与文字类型类似,但显示时会出现代码框,并使用等宽字体。 Semantic MediaWiki
价格 Price (待描述) Arumi〈紧闭的恋之瞳〉(本维基自定义)
地理学的座标 Geographic coordinate 用于存储描述地理学位置的坐标,使用经纬度表示。 Semantic Maps
布尔 Boolean 用于存储布尔值(真/假值)。 Semantic MediaWiki
搜索 Search Key (待描述) Arumi〈紧闭的恋之瞳〉(本维基自定义)
数字 Number 用于存储十进制整数,可使用指数符号e Semantic MediaWiki
数量 Quantity 用于存储描述数量的值,包含一个数字和一个单位。 Semantic MediaWiki
文字 Text 用于存储任意长度的文字。 Semantic MediaWiki
日期 Date 用于存储一个特定的时间点。 Semantic MediaWiki
时长 Duration (待描述) Arumi〈紧闭的恋之瞳〉(本维基自定义)
温度 Temperature 用于存储温度值。与数量类型类似,由一个数字和一个单位组成。 Semantic MediaWiki
电话号码 Telephone number 用于存储符合RFC 3966标准的国际电话号码。 Semantic MediaWiki
记录 Record 允许存储 具有 固定数据类型 和 顺序 的值 组成的小列表,这是一个复合属性值。 Semantic MediaWiki
链接 Link (待描述) Arumi〈紧闭的恋之瞳〉(本维基自定义)
页面 Page 用于存储维基页面的名字,并显示为链接。 Semantic MediaWiki
各数据类型的显示格式样例
由于展示时有必要创建新属性,而为了本维基内属性管理的有序,不便于创建大量测试用属性,此处不做展示。
各数据类型的显示格式请见SMW官方页面上的说明。
枚举“允许值”属性
除了给属性指定数据类型,你还可以指定属性允许接受的值的范围(可以理解为属性输入值的白名单)。
这可以通过使用特殊属性中的属性:允许值来完成。此功能可用于所有数据类型。
单位
数据类型数量允许在数字值后面增加一个单位,来避免混淆各个数值(比如“17岁”和“380000公里”)。
你需要按照单位段落中说明的方式,给属性声明它所支持的单位以及换算关系。
声明之后,属性值可以自动地在不同的单位之间换算,每个页面中,用户都可以按照需求选择合适的单位,不会影响到其他页面的查询和比较。

特殊属性

本段落描述了本维基SMW内置的24种特殊属性。系统需要它们才能正常运行。
特殊属性在页面事实框(详见浏览界面)、特殊页面“属性:...”和特殊页面“特殊:浏览”中显示为斜体字。
SMW 1.4.0版本起,浏览界面行内查询可以像一般属性一样使用特殊属性。

与SMW类似的扩展可能也会提供一些特殊属性,如Semantic Extra Special PropertiesSemantic Cite扩展等。
此处的说明不会包含这些特殊属性。

特殊属性的名称和别名是保留的,不能用于其他属性。特殊属性只能按下方说明的方法使用。
没必要给特殊属性创建属性页面。即使维基内没有特殊属性的页面,它们也会照常工作。

下面的表格给出了特殊属性的概括性说明:

本维基名称(页面) 英文名称 别名 概括性说明 详细说明 是否为可选 标签
允许值 Allows value (无) 用于列出属性允许输入的一个值。 允许值段落 _PVAL
符合于 Corresponds to (无) 用于给出某个数量类型属性的其他可选单位和换算系数。 符合于段落 _CONV
显示单位 Display units Display unit、显示计量单位 用于给出一列显示时使用的单位或格式,用半角逗号隔开。 显示单位段落 _UNIT
对应的URI Equivalent URI (无) 用于给页面添加一个外部URI,来说明此词条在维基外的众所周知的含义。 对应的URI段落 _URI
设有类型 Has type (无) 用于为属性指定类型。 设有类型段落 _TYPE
输入来源 Imported from (无) 允许用户在维基内直接重用外部词汇元素。 输入来源段落 _IMPO
提供服务 Provides service (无) 用于为属性添加服务链接。 提供服务段落 _SERV
所属的子属性 Subproperty of (无) 用于指定一个属性是另一个属性的子属性。 所属的子属性段落 _SUBP
修改日期 Modification date (无) 用于存储一个固定值,该值表示页面的最后编辑时间。 修改日期段落 _MDAT
有无不正确的值 Has improper value for (无) 用于在给属性指定一个不允许输入的值时,发出警告。 有无不正确的值段落。 _ERRP
有无字段 Has fields (无) 用于给记录类型定义一个固定类型和顺序的字段小列表。 有无字段段落 _LIST
所属的子分类 Subcategory of (无) 用于指定一个分类是另一个分类的子分类。 所属的子分类段落 _SUBC
创建日期 Creation date (无) 用于存储一个固定值,该值表示页面的首次编辑时间。 创建日期段落 _CDAT
有无子对象 Has subobject (无) 用于存储页面上设定的子对象。 有无子对象段落 _SOBJ
是否为新页面 Is a new page (无) 用于标记页面是不是新页面。 是否为新页面段落 _NEWP
最后编辑者是 Last editor is (无) 用于存储页面最后编辑者的用户页面名字。 最后编辑者是段落 _LEDT
有无查询 Has query (无) 用于给页面创建一个链接,指向由查询创建的子对象。 有无查询段落 _ASK
查询深度 Query depth (无) 用于存储查询属性的深度。 查询深度段落 _ASKDE
查询格式 Query format (无) 用于存储查询结果的格式名称。 查询格式段落 _ASKFO
查询大小 Query size (无) 用于存储查询条件的数目。 查询大小段落 _ASKSI
查询字符串 Query string (无) 用于以字符串的形式存储查询条件。 查询字符串段落 _ASKST
查询时长 Query duration (无) 用于存储执行查询的耗时。 查询时长段落 _ASKDU
Mime类型 MIME type (无) 用于存储上传文件的MIME类型。 Mime类型段落 _MIME
媒体类型 Media type (无) 用于存储上传文件的媒体类型。 媒体类型段落 _MEDIA

允许值

特殊属性“允许值”用于列出属性能够接受的值,这个特殊属性是给属性页面使用的。
你可以给任何数据类型的属性使用,来限制该属性能接受的值。

例子
如前文中提到的“种族”属性,可能包含如下的代码:
[[允许值::人类]]
[[允许值::妖怪]]
[[允许值::阎魔]]
[[允许值::亡灵]]
...
有序属性
照前文例子中那样枚举几个允许值,并不会按照代码的顺序来放置可用的值。
属性总是会按照数据类型中指定的自然顺序来排列。
如果要指定顺序,可以使用前缀,例如文字类型的属性“跑步速度”,可以按照下面这种方式来指定排列顺序:
[[允许值::A 跑的比谁都快]]
[[允许值::B 运动健将]]
[[允许值::C 常人速度]]
[[允许值::D 慢]]
如果照上面的方式写,你就可以使用比较器来执行语义搜索了。
比如查询条件可以写为[[跑步速度::>C 常人速度]],含义是大于等于常人速度(详见比较器注意事项),即查询A、B、C三项。
对错误值的处理
当你为页面定义了属性[[种族::两栖类]],而“种族”属性不接受这种值,则会显示警告标识。
但如果你使用{{#set: 种族=两栖类 }}这种方式来定义属性,则这种错误会被静默忽略。
你可以使用“有无不正确的值”属性来寻找使用错误值的页面。

符合于

特殊属性“符合于”用于给出一个物理量的单位和换算系数。
关于单位和本属性的详细用法请见单位段落,此处仅作简单说明。

你可以对数据类型数量数字的属性使用本特殊属性。
假设有“体重”属性,在属性页面上可能包含如下代码:

[[符合于::1 公斤, 千克, kg]]
[[符合于::2 斤, 市斤]]
[[符合于::20 两]]
[[符合于::1000 克, g]]

注意应使用半角逗号
对于如上方代码所示的比例换算,属性会被设定为数量类型。
如果为非比例换算(如y=5*x+10),只能用于数字类型。如果需要使用单位,则需额外使用一种数据类型
目前,只有温度类型使用了额外的数据类型。

显示单位

特殊属性“显示单位”,别名“显示计量单位”,用于指定属性的单位。
指定时,用半角逗号隔开各个单位。

数据类型数量数字温度的属性页面上使用本特殊属性时,效果为所有显示值都只会显示为给出的单位,并且只会显示为给出的顺序(单位在前还是数字在前)。
如果一个属性没有特别指定显示的单位,则会转换为该属性的数据类型所支持的单位。
你可以为属性页面添加“显示单位”来规定显示格式,或者规定显示该单位的何种称呼(如显示为“分”还是“分钟”)。
在工具提示(鼠标停留在页面的属性文本上会显示)、页面事实框(详见浏览界面)和一些查询结果中,会显示转换为附加单位的值。

注意,即使你规定了单位的显示格式,属性赋值时却不一定要按显示格式定义。
你仍可以用数据类型本身带有的,或者你使用“符合于”规定的单位来给属性赋值。

仍假设有“体重”属性,在属性页面上可能包含如下代码:

[[显示单位::斤]]

则所有注释为“体重”属性的值都会显示为斤作单位。

对应的URI

(不常用的属性,后期将补完。)

设有类型

特殊属性“设有类型”用于指定属性的数据类型

比如上文中的例子“能力”属性,灵梦的“能力”是“主要拥有在空中飞翔程度的能力”,应使用文字类型。
则在“能力”的属性页面上,应指定:

这个属性是[[设有类型::文字]]类型的。

在1.0到1.4.3版本的SMW中,一个属性可以由多个值,且可以为每个值定义不同的类型。
从1.5.0版本开始,多值属性被记录类型代替,详见数据类型
本维基SMW版本2.1.1

输入来源

(不常用的属性,后期将补完。)

提供服务

(不常用的属性,后期将补完。)

所属的子属性

特殊属性“所属的子属性”用于指定属性之间的从属关系。
这意味着,在进行语义搜索时,如果查询父属性,其子属性也会被查询。

举个本维基内的例子,在分类:同人专辑下属的页面上,有属性:曲目人员。该属性有以下几个子属性:

为了使“作曲”成为“曲目人员”的子属性,你需要在“作曲”属性的页面上写下面的代码:

[[所属的子属性::曲目人员]]

则在“曲目人员”属性页面上,将看到它具有子属性“作曲”。

父属性用于查询时
下面这行代码将会查询所有具有“曲目人员”属性的页面,具有其子属性“作曲”等的页面也会显示在结果中:
{{#ask: [[曲目人员::+]] }}
效果(此处限制显示前十条曲目):
_(:з」∠)_#1, _(:з」∠)_#2, _(:з」∠)_#3, "Activity" Case:01 -Graveyard Memory-#1, "Activity" Case:01 -Graveyard Memory-#2, "Activity" Case:01 -Graveyard Memory-#3, "Activity" Case:01 -Graveyard Memory-#4, "Activity" Case:02 -Nightmare Counselor-#1, "Activity" Case:02 -Nightmare Counselor-#2, "Activity" Case:02 -Nightmare Counselor-#3...更多结果
父属性用于显示时
但如果你在在语义搜索时使用了参数,规定了要显示的属性(详见显示信息),则此时父属性栏里不会出现子属性的值:
{{#ask: [[曲目人员::+]]
|?曲目人员
|?作曲
|?作词
|?剧本
|?演唱
|?演奏
|?编曲
|?配音
}}
效果(此处限制显示前十条曲目):
 曲目人员作曲作词剧本演唱演奏编曲配音
_(:з」∠)_#1cruisers
_(:з」∠)_#2cruisers
_(:з」∠)_#3cruisers
"Activity" Case:01 -Graveyard Memory-#1Jellみぃ平茸
Pira
GCHM
"Activity" Case:01 -Graveyard Memory-#2Jellみぃ平茸
Pira
GCHM
"Activity" Case:01 -Graveyard Memory-#3平茸
Pira
GCHM
"Activity" Case:01 -Graveyard Memory-#4平茸
Pira
GCHM
"Activity" Case:02 -Nightmare Counselor-#1Jell小峠舞
みぃ
h.tatuki
supika
GCHM
"Activity" Case:02 -Nightmare Counselor-#2Jellみぃh.tatuki
supika
GCHM
"Activity" Case:02 -Nightmare Counselor-#3h.tatuki
supika
GCHM
...更多结果
如上方所示,由于曲目没有被直接定义“曲目人员”属性,所以该项为空。
(本维基内用于编写曲目的模板:同人曲目信息把编写时输入的值赋给“曲目人员”属性的子属性,如“编曲”等。)
父属性同时用于查询和显示时
但是在查询的条件区域,父属性的值是包含子属性的。
如下面这个例子,查询的是“曲目人员”及其子属性中,值包含“溝口ゆうま”的曲目名及其各属性值。
{{#ask: [[曲目人员::溝口ゆうま]]
|?曲目人员
|?作曲
|?作词
|?剧本
|?演唱
|?演奏
|?编曲
|?配音
|limit =10
}}
结果为(此处限制显示前十条曲目):
 曲目人员作曲作词剧本演唱演奏编曲配音
556mm nonstop megamix vol.02#13築山さえ築山さえ溝口ゆうま
556mm nonstop megamix vol.02#9溝口ゆうま大瀬良あいTracy
Astronomical
556mm nonstop megamix vol.03#10海兎moca溝口ゆうま
556mm nonstop megamix vol.03#7築山さえ築山さえ溝口ゆうま
ADAM -A DAY AFTER MOMENT-#2築山さえ築山さえMasayoshi Minoshima
溝口ゆうま
Addicted Moon the instrumental#10Tracy
溝口ゆうま
Astronomical
Addicted Moon the instrumental#4溝口ゆうま
Addicted Moon the instrumental#7溝口ゆうま
Addicted Moon#10築山さえKUMI零 -zero-Tracy
溝口ゆうま
Astronomical
Addicted Moon#4海兎Kanata.N溝口ゆうま
...更多结果
可以看出,“溝口ゆうま”不论出现在哪个子属性里,查询都能查到该曲目。但“曲目人员”属性依旧为空。

关于查询与显示结果的方法,详见语义搜索段落。

修改日期

特殊属性“修改日期”用于存储页面的最后修改时间。
此特殊属性从SMW 1.4.0版本开始出现,从SMW 1.7.0版本开始可以设置是否使用本特殊属性。
关于如何设置是否使用,请见$smwgPageSpecialProperties设置帮助页面,里面介绍了如何设置SMW的特殊页面相关属性。

本属性可在行内查询时用于查询页面的修改日期,其数据类型日期
请勿手动给本特殊属性赋值。SMW会自动更新本属性的值。从SMW 2.2.0版本起,将不能手动为本特殊属性赋值。
本维基SMW版本2.1.1

本属性内存储的值是基于维基服务器内部的时间推算出的,所以此时间可能与用户所在的时区不一致。
由于这些值是存储于数据库内的,它不会随着用户设定的时区而变化,所以建议维基服务器将时区设为UTC时区,以免在当地时间变化时(如迁移维基服务器时)出现问题。

查询本属性
如查询本页的“修改日期”属性:
{{#show: 帮助:SMW | ?修改日期 }}
效果:
2022-03-26T10:06:43
show函数的详细使用方法见其自己的段落和行内查询段落。

有无不正确的值

特殊属性“有无不正确的值”用于追踪一些属性的无效输入值。
一般会检查输入的值是否符合该属性的数据类型,数据类型使用特殊属性“设为类型”来规定。
同时也检查是否符合特殊属性“允许值”规定的输入值。

对于有错误输出值的页面,其页面的“有无不正确的值”属性的值即为有错误输入值的属性名。
所以本属性可在行内查询或使用特殊:按属性搜索页面时,用于寻找有错误输入的页面。
另外需要注意,使用SMW特殊属性时出现的错误也会被记录于本属性内。

“有无不正确的值”属性在维护维基时十分有用,某属性数据类型更改后,SMW也使用本属性来自动修复记录。

请勿手动给本特殊属性赋值。SMW会自动更新本属性的值。从SMW 2.2.0版本起,将不能手动为本特殊属性赋值。
本维基SMW版本2.1.1

查询有错误的输入
如查询分类:同人专辑中所有有错误输入值的页面,并显示有错误输入值的属性名:
{{#ask:
[[分类:同人专辑]]
[[有无不正确的值::+]]
|?有无不正确的值
}}
效果:
搜索结果中显示了页面名和有错误输入的属性。
ask函数详细用法见其自己的段落。
有错误输入时在页面上的提示
具有错误输入的属性,在页面上会有标记。下面举一个例子。
属性:测试number数据类型数字,我们在这里为它赋一个非数字的值:
[[测试number::帮助SMW例子-测试有错误的输入]]
则显示在页面上时,就会出现一个黄色的警告标记,鼠标停留在标记上,有相应的说明:
帮助SMW例子-测试有错误的输入"帮助SMW例子-测试有错误的输入"不是数字。

有无字段

(不常用的属性,后期将补完。)

所属的子分类

特殊属性“所属的子分类”用于指定分类之间的从属关系。
则在对父分类进行语义搜索时,推理功能会将子分类将作为子类(Subclass)归进搜索范围内。
本属性在$smwgUseCategoryHierarchy(决定SMW是否使用MW分类层次关系的参数)设置为false时十分有用,此时子分类关系必须用本属性明确声明才起作用,没有被明确声明的MW分类层次关系会被忽略。

设置本特殊属性
仅在$smwgUseCategoryHierarchy被设为false时,本属性的声明才有效。
在默认情况下,该参数为true,则SMW会自动识别MW的分类层次结构,并对所有子分类自动设定“所属的子分类”属性。
本维基此参数为true
下面举一个例子:
比如在本维基中,分类:官方作品下面有三个子分类:
则当查询“官方作品”时,返回的结果也应包含“官方出版物”等子分类中的页面。
并且也会查询子分类的子分类中的页面,查询的深度由$smwgQSubcategoryDepth参数定义,默认为10层。
另可参见推理段落的说明。
查询页面举例
仍使用上方的分类:官方作品的例子,你可以通过查询父分类来查询子分类中的页面:
{{#ask:
[[分类:官方作品]]
[[发售方::黄昏边境]]
}}
结果为:
东方凭依华, 东方刚欲异闻, 东方心绮楼, 东方深秘录, 东方绯想天, 东方萃梦想, 东方非想天则, 全人类的天乐录, 完全凭依唱片名录, 幻想曲拔萃, 暗黑能乐集心绮楼, 核热造神非想天则, 深秘乐曲集, 深秘乐曲集/补, 贪欲之兽的音乐
分类:官方作品查到了分类:官方游戏中的内容。
查询分类有哪些子分类
无论$smwgUseCategoryHierarchy被设定为何值,你都可以用“所属的子分类”属性来查询分类的子分类。
比如你想知道分类:官方作品下面有哪些子分类,就可以用如下代码:
{{#ask:
[[所属的子分类::官方作品]]
}}
(在查询条件中,可以不输入分类:
效果为:
官方出版物, 官方游戏, 官方特典, 官方音乐, 旧作音乐
应注意:
在查询分类有哪些子分类时,子分类的子分类,如分类:官方音乐的子分类分类:官方音乐CD,是不包含在结果里的。
目前还不能查询下属层次的所有子分类。

ask函数有关的用法详见其函数段落与语义搜索段落。

创建日期

特殊属性“创建日期”用于用于存储页面的首次编辑时间。
此特殊属性从SMW 1.7.0版本开始出现,并可以设置是否使用本特殊属性。
默认本属性是不启用的。关于如何设置是否使用,请见$smwgPageSpecialProperties设置帮助页面,里面介绍了如何设置SMW的特殊页面相关属性。

本维基不启用“创建日期”特殊属性。

本属性可在行内查询时用于查询页面的修改日期,其数据类型日期
请勿手动给本特殊属性赋值。SMW会自动更新本属性的值。从SMW 2.2.0版本起,将不能手动为本特殊属性赋值。
本维基SMW版本2.1.1

本属性内存储的值是基于维基服务器内部的时间推算出的,所以此时间可能与用户所在的时区不一致。
由于这些值是存储于数据库内的,它不会随着用户设定的时区而变化,所以建议维基服务器将时区设为UTC时区,以免在当地时间变化时(如迁移维基服务器时)出现问题。

有无子对象

特殊属性“有无子对象”用于存储页面中设置的子对象。
关于子对象的说明详见subobject函数的段落。

请勿手动给本特殊属性赋值。SMW会自动更新本属性的值。从SMW 2.2.0版本起,将不能手动为本特殊属性赋值。
本维基SMW版本2.1.1

是否为新页面

特殊属性“是否为新页面”用于标记页面是否为新。
新页面指刚被创建,只经过一次编辑,即只有一个版本的页面。
此特殊属性从SMW 1.7.1版本开始出现,并可以设置是否使用本特殊属性。
默认本属性是不启用的。关于如何设置是否使用,请见$smwgPageSpecialProperties设置帮助页面,里面介绍了如何设置SMW的特殊页面相关属性。

本维基不启用“是否为新页面”特殊属性。

本属性可在行内查询时用于查询页面是否为新,其数据类型布尔
请勿手动给本特殊属性赋值。SMW会自动更新本属性的值。从SMW 2.2.0版本起,将不能手动为本特殊属性赋值。
本维基SMW版本2.1.1

最后编辑者是

特殊属性“最后编辑者是”用于存储页面最后编辑者的用户页面名字。
此特殊属性从SMW 1.7.1版本开始出现,并可以设置是否使用本特殊属性。
默认本属性是不启用的。关于如何设置是否使用,请见$smwgPageSpecialProperties设置帮助页面,里面介绍了如何设置SMW的特殊页面相关属性。

本维基不启用“最后编辑者是”特殊属性。

本属性可在行内查询时用于查询页面的最后编辑者,其数据类型页面
请勿手动给本特殊属性赋值。SMW会自动更新本属性的值。从SMW 2.2.0版本起,将不能手动为本特殊属性赋值。
本维基SMW版本2.1.1

有无查询

特殊属性“有无查询”用于链接页面到行内查询所创建的子对象。
这个子对象中存储了与本次查询有关的信息。
包括查询深度查询格式查询大小查询字符串
关于本属性的用法详见对查询行为的查询段落。

请勿手动给本特殊属性赋值。SMW会自动更新本属性的值。从SMW 2.2.0版本起,将不能手动为本特殊属性赋值。
本维基SMW版本2.1.1

查询深度

特殊属性“查询深度”用于存储行内查询时,推理出的属性深度。
关于本属性的用法详见对查询行为的查询段落。

查询格式

特殊属性“查询格式”用于存储行内查询时,结果格式的名字。
关于本属性的用法详见对查询行为的查询段落。

查询大小

特殊属性“查询大小”用于存储行内查询时,检索页面的查询条件个数。
关于本属性的用法详见对查询行为的查询段落。

查询字符串

特殊属性“查询字符串”用于存储行内查询时,检索页面的查询条件文本,本属性数据类型代码
关于本属性的用法详见对查询行为的查询段落。

查询时长

特殊属性“查询时长”用于存储行内查询时,执行查询所使用的时间。
关于本属性的用法详见对查询行为的查询段落。

默认本属性是不启用的。关于如何设置是否使用,请见$smwgQueryProfiler设置帮助页面。

本维基不启用“查询时长”特殊属性。

Mime类型

特殊属性“Mime类型”用于存储上传文件的MIME类型
因此,本属性仅对名字空间为文件的页面起作用。
此特殊属性从SMW 1.9.1版本开始出现,并可以设置是否使用本特殊属性。
默认本属性是不启用的。关于如何设置是否使用,请见$smwgPageSpecialProperties设置帮助页面,里面介绍了如何设置SMW的特殊页面相关属性。

本维基不启用“Mime类型”特殊属性。

本属性的使用方式同其他数据类型文字的属性类似。
请勿手动给本特殊属性赋值。SMW会自动更新本属性的值。从SMW 2.2.0版本起,将不能手动为本特殊属性赋值。
本维基SMW版本2.1.1

媒体类型

特殊属性“媒体类型”用于存储上传文件的媒体类型
因此,本属性仅对名字空间为文件的页面起作用。
此特殊属性从SMW 1.9.1版本开始出现,并可以设置是否使用本特殊属性。
默认本属性是不启用的。关于如何设置是否使用,请见$smwgPageSpecialProperties设置帮助页面,里面介绍了如何设置SMW的特殊页面相关属性。

本维基不启用“媒体类型”特殊属性。

本属性的使用方式同其他数据类型文字的属性类似。
请勿手动给本特殊属性赋值。SMW会自动更新本属性的值。从SMW 2.2.0版本起,将不能手动为本特殊属性赋值。
本维基SMW版本2.1.1

反向属性

SMW 1.5.0版本起,在进行语义搜索(包括行内查询概念)与在浏览界面上查询时,数据类型页面的属性可以进行反向查询。

在任何SMW功能中,只需在属性名字前加连字符-,即可反向查询属性。
在使用反向属性时,“具有属性的页面”和“该属性的值(也为页面)”相互交换位置。

逻辑关系
为了便于理解,这里举一个逻辑上的例子:
Parent是Child的家长。
反过来说应该是:
Child的家长是Parent。
或者:
Child是Parent的孩子。
这两种说法都没有问题。
注意两种说法的区别
下面这个例子就容易理解错误:
蕾米是芙兰的姐姐。
反过来说应该是:
芙兰的姐姐是蕾米。
你可能觉得也可以这么说:
芙兰是蕾米的妹妹。
但这是错误的,因为第一句话并没有给出芙兰的性别。
在应用反向属性时,就应该注意这种逻辑上的区别。
与普通属性的区别
SMW不支持给反向属性命名,也不能给反向属性赋值。反向属性仅限用于查询数据。
反向属性在浏览界面语义搜索和查询输出指令时有效。
用于行内查询时,仅对数据类型页面的属性有效。
使用举例
如前文中使用过的例子,假设在博丽灵梦页面上有下面的语句:
灵梦的种族是[[种族::人类]]。
则你可以在其他页面上,通过反向属性来查询灵梦的种族:
{{#ask:
[[-种族::博丽灵梦]]
}}
结果为:
人类
应注意,要使用反向属性查询,“种族”属性的数据类型应为页面
反向属性对数字日期等类型不起作用。

单位

本段落描述如何控制数据类型数量的属性在页面中显示和转换单位。
此功能可以使注释更加灵活方便:用户可以用自己习惯的单位来输入数据,且相互之间都能不受限制地理解数据内容。
举个例子,对于距离的单位,一些人可能习惯用“英里”,而另一些人习惯用“公里(千米)”。
而在一些文章中,距离可能小到最好用“微米”表示,此时若显示为“千米”则不合适。

单位转换

SMW内置了一些可以处理单位的数据类型(如温度)。
支持单位的数据类型可以接受若干不同单位、在各个单位之间转换、以不同单位来显示值。
由于本维基内没有数量类型的属性,可以参看SMW:演示:柏林页面,其最下方的事实框中有土地面积转换的例子。
本维基内使用了经过修改的,类似数量类型的价格时长类型。

为了实现以上功能,SMW需要了解如何将值从某单位转换到另一单位。
在大多数情况下,转换方式非常简单,但有时也会遇到具有复杂计算的情况。我们对两种情况作如下区分:

  1. 两个单位之间的转换是“成比例”的。即转换只需乘一个系数就可以完成。如在公斤和斤之间、米与千米之间的换算。
  2. 两个单位之间的转换是“不成比例”的,需要更加复杂的计算。比如温度类型就有这样的问题,摄氏度与华氏度之间的转换大约是F = 32+1.8*C

对于第1种情况的单位转换,可以使用数据类型数量来定义属性的单位和单位间的转换系数。
对于第2种情况,我们在下方讨论了一些可能的处理方式。

成比例的单位转换
为了声明由数字和单位组成的属性值,SMW提供了数据类型数量
“单位”可以是一个非数字开头的文本标签,如“英里”、“km”、“平方千米”、“m/s”等。
要使用一个单位,或者是同一单位的不同称呼(如公里和千米),必须先按照下面的说法,在属性的页面声明它。
只可使用声明过的单位,否则会被当作错入出入而拒绝接受。
因此,只有当在数量类型的属性中,声明了至少一个单位后,这个属性才真正有作用。
如此严格的系统使得即使输入的单位都不同,SMW也可以比较它们的值的大小。
每个输入都确切地指定了“数量”的大小(如时长、距离等),即使输入的方式不同。
数量类型的属性值是真实按照数量(一个数字与一个单位)来存储的,而不是按照文本来存储。文本存储无法知晓值的大小,也不能区分单位。
在其他数据类型中也有类似的行为。如对于“2”或“2.0”,SMW把它们视为相等,不论它们写成何种形式。
要使用SMW中的单位转换,首先你需要创建一个合适的属性。
按照惯例,首先你需要使用维基搜索功能,或者到特殊:属性页面查看是否已有你想用的属性。如果没有,则创建一个新的属性页面。
比如我们来创建一个属性:质量,来说明物理量质量
在这个新页面上,你首先需要写上这个新属性的用途。在本例中,可以写“类型为数量,物质的三种属性之一,通常用千克来度量物理量。”
这样写能帮助其他用户寻找和使用你定义的此项属性,搜索时可以搜到这句话中的关键词。
要指定数据类型,你需要写:
[[设有类型::数量]]
在属性页的任意位置写都可以,但推荐在上面的句子里写这个注释。
要声明支持的单位,你需要使用特殊属性符合于”。比如你需要指定“质量”属性的“主单位”,就要写上:
[[符合于::1 千克]]
“1 千克”说明了以下两件事:
  1. 属性具备单位“千克”;
  2. “千克”是主单位(由系数为1得来)。
显示数据类型数量的值时,默认选择主单位作为显示单位。当用户在声明属性值时只用数字不带单位,系统就假定单位为主单位。
指定其他单位的方法很简单,如:
[[符合于::0.001 吨]]
[[符合于::1000 克]]
这说明此属性还可使用单位“吨”和“克”。你可以写成句子,并将上面的声明注释在句子里:
“1千克等于0.001吨,也等于1000克。”
以此方法,该属性就可以支持任意单位,只要它们能与主单位进行简单的比例换算。
在许多情况下,对同一单位可能有好几种称呼。比如你可以说“千克”,也可以说“公斤”或者“kg”。
处理这种情况的简便方法为:用半角逗号,隔开各个称呼,不用对换算系数相同的单位使用“符合于”。
比如在本例中,可写为:
[[符合于::1 千克,公斤,kg]]
[[符合于::0.001 吨,t]]
[[符合于::1000 克,g]]
在本例中,主单位为“符合于”声明中,系数为1的第一个单位,此处为“千克”。
属性能够理解所有由“符合于”声明的单位,并且会显示它们之间的转换(但不重复,即不会同时显示“千克”和“公斤”)。
在系统内部,属性值会被转换为主单位,RDF导出也只会显示主单位下的值。
不带单位的输入值一概当作主单位下的值。
这就意味着,单位转换是一个简单的前处理(对于用户输入)和后处理(对于显示),从而使用户能够更方便地使用单位。
在维基页面中显示的单位可以非常自由的选择,且无需涉及主单位,具体用法见下文自定义单位
提示:
如果有许多属性具备相同的单位声明语句(比如“属性:长度”、“属性:高度”等表示距离的属性),可以将这些语句写进模板里,在属性页面上用模板即可。
这样可以保证相同类型测量量的属性总是支持相同的单位。
注意:
在本维基的SMW 2.1.1版本下,单位必须写在数字的后面,不支持前置的单位,如“$100”等。
不成比例的单位转换
若使用数据类型数量的属性,你只能指定一个比例换算系数。
所以你不能按照对数转换,也不能对不同单位使用不同底数,等等。
举一个例子:你不能自定义一个可以从摄氏度转换到华氏度的属性,这个转换不仅需要乘法,还需要加法。
对于温度,SMW已经提供了一个内置的数据类型温度,它可以处理温度的转换,但其他的非比例转换就没有这么幸运了。
SMW不允许在维基里自定义一个不成比例的单位。
一种处理方式是使用数据类型数字,省略对单位的语义标注,直接将单位作为文本写在维基页面上。
这种方法放弃了使用对于单位转换的前后处理支持,但是其他的大多数功能还能照常使用(如语义搜索和导出等)。
用户也可以通过在模板中使用解析函数的方法来实现单位转换,但这一般会导致在编写页面文本时更加复杂,且会降低处理效率。
如果确实需要一种新的单位,有一个更好的解决方法。可以写一个PHP脚本来实现单位转换。
用这种方式来扩展SMW并不困难,并且你也可以参考温度类型的代码(仅100多行代码,包括注释)。
在编写了这种新类型以后,就可以将数据类型数字的现有属性直接改为新定义的类型,且不会对已有的页面产生影响。
当面对不支持的单位时,自定义类型会表现为简单的数字类型。
本维基中就有由管理员自定义的数据类型,与数量类型相近的有:

自定义单位

一个属性可以支持非常多个单位。比如长度单位可以从光年支持到纳米。
即使这个属性只需要几个单位就够用,但如果你按照上面的方法,用模板给它声明单位,就可能出现可用单位非常多的情况。
比如你用“属性:海拔高度”来指定山的高度,肯定不会用光年和纳米作为单位显示。

SMW允许你在所有属性支持的单位中,指定哪几个用于显示。
如果不指定显示单位,则属性会在换算时显示所有它支持的单位(比如在工具提示和页面事实框中)。

要指定显示的单位,需要给属性页面添加特殊属性显示单位”。
在其中说明你想要显示的单位,用半角逗号,隔开。
如,还是上文“属性:质量”的例子,你想只用字母缩写格式的单位,就写上:

[[显示单位::kg,t,g]]

上方代码可以使页面事实框在显示“属性:质量”的时候,只显示这三个单位,即使它支持十几个单位。
在工具提示(鼠标停留在页面的属性文本上会显示)中,也只会显示这三种单位的换算。
“显示单位”声明对任何支持单位的数据类型都有效,如温度数量等类型。

特殊属性“显示单位”声明的第一个单位会作为默认显示单位。
但SMW存储数据时,还是按照特殊属性“符合于”声明的第一个单位(主单位)来存储。
所以建议在声明“显示单位”时,将主单位也声明一下,这样用户就能看到存储的属性值是多少。

单位名称
本维基SMW 2.1.1版本下,单位名称中出现的空格会被忽略,不会被记录与显示。

解析函数

解析函数,或称解析器钩(Parser hook),是一种特殊语法,可以与页面上的其他维基元素交互,并可以处理输出生成的内容。
对于全站可用的解析函数,请见帮助:解析函数页面,对于解析函数的概念说明,请见MediaWiki上的说明

下面说明的解析函数为Semantic MediaWiki特有的。

避免出现空格
在页面上使用解析函数时,可能会在文章中出现空格,可以使用<div>元素来限制显示:
<div style="display:none;">
{{#subobject:...}}
{{#set:...}}
...
</div>

语义注释函数

本段落说明的函数用于语义注释,主要用途为给页面定义属性,给属性赋值等。
包含以下四种函数:

  • set,用于给页面指定属性与值。
  • subobject,用于给页面指定子对象,给子对象指定属性与值。
  • set_recurring_event,用于给页面声明周期发生的事件,比如定期展会、周年纪念日等。
  • declare,用于在模板页面中,将模板的输入参数值赋给属性,方便模板编写。

set

解析函数#set允许用户注释数据,即给属性赋值。
这样做就可以无需使用[[属性名::属性值]]这样的声明。
SMW 1.9.0版本起,#set函数还提供了特殊参数(见下文),来实现更多功能。

还是博丽灵梦的例子,若要给她的页面声明“种族”和“能力”属性,写成下面的样子:

{{#set:
种族=人类
|能力=主要拥有在空中飞翔程度的能力
}}

此解析函数不返回任何值,只将属性值作为数据存储起来。
上面代码的作用相当于使用如下的文本注释

[[种族::人类| ]]
[[能力::主要拥有在空中飞翔程度的能力| ]]

不必再使用这样的文本注释了,你可以使用上方的#set函数来替代。

你还可以给能接受多个值的属性赋多个值,这里假设“能力”属性能接受多值:

{{#set:
能力=主要拥有在空中飞翔程度的能力
|能力=操纵灵气的能力
|能力=在天空飞行的能力
}}

SMW 1.9.0版本起,你可以使用分隔符参数来给一个属性赋多个值,详见下文。

使用“分隔符”参数
SMW 1.9.0#set函数引入了|+sep=...参数。
此参数用于声明一个分隔符,这个分隔符用于分隔给一个属性赋的多个值。
本维基SMW 2.1.1版本可以使用此功能。
语法格式:
{{#set:
|属性名1=值1,值2|+sep=,
|属性名2=值1;值2;值3;|+sep=;
...
}}
此处举例使用的是全角标点作为分隔符,在中文页面上较为方便。
例子:
仍然使用灵梦的“能力”属性为例:
{{#set:
|能力=主要拥有在空中飞翔程度的能力,操纵灵气的能力,在天空飞行的能力|+sep=,
}}
事实上,不声明|+sep=...,也可以用管道符|来分隔。
声明了|+sep=,或者|+sep,但没有指明分隔符的情况下,默认使用半角逗号,来分隔。
如下面这些声明都是允许的:
{{#set:
|登场作品=红魔乡,妖妖梦,萃梦想,|+sep=
|登场作品=永夜抄,花映冢,文花帖|+sep
|登场作品=风神录|绯想天|地灵殿
|登场作品=星莲船
}}
一串值末尾的分隔符不会起作用。
像上面这样分好几行声明的话,“登场作品”会包括上述声明的所有值,与一行只声明一个值时相同。

subobject

解析函数#subobject允许用户注释与子对象有关的内容。
子对象类似于页面,它也有自己的属性及属性的值,但子对象在维基中没有词条页面。
子对象可以用于给页面的众多属性及值“分组”,而不用新建辅助页面。
使用特殊属性有无子对象”,可以查找使用了本函数来指定属性值的页面。

解析函数#set_recurring_event会使用子对象来存储属性值(详见set_recurring_event函数段落)。

语法格式
{{#subobject:子对象名称
|属性1=值
|属性2=值1,值2,值3|+sep=,
|属性3=值1|值2|值3
|...
}}
#set函数一样,对于多值的属性,可以使用分隔符来分隔多个值。
你可以参看set函数的“使用‘分隔符’参数”部分。本段落后文中有分隔符发展的过程介绍。
对于上方示例代码,解释如下:
可以用+sep=来指定分隔符(如上方代码的“属性2”使用了全角逗号作为分隔符,在中文页面上较为方便)。
在使用了+sep=后若指定分隔符留空,则默认使用半角逗号,作为分隔符。
在不使用+sep=的情况下,可以直接使用管道符|作为分隔符。
说明:
#set函数类似,#subobject函数也是一种静默注释,它为属性赋值时不对页面输出任何字符。
给相同属性指定多值
多行书写:
{{#subobject:子对象名
属性1=值1
属性1=值2
属性2=值1
属性2=值2
...
}}
一行书写,使用管道符分隔:
SMW 1.8.0版本起,可以使用管道符|来分隔多个值。
添加此规定不会给属性值的输入增加限制,且大大方便了多值的输入,下面这些代码和上面的例子作用一样:
{{#subobject:子对象名
属性1=值1|值2
属性2=值1|值2
...
}}
一行书写,使用指定分隔符:
SMW 1.9.0版本起,加入了|+sep=...来指定分隔符:
{{#subobject:子对象名
|属性1=值1;值2|+sep=;
|属性2=值1,值2|+sep=,
...
}}
指定标识符
可以给子对象命名一个“标识符”,用来直接说明一组属性值是哪种类型的数据。
命名标识符:
比如,这个子对象给博丽灵梦页面说明她在作品中的登场信息,用登场信息来标识这个子对象:
{{#subobject:登场信息
|红魔乡登场=自机
|妖妖梦登场=自机
|萃梦想登场=自机
|永夜抄登场=自机,四面BOSS A|+sep=,
|花映冢登场=自机|敌机
...
}}
命名标识符的前五个字符里不允许出现半角句点.,这种带点的命名是留给一些扩展用的。
无名标识符:
SMW 1.8.0支持给没有命名的子对象分配无名标识符(哈希编号)。
如果两个子对象实体在同一页面中,且内容相同,则它们的哈希值也相同,所以只有一个子对象实体会被存储并可用于查询。
{{#subobject:|
...
}}
标识符开头带有:
  • _QUERY...标记查询元容器;
  • _ERR...标记错误容器;
指定排序值
SMW 2.0版本引入了|@sortkey=...,允许给子对象指定一个任意的排序值。
排序值是大小写敏感的,也就是说,排序值被当作“字符串”来存储,但不会显示出来。
子对象的排序值可以像其他维基页面的排序值一样,用作排序。
比如还是上方灵梦登场信息的例子:
{{{{#subobject:登场信息
|红魔乡登场=自机
|妖妖梦登场=自机
|萃梦想登场=自机
|永夜抄登场=自机,四面BOSS A|+sep=,
|花映冢登场=自机|敌机
...
|@sortkey=A
}}
此处的排序值就是“A”。
概念说明
使用属性:
如果两个子对象内的声明相同,则它们就会被当作同一个子对象,技术上使用哈希值来比较两者。
但如果它们描述的内容不一致,如使用了命名标识符,则会被视为不同。
给内容相同的两个子对象指定不同的名字,会创建两个独立的子对象实体。
比如假设当前页面用于记录各个角色的基本信息,有可能出现:
{{#subobject:
|种族=人类
}}
{{#subobject:
|种族=人类
}}
这两个子对象就是相同的。
然而:
{{#subobject:灵梦
|种族=人类
}}
{{#subobject:魔理沙
|种族=人类
}}
这两个子对象虽然在声明内容上相同,但命名不同,一个表示的是当前标题#灵梦,另一个是当前标题#魔理沙
另一种区分方式是使用|@sortkey=...给两个子对象指定排序值:
{{#subobject:
|种族=人类
|@sortkey=灵梦
}}
{{#subobject:
|种族=人类
|@sortkey=魔理沙
}}
这两个子对象会被当作不同的实体,可以分别查询。
使用分类:
对于SMW 2.3,可以使用|@category=...来给子对象指定分类。
指定了分类的子对象,在查询该分类时可以找到,但是不会出现在“分类:...”的页面上,因为子对象是SMW引入的概念,与MW无关。
由于本地维基SMW版本为2.1.1,无法使用上述分类功能,但可以只用属性功能来实现:
  • 使用属性来代替分类,创建一个类似分类名称的属性,比如“属性:主角二人组”。
  • 这里不考虑这个属性的值。
  • 使用特殊属性所属的子属性”,可以将这些类似分类的属性建立一个嵌套层次结构,比如“属性:主角二人组”是“属性:新作角色”的一员,“属性:新作角色”又是“属性:官方角色”的一员。使用这种方式来模仿分类的层次结构。
  • 对分类的查询使用[[分类:新作角色]],可以查询分类和其子分类的内容;对于此处,我们可以使用[[新作角色::+]]来查询,也能查询属性和其子属性中的页面和子对象。
查询子对象
此处仅作简单描述,详见查询子对象
子对象可以当作页面来使用。
查询子对象的简单方法是查询子对象中包含的独一无二的属性,如:
{{#ask:
[[红魔乡登场::+]]
|?永夜抄登场
|?风神录登场
...
}}
这里例子用到的是角色的登场信息,在本段落上文中有描述。
此处查询的是在红魔乡中有登场的角色,在其他几作中的登场情况。
(本例为虚构,所以测试此段代码是不会有结果的,故不标记为绿色代码。)
为了在查询时更加方便,你可以给子对象添加“伪”属性。
比如给所有具有登场信息的角色子对象添加“有登场信息=1”,则查询[[有登场信息::1]],即可找到所有具备登场信息的子对象。
关于ask函数的用法请见其自己的说明段落。

set_recurring_event

解析函数#set_recurring_event用于给维基页面设置重复事件。
重复事件表示按照预先规划的时间,发生不止一次的事件,比如每周会议,周年纪念日和生日等。
也可以是时长为好几天的一个事件,比如展会等。

在SMW中,重复事件的日期可以使用#set_recurring_event函数来定义,只需将代码写在该事件的页面上即可。
此函数创建的属性与值都在一个特殊的子对象里。关于子对象,可以参看subobject函数的解释。

此函数使用以下参数,函数中参数输入的顺序没有限制:

参数名 说明
无名称(在:后) 属性的名称,它用于连接子对象和页面。这个属性属于子对象,属性的值为页面。具体例子见下文。此参数需在函数的半角冒号:后输入。
property 属性的名称,用于记录事件发生的日期,数据类型日期
start 系列事件的开始日期,可以包括时刻。
end 系列事件的结束日期,可以包括时刻。此参数是可选的。
unit 事件发生间隔时间的单位,可以是year(年)、month(月)、week(周)或day(日)。此参数是可选的,默认为day(日)。
period 事件发生间隔几个时间单位。此参数是可选的,默认为1
limit 创建重复事件的总数。如果使用了end参数,此参数会被忽略。此参数是可选的,默认为100,默认值由$smwgDefaultNumRecurringEvents参数控制。
week number 事件发生在每月的第几周。当间隔时间的单位被设为month(月)时有效。可接受负值,负值表示每月的倒数第几周。星期几是由开始日期决定的。
include 需要额外增加的事件发生日期,使用半角分号;分隔。此参数是可选的。
exclude 需要从系列事件中除去的日期,使用半角分号;分隔。此参数是可选的。
自定义 用户在函数中还可以自定义一些属性与值,这些属性与值都会赋给子对象。

如果没有用end指定结束日期,也没有用limit指定总数限制,则创建的事件日期总数将由$smwgDefaultNumRecurringEvents参数控制,此参数默认值为100。
如果用end指定了结束日期,则可以超过100,但还有一个$smwgMaxNumRecurringEvents参数限制此函数能够创建的最大事件日期数。
不论用startend指定的开始和结束日期为何值,最大的事件日期数都由该参数限制,默认为500。
这两个控制参数都可以在LocalSettings.php中修改。

例子
下面这个例子使用了Comic Market的规则,冬季展会为每年12月29日举办。
则在Comic Market页面上应写:
{{#set_recurring_event:展会
|property=展会日期
|start=December 29, 2007 10:00 am
|end=December 29, 2017 5:00 pm
|unit=year
|period=1
|include=December 28, 2008 10:00 am;December 28, 2014 10:00 am
|exclude=December 29, 2008 10:00 am;December 29, 2014 10:00 am
}}
此段代码创建了一系列子对象,这些子对象都有“展会”属性,值为Comic Market
每个子对象都有“展会日期”属性,值分别为2007年的12月29日到2017年12月29日之间的所有12月29日。
还执行了例外,将2008年和2014年的“展会日期”改为了12月28日。
下面这个例子使用东方灵异传的发售日期,以确定每年的东方首作发行纪念日。
假设该页面有“发售日期”属性,则在纪念日的页面上应写:
{{#set_recurring_event:发行纪念日
|property=纪念日期
|start={{#show:东方灵异传|?发售日期}}
|unit=month
|period=12
}}
此段代码创建了一系列子对象,这些子对象都有“发行纪念日”属性,值为东方灵异传
每个子对象都有“纪念日期”属性,值分别为1997年的8月15日以来的所有8月15日,由于没有指定limit,最多创建100个纪念日。
如果想把上面的“发行纪念日”推广给全部作品用,可以将它写在模板里。
模板使用|发售日期=...参数来输入发售日期,则应写:
{{#set_recurring_event:发行纪念日
|property=纪念日期
|start={{{发售日期|}}}
|unit=month
|period=12
}}
使用带时刻的日期时需注意
#set_recurring_event函数在没有说明时刻的情况下才会指定为日期。
你可以在重复事件中指定时刻,但使用时要注意两点:
  • exclude排除日期时也需指定时刻。当#set_recurring_event函数执行时,它会比较排除日期的数组和计算得到的重复日期,计算的日期此时包含时刻。如果指定了开始日期为下午7:00,则排除时也要写上这个时刻。如果使用自动表单填写,则最好在单独的字段中输入时刻,然后将其自动添加到开始日期和排除日期。或者使用额外的自定义属性。
  • 结束日期也需要时刻,重复事件将在该时刻结束,而不是当天午夜。

declare

解析函数#declare允许用户将模板参数声明为属性值。

如果你在用模板:官方角色信息博丽灵梦页面,则应写:

{{官方角色信息|
|人物名=博丽灵梦
|日文名=博麗 霊夢(はくれい れいむ)
|英文名=Hakurei Reimu 
|种族=人类
|职业=巫女
|能力=主要拥有在空中飞翔程度的能力
}}

在模板页面,你可以使用[[角色中文名::{{{人物名}}}]]这样的注释来给“角色中文名”属性赋值。
但这会让已经十分复杂的模板语法变得更加复杂。

现在,可以使用下面的方法在模板中集中声明属性值,如:

{{#declare:角色中文名=人物名
|角色日文名=日文名
|角色英文名=英文名 
|种族=种族
|角色职业=职业
|能力=能力
}}

等号=的左边是属性名称,右边是模板的参数名称。

这个函数的原本想法是允许在模板中声明模板参数,就像使用编程语言时,声明函数的变量一样。
从长远来看,这既能提高页面内容的质量,又可以简化用户界面。此函数的出现简化了模板的代码。

行内查询函数

本段落说明的函数用于行内查询,主要用途为检索所需的页面,并显示所需的属性值。
包含以下两种函数:

ask

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

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

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

{{#ask:
[[分类:同人专辑]]
[[发售展会名称::Comic Market 91]] 
|?会场售价 = 会场售价
|?专辑类型 = 专辑类型
|limit = 10
|mainlabel = 专辑页面
}}

此处我们查询了分类:同人专辑中,所有属性:发售展会名称Comic Market 91的专辑。
显示效果为列出它们的属性:会场售价属性:专辑类型,并限制显示10项,第一列的标题为“专辑页面”:

专辑页面会场售价专辑类型
:Continue全长
46 ChordeR1000日元全长
A Color of Minds1000日元全长
A Seeker of LoveEP
ANSWER//TALKER1000日元全长
Absolute awakening1000日元全长
Ancient Truth500日元全长
Axelerator1000日元全长
BANDAGED EPEP
BlackInfluence100日元单曲
...更多结果

查询条件放在#ask:的后面,作为第一个参数,其他控制显示的参数用管道符|隔开。
虽然并不需要严格按照上方那样写,但分行书写更易读,对其他编辑者更友好。
在日常编写中,不论是本功能还是其他模板,每个参数起一行,每行从管道符|开始,是一个好习惯。

请注意,#ask函数中输入的所有参数都会在页面解析时被忽略。
也就是说,照上文例子那样写,并不会使本页被分到分类:同人专辑里面。

还需要注意以下几点:

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

只要知道检索页面(查询条件)、显示信息结果格式(输出参数)的基础用法,就可以执行非常多种查询了。
但是在一些情况下,显示成表格并不是最好的选择,所以我们需要指定更多的参数来控制。
上文的例子中我们就添加了两项简单的控制,限制了显示的条数,更改了第一列(页面标题列)的名字。
为了实现对显示结果的惊喜控制,行内查询#ask函数可以使用非常多参数。

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

{{#ask:
第一个参数
|第二个参数
|第三个参数
|...
}}

通常第一个参数用来指定查询条件,之后的参数用来指定显示的信息和格式。
关于查询条件的写法,见检索页面;关于显示格式的写法,见显示信息结果格式
这两个段落中详细说明了行内查询中会用到的多种参数。

show

解析函数#show用于直接显示单个页面的单个属性。

经常需要用到对某页面的某个属性的查询,而且只需查询一个页面,显示一个属性值。
比如你想要在其他页面上显示东方红魔乡的“发售价格”属性,你可以使用查询,而不是直接复制粘贴。
SMW提供一种方法来执行这种简单的查询,比如:

{{#show: 东方红魔乡 | ?发售价格 }}

上方查询的结果为:

1000日元

这个函数和行内查询ask函数类似,且可用于ask的参数也同样可用于#show,如果有必要的话。

如果把上面的查询写成#ask函数,就是这样:

{{#ask:
[[东方红魔乡]]
|?发售价格=
|mainlabel=-
}}

上方的查询结果为:

1000日元

此处在查询的属性?发售价格后加等号=,可以去除属性标签的显示;
参数mainlabel=后面的连字符-可以去除显示结果的第一列,即查询到的页面名。
使用了以上参数,最终达到了与#show一致的效果,如果没有指定上面两个参数:

{{#ask: [[东方红魔乡]] | ?发售价格 }}

则效果为:

 发售价格
东方红魔乡1000日元

所以在查询单个属性时,#show相比#ask要方便得多。

其他用途函数

本段落说明的函数起辅助作用,提供一些方便的功能。
包含以下三种函数:

  • concept,用于创建概念,将符合查询条件的页面放在一个“概念”页面上,类似分类页面。
  • info,用于添加工具提示,在页面上显示为小图标,鼠标在上面停留会显示工具提示框。
  • smwdoc,用于介绍行内查询askshow函数的各种参数。可以显示各种结果格式支持的参数,以及这些参数的输入值类型、默认值和说明。

concept

解析函数#concept允许用户创建一套查询条件,并将查询到的页面放置在“概念”页面上。
这些页面名称以“概念:”开头,具备与“分类:”页面类似的功能,但是会自动进行动态更新。
此查询方法称为概念查询,概念查询的结果也可以作为查询条件给行内查询函数ask使用。

关于此函数的用法,请见概念段落,此处不作重复。

info

解析函数#info用于创建工具提示。
工具提示在页面上显示为一个精致的信息图标,在图标上悬停时会弹出预先设定好的信息。

语法格式
{{#info: 文本 | 图标类型 }}
参数
下面分别说明两个参数的用法和注意事项。
文本:
此函数的第一个参数为显示在提示框里的文本,只能使用行内HTML元素。
提示框文本只能接受部分维基语句,如加粗、斜体、内部链接等。
不接受任何块元素,比如段落、表格、列表等。
在输入文本参数时,还需避免出现空行,因为空行会结束一个段落,并开启一个新段落。
等号=也不允许出现,因为函数中出现等号一般会被系统认为是给参数赋值的操作。
你可以使用转义字符&#61;代替等号,在页面上会显示为=
如果不遵循上面的说明,可能会导致HTML代码错误和显示错误。
比如出现空行,则空行后面的文字会直接显示在页面上,而不是提示框里。
图标类型:
此函数的第二个参数控制显示的图标类型。
如果给此参数输入了错误的值,则会被忽略,然后默认显示为info格式。
此参数可接受的输入值:
图标类型 说明 效果
info 蓝色圆形和问号,默认显示为此格式 这是一个信息图标。
note 橙色圆形和叹号。 这是一个提示图标。
warning 黄色三角和叹号。 这是一个警告图标。
例子
下面是一些应用举例:
代码 结果 说明
外面的文字{{#info:提示框内的文字|info}}
外面的文字提示框内的文字 鼠标悬停就可以看到这个信息。
偷偷告诉你{{#info:灵梦是预知梦的意思哦|note}}
偷偷告诉你灵梦是预知梦的意思哦 SMW 1.9.0起可用。
咦,发生啥事{{#info:紫老hsfthngsjst|warning}}
咦,发生啥事紫老hsfthngsjst SMW 1.7.0起可用。

smwdoc

解析函数#smwdoc用于显示各种结果格式的控制参数用法。
ask函数等行内查询功能,或特殊页面“问”浏览界面功能中会用到这些参数。
显示的表格中说明了参数名,参数输入值的类型,默认值和说明。
请注意,表格里可能有一些说明没有被翻译,另有一些说明缺失。

#mapsdoc函数有类似的用法,它用于显示Maps扩展提供的结果格式的控制参数用法。

语法格式
{{#smwdoc: 格式名 | parameters=参数类型 | language=语言代码 }}
各参数可用的输入值:
  • 格式名:请从结果格式中选取一个。
  • 参数类型parameters=:可用的类型有specific(特殊)、base(基本)和all(全部),效果见下方的例子。
  • 语言代码language=:请从ISO 639-1标准规定的语言代码中挑选,具体显示效果取决于本地维基提供哪几种语言。
例子
“参数类型”参数:
如果只需查看该结果类型特有的控制参数,则可用下方代码。
此处使用table,即表格类型为例:
{{#smwdoc:table}}
或者这么写也可以:
{{#smwdoc:table|parameters=specific}}
效果为:
⧼validator-describe-header-parameter⧽ ⧼validator-describe-header-type⧽ ⧼validator-describe-header-default⧽ ⧼validator-describe-header-description⧽
class ⧼validator-type-string⧽ sortable wikitable smwtable 给表格设置的额外CSS类
transpose ⧼validator-type-boolean⧽ no 垂直显示表头,水平显示结果
sep ⧼validator-type-string⧽ ⧼validator-describe-empty⧽ 结果之间的分隔符
prefix ⧼validator-type-string⧽ none 控制打印输出内命名空间的显示
如果只需查看所有结果类型都支持的基本控制参数,则可使用下方代码。
此处仍使用table,即表格类型为例:
{{#smwdoc:table|parameters=base}}
效果为:
⧼validator-describe-header-parameter⧽ ⧼validator-describe-header-type⧽ ⧼validator-describe-header-default⧽ ⧼validator-describe-header-description⧽
source ⧼validator-type-string⧽ ⧼validator-describe-empty⧽ 替代查询来源
limit ⧼validator-type-integer⧽ 50 最大返回结果数
offset ⧼validator-type-integer⧽ 0 第一个结果的偏移量
link ⧼validator-type-string⧽ all 把值显示成链接
sort ⧼validator-type-string-list⧽ ⧼validator-describe-empty⧽ 排序查询所依据的属性
order ⧼validator-type-string-list⧽ ⧼validator-describe-empty⧽ 查询排序的顺序
headers ⧼validator-type-string⧽ show 显示表头/属性名称
mainlabel ⧼validator-type-string⧽ no 首列(主页面名称)的表头标签
intro ⧼validator-type-string⧽ ⧼validator-describe-empty⧽ 当有查询结果时显示在结果前的文字
outro ⧼validator-type-string⧽ ⧼validator-describe-empty⧽ 当有查询结果时显示在结果后的文字
searchlabel ⧼validator-type-string⧽ ...更多结果 提示继续搜索的文字
default ⧼validator-type-string⧽ ⧼validator-describe-empty⧽ 当没有查询结果时显示的文字
如果需要查看该结果类型支持的所有控制参数,则可使用下方代码。
此处仍使用table,即表格类型为例:
{{#smwdoc:table|parameters=all}}
效果为:
⧼validator-describe-header-parameter⧽ ⧼validator-describe-header-type⧽ ⧼validator-describe-header-default⧽ ⧼validator-describe-header-description⧽
source ⧼validator-type-string⧽ ⧼validator-describe-empty⧽ 替代查询来源
limit ⧼validator-type-integer⧽ 50 最大返回结果数
offset ⧼validator-type-integer⧽ 0 第一个结果的偏移量
link ⧼validator-type-string⧽ all 把值显示成链接
sort ⧼validator-type-string-list⧽ ⧼validator-describe-empty⧽ 排序查询所依据的属性
order ⧼validator-type-string-list⧽ ⧼validator-describe-empty⧽ 查询排序的顺序
headers ⧼validator-type-string⧽ show 显示表头/属性名称
mainlabel ⧼validator-type-string⧽ no 首列(主页面名称)的表头标签
intro ⧼validator-type-string⧽ ⧼validator-describe-empty⧽ 当有查询结果时显示在结果前的文字
outro ⧼validator-type-string⧽ ⧼validator-describe-empty⧽ 当有查询结果时显示在结果后的文字
searchlabel ⧼validator-type-string⧽ ...更多结果 提示继续搜索的文字
default ⧼validator-type-string⧽ ⧼validator-describe-empty⧽ 当没有查询结果时显示的文字
class ⧼validator-type-string⧽ sortable wikitable smwtable 给表格设置的额外CSS类
transpose ⧼validator-type-boolean⧽ no 垂直显示表头,水平显示结果
sep ⧼validator-type-string⧽ ⧼validator-describe-empty⧽ 结果之间的分隔符
prefix ⧼validator-type-string⧽ none 控制打印输出内命名空间的显示
“语言代码”参数:
如需查看英文版的说明,则可使用下方代码:
{{#smwdoc:table|language=en}}
效果为:
⧼validator-describe-header-parameter⧽ ⧼validator-describe-header-type⧽ ⧼validator-describe-header-default⧽ ⧼validator-describe-header-description⧽
class ⧼validator-type-string⧽ sortable wikitable smwtable An additional CSS class to set for the table
transpose ⧼validator-type-boolean⧽ no Display table headers vertically and results horizontally
sep ⧼validator-type-string⧽ ⧼validator-describe-empty⧽ The separator between results
prefix ⧼validator-type-string⧽ none Control display of namespace in printouts
本维基支持中文zh、英文en和日文ja

语义搜索

Semantic MediaWiki提供了一些方便的查询语言,允许用户查询维基内的数据。
查询语言的语法格式与文本注释的语法格式类似。
查询语言可以用于特殊页面“问”概念行内查询

查询必然会需要额外的服务器资源,管理员可以关闭或限制一些查询功能,以确保站点可以承受这些负载。

简要介绍
语义搜索需要确定两件事:
  1. 需要挑出哪些页面
  2. 需要显示这些页面的哪些信息
所有的查询都要说明一些“查询条件”,用来描述要找哪些页面。
你可以用页面名、页面名字空间、分类,或者用属性值来寻找页面。
比如下面这个查询条件:
[[制作方::上海爱丽丝幻乐团]]
查询了所有具有“制作方”属性,且值为“上海爱丽丝幻乐团”的页面。
如果你前往特殊:询问页面,将上面的条件输入到左边的“查询”栏中,并按最下方的“搜索结果”按钮,
SMW就会处理这个查询,并且将符合条件的页面标题显示为一个表格。
如果结果较多,上方还会出现导航条,可以翻阅全部结果。
关于查询条件的写法,详见检索页面段落。
其次,是如何显示更多信息。
上面的例子中,我们查询了所有“制作方”为“上海爱丽丝幻乐团”的作品,也许你会对它们发售的日期感兴趣。
要显示发售日期,只需将下面这个代码输入右边的“需要显示的附加信息”栏中:
?发售日期
按下“搜索结果”后,SMW就会显示这些页面的“发售日期”属性值,如果页面有这项属性值的话。
还可以用更多的输出语句控制这些属性值的显示格式。
关于用输出语句控制要显示的属性显示格式的方法,详见显示信息结果格式段落。

检索页面

SMW语义搜索中最重要的就是说明所需寻找页面的语法格式。
查询功能按照给出的分类、属性、或者MW中的名字空间等参数来搜寻维基页面。
下面的段落说明了SMW的查询功能。

分类和属性值
在之前语义搜索的例子中,我们给出了一个简单的搜寻作品的例子。
在该例子中,使用了单个搜寻条件[[制作方::上海爱丽丝幻乐团]]来寻找所需的页面。
这种标记文本的格式和你在作品页面上给它们赋属性值时是一样的。
在语义搜索中,使用这种标记文本,SMW就会寻找具有该属性值的页面。
简单的来说就是这样:
“给页面属性幅值的语句,和查询具有该属性值的页面的语句是完全一致的。”
下面说明各种查询条件的含义:
  1. [[分类:官方作品]]会给出该分类下的页面,和该分类下子分类的页面、子分类的子分类的页面等等。
  2. [[制作方::上海爱丽丝幻乐团]]会给出所有“制作方”属性被注释为“上海爱丽丝幻乐团”的页面。
  3. [[发售价格::1000日元]]会给出所有“发售价格”属性为“1000日元”,或者与“1000日元”等值的页面。
使用上面的各个条件,可以分别查找符合各个条件的页面。
下面让我们把这几个条件组合起来:
[[分类:官方作品]] [[制作方::上海爱丽丝幻乐团]] [[发售价格::1000日元]]
这样就可以查询所有发售价格等值于1000日元,制作方为上海爱丽丝幻乐团的官方作品。
就是说,如果在查询中给出了多个条件,则查询结果会满足全部条件,即逻辑与
顺带一提,允许在各个查询条件之间使用换行,使得查询语句更易读:
[[分类:官方作品]]
[[制作方::上海爱丽丝幻乐团]]
[[发售价格::1000日元]]
注意这里的所有查询条件必须被显式满足。也就是说,如果一个页面没有填写“发售价格”,那么它就不会被搜索出来。
在解析属性时,SMW会忽略前缀或后缀空格,所以[[发售价格::1000日元]][[发售价格:: 1000日元 ]]效果是一样的。
有些类型会有更多的特点,比如类型:数字会忽略1,000中间的,分割符,而比如类型:页面会进行重定向页面的一些处理。
如果有些查询条件比较常用,你也可以参见概念段落制造一个临时的类似“分类”的页面集合。
排序
对于ask一节的例子,我们可以添加多关键字排序条件:
{{#ask:
[[分类:同人专辑]]
[[发售展会名称::Comic Market 91]] 
|?会场售价 = 会场售价
|?专辑类型 = 专辑类型
|limit = 10
|mainlabel = 专辑页面
|sort = 会场售价,专辑类型
|order=asc,desc
}}
详细内容请参见排序一节。
限制与注意点
无法在子查询中使用刚刚查询得到的属性。不过可以使用语义模板来实现将查询到的信息作为另一个查询的条件这个功能。
无法查询属性是否缺失、也无法查询不在某个分类中的全部页面。
比如说,灵梦与魔理沙有[[新作登场::True]],而玄爷与冈崎梦美没有填写这个属性。这时你要查找“非新作角色”时,搜索
{{#ask:[[分类:官方角色]][[新作登场::False]]}}
的时候就什么也搜不到。搜索
{{#ask:[[分类:!新作角色]]}}
搜索的则是位于“!新作角色”分类下的页面。
对于没有填写某个属性的情况,可以通过创建一个模板,内容为
{{#set: |新作角色 (all)={{#ifeq: {{#show: {{PAGENAME}} |新作角色 }} |true |true |false }}}}
的方法,然后查询属性时查询
{{#ask:[[分类:官方角色]][[新作登场(all)::False]]}}
即可。
这种情况下,请记得模板页面同样有缓存,不会在编辑页面后立刻被更改。

比较器注意事项

显示信息

结果格式

行内查询

查询子对象

对查询行为的查询

概念

推理

语义模板

信息框格式语义模板

行内语义模板

语义模板应用规则

浏览界面

特殊页面“问”

特殊页面“浏览”