2016-12-10 3 views
1

http : // http://localhost:7040/index.xqy과 같은 http 요청을 MarkLogic 서버로 보내고 있습니다. 요청은 xdmp:get-request-field("q")을 사용하여 쿼리를 변수로 받아들입니다 (예 : $ qtext). search:search($qtext)으로 전달합니다. 이 내용의 404 찾을 수 없음 오류를 반환

<error:xquery-version>1.0-ml</error:xquery-version> <error:message>Invalid coercion</error:message> <error:format-string>XDMP-AS: (err:XPTY0004) $qtext as xs:string+ -- Invalid coercion:() as xs:string+</error:format-string>

내가 잘못 여기서 뭐하는 거지?

답변

3

해결책을 찾았습니다. 기본적으로 $ qtext는 search : search에서 허용되지 않는 빈 sequence()입니다. 내가 한 일은 -
let $query := if(fn:empty($q-text)) then "" else $q-text입니다. 제안으로
당신은 또한이 링크는 http://jaketrent.com/post/unexpected-results-marklogic-xquery-type-coercion/

도움 localhost:7040/index.xqy?q= 처럼 뭔가 요청을 변경할 수 있습니다, 이것은 더 xdmp:get-request-field("q", "")는 XQuery에 간결 디폴트 값을 제공하는 매우 유용한 관용구는 XS의 변환 규칙에 의존

+2

xdmp 허용하는 데 사용할 수있는 기본값으로 빈 문자열을 원하는 두 번째 매개 변수는 필드의 기본값입니다. 당신은'xdmp : get-request-field ("q", "")'를 할 수있다. –

+0

오! nice..thanks dave – basari66

2

: 문자열과 함께 xs : boolean 동작과 함께

$sequence[.] 

'.'을 (를) 사용합니다. 시퀀스 표현식의 술어는 시퀀스의 각 항목을 부울로 평가하므로 true이면 해당 항목이 포함되고 false이면 제외됩니다. xs : string의 부울로의 변환 규칙은 길이가 0이 아닌 문자열의 경우 'true'이고 길이가 0이거나 빈 시퀀스의 경우 'false'입니다. 다음은 xs : string 시퀀스에 대한 자세한 정보입니다. $ 시퀀스에서 $ 항목에 대한

반환 경우 (안 (빈 ($ 항목)) 및 문자열 길이 ($ 항목)> 0)를 다른 $ 항목()

따라서 다음과 같은 패턴은 종종 $ X가 비어 있거나 제로 아이폰에없는 경우, 그렇지 않으면 $ y를을 사용하여, "사용 $의 X 말을 사용했다.

($x , $y)[.][1] 

참고 '[1]'사전 식에 의한 것을 첫 번째 항목을 선택한다. $ x에 기본값을 제공하는 예는

입니다. 10
($x , "Default value")[.][1] 

기능에 대한 결과 또는 인수에 대한 같은 :

cts:search(doc() , (get-the-search-string() , "default")[.][1]) 

곳 '수 - 더 - 검색 문자열을()'빈 시퀀스 또는 제로 길이 문자열이나 하나의 시퀀스를 반환 할 수 있습니다 또는 더 많은 문자열. 얻을 요청 필드를()도됩니다 : 당신의 예에서

은 그렇게 약간의 변형이가 ""하지만 A는()

let $query := ($q-text,"")[1] 
+0

확실히 간결합니다. 그리고 그것은 정확 해 보입니다. 그러나 가독성/유지 보수성에 대한 우려는 있습니까? –