2017-03-06 4 views
0

xq 파일을 호출하여 간단하게 실행할 수있는 라이브러리 모듈을 작성하고 싶습니다. 그러나 이것들은 또한 테스트하고 싶은 기능을 포함하고 있습니다. 이 some.xql 식으로 뭔가 : 그것은 내에서 어떤 기능 : I 전체 모듈 또는 없음을 테스트 할 수 없습니다 그러나exist-db의 라이브러리 모듈에 xqsuite 사용

xquery version "3.0"; 
import module namespace xmldb="http://exist-db.org/xquery/xmldb"; 
declare namespace no="http://none"; 
declare namespace test="http://exist-db.org/xquery/xqsuite"; 

declare 
    %test:arg('1') 
    %test:assertEquals('2') 
    function no:something ($num as xs:string?) as xs:string { 
    return 
      $num + 1 
}; 

xmldb:store('/db/data/', 'two.xml',<root>{no:something(1)}</root>) 

. 내가 xpty00004 오류가 계속 래퍼 함수에서 테스트 스위트를 실행하려고 할 때 그러나

import module namespace no="http://none" at "some.xql";

, : 내가 사용하여 다른 맥락에서 기능에 접근 아무런 문제가 없을

xquery version "3.0"; 
import module namespace test="http://exist-db.org/xquery/xqsuite" at "resource:org/exist/xquery/lib/xqsuite/xqsuite.xql"; 
test:suite(
    inspect:module-functions(xs:anyURI("some.xql")) 
) 

나는 다른 시도 no:some 기능에 도달하는 유사하지만 잠금이 없습니다. xqsuite를 잘못 사용하여 정말 나쁜 쿼리를 작성하고 있습니까? 아니면이 버그입니까? 귀하의 some.xql

답변

2

메인 모듈 당신 수 라이브러리 모듈 만 가져 오기 및 시험 기능을합니다.

대신 no.xqm 같은 라이브러리 모듈로 리팩토링을 고려해보십시오

xquery version "3.0"; 

module namespace no="http://none"; 

declare namespace test="http://exist-db.org/xquery/xqsuite"; 

declare 
    %test:arg('1') 
    %test:assertEquals('2') 
function no:something ($num as xs:string?) as xs:string { 
    $num + 1 
}; 

앱 메인 모듈 some.xq :

xquery version "3.0"; 

import module namespace no="http://none" at "no.xqm"; 

xmldb:store('/db/data/', 'two.xml',<root>{no:something(1)}</root> 

테스트 러너 메인 모듈 tests.xq :

xquery version "3.0"; 
import module namespace test="http://exist-db.org/xquery/xqsuite" 
at "resource:org/exist/xquery/lib/xqsuite/xqsuite.xql"; 

test:suite(
    inspect:module-functions(xs:anyURI("no.xqm")) 
) 
+0

내가 두려워했다 이것이 사실입니다. 그러나 지금 나는 알고있다. 자세한 답변을 주셔서 감사합니다. – duncdrum