是否可以通过编程方式(使用api,如JENA)找出两个实例是否属于同一个类
发布于 2012-01-30 05:03:44
在SPARQL中很容易:
ASK { <instance1> a ?class . <instance2> a ?class . }在Jena API中:
boolean shareClass = false;
for (Statement s: instance1.listProperties(RDF.type)) {
if (instance2.hasProperty(RDF.type, s.getObject()) {
shareClass = true;
break;
}
}不是很优雅。
发布于 2012-01-30 22:00:51
假设您使用的是Jena本体API,那么它非常简单。请注意,在RDF中,给定的实例可以有许多类型,因此您的问题实际上是“如何测试两个实例是否有一个或多个共同的类型?”
我会按如下方式来做。假设您要测试的两个实例是Individual对象(请注意,您可以使用OntResource或甚至只需稍微更改代码即可使用Resource进行测试):
Individual i0 = ....;
Individual i1 = ....;列出每个集合的rdf:type值,并将它们转换为集合
Set<Resource> types0 = i0.listRDFTypes( false ).toSet();
Set<Resource> types1 = i1.listRDFTypes( false ).toSet();如果交叉点不为空,则它们具有共同的类型:
types0.retainAll( types1 );
if (!types0.isEmpty()) {
// at least one type in common
// types0 contains the common type resources
}发布于 2012-01-30 03:42:14
比较它们的类:
boolean same = obj1.getClass().equals(obj2.getClass());https://stackoverflow.com/questions/9055675
复制相似问题