是否有可能找出两个实例是否是同一类的,编程(使用API如JENA)是否有可能通过编程的方式找出两个实例是否具有相同的RDF类?
回答
容易在SPARQL:
ASK { <instance1> a ?class . <instance2> a ?class . }
在耶拿API:
boolean shareClass = false;
for (Statement s: instance1.listProperties(RDF.type)) {
if (instance2.hasProperty(RDF.type, s.getObject()) {
shareClass = true;
break;
}
}
还没有ve优雅。
+1,只回答不是超出主题或现在 – ysdx 2012-01-29 21:14:00
既然SPARQL 1.1具有属性路径,则SPARQL查询简化为'ASK {?class^a
比较自己的班级:
boolean same = obj1.getClass().equals(obj2.getClass());
+1:也可以使用'=='。 – 2012-01-29 20:25:49
OP对此没有100%清楚,但这个问题很可能涉及RDF/OWL类和实例,而不是Java类比较。 – 2012-01-29 22:59:52
假设您使用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
}
这更令人愉快。番石榴有'Sets.intersection'这将更加可读。错字:'... types1 = i1.listRDFTypes ...' – user205512 2012-01-31 13:43:30
谢谢,错字修正 – 2012-01-31 13:46:05
嗨,我还是有些困惑。希望你能清楚这一点。正如你所建议的,我得到的类型和比较他们的交集。问题是:对于两个不同类的实例,'listRDFTypes'仍然返回'[http://www.w3.org/2002/07/owl#Class]'作为一个类型。结果,我采取的任何两个实例都是相同的类型。我错过了什么吗? – PCoder 2012-02-02 17:41:13
我把它日是您的早期发布的扩展,所以
if (resource1.hasProperty(model.createProperty("http://www.w3.org/1999/02/22-rdf-syntax-ns#", "type"), model.createResource("http://typeUri")) && resource2.hasProperty(model.createProperty("http://www.w3.org/1999/02/22-rdf-syntax-ns#", "type"), model.createResource("http://typeUri"))) {
// both resources are the same type
}
- 1. 单个类的两个实例是否具有相同的属性值?
- 2. 是否有可能有两个具有相同名称的不同变量?
- 3. 是否有任何具有验证RDF的功能与XML模式相同?
- 4. 是否有可能以编程方式抛出APPWIDGET_UPDATE的意图?
- 5. 是否有可能有2个方法(GET和POST)具有相同的路线?
- 6. 查看两个对象是否具有相同的类型
- 7. 是否有可能通过方法名
- 8. 是否有可能以编程方式关闭通过JMX的Java进程
- 9. 我怎样才能找出两个参数是否是相同的,但未知的类的实例?
- 10. 是否有可能通过编程方式获取其中一个子节点
- 11. 是否有可能通过网络编程方式找出哪个进程正在锁定文件
- 12. 是否有可能扩展一个具有相同名称的Java类
- 13. 是否有可能以两种不同的方式实例化一个类的对象?
- 14. 是否有可能通过多个对象实例同时访问一个类的静态方法?
- 15. 是否有可能有一个“本地”类型实例?
- 16. 是否有可能通过编程方式更改Linux上的msi数据库
- 17. 是否有可能有两个C++程序访问相同的内存位置
- 18. 是否有可能在PHP中同时拥有两个类?
- 19. 是否有可能两个不同字符串的MD5是相同的?
- 20. 是否有可能通过EasyMock的
- 21. 是否有可能找出VNC连接是否有效
- 22. 是否有可能有两个curl_init
- 23. 是否有可能在多个excel实例中使用相同的RTDServer
- 24. 编译时检查是否有两个具有相同模板参数的模板实例化
- 25. 是否可以通过编程方式重命名Outlook类别?
- 26. 是否有可能以编程方式更改FLV的帧频?
- 27. 是否有可能在没有首先实例化的情况下查看某个类是否调用方法?
- 28. 是否有可能通过编程方式更改电视输入源?
- 29. 是否有可能通过编程方式制作数字标牌iphone
- 30. 是否有可能通过Javascript/HTML以编程方式登录到Google帐户?
您可以使用纯Java方法吗? – Jivings 2012-01-29 19:31:34
为什么选择耶拿?您可以轻松获取这两个对象的'.class'并进行比较。 – 2012-01-29 19:36:03
我不认为这个问题涉及到java实例和类,而是RDF/OWL实例和类。 – user205512 2012-01-29 21:42:14