跳转到内容

XSLTForms/XSLTForms 扩展

来自维基教科书,自由的教科书

影响 XSLTForms 变换的配置选项来自以下来源,其中每个选项的值是首先找到的值

  1. 外部定义的 XSLT 参数,
  2. config_LANG.xsl文件,
  3. 处理指令(PI)。

XSLT 参数

[编辑 | 编辑源代码]

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_configxsltforms_debugxsltforms_lang参数将进一步应用于包含 xsl-stylesheet PI 的任何后续文档的转换,无论是在使用replace="all"提交时,还是在 SVG 或应用transform()扩展函数时。

配置文件config.xsl

[编辑 | 编辑源代码]

配置文件示例

<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 属性来绑定节点,innerouter 属性,其值为一个或多个 XML 节点的 XML 序列化;innerouter 属性被解析,生成的节点将替换由 ref 绑定的节点的子节点,或者替换节点本身。(参见 setnode 的单独页面。)

XSLTForms 支持的扩展函数

用户自定义函数

[编辑 | 编辑源代码]

以下是如何定义用户自定义 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>

算术表达式

[编辑 | 编辑源代码]

javascript 中的对象伪 URL 在xf:load/xf:resource@value

[编辑 | 编辑源代码]

伪 URL 在伪 URL 在属性中使用时,包含的<xf:load>元素的 id 由以下 js 对象属性包含

  XSLTFormsContext.elementId

使用 TinyMCE 作为混合内容编辑器

[编辑 | 编辑源代码]

参见 关于此主题的单独页面

华夏公益教科书