XSLTForms/XSLTForms 扩展
外观
影响 XSLTForms 变换的配置选项来自以下来源,其中每个选项的值是首先找到的值
- 外部定义的 XSLT 参数,
- config_LANG.xsl文件,
- 处理指令(PI)。
在xmlns="http://www.w3.org/1999/XSL/Transform"下,接受以下 xsl-params
- baseuri:如果未指定,则默认为xsltforms.xsl的基名。
- xsltforms_caller:
- xsltforms_config:一个节点集,其子节点是配置<properties>元素,这些元素将被复制到结果 xforms-page 上。默认为在config.xsl文件中指定的值。
- xsltforms_debug: 'yes'或任何其他值。如果未指定,则假定为无调试模式。
- xsltforms_lang:选择语言文件时使用的后缀config_<SUFFIX>.xsl,该文件指定消息、日历和其他本地化/国际化信息。
请注意xsltforms_config、xsltforms_debug、xsltforms_lang参数将进一步应用于包含 xsl-stylesheet PI 的任何后续文档的转换,无论是在使用replace="all"提交时,还是在 SVG 或应用transform()扩展函数时。
配置文件示例
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template name="config">
<options>
<nocss><!-- When existent, no css-conversion hapens. -->
</options>
<properties> <!-- Accessible at run time from within model('xf-model-config')/instance('xf-instance-config'). -->
<language>navigator</language> <!-- navigator or default -->
<calendar.day0>Mon</calendar.day0>
<calendar.day1>Tue</calendar.day1>
<calendar.day2>Wed</calendar.day2>
<calendar.day3>Thu</calendar.day3>
<calendar.day4>Fri</calendar.day4>
<calendar.day5>Sat</calendar.day5>
<calendar.day6>Sun</calendar.day6>
<calendar.initDay>6</calendar.initDay>
<calendar.month0>January</calendar.month0>
<calendar.month1>February</calendar.month1>
<calendar.month2>March</calendar.month2>
<calendar.month3>April</calendar.month3>
<calendar.month4>May</calendar.month4>
<calendar.month5>June</calendar.month5>
<calendar.month6>July</calendar.month6>
<calendar.month7>August</calendar.month7>
<calendar.month8>September</calendar.month8>
<calendar.month9>October</calendar.month9>
<calendar.month10>November</calendar.month10>
<calendar.month11>December</calendar.month11>
<format.date>MM/dd/yyyy</format.date>
<format.datetime>MM/dd/yyyy hh:mm:ss</format.datetime>
<format.decimal>.</format.decimal>
<status>... Loading ...</status>
</properties>
<extensions>
<!-- JS script code to add.
- When none of the following child elements exist, any elements here are copied
- just after xsltforms.js and before init-scripts.
-->
<beforeInit/> <!-- Added in a separate <script> element, after xsltforms.js and before init-scipts. -->
<onBeginInit/> <!-- Added within init-code <script> at the beginning of initImpl() function, before any definitions. -->
<onEndInit/> <!-- Added within init-code <script> at the end of initImpl() function, after xforms.init() invocation. -->
<afterInit/> <!-- Added in a separate <script> element, after init-scripts. -->
</extensions>
</xsl:template>
</xsl:stylesheet>
xforms 页面可以指定以下处理指令(PI)作为配置参数
- xsltforms-options:它接受 2 个伪属性,例如
<?xsltforms-options debug="yes" lang="en"?>
- css-conversion:例如
<?css-conversion no?>
- xforms:tree:内容模型(xforms:label?, xforms:item/xforms:label*)
- xforms:setnode:接受 ref 属性来绑定节点,inner 或 outer 属性,其值为一个或多个 XML 节点的 XML 序列化;inner 或 outer 属性被解析,生成的节点将替换由 ref 绑定的节点的子节点,或者替换节点本身。(参见 setnode 的单独页面。)
XSLTForms 支持的扩展函数
- is-valid(nodeset?):返回true,当节点集中的所有节点都有效时。
- transform(nodeset, xslt-href):使用指定的 xslt 转换节点集中第一个节点(按文档顺序),参见 https://sourceforge.net/mailarchive/[email protected]&forum_name=xsltforms-support
- serialize(nodeset?):将节点集中第一个节点(按文档顺序)序列化为字符串(??)
以下是如何定义用户自定义 XPath 函数的示例
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="xsltforms/xsltforms.xsl" type="text/xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:nfunc="http://example.net/xforms/new-functions/"
nfunc:bogus="Workaround for FF's bug: https://bugzilla.mozilla.org/show_bug.cgi?id=94270"
>
<head>
<title>User-Defined XPath functions</title>
适用于旧版本的 XsltForms
<script>
XPathCoreFunctions['http://example.net/xforms/new-functions/ new-func'] =
new XPathFunction(
false, /* is accepting context as 1st-arg? */
XPathFunction.DEFAULT_NONE, /* context-form as 1st-arg, when (args.length == 0): [ DEFAULT_NONE | DEFAULT_NODE | DEFAULT_NODESET | DEFAULT_STRING ] */
false, /* is returning nodes? */
function() {
return "NEW FUNC";
}
);
</script>
适用于新版本的 XsltForms
<script>
XsltForms_xpathCoreFunctions['http://example.net/xforms/new-functions/ new-func'] =
new XsltForms_xpathFunction(
false, /* is accepting context as 1st-arg? */
XsltForms_xpathFunction.DEFAULT_NONE, /* context-form as 1st-arg, when (args.length == 0): [ DEFAULT_NONE | DEFAULT_NODE | DEFAULT_NODESET | DEFAULT_STRING ] */
false, /* is returning nodes? */
function() {
return "NEW FUNC";
}
);
</script>
</head>
<body>
<p>
Hello to <xf:output value="concat('My ', nfunc:new-func())" />.
</p>
</body>
</html>
请注意,在<html>元素上的属性是在 Firefox 下运行所必需的 nfunc:bogus="Workaround for FF's bug: https://bugzilla.mozilla.org/show_bug.cgi?id=94270"(请随时投票给这个 mozilla-bug,希望能有一天得到修复…) |
当伪 URL 在伪 URL 在中属性中使用时,包含的<xf:load>元素的 id 由以下 js 对象属性包含
XSLTFormsContext.elementId
参见 关于此主题的单独页面。