Status: | effective |
Progress: | 100% |
Version: | 1.0+ |
语义模板(Semantic templates)是一种对Semantic MediaWiki借助于MediaWiki模板所引进的置标加以包含的方法。这种方法具有下列优势:
- 用户可在无须学习任何新的语法的情况下对标注加以规定。
- 标注可以得到一致的使用,即用户在编辑页面的时候不必再去查找合适的属性或类别。
- 信息框式模板(infobox-style templates)通过定义哪些取值属于哪些页面来提供数据结构。
- 信息框式模板往往还提供对数据的很好显示。
正是鉴于这些原因,语义模板于是成为一种非常流行的,用来处理语义标注(semantic annotations)的方法。 在大多数维基站点里面,语义数据仅仅借助于模板来存储 - 实际上,我们估计,在所有现存的SMW数据当中,99%是借助于模板来存储的。 甚至是那些旨在让自由式SMW标注变得更加轻松的基于SMW的扩展,如Halo,也是在同样利用模板来存储数据的系统背景下实现这种功能的。
信息框式语义模板[edit]
许多的MediaWiki型网站、基于SMW的网站以及其他类似的网站,都在运用信息框式语义模板(infobox-style templates)来呈现标准信息。 例如,那些关于城市和乡村的Wikipedia文章就在使用一种标准模板,编者可在其中说明常用信息项;例如,如下这个模板(摘自文章"San Diego, California"):
{{Infobox Settlement |image_skyline = Sandiego_skyline_at_night.JPG? |imagesize = |image_caption = San Diego Skyline | March 31, 2007 |official_name = City of San Diego |settlement_type = [[City]] |nickname = America's Finest City |motto = Semper Vigilans ([[Latin]]: Ever Vigilant) |image_flag = Flag of San Diego, California.svg ...
通常,此类模板(在本示例当中为模板wikipedia:Template:Infobox Settlement)都会采用精心编排的表格来显示相应的信息。 此类经过正规模板化的信息项映射成Semantic MediaWiki当中的属性,且每个字段(field,信息域)分别采用单独的一个属性来存储,乃是最为理想的情况。
示例页面Demo:California则展示了一个其中含有语义标注的,简单的"信息框"式显示模板 。
嵌入式语义模板[edit]
在特殊情况下,亦可在页面正文当中的任何地方运用语义模板。 例如,当在维基页面里表达某个天体的表面积数值时,可能希望其显示为:
- 6.088 × 1018 m²
那么,您可以这样来书写:
6.088 × 10<sup>18</sup> m²
这种写法比较繁琐,因而可以为面积建立一个模板"Template:Surface area",以便编者只需写出:
{{Surface area|6.088|18}}
该模板就会将其展开成为所需的置标形式。
为此,为Template:Surface area编写了如下代码:
[[Surface area::{{{1}}}e{{{2}}} m²|{{{1}}} × 10<sup>{{{2}}}</sup> m²]]
该模板不但采用语义方式存储相应的取值(借助于属性标签"Surface area"),并且可采用精致的格式将其显示在屏幕上(借助于该标签之中通道符"|"之后的所有代码)。
参见示例页面Sol,并查看其源代码,以了解该模板的使用情况。
语义模板的正确使用[edit]
上述模式让我们能够创建所有种类的,具有任意复杂程度的语义模板,但还是有一些需要考虑的事项:
自动标注需要严格的格式[edit]
您可以采取自动化的方式来标注模板字段,但在这种情况下,所提供的取值必须遵循预期的格式。 例如,采用Number(数值型)类型的属性来存储城市人口数量,才是合理的做法。 然而,用户所输入的取值则可能会不是数值 - 有可能是一段文字,如"大约一百万"。 Wikipedia明显存在许许多多此类的例外情况:比如,在文章wikipedia:France的主信息框模板里面,为人口数量所提供的条目并不是单单一个数值,或者甚至是一套数值!相反,那里存在着多个数值及其含义的文字解释。在设计语义模板的时候,应当将记住此类的特例。
可选条目和条件[edit]
在运行维基站点的正常过程中,大多数页面的信息框或许都不会得到完整的填写,而您可能并不希望在这种情况下显示空行。 要删除那些取值为空白的行,可在模板代码当中加入条件,从而只有当提供可非空取值时才包括某一行。
要做到这一点,可以求助于解析器函数扩展当中所定义的解析器函数#if。维基百科之中含有许多关于模板里的解析器函数的示例,比如在wikipedia:Template:Taxobox里面。解析器函数的使用通常会造成模板代码难于阅读,但对于用户来说,简化的效果是相当大的。
模板之中的查询[edit]
有时也会在模板当中添加行内查询,而且这些查询几乎总是含有页面名称变量{{PAGENAME}};参见ow:Template:Ask。此类查询通常用于收集那些都拥有某一指向当前兴趣页面的属性的页面,比如,适用于国家页面的模板利用查询来显示各国城市列表。
模板的标注[edit]
您也可以直接向模板当中添加标注,也就是说,直接赋予它们语义属性。 尽管不推荐这么做,因为模板并不代表现实世界实体,但如果网站管理员启用这项功能的话,依然可以这么做。
模板调用的编辑[edit]
作为一个流行的扩展,Semantic Forms(语义表单)允许用户利用表单来添加和编辑对于信息框式模板的调用。另请参见SMW扩展列表。