繁体   English   中英

有没有办法在 XSLT 样式表中有一个 Xquery,它将在转换时执行?

[英]Is there a way to have an Xquery in an XSLT stylesheet which will be executed upon transformation?

我有一个 XML 文件,我一直在尝试同时使用 xQuery 和 XSLT 对其进行转换。

该文档基本上根据 TEI 标准对两种不同类型的文本进行编码。 第一部分是我写的关于史诗的文献学研究,第二部分是这首诗的学术版。

<text>
<front><!-- chapters of the study --></front>
<body>
<lg n="1">
<l n="1.a">first line of the poem</l>
<l n="1.a">second line with <distinct>interesting stuff</distinct></l></lg>
<!-- rest of the poem-->
</body></text>

我的主要目标是使用 XSLT 将其转换为格式良好的 html 文档,并且在大多数情况下它可以工作。 现在,该研究讨论了该版本的数据(“这个有趣的东西经常出现在我们的诗中,如下表所示”)。 由于标记了所有“有趣的东西”(参见上面的示例),我可以使用 HTML 和 xQuery 的组合轻松创建这些表:

<table>
<tr>
<td>Verse Number</td>
<td>Interesting Stuff</td>
<tr>
for $case in doc("mydocument.xml")//distinct
return
<tr>
<td>{data($case/ancestor::l/@n)}</td>
<td>$case</td></tr></table>

目前最简单的方法是更改 xQuery,使其创建符合 TEI 的 xml 表并将其手动复制到文档中。 然后,XSLT 将顺利运行,就像我拥有的少数 static 表一样。 但是我的大多数表格应该是动态的,如果我在版本中更改某些内容,我希望数字会改变。 每次新阅读器在浏览器中打开格式化文本时都应执行此操作(即,每次执行 XSLT 转换时)。

我尝试组合代码如下:

<xsl:template match="table[type='query']">
{ (: the xQuery-html instructions from above go here :) }
</xsl template>

我在正确的位置创建了一个表,但在它之前和单元格中它只是重复 xQuery 指令。 我一直在寻找类似的问题,但我只找到了相反的过程,即如何使用 xQuery 来创建 XSLT(例如: 从 XSLT 调用 XQuery,构建 Z139E293A7146F23CD6 对我的问题有帮助吗?

有没有办法结合这两个代码?

在此先感谢您的帮助!

有多种方法可以组合 XSLT 和 XQuery。 您可以在同一管道中拥有 XSLT 任务和 XQuery 任务,或者您可以从 XSLT 调用 XQuery 函数(例如在 Z139E293A7146F23CD2437C6BE049EBF26 中使用 load-xquery-module())。 但是对于您所描述的情况,最简单的方法是将 FLWOR 表达式替换为等效的 xsl:for each:

<xsl:for-each select='doc("mydocument.xml")//distinct'>
  <xsl:variable name="case" select="."/>
  <tr>
    <td>{$case/ancestor::l/@n}</td>
    <td>{$case}</td>
  </tr>
</xsl:for-each>

注意:XSLT 3.0 允许大括号语法(您需要指定 expand-text="yes"),但语义与 XQuery 略有不同——它的意思是“value-of”而不是“copy-of”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM