我创建了一个基于本体的安全警报。 在阅读了一些数据(个人)后,它变得非常大,所以我决定使用Jena Rule Reasoner来确定一些事实。我主要给个人类型和属性,并使用一些正则表达式。下面是一个小的(构造的)示例,当其信息与正则表达式匹配时,为个体提供“多个”类型:
[testRuleContent:(?X ns:hasClassification?Y),(?Y ns:hasText?Z),正则表达式(?Z,'。 Multiple。') - > (?X rdf:输入ns:多个)]
要使用推理器,我会根据以前加载的本体创建一个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写入添加了类型的文件中。
什么是查询某些个体的推断本体的优选方法(在本例中具有类型:“Multiple”的那些)?
目前我在推断模型中使用“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()来获取模型 - &gt; OntModel并查询它(可能使用SPARQL)。
但是id优先选择查询推断模型的简单方法。有这样的解决方案吗?或者你可以给我一个如何处理这种情况的最佳方法吗?
答案 0 :(得分:0)
我现在将使用资源fow。它提供了我需要的所有功能。我应该仔细看看API。
我回答了自己的问题,明天将其标记为已解决。