Status: | obsolete |
Progress: | 95% |
Version: | 0.7 - 2.5.8 |
Template format | |
---|---|
Uses a specified template to format and display the results | |
Further Information | |
Provided by: | Semantic MediaWiki |
Added: | 0.7 |
Removed: | 3.0.0 |
Requirements: | none |
Format name: | template |
Enabled? Indicates whether the result format is enabled by default upon installation of the respective extension. | yes |
Authors: | Markus Krötzsch |
Categories: | misc |
Table of Contents | |
See the documentation of result format "plainlist"Outputs results in a comma separated list, with additional outputs shown in parentheses. The output does not provide class attributes to HTML elements (default for queries without printout statements). as well as the general help page on using templates for current documentation.
The result format template is used to format the results via a template.
Parameters[edit]
Parameter | Aliases | Type | Default | Description |
---|---|---|---|---|
propsep | - | text | , | The separator between the properties of a result entry |
valuesep | - | text | , | The separator between the values for a property of a result |
template | - | text | empty | The name of a template with which to display the printouts |
named args | namedargs | yes/no | no | Name the arguments passed to the template |
userparam | - | text | empty | A value passed into each template call, if a template is used |
class | - | text | empty | An additional CSS class to set for the list |
introtemplate | - | text | empty | The name of a template to display before the query results, if there are any |
outrotemplate | - | text | empty | The name of a template to display after the query results, if there are any |
sep | - | text | , | The separator between results |
Using templates for custom formatting[edit]
Some result formats support the use of wiki template to fully control the display of an inline query. This works for the formats template
, list
, ol
and ul
. If a template is specified, all result «rows» are formatted using this template. The name of the template (without the initial «Template:») is given in the parameter template
, so the query has the following general form:
{{#ask: … | format=template/list/ol/ul | template=templatename }}
For each result in an inline query, SMW then calls the specified template, where the result and printout values are used as numbered template parameters. So a query that would display three columns when formatted as a table, will set three template parameters. These values can then be used in the template in the normal way writing {{{1}}}
, {{{2}}}
, etc. Each parameter refers to one "field" or column in the results that would be displayed by the inline query for each selected page. Normally the first field a query displays is the page title (see here),
so parameter {{{1}}}
is the page title, and {{{2}}}, {{{3}}}, ...
are the other properties displayed by the query. A number of examples are given below.
The template feature allows greater flexibility in the display of the query, including:
- Changing the order in which output is displayed, or omitting or duplicating output;
- Displaying images depending on query results;
- Creating links for property values;
- Using CSS styles to vary font-size, alignment, background-color, etc. by column in tables.
If you do use a template to adjust the appearance of links, you will probably need to set the parameter | link=none |
to disable SMW's automatic linking of article names. A similar effect can also be achieved by selecting the plain output format for some or all of the printouts, as described in Displaying information. Your template will then have to add [[ ]]
around anything you want to be a link.
To understand how to create a template for formatting some query, it is useful to look at the query with format=table
first. For example, queries that refer to a single page only (like the ones one would use with #show
) hide the page title of the result page, so that the parameter {{{1}}}
refers to the first printout statement. Using the printout statement ?
or specifying any value for mainlabel
will change this.
The following examples all use Template:Query output demo that basically contains the following wiki text:
{{{2}}} people squeeze into the {{{3}}} of {{{1}}}.
The following queries illustrate the effect of this template:
- Query syntax
{{#ask: [[Category:City]] [[Area::+]] [[Population::+]] |?Population=Inhabitants |?Area#km²=Size in km² |format=template |template=Query output demo |limit=3 }}
- Query result
783,364 people squeeze into the 219.00 km²84.56 sqmi <br /> of Amsterdam. 3,520,061 people squeeze into the 891.85 km²344.34 sqmi <br /> of Berlin. 1,080,394 people squeeze into the 405.02 km²156.38 sqmi <br /> of Cologne. ... further results
In the above example you can see how the template ignores any header labels specified in the query such as «Size in km²». Yet the values the template displays do use the units specified in ?Area#km²=Size in km²
, and will similarly respect all given display formats (see Displaying information).
Below is a similar query sorted by population that uses format=ol
to produce a numbered list:
- Query syntax
{{#ask: [[Category:City]] [[Area::+]] [[Population::+]] |?Population |?Area#km² |format=ol |template=Query output demo |limit=3 |sort=population |order=desc }}
- Query result
- 7,825,200 people squeeze into the 1,706.80 km²659.00 sqmi <br /> of London.
- 4,575,532 people squeeze into the 2,058.00 km²794.59 sqmi <br /> of Sydney.
- 3,520,061 people squeeze into the 891.85 km²344.34 sqmi <br /> of Berlin.
If we directly specify a single page, then normally the query results do not include the page, so to reuse the same template in the query below we must tell the query to display the page title as the first column by adding |?
:
- Query syntax
{{#ask: [[Berlin]] |?Population |?Area#km² |format=template |template=Query output demo }}
- Query result
3,520,061 people squeeze into the 891.85 km²344.34 sqmi <br /> of Berlin.
The same can be accomplished using parser function <show>#show</show> even though this may not be the most typical use of it:
- Query syntax
{{#show: Berlin |? |?Population |?Area#km² |format=template |template=Query output demo }}
- Query result
3,520,061 people squeeze into the 891.85 km²344.34 sqmi <br /> of Berlin.
Templates may also include other parser functions such as conditionals and even queries. Example of complex query formats can be found on the following pages (external links, may change):
- The publications on korrekt.org : all lists on this page are created with templated queries. Conditionals (
#if
and#ifeq
) are used to change the format of a result depending on its publication type and provided data (major publications have bold-faced titles).
Usage for userparam
(user parameters)[edit]
It is also possible to add a (single) extra parameter to the query. See the help page on the userparam
parameter for information on how to do this.
Usage for named args
(named arguments)[edit]
For Special page "Ask" there is the option template arguments=[named|legacy]
(where legacy
corresponds to the alias Inline query option named args=[yes|on|true]
) that specifies that the formatting template expects named arguments, instead of anonymous (numerical) ones.
All examples above populate template parameters like {{{1|}}}
, {{{2|}}}
, ... but when the template arguments
is used, the template parameters populated depend on its value:
template arguments=legacy
ornamed args=yes
: populates parameters like{{{?Population|}}}
or{{{?Area|}}}
template arguments=named
: populates parameters without the?
character, like{{{Population|}}}
or{{{Area|}}}
.
If you specify an alternative label for the property being requested you can use that as template parameter. But the question mark is still required in the legacy
mode.
- Notes
- To access {{{1}}} using
named args=yes
you must name the default output (page name aka {{{1}}}) with:|?#=somename
or|?=somename
- If clicking on the "further results" yields an empty query because the
named args
parameter is not reproduced here, you may have to remove thesearchlabel
parameter. - Parameter names are case-sensitive, as always.
Usage of import-annotation
(full parse)[edit]
Semantic MediaWiki 2.3.1Released on 4 January 2016 and compatible with MW 1.19.0 - 1.25.x. added the import-annotation
option1 which is by default set to no
. You have to change it to yes
when you use templates to create an invert annotation or if you want to import (reuse) annotations depending on the result of your query, e.g. when using a variable with them.23 In short: mainly for annotations to be conditional when inline queries are involved.
Usage of valuesep
(value separator)[edit]
Semantic MediaWiki 2.5.0Released on 14 March 2017 and compatible with MW 1.23.0 - 1.29.x. added the valuesep
option4 when SMW_RF_TEMPLATE_OUTSEP
feature is enabled (default) to avoid ambiguity of the sep
parameter semantics. The valuesep
option separates several values queried from the property annotated to a subject (pages, subojects) while sep
separates values queried from the same property annotated to different subjects (pages, subojects)5. Starting with Semantic MediaWiki 2.5.3Released on 8 July 2017 and compatible with MW 1.23.0 - 1.29.x. the default value for the valuesep
option was changed from a space to a comma.6 See also the related configuration parameter $smwgResultFormatsFeatures
Sets whether features for some result formats should be extended.
Display of the link to further results[edit]
When using the 'template' parameter, you will only see the 'further results...' link when 'format=template'. i.e. it doesn't seem to work with 'format=ol', for example.
If you are creating a tabular output with your template you may need to use the special introtemplate and outrotemplate parameters to ensure that 'further results...' works correctly.
Limitations[edit]
The template may execute another ask query. By default the number of nested calls with "format=template" is, however, limited to 2 (see the help page on configuration parameter $maxRecursionDepth
Sets the recursion depth for a template output). Example: page A contains an inline query that uses template B, which itself contains an inline query that uses template C. Template C may contain yet another ask query, but not one using the template format i.e. "format=template".
Examples[edit]
Related tips[edit]
References
- ^ Semantic MediaWiki: GitHub pull request gh:smw:1257
- ^ Semantic MediaWiki: Sandbox example sb:smw:1255:0
- ^ Semantic MediaWiki: Sandbox example sb:smw:1255:1
- ^ Semantic MediaWiki: GitHub pull request gh:smw:2331
- ^ Semantic MediaWiki: Sandbox example sb:smw:2331
- ^ Semantic MediaWiki: GitHub pull request gh:smw:2522