我想不通如何将几个RDF N3格式的String('s)写入我的芝麻仓库。我有以下ArrayList<String>,其中每个索引包含以下文本的一行(一行以;结尾):

@prefix gstruct: <http://cs.lth.se/ontologies/gstruct.owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

gstruct:sentence_1  rdf:type    gstruct:Sentence ;
    gstruct:inx 1 ;
    gstruct:words
        [gstruct:id 1 ; gstruct:form "The" ; gstruct:lemma "the" ; gstruct:pos "DT" ; gstruct:head "4" ; gstruct:deprel "NMOD"],
        [gstruct:id 2 ; gstruct:form "Series" ; gstruct:lemma "series" ; gstruct:pos "NNP" ; gstruct:head "3" ; gstruct:deprel "NMOD"],
        [gstruct:id 3 ; gstruct:form "800" ; gstruct:lemma "800" ; gstruct:pos "CD" ; gstruct:head "4" ; gstruct:deprel "NMOD"],
        [gstruct:id 4 ; gstruct:form "Terminator" ; gstruct:lemma "terminator" ; gstruct:pos "NNP" ; gstruct:head "5" ; gstruct:deprel "SBJ"],
        [gstruct:id 5 ; gstruct:form "is" ; gstruct:lemma "be" ; gstruct:pos "VBZ" ; gstruct:head "0" ; gstruct:deprel "ROOT"],
        [gstruct:id 6 ; gstruct:form "a" ; gstruct:lemma "a" ; gstruct:pos "DT" ; gstruct:head "7" ; gstruct:deprel "NMOD"],
        [gstruct:id 7 ; gstruct:form "type" ; gstruct:lemma "type" ; gstruct:pos "NN" ; gstruct:head "5" ; gstruct:deprel "PRD"],
        [gstruct:id 8 ; gstruct:form "of" ; gstruct:lemma "of" ; gstruct:pos "IN" ; gstruct:head "7" ; gstruct:deprel "NMOD"],
        [gstruct:id 9 ; gstruct:form "Terminator" ; gstruct:lemma "terminator" ; gstruct:pos "NN" ; gstruct:head "10" ; gstruct:deprel "NMOD"],
        [gstruct:id 10 ; gstruct:form "mass" ; gstruct:lemma "mass" ; gstruct:pos "NN" ; gstruct:head "8" ; gstruct:deprel "PMOD"],
        [gstruct:id 11 ; gstruct:form "produced" ; gstruct:lemma "produce" ; gstruct:pos "VBN" ; gstruct:head "7" ; gstruct:deprel "APPO"],
        [gstruct:id 12 ; gstruct:form "by" ; gstruct:lemma "by" ; gstruct:pos "IN" ; gstruct:head "11" ; gstruct:deprel "LGS"],
        [gstruct:id 13 ; gstruct:form "Skynet" ; gstruct:lemma "skynet" ; gstruct:pos "NNP" ; gstruct:head "12" ; gstruct:deprel "PMOD"],
        [gstruct:id 14 ; gstruct:form "." ; gstruct:lemma "." ; gstruct:pos "." ; gstruct:head "5" ; gstruct:deprel "P"];
    gstruct:predicates
        [gstruct:id 7 ; gstruct:predsense "type.01" ; gstruct:args
            [gstruct:id 7 ;  gstruct:argtype "A2"],
            [gstruct:id 8 ;  gstruct:argtype "A1"]],
        [gstruct:id 10 ; gstruct:predsense "mass.02" ; gstruct:args
            [gstruct:id 9 ;  gstruct:argtype "A1"]],
        [gstruct:id 11 ; gstruct:predsense "produce.01" ; gstruct:args
            [gstruct:id 7 ;  gstruct:argtype "A1"],
            [gstruct:id 12 ;  gstruct:argtype "A0"]].


我想使用RepositoryConnection add方法添加此内容,并且还以URL形式添加URI和上下文。我设法弄清楚如何创建URI,但是我却无法弄清楚我上面提到的内容以及如何使我的URL是Resource对象的字符串。

最佳答案

我不确定为什么将它作为List并将每行作为单独的条目使用,因为这是处理它的一种相当尴尬的方式。一方面,正如约书亚所说,各行之间是相互依赖的:虽然整体可能是合法的N3语法,但每一行本身并不是合法的N3字符串。

将此数据添加到Sesame存储库中的最简单方法可能是将其转换为一个单独的String,然后按以下方式加载它:

String data = "@prefix gstruct: ..."; // full N3 data
conn.add(new StringReader(data), "", RDFFormat.N3);


如果要将数据添加到存储库中的特定上下文中:

 URI context = conn.getValueFactory().createURI("http://example.org/context");
 conn.add(new StringReader(data), "", RDFFormat.N3, context);


假设您实际上拥有的N3数据来自磁盘上的文件,则可以进一步优化:无需先创建String对象,然后使用StringReader,您只需输入文件对象本身即可:

File file = new File("/path/to/file.n3");
conn.add(file, "", RDFFormat.N3, context);


顺便说一句:N3语法不是一个完全标准化的格式,您可能会发现不同的解析器/编写器支持它的稍微不同的子集。您发布的数据看起来并不奇怪,因此您应该对此感到满意,但是如果您可以选择的话,我建议您切换到更加完全标准化的其他语法格式,例如Turtle或N-Triples。

Turtle语法实际上与N3非常相似(您发布的数据按原样是有效的Turtle),因此切换应该要求的更改很少甚至没有更改。

关于java - 将RDF格式字符串写入芝麻存储库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30349120/

10-10 03:10