lis*_*sak 4 java metadata jackrabbit jcr
我不确定选择哪种方法来存储这些类型的文档,因为关键要求是尽可能多地收集元数据,pdf,ods和MS office文档有各种类型的元数据 ......
因此,如果节点树具有"组/用户/类别/文档"或"类别/组/用户/文档"结构(我不确定哪个更好),则每个文档都必须具有属性"键入"如果它是pdf/doc/odt/ppt等,我每次都要测试它,知道它有哪些元数据类型,对吧?在我看来非常无效..
我个人会尽量避免构造您的层次结构以包含文件类型.这样可行,但似乎是强迫和不自然的.
相反,我会将我的层次结构设计为最适合您的应用程序(例如,如果您有组和用户,那么可能是"组/用户"并将用户的文档存储在相应的用户节点下),并使用属性来捕获文件类型和其他元数据.
如果使用"nt:file"约定将文件上载到JCR,则每个文件将使用类型为"nt:file"的节点(根据文件名称命名)表示.该节点将包含名为"jcr:content"的单个子节点,并且约定是为此子节点使用"nt:resource"节点类型.在JCR 2.0中,"nt:resource"节点类型定义了这些属性定义:
请注意,允许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");
Run Code Online (Sandbox Code Playgroud)
现在,开箱即用的"nt:file"和"nt:resource"节点类型不允许您设置它们未定义的属性.但是您可以使用mixins来解决此限制,并将元数据直接存储在这些节点上.见我详细的解答说明如何做到这一点在早期的其他问题.
| 归档时间: |
|
| 查看次数: |
2178 次 |
| 最近记录: |