Html 有没有一种方法可以在XSLT样式表中使用Xquery,并在转换时执行?

Html 有没有一种方法可以在XSLT样式表中使用Xquery,并在转换时执行?,html,xml,xslt,xquery,tei,Html,Xml,Xslt,Xquery,Tei,我有一个XML文件,我一直在尝试同时用xQuery和XSLT转换它 该文档基本上根据TEI标准对两种不同类型的文本进行编码。第一部分是我写的关于一首史诗的文献学研究,第二部分是这首诗的学术版 <text> <front><!-- chapters of the study --></front> <body> <lg n="1"> <l n="1.a">first line

我有一个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>

诗数
有趣的东西
对于doc中的$case(“mydocument.xml”)//distinct
返回
{data($case/祖先::l/@n)}
$case
目前最简单的方法是更改xQuery,以便它创建符合TEI的xml表,并手动将其复制到文档中。然后,XSLT将顺利工作,就像我拥有的几个静态表一样。但我的大多数表格都应该是动态的,如果我在版本中做了一些更改,我希望这些数字也会更改。每次新阅读器在浏览器中打开格式化文本时(即每次执行XSLT转换时),都应执行此操作

我尝试将代码组合如下:

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

{(:上面的xQuery html指令转到此处:)}
我在正确的位置创建了一个表,但在它之前以及在单元格中,它只是重复xQuery指令。我一直在寻找类似的问题,但我只发现了相反的过程,即如何使用xQuery创建XSLT(例如:),这对我的问题没有帮助

有没有办法把这两种代码结合起来


提前感谢您的帮助

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

<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>

{$case/祖先::l/@n}
{$case}

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

上下文不清楚,XSLT和/或XQuery使用哪个处理器?为什么需要混合使用XSLT和XQuery?如果你真的想这么做,你有没有研究过XProc?你展示的示例是“HTML和xQuery的组合”,在doc中的$case(“mydocument.xml”)//distinct return似乎没有大括号,当然也不清楚为什么不能在纯XSLT和纯XSLT中使用
。是的,对不起,中途在使用“.”和使用“$case”之间切换,最后两者混合使用!非常感谢你!最初制作xQuery表时比较容易,我制作了很多表,但我没有想到我可以“翻译”它。我刚刚在一些更复杂的表上测试了每个方法的
,效果非常好。