当前位置: 首页 > 知识库问答 >
问题:

SPARQL查询在jena中运行时在导入的本体中找不到个体

东方和志
2023-03-14

我有3个本体文件,第一个导入第二个,第二个导入第三个:

第一个本体导入第二个本体:

<?xml version="1.0"?>
<rdf:RDF xmlns="http://www.example.com/user/rainer/ontologies/2016/1/usecase_individuals#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:owl="http://www.w3.org/2002/07/owl#"
     xmlns:xml="http://www.w3.org/XML/1998/namespace"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     xmlns:uc="http://www.example.com/user/rainer/ontologies/2016/1/usecase#">
    <owl:Ontology rdf:about="http://www.example.com/user/rainer/ontologies/2016/1/usecase_individuals">
        <owl:imports rdf:resource="http://www.example.com/user/rainer/ontologies/2016/1/usecase"/>
    </owl:Ontology>
....

第二个本体导入第三个本体:

<?xml version="1.0"?>
<rdf:RDF xmlns="http://www.example.com/user/rainer/ontologies/2016/1/usecase#"
     xml:base="http://www.example.com/user/rainer/ontologies/2016/1/usecase"
     xmlns:fgcm="http://www.example.com/user/rainer/ontologies/2016/1/fgcm#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:owl="http://www.w3.org/2002/07/owl#"
     xmlns:xml="http://www.w3.org/XML/1998/namespace"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     xmlns:uc="http://www.example.com/user/rainer/ontologies/2016/1/usecase#">
    <owl:Ontology rdf:about="http://www.example.com/user/rainer/ontologies/2016/1/usecase">
        <owl:imports rdf:resource="http://www.boeing.com/user/rainer/ontologies/2016/1/fgcm"/>
    </owl:Ontology>

....

第三个本体(创建于Protégé)断言一个个体:

<?xml version="1.0"?>
<rdf:RDF xmlns="http://www.boeing.com/user/rainer/ontologies/2016/1/fgcm#"

...

    <owl:NamedIndividual rdf:about="http://www.boeing.com/user/rainer/ontologies/2016/1/fgcm#admin">
        <rdf:type rdf:resource="http://www.boeing.com/user/rainer/ontologies/2016/1/fgcm#User"/>
        <userName>admin</userName>
    </owl:NamedIndividual>
...

当我在Protégé中打开第一个本体并执行SPARQL查询时

PREFIX fgcm: <http://www.example.com/user/rainer/ontologies/2016/1/fgcm#>
SELECT ?subject ?name WHERE { ?subject fgcm:userName ?name}

它在第三个本体论中找到个体是没有问题的。当我从Jena中的代码运行相同的SPARQL查询时,我没有得到那个个体。查询是针对使用默认设置创建的OntModel运行的。

我知道Jena能够加载和导入本体,因为我可以通过SPARQL查询和直接使用Jena API从导入的本体中访问类和属性。我的问题似乎仅限于在导入的本体中断言的个体。

我已经搜索了可能改变这种行为的设置(当加载本体时,比如不同的OntModelSpecs,或者当创建/运行查询时),但是没有找到任何解决方案

共有1个答案

禹昊穹
2023-03-14

原来我误会了Jena成功加载了导入的本体。(没有得到错误并不意味着实际找到了应该导入的本体)。

在使用OntDocumentManager并告诉它在哪里找到需要导入的本体文件之后,SPARQL查询返回了预期的结果。这是对我起作用的代码片段:

OntDocumentManager mgr = new OntDocumentManager ();
mgr.addAltEntry("http://www.boeing.com/user/rainer/ontologies/2016/1/usecase", "file:C:\\Dev\\luna_workspace\\fgcm_translate\\usecase.owl");
mgr.addAltEntry("http://www.boeing.com/user/rainer/ontologies/2016/1/fgcm", "file:C:\\Dev\\luna_workspace\\fgcm_translate\\fgcm.owl");
OntModelSpec spec = new OntModelSpec ( OntModelSpec .OWL_DL_MEM_TRANS_INF);
spec.setDocumentManager(mgr);

OntModel model = ModelFactory.createOntologyModel(spec);

我希望这对遇到类似问题的人有帮助。

 类似资料:
  • 他们说现在com.hp.hpl.jena.sparql.Engine.Binding.BindingMap在这个版本中不是一个简单的类,而是一个接口。 如果是这样,那么如何在当前版本中运行sparql查询。请根据我分享的代码给出一个例子。提前道谢。

  • 我使用jena创建了一个用于电子邮件存储的rdf模型。我的thr rdf代码是: 这是我查询rdf模型的代码。在这里,我从命令行获取输入,但是字符串的查询也可以工作... 这显示了查询的工作情况:

  • 问题内容: 相同的查询在DBpedia Endpoint(http://ko.dbpedia.org/sparql)中有效,但在我的Java代码中却无效。我只是想使用“ COUNT”功能提取频率。 错误如下。 我正在使用virt_jena2.jar和virtjdbc4.jar。我一直在寻找类似的问题和答案(Jena ARQ扩展和SPARQL 1.1支持此聚合查询- 但我找不到如何更改它-我认为我正

  • 问题内容: 我正在尝试使用耶拿创建一个SPARQL查询来查询DBpedia。 当我将查询与独立工具(Twinkle)一起使用时,该查询正在运行,但是当我将其插入此Java代码时,它将返回一个空集。 有什么想法我做错了吗? 问题答案: 问题是你的条款。删除它,一切都很好。有了该子句,我怀疑端点将查询限制在具有该名称的图上,但是不存在这样的图,因此没有结果。 令人困惑的是,查询似乎可以在http://

  • 我是sparql的新手,我正在尝试在其中一个属性中搜索一个单词。简单的查询工作良好,但我不知道如何执行全文搜索。我在jena网站上看到了这个例子:

  • 我有一个jena查询,比如,我想在结尾处添加一个限制为,使用jena ARQ向SPARQL查询添加可选子句的方法不起作用,因为没有类的ElementLimit类型,而且我也不想进行字符串操作,因为可能存在现有的limit子句,在这种情况下,我想更改现有子句的界限。