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]]}}得到的结果是页面的列表:CS4CSTranscribe 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 MediaWikiSemantic Result FormatsVisualEditor

查询{{#ask: [[Has field of science::~bio*]]}}查询结果为: BudburstNotes from NaturePlankton PortalWorm 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采用基于页面的方法,这使得“老师拥有三个香蕉”之类的数据变得困难,即他“有香蕉”和“他有三个”。可以使用子对象或语义内部对象来处理这个问题,二者具有相同的语法,但工作方式不同。

 

posted @ 2022-03-30 16:25  我是球啊  阅读(594)  评论(0编辑  收藏  举报