从java代码进行Sparql查询以从owl文件检索结果

从java代码进行Sparql查询以从owl文件检索结果,java,sparql,owl,Java,Sparql,Owl,我不熟悉sparql查询。我有以下疑问。我正在尝试从owl文件中检索范围和域。我得到了protege的输出。但是对于同一个查询,我在eclipse中没有得到任何输出 这是一个非常简单的本体 我只有三节课。水草 一个对象属性-req 我已经将牧群和牧场定义为obejct财产“req”的领域,将水定义为范围 当我在protege中执行下面的查询时,我得到的是牧群和牧场作为域的输出,水作为范围的输出。但在java中,它只打印范围和域头 有人能在这方面帮助我吗?提前谢谢。下面是eclipse中的代码。我

我不熟悉sparql查询。我有以下疑问。我正在尝试从owl文件中检索范围和域。我得到了protege的输出。但是对于同一个查询,我在eclipse中没有得到任何输出

这是一个非常简单的本体

我只有三节课。水草

一个对象属性-req

我已经将牧群和牧场定义为obejct财产“req”的领域,将水定义为范围

当我在protege中执行下面的查询时,我得到的是牧群和牧场作为域的输出,水作为范围的输出。但在java中,它只打印范围和域头

有人能在这方面帮助我吗?提前谢谢。下面是eclipse中的代码。我试着用RDF格式和owl保存文件。但是没有运气

OntModel model1 = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RULE_INF);
File file=new File("C:\\Users\\anithat\\Desktop\\finalcheck.owl");
FileInputStream reader=new FileInputStream(file);
model1.read(reader,null);
    
String queryString =    "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>" +
        "PREFIX owl: <http://www.w3.org/2002/07/owl#>" + 
        "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> "+ 
        "PREFIX rdfs: <http://www.semanticweb.org/anithat/ontologies/2020/6/untitled-ontology-30#>" +
        "SELECT ?range ?domain { rdfs:req rdfs:domain ?domain . "
        + "rdfs:req rdfs:range ?water .}";
            
Query query = QueryFactory.create(queryString);
QueryExecution qe= QueryExecutionFactory.create(query, model1);
ResultSet resultset = qe.execSelect();
ResultSetFormatter.out(System.out, resultset, query);
ontmodelmodel1=ModelFactory.createOntologyModel(OntModelSpec.OWL\u MEM\u RULE\u INF);
File File=新文件(“C:\\Users\\anithat\\Desktop\\finalcheck.owl”);
FileInputStream读取器=新的FileInputStream(文件);
model1.read(reader,null);
String queryString=“前缀rdf:”+
“前缀owl:”+
“前缀xsd:”+
“前缀rdfs:”+
“选择?范围?域{rdfs:req rdfs:domain?域。”
+“rdfs:req rdfs:range?water.}”;
Query=QueryFactory.create(queryString);
QueryExecution qe=QueryExecutionFactory.create(查询,model1);
ResultSet ResultSet=qe.execSelect();
ResultSetFormatter.out(System.out、resultset、query);

您选择了
?range?domain
,但在查询中您使用了
?water
而不是
?range
-请先解决这个问题。您没有得到结果的原因是您重复使用了
rdfs
前缀,这是一种糟糕的做法-您的示例显示了一些缺陷。RDFS有自己的名称空间,人们通常使用前缀
RDFS
。但是您使用了自己的名称空间,前缀为
rdfs
,这意味着属性
rdfs:range
是一个URI位于
http://www.semanticweb.org/anithat/ontologies/2020/6/untitled-ontology-30#range
来自您的本体,显然不存在。请使用您自己的前缀,例如,
ex:
myOnt:
或其他。然后添加
rdfs:
的前缀声明及其正确的名称空间URI
http://www.w3.org/2000/01/rdf-schema#
而且该查询在Protege中肯定不起作用,至少不是这里显示的确切查询。非常感谢您的回复。成功了!