- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将我的数据加载到 TDB 模型中,并使用 Jena 编写了一些规则以应用于 TDB。然后我将推断的数据存储到一个新的 TDB 中。
我在一个约 200kb 的小数据集中应用了上面的案例,并且措辞很好。但是,我的实际 TDB 是 2.7G,计算机已经运行了大约一个星期,实际上它仍在运行。
这是正常现象,还是我做错了什么? Jena 规则引擎的替代方案是什么?
这是一小段代码:
public class Ruleset {
private List<Rule> rules = null;
private GenericRuleReasoner reasoner = null;
public Ruleset (String rulesSource){
this.rules = Rule.rulesFromURL(rulesSource);
this.reasoner = new GenericRuleReasoner(rules);
reasoner.setOWLTranslation(true);
reasoner.setTransitiveClosureCaching(true);
}
public InfModel applyto(Model mode){
return ModelFactory.createInfModel(reasoner, mode);
}
public static void main(String[] args) {
System.out.println(" ... Running the Rule Engine ...");
String rulepath = "src/schemaRules.osr";
Ruleset rule = new Ruleset (rulepath);
InfModel infedModel = rule.applyto(data.tdb);
infdata.close();
}
}
最佳答案
持久存储中的大型数据集与 Jena 的规则系统不太匹配。基本问题是 RETE engine将在规则传播期间对图中进行许多小查询。正如您所发现的,对任何持久性存储(包括 TDB)进行这些查询的开销往往会使执行时间长得令人无法接受。
根据您使用推理的目标,您可能有一些选择:
将您的数据加载到足够大的内存图中,然后在单个事务中将推理闭包(基础图加上蕴涵)保存到 TDB 存储中。此后,您可以在不产生规则系统开销的情况下查询商店。显然,更新可能是这种方法的一个问题。
像现在一样将您的数据存储在 TDB 中,但将一个子集动态加载到内存模型中以用于实时推理。使更新更容易(只要您同时更新内存副本和持久存储),但需要您对数据进行分区。
如果您只需要一些基本的推理,例如rdfs:subClassOf
层次结构的闭包,您可以使用infer
命令行工具来生成一个推理闭包,您可以可以加载到 TDB 中:
$ infer -h
infer --rdfs=vocab FILE ...
General
-v --verbose Verbose
-q --quiet Run with minimal output
--debug Output information for debugging
--help
--version Version information
Infer 可以更高效,因为它不需要大内存模型。但是,它在将要计算的推论方面受到限制。
关于java - 带有 TDB 的 Jena 规则引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17604792/
我正在尝试使用 TDB 使用 Jena 在 Java 中进行查询。所以基本上我得到了一个 n3 文件名 song.n3 并且使用这个文件我想将它与 TDB 一起使用。所以我创建了一个在我的 Java1
我必须为 DBpedia 中的一组 1500 个实体序列化一些特定属性(大约十部电影的属性)。因此,对于每个实体,我运行 sparql 查询以检索它们,之后,对于每个 ResultSet,我使用默认的
使用:jena-fuseki-1.1.0,apache-jena-2.12.0 我想要达到的目标和我目前的状态: 我正在尝试使用 dbpedia Persondata(英语和德语)、跨语言链接、图像和
我正在尝试在 java 中查询 jena TDB。我的代码如下。我的 TDB 数据集似乎是空的,因为 model.size()(其中 model 是数据集默认模型)返回 0。我确定它不为空,不过,因为
我正在提供一个数据集,其中包含来自 Fuseki 2 中 TDB 数据集的 10-20 个命名图。 我想使用推理器对我的数据进行推断。我希望看到的行为是每个图中推断的三元组应该出现在这些图中(尽管如果
这是我的配置文件 # Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0 ## Fuseki Server c
有没有办法通过 Java API 使用 OWL API 访问 Jena TDB? Jena 似乎不支持 OWL-API。除了 RDF API 之外,它还具有一些便利函数 (OntAPI),用于在被视为
我有一个问题。 我正在尝试在 Jena TDB 上加载我的 RDF 文件。 我写了这段代码: public void store(){ String directory = "C:\\tdb"
我目前正在改编一个在内存模型中与 JENA 一起使用的程序,但当我尝试使用 TDB 存储不同的命名模型时会中断。我认为由此产生的行为是 JENA 中的一个错误,但也许我对同一 TDB 中命名模型的假设
我对 Apache Jena TDB 有疑问。基本上我创建了一个新的数据集,将数据从 RDF/XML 文件加载到名为“http://example.com/model/filename”的命名模型中,
我有一个问题要问你: 我想在我的 Jena TDB TripleStore 上加载一个文件。我的文件很大,大约80Mb,大约700000个三倍RDF。当我尝试加载它时,执行停止工作或需要很长时间。 我
我正在使用 Jena API 在 Jena TDB 中插入和更新三元组。我的设计是这样的,每个插入操作都在事务控制之内。例如: dataset.begin (ReadWrite.WRITE) try
我有一个相当小的图,其中包含大约 50 万个三元组。我还生成了 stats.opt 文件并在相当快的计算机(四核、16gb ram、ssd 驱动器)上运行我的代码。但是对于我在 OP 界面的帮助下构建
public void createDatabase(){ // Make a TDB-backed dataset String directory = "MyDatabase
我正在使用 Jena TDB (1.1.1) 来存储一组命名图。一切正常,但每当我从数据集中检索命名图时,所有 namespace 前缀信息都会丢失。有没有办法保留原始 RDF 图中的 namespa
是否可以运行 Jena TDB database从 Python 应用程序存储大量 RDF 数据?什么是 Python 的原生替代品? 最佳答案 另一种方法是使用 SPARQL 端点,例如 Apach
我想重写我当前的代码以使用交易。但是,根据 Jena 文档 (http://incubator.apache.org/jena/documentation/tdb/tdb_transactions.h
根据 Apache website TDB“可以用作单台机器上的高性能 RDF 存储”。阅读文档我看不到它存储任何内容的位置。是否只是将每个资源存储在定义目录中其自己的文件中,如 this 中所述教程
我有一个 RDF 文件,其中包含 7MB 和约 80k 语句。 启动应用程序时,我有以下代码,用于检索我需要向用户显示的项目列表: NodeIterator iterator =
我正在开发一个使用 Jena 进行存储(带有 TDB 后端)的应用程序。我正在寻找类似 Squirrel 的东西,它可以让我看到正在存储的内容,运行查询等。这似乎是一个明显需要的东西,但我的(可能措辞
我是一名优秀的程序员,十分优秀!