如何在Transform中包含XSL的exists-db中打破缓存

时间:2017-08-25 19:31:12

标签: xslt xquery exist-db

我有一大堆XSL,我们最近经历过并使用公共位实现了一个共享的XSL模板。我们现在在所有主要的XSL中包含了一个xsl:include来提取这些内容。在我们开始对共享XSL进行更改之前,我们一开始没有问题。

有关信息,整个系统是基于Web的,调用查询以通过XSL FO和RenderX动态格式化数据库中的文档给定不同的XSL。

主要转变是:

let $fo := util:expand(transform:transform($articles, doc("/db/Customer/data/edit/xsl/Custbatch.xsl"), $parameters))

XSL(Custbatch.xsl)有:

<xsl:include href="Custshared.v1.xsl"/>

如果我们对&#34; Custshared.v1.xsl&#34;进行编辑没有反映在结果中,因为很明显&#34; Custshared.v1.xsl&#34;正在被缓存和使用。我们知道这一点,因为您可以看到名称现在包括&#34; v1&#34;。如果我们进行更改并更改从v1到v2的所有引用,则一切正常。但这似乎有点荒谬,因为这意味着我们必须改变包含这个XSL的18个XSL,或者做一些愚蠢的事情,比如重新启动数据库。

所以,我在setup或controller.xql(在所有不匹配的路径上都有以下内容)中缺少什么,以使事情不被缓存。我认为这都是内部的,所以这个设置可能并不重要。配置中是否有其他设置?

<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
    <cache-control cache="no"/>
</dispatch>

在阅读此处的文件:http://exist-db.org/exist/apps/doc/xsl-transform.xml时,它声明:

&#34;样式表将使用标准Java API(javax.xml.transform)编译成模板。模板在函数的所有实例之间共享,并且只有在自上次调用后进行修改才会重新加载。&#34;

但是,如果我更改了包含的XSL,则不会使用它。

更新#1

我甚至创建了一个返回包含的XSL的查询,然后我使用:

<xsl:include href="http://localhost/get-include-xsl.xq"/>

这确实有效,因为格式化没有被破坏,但更改底层XSL会产生相同的结果。所以即使是Xquery结果也是缓存的。

更新#2

是的,通过一些简单的测试,所有都证明了。 如果我对根模板进行任何更改(例如添加无意义的空间)并运行,它确实包括在include中进行的更改。如果我更改包含的XSL,则不会发生任何更改。

因此缺少其他任何东西,我们总是可以编写一个Xquery,在对include模板进行更改后,它基本上会触及所有主模板。似乎错误的解决方法。

更新#3

所以我们目前使用的解决方法是我们有一个未使用的&#34;变量&#34;在XSL(版本)中,当我们更新共享模板时,我们执行该查询,该查询基本上更新了该变量中的值。至少它只有一个XQuery,也许我们应该附加一个触发器。

1 个答案:

答案 0 :(得分:1)

XSL转换器的runfile('C:/Users/220/tutorials-master/tensorflowTUT/tf18_CNN2/full_code.py', wdir='C:/Users/220/tutorials-master/tensorflowTUT/tf18_CNN2') Extracting MNIST_data\train-images-idx3-ubyte.gz Extracting MNIST_data\train-labels-idx1-ubyte.gz Extracting MNIST_data\t10k-images-idx3-ubyte.gz Extracting MNIST_data\t10k-labels-idx1-ubyte.gz Traceback (most recent call last): File "<ipython-input-1-b66fc51270cf>", line 1, in <module> runfile('C:/Users/220/tutorials-master/tensorflowTUT/tf18_CNN2/full_code.py', wdir='C:/Users/220/tutorials-master/tensorflowTUT/tf18_CNN2') File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 880, in runfile execfile(filename, namespace) File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile exec(compile(f.read(), filename, 'exec'), namespace) File "C:/Users/220/tutorials-master/tensorflowTUT/tf18_CNN2/full_code.py", line 66, in <module> prediction=tf.nn.softmax(tf.matmul(h_fc1_drop,W_fc2),b_fc2) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 1531, in softmax return _softmax(logits, gen_nn_ops._softmax, dim, name) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 1491, in _softmax logits = _swap_axis(logits, dim, math_ops.subtract(input_rank, 1)) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 1463, in _swap_axis math_ops.range(dim_index), [last_index], File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\ops\math_ops.py", line 1163, in range return gen_math_ops._range(start, limit, delta, name=name) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_math_ops.py", line 1740, in _range delta=delta, name=name) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 768, in apply_op op_def=op_def) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2338, in create_op set_shapes_for_outputs(ret) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 1719, in set_shapes_for_outputs shapes = shape_func(op) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 1669, in call_with_requiring return call_cpp_shape_fn(op, require_shape_fn=True) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\framework\common_shapes.py", line 610, in call_cpp_shape_fn debug_python_shape_fn, require_shape_fn) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\framework\common_shapes.py", line 676, in _call_cpp_shape_fn_impl raise ValueError(err.message) ValueError: Shape must be rank 0 but is rank 1 for 'limit' for 'range' (op: 'Range') with input shapes: [], [10], []. 中有一个设置可以关闭缓存:$exist-db-root$/conf.xml(默认为'是')