Help:属性及类型

属性（properties ）及类型（types）是Semantic MediaWiki之中输入语义数据的基本方式. 可将属性视为«维基页面之中取值的类别». 这些属性是供一种与MediaWiki之中的链接语法相类似的简单置标（mark-up）来使用的：


 *  属性名称::取值  

该语句规定的是给定属性名称的属性的一个取值. 使用该语句的页面将仅仅显示取值的文本，但并不显示属性赋值（property assignment）部分.

将链接转变为属性
首先，就拿关于柏林的维基百科文章来说，此文之中含有许多指向其他文章的链接，如“Germany”、“European Union”和“United States”. 然而，指向«Germany»的链接具有特殊的含义：之所以在那里放置该链接，是因为柏林是德国首都. 要让这一知识可供计算机程序使用，我们会想在该文章的正文当中对该链接加以如下«标签（tag）»：

Germany

从而，将其确定为一条描述«首都属性（capital property）»的链接. 在采用Semantic MediaWiki的情况下，在方括号里将属性名称和双冒号::放在该链接之前，也就是：

Is capital of::Germany

在文章当中，该文本依然显示为一条简单的，指向“Germany”的超链接. 其中，附加文本capital of（是……的首都）乃是属性名称，用于对这条指向Germany（德国）的链接加以分类. 就像类别那样，属性名称是人为设定的，但用户们还是应当尽量重复利用别处早已存在的那些属性.

为了简化这种重复利用，就像每个类别都有各自的文章一样，每个属性在维基站点当中也有着各自的文章. 利用特殊页面Special:Properties，可查看当前维基站点之中正在使用着的所有属性. 就像类别文章以Category:为前缀那样，所有的属性文章也以Property:为前缀，从而将其与其他的文章区别开来. 因此，亦可利用特殊页面Special:Search来查找已有的属性. 与类别一样，属性的文章可以为空，但还是强烈建议为其添加一定的描述，用于解释该属性的意图以及正确使用方法.

有多种多样为页面添加属性的方法：

将文字当中的取值转变为属性
除了指向其他文章的链接之外，维基站点文章里还存在着其他应用的信息. 例如，在Berlin这篇文章当中，有个数值给出了柏林的人口数量. 要让这一知识为计算机程序可用，我们希望在该文章之中对该数值的文字加以"标记"：

3,396,990

从而将其确定为"人口数量属性"的一个取值. 利用Semantic MediaWiki，我们可以在其文字之前插入属性名称和双冒号::，并使用方括号  将其括起来，因而得到如下形式：

population::3,396,990.

这种方式是有效的. 然而，这会创建出一条指向页面3,396,990的链接，而为每个人口数量取值都设立一篇文章也许并不合理. 而且，如果您希望创建一张按人口数量排序的包含所有德国城市的列表，就您所期望的文章名称而言，其数值顺序有别于其字母顺序. 例如，采用字母顺序时，"1,000,000"居于"345"之前. 我们希望能够告诉Semantic MediaWiki，在此维基站点当中，人口数量"population"是数值，而不是页面. 实现这一点的方法就是，为人口数量属性"population"指定类型（type）. 详情请参见下一节.

属性的数据类型
Semantic MediaWiki备有几种可供我们为属性选用的内置数据类型. 对于我们之前关于人口数量的示例，其合适的类型称为Number（数值型）. 我们希望为人口数量属性"population"赋予一种特殊的属性，规定其拥有的数据类型为"number". 为此，Semantic MediaWiki备有一种内置的特殊属性（special properties），称为Property:Has type（具有类型……）. 像对待任何其他属性一样，对于这个特殊属性，我们采用的是同样的语法，因此，在关于人口数量属性"population"的文章Property:Population里面，我们写道：

Has type::number

Semantic MediaWiki知晓许多像Property:has type这样的特殊属性. 无论这些属性是否在本维基站点之中拥有各自的文章，它们依然分别具有某种内置的含义，并且在计算处理上也不同于其他属性.

