jcr сортировка и разбиение на страницы по имени, размеру файла и т. д.

Мы используем apache jackrabbit для хранения контента (html, изображения, pdf) следующим образом:

    /folder1 (nt:unstructured)
        /content1(nt:unstructured)
           /file(nt:folder)
               /test.html(nt:file)
               /test.html-contents (nt:resource)

В пользовательском интерфейсе мы хотим отображать весь контент, который можно отсортировать по имени, размеру файла, типу файла и т. д. Чтобы добиться этого, я попробовал XPath для извлечения узлов контента.

  1. Можно ли сортировать по имени узла? Я пробовал что-то вроде

    "/element(*,nt:base) упорядочить по @name по возрастанию"

но это не работает. Он работает с другими свойствами контента, но не с именем. 2. Возможна ли сортировка по размеру файла? Поскольку файлы являются дочерними узлами контента, есть ли способ запросить контент на основе размера файла? (каким-то образом запросить jcr:data).length?)

В качестве обходного пути я извлекаю весь контент через итератор узла и выполняю сортировку/разбивку на страницы в памяти. Я надеялся, что есть лучший способ сделать это.


person sfbay    schedule 14.04.2012    source источник


Ответы (1)


Насколько я знаю, сортировка по имени недоступна для запросов JCR Xpath. Однако с SQL это поддерживается. Это может зависеть от версии Jackrabbit.

С SQL приведенный выше запрос:

select * from nt:base order by jcr:name ASC

Также не поддерживается сортировка по длине ресурса. Возможно, вы захотите установить дополнительное свойство на узле для целей сортировки. Вы можете сделать это при обработке загрузки в Jackrabbit.

В зависимости от количества узлов сортировка в памяти может стать большим бременем.

person Jeroen    schedule 18.04.2012
comment
Я попытался использовать приведенный выше SQL, но он не возвращает узлы в отсортированном порядке. Изменение порядка на ASC DESC не имеет никакого эффекта. - person sfbay; 09.05.2012
comment
Какую реализацию и версию JCR вы используете? Вы используете JBoss Modeshape или Apache Jackrabbit? - person Jeroen; 09.05.2012
comment
Я использую Apache Jackrabbit. Спасибо. - person sfbay; 10.05.2012
comment
А какую версию вы используете? Я использую Jackrabbit 2.2.10, и он работает. - person Jeroen; 10.05.2012
comment
Я использую Jackrabbit 2.4. Позвольте мне попробовать мой пример с 2.2.10. Спасибо - person sfbay; 14.05.2012
comment
Это работает с простой структурой папок, где все узлы находятся на одном уровне. Но это не работает в моем случае. Например. если у меня есть folder1 и aFolder2, которые являются неструктурированными узлами на одном уровне, имеющими дочерние папки и файловые узлы. Но сортировка не возвращает их в отсортированном порядке. Ожидаемый результат (aFolder2, folder1), но фактический результат (folder1, aFolder2). - person sfbay; 15.05.2012