XQuery/Google 图表
外观
< XQuery
您需要一个 XQuery 函数来使用 Google 图表 API 服务 创建图表。
我们将创建一个简单的 XQuery 函数,它接受 Google 图表的必需参数(例如图表数据、大小、颜色和标签)。然后,它将构建一个具有正确值的 URL。然后,您可以在 XQuery 中嵌入此 URL 以显示图表。
Google 图表使用 URL 参数对图表的值进行编码,例如 此图表。以下是图表 URL 参数的更清晰呈现
http://chart.apis.google.com/chart? chxl=0:|Jan|Feb|Mar|Apl|May|Jun|1:|10|50|100 &chxr=0,-5,100 &chxt=x,r &chbh=a &chs=300x150 &cht=bvs &chco=0000FF &chd=t:10,20,30,40,50,60 &chp=0.05 &chtt=Downloads+Per+Month
以下是一个示例函数
declare function utility:graph($type, $colors, $size, $markers, $data, $alt, $title, $barwidthandspacing, $linestyles) {
let $parameters :=
<Parameters>
<Parameter label="chco" value="{$colors}"/>
<Parameter label="chl" value="{$markers}"/>
<Parameter label="chtt" value="{$title}"/>
<Parameter label="chbh" value="{$barwidthandspacing}"/>
<Parameter label="chls" value="{$linestyles}"/>
</Parameters>
let $src := concat('http://chart.apis.google.com/chart?',
'cht=', $type,
'&chs=', $size,
for $parameter in $parameters//Parameter[@value ne '']
return
concat('&', $parameter/@label,'=', $parameter/@value)
'&chd=t:', $data)
return
<img alt="{$alt}" src="{$src}"/>
};
以下添加了一组更完整的 Google 图表参数,并为每个参数添加了一个 @required 属性
declare function utility:graph($type, $size, $data,
$title, $barwidthandspacing, $linestyles, $colors, $labels, $markers,
$axes, $axislabels, $axislabelpositions, $axisrange, $axisstyles, $zeroline, $ticklength,
$margin, $fill, $grid, $legend, $legendplacement, $alt) {
let $parameters :=
<Parameters>
<Parameter label="cht" value="{$type}" required="true"/>
<Parameter label="chs" value="{$size}" required="true"/>
<Parameter label="chd" value="{$data}" required="true"/>
<Parameter label="chtt" value="{$title}" required="false"/>
<Parameter label="chbh" value="{$barwidthandspacing}" required="false"/>
<Parameter label="chls" value="{$linestyles}" required="false"/>
<Parameter label="chco" value="{$colors}" required="false"/>
<Parameter label="chl" value="{$labels}" required="false"/>
<Parameter label="chm" value="{$markers}" required="false"/>
<Parameter label="chxt" value="{$axes}" required="false"/>
<Parameter label="chxl" value="{$axislabels}" required="false"/>
<Parameter label="chxp" value="{$axislabelpositions}" required="false"/>
<Parameter label="chxr" value="{$axisrange}" required="false"/>
<Parameter label="chxs" value="{$axisstyles}" required="false"/>
<Parameter label="chp" value="{$zeroline}" required="false"/>
<Parameter label="chxtc" value="{$ticklength}" required="false"/>
<Parameter label="chma" value="{$margin}" required="false"/>
<Parameter label="chf" value="{$fill}" required="false"/>
<Parameter label="chg" value="{$grid}" required="false"/>
<Parameter label="chdl" value="{$legend}" required="false"/>
<Parameter label="chdlp" value="{$legendplacement}" required="false"/>
</Parameters>
let $optional-parameters :=
string-join(
(
for $parameter in $parameters//Parameter[@required = 'false'][@value ne '']
return
concat('&', $parameter/@label, '=', $parameter/@value)
)
,'')
let $src := concat('http://chart.apis.google.com/chart?',
'cht=', $type,
'&chs=', $size,
$optional-parameters,
'&chd=t:', $data)
return
<img alt="{$alt}" src="{$src}"/>
};
Fraser Hore 和 Dmitriy Shabanov 在 eXist 邮件列表中发布了这些示例。