Help:模板格式

From semantic-mediawiki.org
Jump to: navigation, search
模板格式
利用某个所指定的模板对结果进行格式编排和显示
进一步的信息
提供方: Semantic MediaWiki
最低版本: 0.7
最高版本: 依然支持
要求:
格式名称: template
作者: Markus Krötzsch
类别: misc
目录

模板格式template用来借助于模板对结果进行格式编排。

参数

参数 类型 默认 说明
sep 文本 , 取值分隔符
template 文本 空白 输出显示模板的名称
named args 布尔值 no 请指定传递给该模板的变量
userparam 文本 空白 使用模板时,向模板调用所传递的取值
introtemplate 文本 空白 用于在查询结果前显示内容的模板的名称
outrotemplate 文本 空白 用于在查询结果后显示内容的模板的名称
import-annotation 布尔值 no <smw-paramdesc-import-annotation>

利用模板进行自定义格式编排

一些结果格式支持利用维基模板来全面控制嵌入式查询的显示。 这种方式适用于模板格式列表格式编号列表格式以及项目符号列表格式。如果指定了某个模板,就会采用该模板对所有的结果«行»进行格式编排。

相应模板的名称(不带开头的前缀«Template:»)是在参数template当中提供的,因而这种查询具有的一般形式为:
{{#ask: … | format=template/list/ol/ul | template=''templatename'' }}

对于嵌入式查询之中的每个结果,SMW都会调用所指定的模板;其中,结果和打印输出取值作为经过编号的模板参数来使用,从而一个在被编排为一张表格时会显示三列的查询,将会设置三个模板参数。 继而,可采取通常的方式,写出{{{1}}}{{{2}}}等等,从而在该模板当中使用这些取值。 每个参数分别指的是嵌入式查询将会为所选择的每个页面而显示的,结果之中的一个"字段"或者列。 通常,查询所显示的第一个字段是页面标题(参见这里), 因此,参数{{{1}}}就是页面标题,而{{{2}}}, {{{3}}}, ...则是查询所显示的其余属性。下文将列举许多示例。

这种模板功能为查询的显示提供了更大的灵活性,包括:

  • 更改输出的显示顺序,或者省略或重复输出;
  • 根据查询结果来显示图片;
  • 为属性取值创建链接;
  • 按表格当中的列,利用CSS样式来改变字体大小、对齐方式以及背景颜色等等。

如果真的采用某个模板来调整链接的外观,也许您会需要设置参数 | link=none | ,来禁用SMW对文章名称的自动链接功能。 如显示信息所述,通过为某些或全部的打印输出选择普通输出格式,亦可实现类似的效果。 这样,对于任何您希望其作为链接的内容,您的模板就必须将其括在[[ ]]当中。

要理解如何为某一查询的格式编排而创建模板,首先查看一下带有参数format=table的查询,会有所用处。 例如,那些指的是单独一个页面的查询(就像配合使用参数#show那样)将仅仅隐藏该结果页面的页面标题, 从而,参数{{{1}}}指的是第一个打印输出语句。利用打印输出语句?,或者为mainlabel指定任何取值,都将改变这种情况。

下列这些示例全都采用的是Template:Query output demo (zh-hans),其基本上含有如下维基文本:

{{{2}}} people squeeze into the {{{3}}} of {{{1}}}.

下列这些查询演示的就是该模板的效果:

{{#ask: [[Category:City]] [[Area::+]] [[Population::+]] 
  | ?Population=居民数量
  | ?Area#km²=面积(km²)
  | format=template
  | template=Query output demo (zh-hans)
  | limit=3
}}
实际运行结果: 783,364人拥挤在219 km²
84.556 sqmi
Amsterdam。 43,765人拥挤在60 km²
23.166 sqmi
Belleville。 3,520,061人拥挤在891.85 km²
344.343 sqmi
Berlin

... further results

在上面这个例子中,可以看到模板如何忽略了查询之中所指定的«面积(km²)»之类任何标题标签。 然而,模板所显示的这些取值的确采用的是?Area#km²=面积(km²)当中所指定的计量单位, 并且将采取类似的方式遵循所提供的全部显示格式(参见Help:显示信息)。

如下是一个按人口数量排序的类似查询,并且采用format=ol来生成编号列表。

{{#ask: [[Category:City]] [[Area::+]] [[Population::+]] 
  | ?Population
  | ?Area#km²
  | format=ol
  | template=Query output demo (zh-hans)
  | limit=3
  | sort=population
  | order=desc
}}
实际运行结果:
  1. 7,825,200人拥挤在1,706.8 km²
    658.995 sqmi
    London
  2. 4,575,532人拥挤在2,058 km²
    794.594 sqmi
    Sydney
  3. 3,520,061人拥挤在891.85 km²
    344.343 sqmi
    Berlin
  4. ... further results


如果我们直接指定单个页面的话,查询结果之中通常并不包括该页面,因此要在下列查询之中重复利用同一模板的话,我们必须通过添加|?来告诉该查询,将此页面的标题显示为第一列:

{{#ask: [[Berlin]]
  | ?
  | ?Population
  | ?Area#km²
  | format=template
  | template=Query output demo (zh-hans)
}}

实际运行结果: Berlin人拥挤在3,520,061的Berlin


利用#show亦可达到同样的效果,尽管这样的方式可能并不是这项功能最为典型的用法:

{{#show: Berlin
  | ?
  | ?Population
  | ?Area#km²
  | format=template
  | template=Query output demo (zh-hans)
}}
实际运行结果: 3,520,061人拥挤在891.85 km²
344.343 sqmi
Berlin


模板之中亦可包含其他的解析器函数,如条件,甚至是查询。 可在下列页面上找到关于复杂查询格式的例子(这些属于外部链接,可能会发生变更):

  • semanticweb.org主页上所显示的即将发生的事件:该页面的事件一节当中显示的仅仅是某些重大事件(即将举办的活动)。每个此类事件均采用一个模板来进行格式编排,而该模板又利用另一个嵌入式查询来找出特定事件的子事件(如同地协作的研讨会、辅导课等等)。
  • korrekt.org上的出版物列表:该页面上的所有列表都是利用模板化查询(templated queries)来创建的。根据一项结果相应的出版物类型以及所提供的数据,利用条件(#if#ifeq)来改变该结果的格式(主要出版物的标题采用加粗字体)。

用户参数userparam的使用方法

可以向查询当中添加单独一个额外的参数。 为此,应当添加的是userparam=<value>。 在模板之中,在userparam=后面所提供的那个取值将作为变量{{{userparam}}}加以提供。 这为模板提供了额外的可复用性: 基于该参数,可以创建单独一个模板,并且可从不同的查询当中对其加以调用,而又产生出不同的结果。 在关于人口数量的示例当中,您可以决定采用不同的动词,而不仅仅是"拥挤",比如"适应"、"居住"、"位于"等等之类的动词:

{{#ask: [[Category:City]] [[Area::+]] [[Population::+]] 
  | ?Population=Inhabitants
  | ?Area#km²=Size in km²
  | format=template
  | template=Query output demo (zh-hans)
  | limit=3
  | userparam=将自己的家安置
}}
实际运行结果: 783,364人将自己的家安置在219 km²
84.556 sqmi
Amsterdam。 43,765人将自己的家安置在60 km²
23.166 sqmi
Belleville。 3,520,061人将自己的家安置在891.85 km²
344.343 sqmi
Berlin

... further results

显示指向进一步结果的链接

当使用模板参数'template'的时候,只有在'format=template'的情况下,才会看到指向更多结果的'further results...'链接。也就是说,比如,看来它并不兼容'format=ol'。

如果准备采用您的模板来创建表格式输出,可能需要利用专门的模板起始与结尾参数(introtemplate and outrotemplate parameters)来确保指向更多结果的链接'further results...'有效地发挥作用。

示例查询

{{#ask:[[Category:City]][[Has image::+]]
|?Has image
|format=template
|headers=show
|link=none
|template=Demo/Template/City/Image
|introtemplate=Demo/Template/City/Image/Intro
|outrotemplate=Demo/Template/City/Image/Outro
|offset=0
|limit=20
}}

上面这个查询将产生一张表格输出,其中含有所选城市的图片。


本文档页面适用于SMW从0.7版到最新版本的所有版本。
      其他语言: deen

Help:Template format zh-hans 0.7