无法使用jena汇编程序文件加载海龟文件

时间:2017-02-07 13:04:33

标签: jena apache-jena

我定义了一个名为dataset2.ttl的汇编程序文件。该文件的内容是:

@prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .

@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .

@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .

[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
tdb:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
tdb:GraphTDB    rdfs:subClassOf  ja:Model .
<#dataset> rdf:type         tdb:DatasetTDB ;
   tdb:location "DB" ;
   tdb:unionDefaultGraph true ;
   .

<#data1> rdf:type tdb:GraphTDB ;
    tdb:dataset <#dataset> ;
    tdb:graphName <http://example.org/data1> ;
    ja:content [ja:externalContent <file:///C:/Users/data/data1.ttl>;];
    .

创建数据的相关jena代码是:

public class TDB {

public static void main(String[] args) {
    Dataset ds = null;
    try {
        ds = TDBFactory.assembleDataset("Dataset2.ttl");

        if(ds == null) {

            System.out.println("initial tdb failed");
        } else {
            System.out.println("Default Model:");

            Model model = ds.getDefaultModel();

            ds.begin(ReadWrite.WRITE);
            model.write(System.out, "TURTLE");
        }
    } finally {
        if(ds != null) {
            ds.close();
        }
    }
}

data1.ttl中的内容是:

@prefix : <http://example.org/> .
@prefix foaf:   <http://xmlns.com/foaf/0.1/> .

:alice
a           foaf:Person ;
foaf:name   "Alice" ;
foaf:mbox   <mailto:alice@example.org> ;
foaf:knows  :bob ;
foaf:knows  :charlie ;
foaf:knows  :snoopy ;
.

:bob
foaf:name   "Bob" ;
foaf:knows  :charlie ;
.

:charlie
foaf:name   "Charlie" ;
foaf:knows  :alice ;
.

使用此代码创建了一个数据集。但是,“data1.ttl”文件中的内容尚未读入模型。我的代码有什么问题?

3 个答案:

答案 0 :(得分:1)

你也有

<#dataset> rdf:type         tdb:DatasetTDB ;
   tdb:location "DB" ;
   tdb:unionDefaultGraph true ;
   .

ds = TDBFactory.assembleDataset("Dataset2.ttl");

所以你要求Jena组装一个数据集。该数据集将为<#dataset>(按类型查找)。它没有与您定义的图形相关联,因此忽略了它;你可以删除那部分。组装数据集是实现此目的的方法。

您有tdb:unionDefaultGraph true因此查询的默认图表是数据集中所有命名图表的组合。

选择model.getNamedModel

如果您使用SPARQL,请使用GRAPH关键字。

答案 1 :(得分:0)

我会尝试在线验证您的ttl文件,以确保他们的dataset2.ttl和data.ttl都有效。我注意到你似乎在不需要的时候添加了一个额外的分号(它应该以一段时间结束)。

尝试将您的行更改为:

ja:content [ja:externalContent <file:///C:/Users/data/data1.ttl>] .

答案 2 :(得分:0)

<#data1> rdf:type tdb:GraphTDB ;
    tdb:dataset <#dataset> ;
    tdb:graphName <http://example.org/data1> ;
    ja:content [ja:externalContent <file:///C:/Users/data/data1.ttl>;];
.

请注意tdb:GraphTDB,表示附加到数据库中的图表。它不会使用ja:content加载数据。

作为持久存储,预计数据已经加载,例如tdbloader,而不是每次使用汇编程序时。