2012-08-10 5 views
0

시퀀스에서 얻은 인수를 사용하여 xquery 함수를 호출하는 일반적인 방법이 있습니까?시퀀스의 인수가있는 함수 호출?

let $dateandtime := (xs:date('2006-08-15'),xs:time('12:30:45-05:00')) 
return fn:dateTime($dateandtime[1], $dateandtime[2]) 

을하지만 순서를 공급 명시 적으로 지정하는 모든 인수 및 단지없이 fn:dateTime를 호출 할 수있는 방법이있다 :

예를 들어, 나는이 작업을 수행 할 수 있습니까? 여기

내가 다른 언어로 이러한 목표를 달성 할 방법의 예입니다 (. 난이 시퀀스를 중첩 할 수 없기 때문에 제한된 유틸리티를 가지고 실현) :

  • 파이썬 : functionname(*args)
  • 자바 스크립트 : functionname.apply(null, args)
  • PHP : call_user_func_array('functionname', $args)

답변

2

현재 XQuery에서이를 수행 할 방법이 없습니다. Java와 같은 다른 유형화 된 언어와 유사하게, 함수 시그니처의 할당은 대개 컴파일 시간에 발생합니다. 쿼리를 평가하기 전에 시퀀스의 항목 수가 알려지지 않을 수 있으므로 정확한 함수 서명의 정적 선택은 대부분의 경우 실패합니다 (일반적인 참고 사항 : 함수에는 여러 함수 시그니처가있을 수 있으며 각 시그니처에는 인수의 다른 수).

그러나 Java는 리플렉션 패키지를 제공하여 런타임에 동적으로 액세스하고 함수를 호출합니다. XQuery 3.0의 새로운 고차원 기능을 사용하여 또 다른 apply($f as function(*), $s as item()*) 기능을 도입 할 수 있습니다. 도움이된다고 생각한다면 W3 Issue Tracker은 이러한 기능을 요청하는 데 가장 적합한 플랫폼이 될 수 있습니다.

+0

함수 서명 조회가 동적 함수 호출과 상호 작용하는 방법은 명확하지 않습니다. 좋은 지적. –

관련 문제