【发布时间】:2015-01-19 09:34:33
【问题描述】:
我在从 Jena 图中提取个人姓名时遇到问题(具有通用规则推理器和 OntSpec 的 RDF 推理模型是 RDFS_MEM_RDFS_INF )。这可能是一个简单的案例,但我无法在网上找到合适的教程来完成这项工作(耶拿规则的新手)。在这种情况下调用什么正确的 api?
infStmts = pModel.listStatements().filterKeep( new Filter<Statement>() {
@Override
public boolean accept(Statement o) {
boolean ex = false;
Property prop1 = pModel.getProperty(prefix + "hasPropertyP1");
String predicateName = o.asTriple().getPredicate().getLocalName();
if(predicateName.equalsIgnoreCase(prop1.getLocalName()) )
ex = true;
return ex;
}
});
Statement s = infStmts.next();
Statement st = ResourceFactory.createStatement(s.getSubject(), s.getPredicate(), s.getObject());
System.out.println(st.getSubject().toString() + "****" + pModel.getRDFNode(st.getSubject().asNode()).as(Individual.class));
Exception in thread "Thread-37" com.hp.hpl.jena.ontology.ConversionException: Cannot convert node 4e62503a:14b01762f42:-7eea to Individual
at com.hp.hpl.jena.ontology.impl.IndividualImpl$1.wrap(IndividualImpl.java:61)
at com.hp.hpl.jena.enhanced.EnhNode.convertTo(EnhNode.java:152)
at com.hp.hpl.jena.enhanced.EnhNode.convertTo(EnhNode.java:31)
at com.hp.hpl.jena.enhanced.Polymorphic.asInternal(Polymorphic.java:62)
at com.hp.hpl.jena.enhanced.EnhNode.as(EnhNode.java:107)
...
耶拿规则文件有以下规则
[rule: ( :Subject1 :hasPropertyP2 :Object1) ->
( ?x rdf:type :Class1)
( ?x :hasPropertyP1 :Object2)]
我需要 ?x 的个人姓名值
【问题讨论】:
-
“个人姓名”是什么意思?指定个人的 IRI? rdfs:label 属性的值?还有什么?
-
是的,指定个人的 IRI 是我想要的。
-
据我了解,空白节点 (en.wikipedia.org/wiki/Blank_node) 4e62503a:14b01762f42:-7eea 持有满足规则的所需个人集合,因此我想检索包含的数据在这种情况下是那些具有 hasPropertyP1 或要编写 jena 规则的个人的数据,以便与 sparql 查询类似地检索个人
-
"空白节点 4e62503a:14b01762f42:-7eea 持有满足规则的所需个体集"这没有意义。空白节点不是容器,它只是一个匿名资源。它就像一个 IRI 资源,只是它没有 IRI。
-
如果你在your newer question找到了解决这个问题的方法,你应该考虑关闭/删除这个。
标签: java sparql rdf jena jena-rules