Вложено для выражения и относительных декартовых произведений - PullRequest
0 голосов
/ 12 февраля 2019

Я видел, что можно сделать декартово произведение в XPath , используя для выражения .Например, с учетом следующего ввода:

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

Я могу соединить каждую ее с каждым его , используя:

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

Хотя это выражение хорошо анализируется, оно производит (в моем понимании) неожиданный результат при выполнении на онлайн-тестере XPath .Я просматривал спецификацию и кажется, что это выражение не должно быть действительным.

Теперь я хотел бы иметь возможность производить декартово произведение относительно <group> тег.Я имею в виду, что я хотел бы сделать декартово произведение между ее s и ему s, живущими в той же группе.Если вложенные выражения были жизнеспособными, это должно выглядеть примерно так:

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

Но опять же, это не дает ожидаемого результата.

Сказав это, у меня есть несколько вопросов:

  1. Допустимо ли вкладывать выражение в путь?Если да, то почему первое и второе выражения дают разные результаты?

  2. Если 1) невозможно, каков стандартный способ получения декартового произведения относительно <group>тег?

Спасибо!

...