首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以通过编程方式找出两个实例是否属于相同的RDF类?

是否可以通过编程方式找出两个实例是否属于相同的RDF类?
EN

Stack Overflow用户
提问于 2012-01-30 02:40:57
回答 4查看 1.1K关注 0票数 7

是否可以通过编程方式(使用api,如JENA)找出两个实例是否属于同一个类

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-30 05:03:44

在SPARQL中很容易:

代码语言:javascript
运行
复制
ASK { <instance1> a ?class . <instance2> a ?class . }

在Jena API中:

代码语言:javascript
运行
复制
boolean shareClass = false;
for (Statement s: instance1.listProperties(RDF.type)) {
    if (instance2.hasProperty(RDF.type, s.getObject()) {
        shareClass = true;
        break;
    }
}

不是很优雅。

票数 8
EN

Stack Overflow用户

发布于 2012-01-30 22:00:51

假设您使用的是Jena本体API,那么它非常简单。请注意,在RDF中,给定的实例可以有许多类型,因此您的问题实际上是“如何测试两个实例是否有一个或多个共同的类型?”

我会按如下方式来做。假设您要测试的两个实例是Individual对象(请注意,您可以使用OntResource或甚至只需稍微更改代码即可使用Resource进行测试):

代码语言:javascript
运行
复制
Individual i0 = ....;
Individual i1 = ....;

列出每个集合的rdf:type值,并将它们转换为集合

代码语言:javascript
运行
复制
Set<Resource> types0 = i0.listRDFTypes( false ).toSet();
Set<Resource> types1 = i1.listRDFTypes( false ).toSet();

如果交叉点不为空,则它们具有共同的类型:

代码语言:javascript
运行
复制
types0.retainAll( types1 );
if (!types0.isEmpty()) {
    // at least one type in common
    // types0 contains the common type resources
}
票数 4
EN

Stack Overflow用户

发布于 2012-01-30 03:42:14

比较它们的类:

代码语言:javascript
运行
复制
boolean same = obj1.getClass().equals(obj2.getClass());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9055675

复制
相关文章

相似问题

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