2
XQuery에서 즉시 사용할 수있는 자연 정렬 구현을 찾지 못했지만 한 번 생각했습니다. 사용 재료는 참조로 here을 발견, 이것이 내가 생각 해낸 것입니다 :MarkLogic에서 XQuery로 자연 정렬 구현
xquery version "1.0-ml";
declare namespace xf = "http://www.w3.org/2005/xpath-functions";
declare namespace nat-sort = "https://github.com/JKesMc9tqIQe9M/xquery-natural-sort";
import module namespace functx = "http://www.functx.com" at "/MarkLogic/functx/functx-1.0-nodoc-2007-01.xqy";
declare %public function nat-sort:nat-sort($s as item()*) as item()* {
let $pad-length := fn:max($s ! fn:analyze-string(., '([0-9]+)')/xf:match ! fn:string-length(.)) + 1
for $item in $s
let $sort-key := fn:string-join(
let $decomposed := fn:analyze-string($item, '([0-9]+)')/xf:*
for $i in $decomposed
return
if ($i/self::xf:match)
then fn:string(functx:pad-integer-to-length(fn:number($i), $pad-length))
else fn:string($i),
'')
order by $sort-key
return $item
};
적어도 내가 제작 한 몇 가지 테스트 케이스와 함께 작동하는 것 같다
하지만, (1)이 있는지 궁금하네요 더 간결한 방법 (2) 거기에 기존/표준 방법은 내가 (3)이 방법에 명백한 문제가있다. 감사!
감사합니다. FWIW는 'order by'의 관련 데이터 정렬을 사용하여 MarkLogic에서이를 수행하는 방법입니다. $ i에 대해 ('1', '10', '2', '11') $ i 데이터 정렬에 의한 정렬 "http : //marklogic.com/collation/ko/MO " return $ i' – JKesMc9tqIQe9M