2014-11-06 5 views
1

XML 파일에 특정 패턴이 있는지 여부를 확인하는 데 XQuery를 사용할 수있는 방법/방법에 대해 생각하고 있습니다.XML에서 정의 된 시퀀스 패턴 찾기

: 프로세스 흐름 (StartEvent> UserTask> AutoTask> EndEvent)을 나타내는 (단순화 된) XML을 생각해보십시오.

<process> 
<startEvent id="start1"> 
    <outgoing>flow1</outgoing> 
</startEvent> 

<userTask id="user1"> 
    <incoming>flow1</incoming> 
    <outgoing>flow2</outgoing> 
</userTask> 

<autoTask id="auto1"> 
    <incoming>flow2</incoming> 
    <outgoing>flow3</outgoing> 
</autoTask> 

<endEvent id="end1"> 
    <incoming>flow3</incoming> 
</endEvent> 
<flow id="flow1" source="start1" target="user1"/> 
<flow id="flow2" source="user1" target="auto1"/> 
<flow id="flow3" source="auto1" target="end1"/> 
</process> 

는 지금은 파일에있는 곳이 바로 유형의 요소 "autoTask" 뒤에 유형 "userTask"의 요소인지 여부를 확인합니다. 이 순서는 들어오고 나가는 흐름 정의를 따라 가면서 확인해야하며 문서의 순서에서 파생 될 수는 없습니다.

xquery/xpath를 사용하여이 작업을 수행 할 수있는 방법이 있습니까?

미리 감사드립니다. 정보로서,

/process/flow[@source=/process/userTask/@id and @target=/process/autoTask/@id] 

을 또는 : 자손없이

//flow[@source=//userTask/@id and @target=//autoTask/@id] 

또는 :

+0

을 정말 당신의 흐름 개념을하지 않는 모든 사용자 작업을 나열합니다. 어떻게 당신의 순서입니다 이 예에서 정의 된 flow1, flow2, flow3는 어떻게 상호 연결됩니까? 그렇다면 시작 속성으로 인해 start1이라는 id를 가진 요소에서 flow1이 시작됩니다. 그러나 그곳은 어디로 갈지를 결정합니다 - 단순히 @target을 사용합니다 (따라서 "flow"에는 시작과 끝은 단지 두 지점입니까?) 그렇다면 실제로 들어오는 요소와 나가는 요소는 어떤 정보를 전달합니까? – dirkk

+0

@dirkk : 흐름 요소와 작업 내에서 소스/대상 지정 gh 수신/발신 요소는 확실히 정보의 복제입니다. 그러나 BPMN 사양에서 요구하는 구조이므로 OP의 잘못은 아닙니다. – joergl

+0

@joergl 나는 OP를 비판하지 않았다. 솔직히 여기서는 흐름 구문을 이해하지 못했다. 이 BPMN 사양을 모르겠습니다. – dirkk

답변

1

는 다음의 XPath 1.0 쿼리는 소스가 사용자의 작업이며 대상 자동 작업있는 모든 흐름을 나열 XML에서는 중복되어 있으므로 다른 방법으로 요청할 수 있습니다.

//userTask[outgoing=//autoTask/incoming] 

그것은 그의 나가는 흐름을 다시 일부 자동 작업 (들어오는되어, 당신은 /process///을 대체 할 수 있습니다.

+0

고마워요! 나는 아이디어를 얻었고 나의 (실제) 문제를 해결하기 위해 그것을 적용 할 수 있었다. – Christian

+1

@Christian : 당신의 감사를 표하는 것은 단지 대답을 받아들이는 것입니다. – choroba