oracle元数据到ods,将元数据存储到Jackrabbit存储库中
小編典典
對(duì)于JCR 2.0,上傳文件基本上與對(duì)于JCR 1.0而言是相同的。但是,JCR 2.0添加了一些有用的附加內(nèi)置屬性定義。
“ nt:file”節(jié)點(diǎn)類型旨在表示文件,并且在JCR 2.0中具有兩個(gè)內(nèi)置屬性定義(這兩個(gè)屬性定義都是在創(chuàng)建節(jié)點(diǎn)時(shí)由存儲(chǔ)庫(kù)自動(dòng)創(chuàng)建的):
jcr:已創(chuàng)建(DATE)
jcr:createdBy(STRING)
并定義一個(gè)名為“ jcr:content”的子級(jí)。該“
jcr:content”節(jié)點(diǎn)可以是任何節(jié)點(diǎn)類型,但是通常來說,與內(nèi)容本身有關(guān)的所有信息都存儲(chǔ)在此子節(jié)點(diǎn)上。事實(shí)上的標(biāo)準(zhǔn)是使用“
nt:resource”節(jié)點(diǎn)類型,該節(jié)點(diǎn)類型定義了以下屬性:
jcr:data(BINARY)必選
jcr:lastModified(DATE)自動(dòng)創(chuàng)建
jcr:lastModifiedBy(STRING)自動(dòng)創(chuàng)建
jcr:mimeType(STRING)受保護(hù)嗎?
jcr:encoding(STRING)受保護(hù)嗎?
注意,在JCR 2.0中添加了“ jcr:mimeType”和“ jcr:encoding”。
特別是,“ jcr:mimeType”屬性的目的是完全按照您的要求執(zhí)行-捕獲內(nèi)容的“類型”。但是,“ jcr:mimeType”和“
jcr:encoding”屬性定義可以(通過JCR實(shí)現(xiàn))定義為受保護(hù)(意味著JCR實(shí)現(xiàn)自動(dòng)設(shè)置它們)-如果是這種情況,將不允許您手動(dòng)進(jìn)行設(shè)置這些屬性。我相信Jackrabbit和ModeShape不會(huì)將它們視為受保護(hù)的對(duì)象。
以下是一些代碼,顯示了如何使用這些內(nèi)置節(jié)點(diǎn)類型將文件上傳到JCR 2.0存儲(chǔ)庫(kù):
// 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實(shí)現(xiàn)未將“ jcr:mimeType”屬性視為受保護(hù)的對(duì)象(即Jackrabbit和ModeShape),則必須手動(dòng)設(shè)置此屬性:
content.setProperty("jcr:mimeType","application/pdf");
元數(shù)據(jù)可以很容易地存儲(chǔ)在“ nt:file”和“ jcr:content”節(jié)點(diǎn)上,但是現(xiàn)成的“ nt:file”和“
nt:resource”節(jié)點(diǎn)類型不允許額外的屬性。因此,在添加其他屬性之前,首先需要添加一個(gè)mixin(或多個(gè)mixin),這些mixin具有要存儲(chǔ)的各種屬性的屬性定義。您甚至可以定義允許任何屬性的混合。這是一個(gè)定義此類混合的CND文件:
[custom:extensible] mixin
- * (undefined) multiple
- * (undefined)
注冊(cè)此節(jié)點(diǎn)類型定義后,可以在節(jié)點(diǎn)上使用它:
content.addMixin("custom:extensible");
content.setProperty("anyProp","some value");
content.setProperty("custom:otherProp","some other value");
您還可以定義并使用允許所有Dublin Core元素使用的mixin :
[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”混合問題,因?yàn)槠渲幸恍┮呀?jīng)用內(nèi)置屬性表示(例如,“ jcr:createBy”,“ jcr:lastModifiedBy”,“
jcr:created” ,“ jcr:lastModified”,“ jcr:mimeType”),其中一些可能與內(nèi)容更相關(guān),而其他一些與文件更相關(guān)。
您當(dāng)然可以定義其他更適合您的元數(shù)據(jù)需求的混合,并在需要時(shí)使用繼承。但是要謹(jǐn)慎使用繼承與mixin-
由于JCR允許一個(gè)節(jié)點(diǎn)使用多個(gè)mixin,因此通常最好將mixin設(shè)計(jì)為范圍狹窄且面向方面的(例如,“ ex:taggable”,“
ex:describable”等)。然后只需根據(jù)需要將適當(dāng)?shù)膍ixin應(yīng)用于節(jié)點(diǎn)。
(甚至更復(fù)雜,甚至有可能定義一個(gè)混合,以便在“ nt:file”節(jié)點(diǎn)下允許更多子節(jié)點(diǎn),并在其中存儲(chǔ)一些元數(shù)據(jù)。)
Mixins非常棒,為您的JCR內(nèi)容提供了極大的靈活性和力量。
哦,當(dāng)您創(chuàng)建了所有想要的節(jié)點(diǎn)后,請(qǐng)確保保存會(huì)話:
session.save();
2020-12-03
總結(jié)
以上是生活随笔為你收集整理的oracle元数据到ods,将元数据存储到Jackrabbit存储库中的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: d630无电池升级bios_太重要,你想
- 下一篇: java多线程多态_Java学习之多线程