有人可以告诉我,在以下情况下如何进行?
接收文件(MS文件,ODS,PDF)
通过Apache Tika提取公元核心元数据+通过jackrabbit-content-extractors提取内容
使用Jackrabbit将文档(内容)及其元数据存储到存储库中 ?
检索文档+元数据
我对第3点和第4点感兴趣…
详细信息:该应用程序正在以交互方式处理文档(一些分析-语言检测,单词计数等。+收集尽可能多的详细信息-
Dublin核心+解析内容/事件处理),以便将处理结果返回给用户,然后将其返回给用户。提取的内容和元数据(提取的和自定义的用户元数据)存储到JCR存储库中
感谢任何帮助,谢谢
对于JCR 2.0,上传文件基本上与对于JCR 1.0而言是相同的。但是,JCR 2.0添加了一些有用的附加内置属性定义。
“ nt:file”节点类型旨在表示文件,并且在JCR 2.0中具有两个内置属性定义(这两个属性定义都是在创建节点时由存储库自动创建的):
并定义一个名为“ jcr:content”的子级。该“
jcr:content”节点可以是任何节点类型,但是通常来说,与内容本身有关的所有信息都存储在此子节点上。事实上的标准是使用“
nt:resource”节点类型,该节点类型定义了以下属性:
注意,在JCR 2.0中添加了“ jcr:mimeType”和“ jcr:encoding”。
特别是,“ jcr:mimeType”属性的目的是完全按照您的要求执行-捕获内容的“类型”。但是,“ jcr:mimeType”和“
jcr:encoding”属性定义可以(通过JCR实现)定义为受保护(意味着JCR实现自动设置它们)-如果是这种情况,将不允许您手动进行设置这些属性。我相信Jackrabbit和ModeShape不会将它们视为受保护的对象。
以下是一些代码,显示了如何使用这些内置节点类型将文件上传到JCR 2.0存储库:
// 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);
而且,如果JCR实现未将“ jcr:mimeType”属性视为受保护的对象(即Jackrabbit和ModeShape),则必须手动设置此属性:
content.setProperty("jcr:mimeType","application/pdf");
元数据可以很容易地存储在“ nt:file”和“ jcr:content”节点上,但是现成的“ nt:file”和“
nt:resource”节点类型不允许额外的属性。因此,在添加其他属性之前,首先需要添加一个mixin(或多个mixin),这些mixin具有要存储的各种属性的属性定义。您甚至可以定义允许任何属性的混合。这是一个定义此类混合的CND文件:
<custom = 'http://example.com/mydomain'>
[custom:extensible] mixin
- * (undefined) multiple
- * (undefined)
注册此节点类型定义后,可以在节点上使用它:
content.addMixin("custom:extensible");
content.setProperty("anyProp","some value");
content.setProperty("custom:otherProp","some other value");
您还可以定义并使用允许所有Dublin Core元素使用的mixin :
<dc = 'http://purl.org/dc/elements/1.1/'>
[dc:metadata] mixin
- dc:contributor (STRING)
- dc:coverage (STRING)
- dc:creator (STRING)
- dc:date (DATE)
- dc:description (STRING)
- dc:format (STRING)
- dc:identifier (STRING)
- dc:language (STRING)
- dc:publisher (STRING)
- dc:relation (STRING)
- dc:right (STRING)
- dc:source (STRING)
- dc:subject (STRING)
- dc:title (STRING)
- dc:type (STRING)
所有这些属性都是可选的,并且该mixin不允许使用任何名称或类型的属性。我还没有真正解决“
dc:metadata”混合问题,因为其中一些已经用内置属性表示(例如,“ jcr:createBy”,“ jcr:lastModifiedBy”,“
jcr:created” ,“ jcr:lastModified”,“ jcr:mimeType”),其中一些可能与内容更相关,而其他一些与文件更相关。
您当然可以定义其他更适合您的元数据需求的混合,并在需要时使用继承。但是要谨慎使用继承与mixin-
由于JCR允许一个节点使用多个mixin,因此通常最好将mixin设计为范围狭窄且面向方面的(例如,“ ex:taggable”,“
ex:describable”等)。然后只需根据需要将适当的mixin应用于节点。
(甚至更复杂,甚至有可能定义一个混合,以便在“ nt:file”节点下允许更多子节点,并在其中存储一些元数据。)
Mixins非常棒,为您的JCR内容提供了极大的灵活性和力量。
哦,当您创建了所有想要的节点后,请确保保存会话:
session.save();
我正在寻找一个工具(最好是开源的)来与JackRabbit合作。例如,我想备份/恢复存储库的一些分支。有什么建议吗?
我希望使用枚举将值映射到数据库表行: 我想使用status=active从FE中搜索和获取状态,但只存储到数据库行字段中的符号A。 我如何将枚举键A存储到数据库中?
告诉我如何在Azure存储帐户中存储PostgreSQL数据库数据。PostgreSQL部署到Azure容器实例。当我重新启动Azure容器实例时,所有数据都会消失。Dockerfile 来自Timescale/Timescaledb:Latest-PG12 az容器创建--resource-group test-env--name test-env--image test-env.azureca
问题内容: 在MySQL数据库中用PHP存储IP的最佳实践是什么?有一个名为ip2long的函数-但这仅适用于IPv4。但是IPv6呢? 我知道一个用于IPv6 IP的php函数,但是在Windows上的PHP <Version 5.3上不起作用 问题答案: 可以将点分十进制IPv4地址转换为整数,最大大小为32位。IPv6地址是128位。由于128位不适合PHP int,因此在PHP中使用它会很
我创建了一个TextView,它以多行显示值 ,我希望将该值保留在SQLite数据库中。这是我使用的代码: 问题是当我保存值时,整个值被插入到一个单元格中。我希望每行的值分开,然后插入到每行的单个单元格中,尽管我使用扫描器方法插入数据,但它不起作用。那有什么办法吗?
我试图将一个Azure Blob存储容器挂载到一个DataBricks实例上,虽然挂载确实有效,但它似乎没有使用存储容器。 我在这里漏掉了什么?