嵌套用于表达和相对笛卡尔积

时间:2019-02-12 17:12:49

标签: for-loop xpath cartesian-product

我已经看到可以进行cartesian product in XPath 使用 For Expression 。例如,给定以下输入:

<people>
    <group>
        <her>Alex</her>
        <him>Bert</him>
        <her>Cora</her>
        <him>Drew</him>
    </group>
    <group>
        <her>Edna</her>
        <him>Fred</him>
        <him>Gary</him>
    </group>
    <group>
        <her>Hope</her>
    </group>
</people>

我可以使用以下方法将每个 her 与每个 him 配对:

for $her in /people/group/her, 
    $him in /people/group/him
return ($her/text(), $him/text())

由于两个绑定序列都具有(唯一的)根,所以我认为 以下表达式应与上一个表达式相同:

/people/(for $her in group/her, 
             $him in group/him 
         return ($her/text(), $him/text()))

尽管可以很好地解析该表达式,但是(在我的理解中)在online XPath tester上执行时会产生意外结果。我去过 略过specification 似乎该表达式无效。

现在,我希望能够产生相对于<group>标签的笛卡尔乘积。我的意思是,我想在同一个人中的 him 之间进行笛卡尔乘积运算。如果为表达式嵌套是可行的,则应该是这样的:

/people/group/(for $her in her, 
                   $him in him 
               return ($her/text(), $him/text()))

但是,这仍然没有产生预期的结果。

话虽如此,我有几个问题:

  1. 在路径中嵌套for表达式是否有效?如果是这样,为什么第一和第二个表达式产生不同的结果?

  2. 如果不可能执行1),则产生笛卡尔坐标的标准方法是什么? 相对于<group>标签的产品?

谢谢!

0 个答案:

没有答案