数据类型对于属性的计算处理非常重要. 首先，数据类型决定着各种工具应当如何处理给定的取值，比如，在搜索结果当中对于取值的显示以及排序. 其次，数据类型对于理解哪些取值具有相同的含义必不可少，比如，取值"1532"、"1,532"和"1.532e3"全都编码的是同一数值. 最后，如下文所述，一些数据类型还具有特殊的行为. 鉴于这些原因，对于每个属性，都应当采用某种数据类型加以定义.

我们当时不必为上述的首都属性"capital of"规定数据类型的原因是，默认数据类型是显示为一条链接的Page（页面型）. 尽管数据类型Page是默认的，您也应当为每个属性明确规定一种数据类型，以防止混淆或今后将其重定义成某种意外的类型. SMW型网站的管理员亦可更改默认数据类型.

属于页面链接的属性的置标，同样适合于其他数据类型的属性. 如下是一些更多的例子：

数据类型列表
利用不同的类型，属性可用来描述种类截然不同的取值. Special:Types页面提供有一张完整的可用类型列表. 目前，现成可用的类型有：

枚举与"允许取值"
除了为属性赋予数据类型外，亦可将其允许取值限制到特定的集合（就像适合于属性输入栏的白名单）. 其实现方法就是，利用特殊属性Property:Allows value来枚举出相应属性的那些允许取值. 这对于每种数据类型均有效.

计量单位
数据类型Help:Type Quantity（数量型）允许在数值后面加上计量单位，从而将不同的取值区分开来（比如，"30 miles"与"42 km"）. 要支持自动转换和多种计量单位格式，需要按照关于惯用计量单位的文档所述，对每个所支持的计量单位加以声明. 属性取值即可在不同的计量单位之间实现自动转换，从而用户就可以自由地在各个文章里面使用各自的首选计量单位，同时又能查询其他文章当中的属性取值并与之比较.

逆向属性
自从SMW 1.5.0版起，即可逆转数据类型为Page（页面型）的属性的方向. 详情请参见相应的帮助页面.

特殊属性
之前，我们提到了用来为属性定义数据类型的特殊属性Property:Has type. SMW还备有其他若干具有特殊含义的，预定义的特殊属性（即使是您在自己的维基站点当中并不为它们创建属性页面）. 您自己的属性无法使用这些名称，但自从SMW 1.4.0版起，您可以在浏览和查询界面之中就像其他属性那样使用这些名称. 有关详情，请参见Category:Special property以及具体的属性页面.

利用#set实现静默式标注（silent annotations）
亦可利用解析器函数#set来定义语义数据，而不是采用标准的双方括号置标（double-brackets markup）. 该函数成对地接受属性名称与取值，并采取语义的方式将其存储起来；但是，该函数并不向屏幕输出任何东西. 这样的一个示例调用就是：

当试图保存一个维基链接（wiki-links）之类其中含有方括号的字符串型（String）或文本型（Text）取值时，这种#set调用尤为有用. 此类括号往往无法与常规的SMW标记相兼容.

定义反复出现性事件
另一种类型的复杂数据就是反复出现性事件（recurring events，反复出现的事件）. 此类事件指的是依据预定规则所定义的，具有多个日期的事件（例如，周会或者说每周一次的会议）. 可以采用解析器函数#set_recurring_event为此类事件定义那些相应的日期取值. 与#set类似，这个函数也属于"静默式（silent）"，并不打印输出任何东西. 如下为一个示例调用：

详情可参见反复出现性事件.

早期版本之中的处理
一直到SMW 1.5.6版，数据类型在称为"Type"它们自己的命名空间里面都有着具体的页面. 后来，为了减少额外命名空间的数量，废弃了这种做法. 在本维基站点里面，您仍可找到"Type:Number"之类的表达式在使用. 对于为属性指定数据类型来说，两种写法均可接受.

在SMW非常早期的版本里面， 数据类型为Page（页面型）的属性当时称为relations（关系），且只有这些属性在属性名称与链接文字之间采用双冒号（::）作为分隔符. 所有其他的属性（数值型、字符串型等等）当时则称为attributes（特征属性），且必须以冒号等号（colon equals）（:=</tt>）作为分隔符.

对于SMW 1.0版当中的其他变更，请参见从SMW 0.7版升级到SMW 1.0版； 如果目前您仍在使用旧版本的SMW，对于0.7版当中标注的文档，请参见semweb:Help:Annotation (SMW0.7).