【问题标题】:Best way to query Individuals from an Inferred Jena Ontology从推断的耶拿本体中查询个人的最佳方式
【发布时间】:2014-03-18 14:29:03
【问题描述】:

我创建了一个基于本体的安全警报。 在阅读了一些数据(个人)之后,它变得非常大,所以我决定使用 Jena Rule Reasoner 来确定一些事实。我主要给个人类型和属性并使用一些正则表达式。这是一个小的(构造的)示例,当其信息与正则表达式匹配时,它为个人提供“多重”类型:

[testRuleContent: (?X ns:hasClassification ?Y), (?Y ns:hasText ?Z), regex(?Z, '.Multiple.') -> (?X rdf:type ns:Multiple)]

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

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 写入具有添加类型的文件中。

为某些个体(在本例中为“多个”类型的个体)查询推断的本体的更好方法是什么?

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

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)。

但我更喜欢一种查询推断模型的简单方法。有这样的解决方案吗?或者你能告诉我如何最好地处理这种情况吗?

【问题讨论】:

  • 您遇到的具体问题是什么?使用资源通常不是问题。是否有某些特殊原因需要您使用个人(而不仅仅是资源)?如果需要,您也可以针对 InfModel 运行 SPARQL 查询。
  • 你可能是对的。我什至没有想过使用该资源。查看 API 个人只会给我 listPropertyValues() ,我也可以轻松地使用资源。目前我在家(欧盟),所以我明天会测试并报告。 TY
  • 它与资源完美结合。 TY 约书亚

标签: jena owl ontology jena-rules


【解决方案1】:

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

我回答了我自己的问题,将其标记为明天已解决。

【讨论】:

    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2010-10-13
    • 1970-01-01
    相关资源
    最近更新 更多