java - 在java中使用sparql查询检索对象属性范围内的多个类(Protege 3.4.8)

标签 java sparql jena protege

我在使用java代码中的sparql查询检索对象属性范围内的多个类时遇到问题(使用Protege 3.4.8)

Result1_Layer = 
                     "PREFIX uni:<http://www.owl-ontologies.com/Ontology1469701449.owl#>"
              +"PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>"
              +  "select ?range1 "
              + "where { uni:hasS_Layer "
    + "rdfs:range ?range1}";


I am getting output as:| range1                                |
=========================================
| <http://www.w3.org/2002/07/owl#Thing> |
| _:b0                                  |
| rdfs:Resource                         |
-----------------------------------------

但输出应包含两个类:可用性、可靠性而不是 b0。 本体中有一个对象属性hasS_Layer,其域为Layer,范围为可用性、可靠性的交集 如果范围内只有一个类,则此查询将检索正确的结果。 当我使用 Protegy 版本 4.3 时,相同的查询工作正常。但在 protege 3.4.8 中,它没有显示范围内多个类的正确输出。 请帮忙。

最佳答案

用 RDF 表示时,OWL 交集如下所示:

   _:b0 a owl:Class; 
        owl:intersectionOf (ex:Usability, ex:Reliability) .

或者更详细地说明(如果我们扩展 RDF 集合的内部表示):

   _:b0 a owl:Class; 
        owl:intersectionOf  _:b1 .
   _:b1 rdf:first ex:Usability ;
        rdf:rest _:b2 .
   _:b2 rdf:first ex:Reliability ;
        rdf:rest rdf:nil .

您的查询返回 rdfs:range 的值属性,即 _:b0 - 这是对应于两个类的交集的匿名类。

如果您希望取回构成交集的类,则需要执行不同的查询,例如:

SELECT ?c 
WHERE { uni:hasS_Layer rdfs:range ?r .
        ?r owl:intersectionOf/rdf:rest*/rdf:first ?c .
}

owl:intersectionOf/rdf:rest*/rdf:first被称为路径表达式,它查询任何资源 ?r有一个 owl:intersection连接到零个或多个 rdf:rest 的属性属性,依次连接到 rdf:first属性(property)。这是 rdf:first 的值我们想要的属性。

关于java - 在java中使用sparql查询检索对象属性范围内的多个类(Protege 3.4.8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640169/

相关文章:

Java EE Websocket : How to send keep sending data without receiving message?

java - 具有最不难看的泛型实现(或替代方案)的语言

java - (Java) SQL 查询根本不返回任何内容

java - 如何检索连接到给定值的给定类的所有资源

java - 如何在 EMF 中通过代码实现模型?

sparql - 检索最具体的实例类

hyperlink - 使用 DBpedia 获取 Wikipedia 页面的超链接

rdf - SPARQL 未绑定(bind)变量

java - 为什么 addDomain 方法会影响域的父类(super class)

java - 当我们有主题和属性时,如何在不使用 sparql 的情况下使用 jena 检索 RDF 中对象的值?