我定义了一个名为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”文件中的内容尚未读入模型。我的代码有什么问题?
答案 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
,而不是每次使用汇编程序时。