Сохранение различных типов документов (ods, ms office, pdf) в хранилище Jackrabbit - PullRequest
4 голосов
/ 02 марта 2011

Я не уверен, какой подход выбрать для хранения документов такого типа, потому что ключевое требование состоит в том, чтобы собрать как можно больше метаданных, а в документах pdf, ods и MS Office есть различные типы метаданных . ..

Так что если дерево узлов имеет структуру «группа / пользователь / категория / документ» или «категория / группа / пользователь / документ» (я не уверен, что лучше), каждый документ должен иметь свойство "type", если это pdf / doc / odt / ppt и т. д., и мне придется каждый раз проверять это, чтобы знать, какие типы метаданных у него есть, верно? Мне кажется очень неэффективным ..

1 Ответ

9 голосов
/ 02 марта 2011

Лично я бы постарался избежать структурирования вашей иерархии для включения типа файла.Это бы сработало, но кажется вынужденным и неестественным.

Вместо этого я бы разработал свою иерархию, которая будет наиболее естественной для вашего приложения (например, если у вас есть группы и пользователи, тогда, возможно, «группа / пользователь» ихранить документы пользователя в соответствующем пользовательском узле) и использовать свойства для захвата типа файла и дополнительных метаданных.

Если вы загрузите файл в JCR, используя соглашение «nt: file», каждый файл будет представленс узлом (названным в соответствии с именем файла) с типом "nt: file".Тогда этот узел будет содержать один дочерний узел с именем «jcr: content», и принято использовать тип узла «nt: resource» для этого дочернего узла.В JCR 2.0 тип узла «nt: resource» определяет следующие определения свойств:

  • jcr: data (BINARY) обязательный
  • jcr: lastModified (DATE) автоматически создается
  • jcr: lastModifiedBy (STRING) создан автоматически
  • jcr: mimeType (STRING) защищен?
  • jcr: кодировка (STRING) защищена?

Обратите внимание, что реализации JCRразрешено рассматривать «jcr: mimeType» и «jcr: encoding» как защищенные, но ни Jackrabbit , ни ModeShape не делают этого (то есть вы можете и должны вручную установить эти свойства).

Вот фрагмент кода для загрузки файла и установки свойства «jcr: mimeType»:

// Get an input stream for the file ...
File file = ...
InputStream stream = new BufferedInputStream(new FileInputStream(file));

Node folder = session.getNode("/absolute/path/to/folder/node");
Node file = folder.addNode("Article.pdf","nt:file");
Node content = file.addNode("jcr:content","nt:resource");
Binary binary = session.getValueFactory().createBinary(stream);
content.setProperty("jcr:data",binary);
content.setProperty("jcr:mimeType","application/pdf");

Теперь из коробки «nt: file» и «nt:Ресурсные типы узлов не позволяют вам устанавливать свойства, которые они не определяют.Но вы можете использовать миксины, чтобы обойти это ограничение и хранить метаданные непосредственно на этих узлах.См. Мой подробный ответ , описывающий, как это сделать ранее другой вопрос .

...