Semantic MediaWiki
一、简介
SMW是什么呢?
它是Mediawiki的一个扩展,用于管理wiki中的结构化数据并查询该数据以创建动态表示:表格、时间线、地图、列表等。Mediawiki有助于搜索、组织、标记、浏览、评估和共享wiki的内容。传统的wiki只包含计算机既无法理解也无法评估的文本,而而SMW添加了语义注释,使wiki可以充当协作数据库。
二、语义属性
2.1 属性和语义网三元组
SMW的核心是所谓的属性,属性可以理解为“信息类别”,它们以机器可以理解的方式编码。如果在给定页面中使用属性+值,就会隐式创建一个所谓的三元组。
比如我们添加信息“Semantic MediaWiki和Semantic Forms”有关,我们就得到如下的三元组:
在Semantic MediaWiki中,我们通过向页面添加定义属性/值对的代码来创建三元组。因此,关于上边的例子:
- 这个页面(SMW)是我们用属性描述的subject
- Is related是属性的名字,是所谓的谓词,即上述的"predicate"
- Semantic Forms页面是属性的值,代表对象
对应的wiki代码如下
[[Is related to::Semantic Forms]]
与RDF的相似之处
在资源描述框架RDF中,类似以下的片段定义了相同的关系。
在某些方面,Semantic MediaWiki是RDF的Wiki等价物,页面的语义数据可以像这样导出为RDF:
[http://edutechwiki.unige.ch/en/Special:ExportRDF/Semantic_MediaWiki RDF feed]
2.2 属性类型
Semantic MediaWiki中的属性以面向对象编程类似的方式定义类型化数据,属性与[[property_name::property_value]]语法一起使用。默认情况下,属性的值是一个wiki页面,即属性的默认数据类型只是一个wiki页面。
MediaWiki [[is a:: Wiki]]
以下示例显示了URL值,但是,这并不意味着Has Website的数据类型是一个URL。由于属性的默认值是wiki页面,因此我们必须明确地创建和编辑属性页面,如下所述:
[[Has website:: http://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki]]
属性类型的数据类型
手动编码
每个属性都是通过属性命名空间中的一个页面定义的。要创建具有property_name和value的属性,只需在任何其他页面中使用如下语法:
[[property_name:: your_property_value]]
然后,键入属性。默认情况下,属性的类型为页面,即它将链接到普通的wiki页面。
要定义属性及其类型,有三种方法
(1a)用一个值创建一个属性实例,然后创建/手动编写属性页。
利用[[property_name:: your_property_value]]创建属性,或者使用模版创建
创建或编辑property:your_property页面,并且添加一个类型声明如下:
This is a property of type [[Has type::URL]].
(1b)使用Create with Form
原理相同,但它允许从下拉列表中选择数据类型。
(2)使用Special:CreateProperty
创建属性(包括其页面和类型声明)的最简单的方法是使用特殊页面中的表单。
2.3 显示属性
属性的显示方式取决于其类型和附加参数,默认情况下只会显示值,可以是简单的文本,也可以是链接。
非链接的值
我们定义了“has accronym”属性的数据类型为string,因此该值不会显示为wiki链接,下表显示了发生的情况:
2.4 注释值
2.5 查找属性
有几个选项可以帮助查找属性。
默认工具
使用 special:properties
3. 内联查询
Semantic Mediawiki包括用于语义搜索的查询语言,可以在三种情况下使用:
1. 通过Special:Ask页面的形式
2. 在所谓的concepts中,例如saved queries
3. 在内联查询中
大多数使用都是在内联查询中使用的。
查询通常定义三件事:
1. 要选择的页面
2. 要显示关于这些页面的哪些信息
3. 结果应该如何去格式化
内联查询动态包括查询结果,如下例所示。此功能是通过所谓的解析器功能实现的。
#ask函数采用许多参数,特别是:页面选择、要显示的信息以及如何显示。
#show函数显示单个页面的信息,即它是#ask函数的一种快捷方式。
一个简单的查询将列出一个类别中的所有代码。以下代码:
{{#ask: [[Category: MediaWiki extension]]}}
会产生如下结果:
3.1 简单查询
根据定义,各种查询子句与AND运算符组合
以下代码选择“软件信息”类别中的所有页面,其中属性“Is developed by”包含属性值“Yaron Koren”:
输出结果如下:
我们也可以使用通配符,例如,如果我们想列出所有包含“Is Developed by”属性的页面,我们将使用以下的表达式:
输出结果如下:
3.2 查询语法
粗略地说,#ask的语法如下:包括三组信息
默认情况下,查询将返回一个列表wiki页面,即不告诉显示哪些其他信息以及是否应该跳过页面本身。
搜索条件(子句)可以包括属性/值(包括通配符和比较器)、类别和其他一些东西。此外,可以使用析取(或)。
3.2.2 在类别和页面中搜索
要在一个类别和所有子类别中搜索,只需要使用正常的wiki语法,例如:
仅包含此条件的查询将返回MediaWiki扩展中的所有页面。例如,查询{{#ask: [[Category: MediaWiki extension]]}}将产生这个列表:Maps (MediaWiki extension) , Mediawiki collection extension installation , Page Forms , Semantic Drilldown , Semantic Forms Inputs , Semantic Maps , Semantic MediaWiki , Semantic Result Formats , VisualEditor
3.2.3 搜索属性值
属性条件可以采用多种形式,即定义一个值,使用通配符或包含比较器。
简单的属性值搜索
要搜索具有给定值的属性,请使用普通的属性语法,例如:
查询{{#ask: [[Developed with::MediaWiki software]]}}得到的结果是页面的列表:CS4CS, Transcribe Bentham。
通配符
使用+表示通配符
该查询{{#ask: [[Supports languages::+]]}}生成页面列表:Maps (MediaWiki extension) , Mediawiki , Mediawiki collection extension installation , Page Forms , Semantic Drilldown , Semantic MediaWiki , Some software。
比较器
比较器作用于属性值,它们被放置在属性条件中的“::”之后。
查询{{#ask: [[Was last edited::>1 September 2013]]}}得到的结果是页面列表Semantic MediaWiki, Semantic Result Formats, VisualEditor。
查询{{#ask: [[Has field of science::~bio*]]}}查询结果为: Budburst, Notes from Nature, Plankton Portal, Worm Watch Lab。它将返回Has field of science属性至少包含一个“bio”的页面。下面的表格列出了找到的属性值:
3.2.4 子查询
使用附加属性进行查询
3.3 显示结果
默认情况下,包含多个要显示的属性的结果显示为表格,下面的代码选择了与上面相同的页面,但也显示了最后的修订号值。
得到的结果如下:
语义结果格式允许生成图形,以下显示了Yaron Koren被定义为开发者以及其他开发者参与的所有页面。
得到如下的结果:
3.4 查询运算符
SMW查询可以包括比较器并允许OR(析取)
3.5 故障排除
使用调试选项测试#ask表达式
请注意,默认情况下内联#ask仅返回50个结果,使用limit=..参数来改变它。
4 特殊性质和复合数据
4.1 特殊属性
特殊属性由系统自动生成,具有各种功能。默认情况下,这些属性尚未定义。为了使用他们,我们建议一下步骤:
1. 使用Special:Properties列出所有的属性
2. 将鼠标悬停在红色连接上,维基会判断它是否是特殊属性
3. 点击红色链接
4. 用表格创作
5. 选择type=text
4.2 复合数据
SMW采用基于页面的方法,这使得“老师拥有三个香蕉”之类的数据变得困难,即他“有香蕉”和“他有三个”。可以使用子对象或语义内部对象来处理这个问题,二者具有相同的语法,但工作方式不同。