0

Xqueryに問題があります

私はこのようなXML文書を持っています

<?xml version="1.0" encoding="UTF-8"?>
  <bpmn2:definitions .....">
  <bpmn2:process id="process_3" drools:version="1" drools:packageName="defaultPackage"drools:adHoc="false" name="Default Process" isExecutable="true">
    <bpmn2:startEvent id="StartEvent_1" name="">
      <bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
    </bpmn2:startEvent>
    <bpmn2:endEvent id="EndEvent_1" name="">
      <bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:sequenceFlow id="SequenceFlow_3" name="Sequence Flow 3" sourceRef="StartEvent_1" targetRef="ManualTask_1"/>
    <bpmn2:manualTask id="ManualTask_1" timeToComplete="300" name="Manual Task 1">
      <bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
      <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
    </bpmn2:manualTask>
    <bpmn2:manualTask id="ManualTask_2" timeToComplete="200" name="Manual Task 2">
        <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
        <bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
    </bpmn2:manualTask>
    <bpmn2:sequenceFlow id="SequenceFlow_1" name="Sequence Flow 1" sourceRef="ManualTask_1" targetRef="ManualTask_2"/>
       <bpmn2:sequenceFlow id="SequenceFlow_4" name="Sequence Flow 4" sourceRef="ManualTask_2" targetRef="EndEvent_1"/>
  </bpmn2:process>
</bpmn2:definitions>

次の要素を取得したい(最後の要素からの発信シーケンスフローは着信要素(sequenceflow)である必要があります)(したがって、manualTask​​またはEndEvent(または単純化された何か異なるものとして))(これらの要素にはすべてタグが入っています)

declare namespace bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL";

let $elements := doc('file:///C:\..\process3.txt')/bpmn2:definitions/bpmn2:process,
$e := $elements/bpmn2:startEvent
return  $elements[//bpmn2:incoming/node() = $e//bpmn2:outgoing]

これは完全な $elements だけを BaseX に返します..そして現時点では難しいと思います..

4

1 に答える 1

0

現在、 $elements 変数には、プロセス要素という 1 つの要素だけが含まれています。必要なのは、その要素のすべての子を含めることです。したがって、それは bpmn2:process/* である必要があります

次に、$e 変数も少し変更する必要があり (以下を参照)、最終行の // は .// にする必要があります。これは、$elements 変数のコンテキストで評価する必要があるためです。

最終的なクエリは次のようになります。

declare namespace bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL";

let $elements := doc('file:///C:\..\process3.txt')/bpmn2:definitions/bpmn2:process/*,
$e := $elements[self::bpmn2:startEvent]
return  $elements[.//bpmn2:incoming/node() = $e//bpmn2:outgoing]
于 2013-11-01T13:09:24.910 に答える