首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义使用XQuery连接来自多个XML文件的数据的多个条件?

如何定义使用XQuery连接来自多个XML文件的数据的多个条件?
EN

Stack Overflow用户
提问于 2012-09-17 09:38:09
回答 1查看 167关注 0票数 1

我有两个XML文件,其中包含一个文档的信息。我需要根据这些文件中的信息创建DOT图。

layout.xml

代码语言:javascript
复制
<layout>
<segmentation>
    <layout-unit id="lay-1.01" xref="u-1.01 u-1.02 u-1.03"/>
    <layout-unit id="lay-1.02" xref="u-1.04 u-1.05 u-1.06 u-1.07 u-1.08">
    <layout-unit id="lay-1.03" xref="u-1.09"/>
    <layout-unit id="lay-1.04" xref="u-1.10 u-1.11 u-1.12"/>
    <layout-unit id="lay-1.05" xref="u-1.13 u-1.14 u-1.15 u-1.16"/>
</segmentation>
</layout>

rhetoric.xml

代码语言:javascript
复制
<rhetoric>
<segmentation>
 <segment id="s-1.01" xref="u-1.01"/>
 <segment id="s-1.02" xref="u-1.02"/>
 <segment id="s-1.03" xref="u-1.03"/>
 <segment id="s-1.04" xref="u-1.04"/>
 <segment id="s-1.05" xref="u-1.05"/>
 <segment id="s-1.06" xref="u-1.06"/>
 <segment id="s-1.07" xref="u-1.07"/>
 <segment id="s-1.08" xref="u-1.08"/>
 <segment id="s-1.09" xref="u-1.09"/>
 <segment id="s-1.10" xref="u-1.10"/>
 <segment id="s-1.11" xref="u-1.11"/>
 <segment id="s-1.12" xref="u-1.12"/>
 <segment id="s-1.13" xref="u-1.13"/>
 <mini-segment id="s-1.14" xref="u-1.14"/>
 <mini-segment id="s-1.15" xref="u-1.15"/>
 <mini-segment id="s-1.16" xref="u-1.16"/>
</segmentation>
<rst-structure root="s-1.01">
    <span id="span-1.01" nucleus="s-1.01" satellites="span-1.02" relation="elaboration"><title xref="s-1.09"></title></span>
    <span id="span-1.02" nucleus="s-1.02" satellites="s-1.03" relation="elaboration"/>
    <span id="span-1.03" nucleus="s-1.01" satellites="span-1.04" relation="enablement"/>
    <span id="span-1.04" nucleus="s-1.04" satellites="span-1.05" relation="enablement"/>
    <multi-span id="span-1.05" nuclei="span-1.08 span-1.06" relation="sequence"/>
    <span id="span-1.06" nucleus="s-1.06" satellites="span-1.07" relation="elaboration"></span>
    <multi-span id="span-1.07" nuclei="s-1.07 s-1.08" relation="restatement"></multi-span>
    <span id="span-1.08" nucleus="s-1.05" satellites="s-1.10 span-1.09" relation="elaboration"/>
    <span id="span-1.09" nucleus="s-1.11" satellites="span-1.10" relation="nonvolitional-result"/>
    <span id="span-1.10" nucleus="s-1.12" satellites="span-1.11" relation="elaboration"/>
</rst-structure>
<mini-structure>
    <mini-span id="span-1.11" attribute="s-1.14 s-1.15 s-1.16" attribuend="s-1.13" relation="class-ascription"/>
</mini-structure>
</rhetoric>

为了创建DOT图,我有一个XQuery脚本,它在rhetoric.xml中获取数据,将其转换为DOT,并根据layout.xml将图形排序为子图。

图如下所示。

我使用@xref属性来选择两个文件中的相关数据,如下所示:

代码语言:javascript
复制
declare function local:add-subgraphs($rhetoric, $layout) {
for $layout-unit-id in $layout/segmentation/layout-unit/@id
let $layout-unit-xrefs := tokenize($layout/segmentation/layout-unit[@id = $layout-unit-id]/@xref, " ")

let $rst-id := $rhetoric/segmentation/segment/@id
let $segment := $rhetoric/segmentation/segment[@xref = $layout-unit-xrefs and @id = $rst-id]/@id

然后,我开始通过在修辞/rst-结构下遍历不同的元素来填充DOT图。

代码语言:javascript
复制
let $add-edges-nucleus := for $span-id in $rhetoric/rst-structure/span[@nucleus = $segment]/@id
let $nucleus := tokenize($rhetoric/rst-structure/span[@id = $span-id]/@nucleus, " ")
return concat('"', $nucleus, '" ', $arrow, ' "', $span-id, '"', ';', $newline)

如您所见,$segment变量用于定义特定子图下的跨范围。

这个问题出现在rhetoric.xml中。

代码语言:javascript
复制
<multi-span id="span-1.07" nuclei="s-1.07 s-1.08" relation="restatement"></multi-span>

在这种情况下,我不能使用$segment变量来选择要包含在子图中的span,因为它的结构与span元素不同。

例如,考虑段s-1.07和s-1.08,它们应该包含在lay-1.02项下,而不是在上面的图表中的子图之外。

对于如何定义额外的标准来处理多跨元素,以便将它们置于正确的子图下,有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-12-12 20:17:19

如果我正确理解,您将尝试从与给定span id匹配的span元素或多span元素中选择核或核属性。

以下表达式就是这样做的:

代码语言:javascript
复制
$rhetoric/rst-structure/(span|multi-span)[@id = $span-id]/(@nucleus|@nuclei)

|是XQuery联合运算符。给定XML,这将只匹配span或多span元素(同样适用于核/核属性)。

或者,您可以选择任何具有匹配span-id的元素:

代码语言:javascript
复制
$rhetoric/rst-structure/*[@id = $span-id]/(@nucleus|@nuclei)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12456619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档