我有一个包含 7MB 和 ~ 80k 语句的 RDF 文件。
启动应用程序时,我有以下代码,它检索我需要向用户显示的项目列表:
NodeIterator iterator = technologyModel.listObjectsOfProperty(subject);
while (iterator.hasNext()) {
RDFNode node = iterator.nextNode();
myCollection.add(node.asLiteral().getString().trim());
}
注意:这段代码工作得很好,并返回了大约 3k 的结果,并且是第一次访问“technologyModel”。
显然,在此之前,我必须加载数据集/模型,这就是问题所在。
案例 (1) 当我从 RDF 文件加载数据集/模型时,执行以下操作:
InputStream in = FileManager.get().open(ParamsHelper.sourceRDF);
technologyModel.read(in, "RDF/XML-ABBREV");
technologyModel 似乎立即加载,并且发布的第一个代码在不到一秒的时间内运行。
案例 (2) 但是,当我尝试从 TDB 数据库加载模型时(之前加载了与第一个案例相同的 RDF 文件),使用以下代码:
dataset = TDBFactory.createDataset(ParamsHelper.tdbBaseDir);
dataset.begin(ReadWrite.READ) ;
technologyModel = dataset.getNamedModel("http://a.example.biz/technology");
dataset.end();
technologyModel 似乎没有立即加载,即使发布的第一个代码按预期返回,它在第一次调用时运行大约 30 秒。
如果我在第一次之后调用相同的代码,或者,例如,在第一次调用此代码之前插入另一个操作,如 technologyModel.listSubjects(),它将按预期立即运行。
在我看来,在第二种情况下,模型实际上只在它遭受的第一次操作之后才加载。这有什么意义吗?
我不想将我的数据保存在 RDF 文件中,而是希望有一个 TDB 数据库来存储三元组。这就是为什么第二个选项似乎更适合我的原因。
谁可以帮我这个事?我希望我能正确地揭露问题。
提前致谢。