首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从推断的Jena本体查询个人的最佳方法

从推断的Jena本体查询个人的最佳方法
EN

Stack Overflow用户
提问于 2014-02-18 17:03:07
回答 1查看 660关注 0票数 0

我创建了一个基于本体的安全警报。在阅读了一些数据(个人)后,它变得相当大,所以我决定使用耶拿规则推理者来确定一些事实。我主要给出个人类型和属性,并使用一些正则表达式。下面是一个小的(构造的)示例,当它的信息与regex匹配时,它为个人提供了"multiple“类型:

testRuleContent:(?X ns:hasText ?Y),(?Y :hasText ?Z),regex(?Z,'.Multiple.') -> (?X rdf:类型ns:Multiple)

为了使用推理器,我根据先前加载的本体创建了一个infModel:

代码语言:javascript
运行
复制
RuleReasoner ruleReasoner = new RuleReasoner("GenaralRuleReasoner");
//read rules from file
List<Rule> ruleList = Rule.parseRules(Rule.parseRules(rd));
com.hp.hpl.jena.reasoner.Reasoner reasoner = new GenericRuleReasoner(ruleList);
//jenaOntology is the ontology with the data
InfModel inferredOntotlogy = ModelFactory.createInfModel(reasoner, jenaOntology);
inferredOntotlogy.prepare();

这是没有问题的,我可以将infModel写入一个文件中,并添加类型。

有什么更好的方法来查询某些个人的推断本体(在本例中,那些类型为:"Multiple")?

目前,我在推断模型上使用了"listStatements()“:

代码语言:javascript
运行
复制
Resource multiple = inferredOntotlogy.getResource("file:/C:/ns#Multiple");
StmtIterator iter = inferredOntotlogy.listStatements(null, RDF.type, multiple);
while (iter.hasNext()) {
        Resource subject = iter.next().getSubject();
        //Individual ind = subject.as(Individual.class);
        String indUri = iter.next().getSubject().getURI();

强制转换抛出一个异常(它只是一个带有Uri的节点)。但是,我得到了个人的有效Uri,并且可以使用基本的本体模型,而不需要新的工具(我只需要它们来获取搜索的个体,所以这是一种可能的解决方案)。

类似的尝试是在推断模型上使用getDeductionsModel()获取模型-> OntModel并查询它(可能使用SPARQL)。

但是id提供了一种查询推断模型的简单方法。有这样的解决办法吗?或者你能告诉我如何最好地处理这种情况吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-19 13:34:54

我现在就使用fow的资源。它提供了我需要的所有功能。我应该仔细看看API。

我回答了我自己的问题,把它标记为明天解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21860497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档