使用 Jena 编写 SPARQL 查询来查询 IRI,例如:http://pt.dbpedia.org/

2024-01-06

我正在使用 Jena 写一个SPARQL查询以获取rdfs:label来自作为方法参数接收的 URI 的属性。该方法仅接收如下 URI:http://pt.dbpedia.org/..它应该返回给我rdfs:label,但它没有给我任何回报。我查了一下,没有进入while block应该迭代结果。我什至用 URI 做了测试:<http://pt.dbpedia.org/resource/Brasil>,但没有成功。

可能是什么问题?

 public String getLabel(String uri, String label) {
              Model model = ModelFactory.createDefaultModel().read( uri );
              RDFNode node;

 String queryString = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> " +
              "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> " +
                  "PREFIX owl: <http://www.w3.org/2002/07/owl#>" +
              "SELECT distinct ?label WHERE { " +
             "?resource owl:sameAs <" + uri + "> ;" +
                  "rdfs:label ?label ." +
                  "filter( langMatches(lang(?label),'pt'))  }";

             Query query = QueryFactory.create(queryString);

                QueryExecution qe = QueryExecutionFactory.create(query, model);
                ResultSet r =  qe.execSelect();

                while( r.hasNext() ) {
                       QuerySolution querySolution = r.next();
                       node = querySolution.get("label");
                       label = node.toString();
                    }
                return label;
      }

The SPARQL查询是这样的:

SELECT distinct ?label WHERE { 
  ?brasil owl:sameAs <http://pt.dbpedia.org/resource/Brasil> ;
          rdfs:label ?label .
  filter( langMatches(lang(?label),"pt") )
}

谢谢你!


我知道这是您之前问题的延续,使用 http://pt.dbpedia.org/resource/.. 等 URI 的查询是否应该与使用 http://dbpedia.org/resource/.. 等 URI 的查询不同? https://stackoverflow.com/q/20335898/1281433。如果您收到以下查询:

SELECT distinct ?label WHERE { 
  ?brasil owl:sameAs <http://pt.dbpedia.org/resource/Brasil> ;
          rdfs:label ?label .
  filter( langMatches(lang(?label),"pt") )
}

那么你的uri一定是http://pt.dbpedia.org/resource/Brasil,所以你会(尝试)使用检索数据

Model model = ModelFactory.createDefaultModel().read( uri );

然后您尝试对已下载的本地数据运行 SPARQL 查询。正如我在上一个(链接)问题中提到的,我提供的查询旨在跨 SPARQL 端点运行;它们不是基于下载数据并在本地查询。

尝试像这样在本地下载数据是行不通的,如以下程序及其输出所示:

import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;

public class BrasilExample {
    public static void main(String[] args) {
        final Model model = ModelFactory.createDefaultModel().read( "http://pt.dbpedia.org/resource/Brasil" );
        model.write( System.out );
    }
}
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" > 
</rdf:RDF>

如果您想下载一点数据并对其进行查询,请注意

  • http://pt.dbpedia.org/resource/Brasil http://pt.dbpedia.org/resource/Brasil重定向到
  • http://pt.dbpedia.org/page/Brasil http://pt.dbpedia.org/page/Brasil

后一页底部有下载数据的链接,例如,

  • http://pt.dbpedia.org:8890/data/Brasil.rdf http://pt.dbpedia.org:8890/data/Brasil.rdf

如果您要下载该文件,那么您的查询可能会起作用(但当然uri将不再相同)。

不过,您在我之前的回答中使用的查询是为主要 DBpedia 端点设计的,而不是为葡萄牙端点设计的。您可以通过以下地址从主 DBpedia 下载巴西的数据:http://dbpedia.org/resource/巴西 http://dbpedia.org/resource/Brazil并遵循与上述相同的重定向和下载链接,但更好的选择是针对主 DBpedia 端点实际运行查询,http://dbpedia.org/sparql http://dbpedia.org/sparql,如下面的代码及其结果所示。

import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFormatter;

public class BrasilExample {
    public static void main(String[] args) {

        final String QUERY = 
                "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
                "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n" +
                "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n" +
                "\n" +
                "SELECT distinct ?label WHERE {\n" +
                "  ?brasil owl:sameAs <http://pt.dbpedia.org/resource/Brasil> ;\n" +
                "          rdfs:label ?label .\n" +
                "  filter( langMatches(lang(?label),\"pt\") )\n" +
                "}";

        final String ENDPOINT = "http://dbpedia.org/sparql";
        final ResultSet rs = QueryExecutionFactory.sparqlService( ENDPOINT, QUERY ).execSelect();
        ResultSetFormatter.out( rs );
    }
}
---------------
| label       |
===============
| "Brasil"@pt |
| "Brazil"@pt |
---------------
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Jena 编写 SPARQL 查询来查询 IRI,例如:http://pt.dbpedia.org/ 的相关文章

随机推荐

  • 删除表中的所有外键

    我有这个脚本可以在 sql server 2005 中运行 t sql scriptlet to drop all constraints on a table DECLARE database nvarchar 50 DECLARE ta
  • MVVM - 如何将视图模型绑定到视图

    并提前感谢您的指导 我是 MVVM 的新手 我一直通过文章学习 我想我已经走了很远了 但有一件事似乎让我忽略了 我如何 不使用后面代码中的代码 自动绑定到我想要的视图 据我了解 如果做得正确 这就是模式应该如何工作 我可以使用主窗口 xam
  • 有没有办法使用 React-Router v6 设置默认路由

    我只是找不到用react router v6 设置默认路由的方法 是因为现在编程不好了吗 有人能告诉我为什么吗 提前致谢 Rafael 如果我正确理解您关于 默认 路线的问题 那么我将其解释为以下之一 Use an index route
  • 进程可以在其虚拟内存的任何地址上读/写吗?

    操作系统中的进程有自己的虚拟地址空间 比如说 我在 C 程序中使用 malloc 函数调用分配一些动态内存 并从它返回的地址中减去一些正值 比如 1000 现在 我尝试读取该位置上写的内容 这应该没问题 但是写入该位置怎么样 虚拟地址空间也
  • 正则表达式将字符串与可选条件相匹配[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Ruby 中使正则表达式的一部分成为可选 https stackoverflow com questions 5239883 how do i make part of a regular e
  • 合并python中的字典列表

    我有 python 中的字典 格式如下 dict1 Name a value 20 Name b value 10 Name c value 15 我想要输出类似这样的内容 dict2 a 20 b 10 c 15 怎么做 我认为你可以用
  • 计算相对于当前行匹配条件的行数

    我有一个像这样构造的数据框 但它实际上有大约 400k 行 library data table df lt fread id start end 174095 2018 12 19 2018 12 31 227156 2018 12 19
  • Dragonfly Gem 与 ImageMagick 和 Passenger

    我在让蜻蜓宝石与乘客很好地配合时遇到了一些问题 Passenger 似乎没有使用当前的 PATH 因此它找不到转换二进制文件 我给蜻蜓添加了一些配置 这似乎解决了这个问题 require dragonfly rails images Dra
  • 解决依赖关系时Maven错误

    我是 Maven 新手 正在尝试建立我的第一个POMs 我的应用程序将使用 EhCache 进行缓存 前往 Maven Central Repo 链接here http mvnrepository com artifact net sf e
  • 状态 Monad 的传播

    我有以下函数用于在游戏世界的 图形 的 边缘 行走 它改变了世界的状态 特别是玩家的位置 我还需要报告一条消息 提醒玩家位置发生变化 所以我可以返回一个 message newWorld 元组 或者我可以使用 State monad 对吧
  • 使用 RabbitMQ 的 SimpMessagingTemplate.convertAndSend 工作速度非常慢

    我正在使用 spring STOMP over Websocket 和 RabbitMQ 一切正常 但 simpMessagingTemplate convertAndSend 工作速度非常慢 调用可能需要 2 10 秒 同步 阻塞线程 能
  • 尝试在 Visual Studio 2010 中包含 winhttp.h 时出现 C++ 307 错误

    我有一个很大的问题 我正在尝试使用 WinHttp 通过 C 下载文件 并且我正在使用 Visual Studio 2010 来执行此操作 我的问题是程序无法编译 因为生成了 307 错误 所有错误都指的是winhttp h 我提到我已经包
  • FileReader javascript 类不适用于 IE

    我使用 javascript FileReader 类在将图像上传到服务器之前预览图像 Firefox 和 Chrome 似乎一切正常 但由于某种原因似乎不适用于 IE 下面是我的代码 这是针对Cakephp框架的 有没有办法解决这个问题
  • Scroll Rect 手动滚动脚本 Unity C#

    我想为 Unity 编写一个 C 脚本 使滚动视图在按 UP 键时向上滚动 在按 DOWN 键时向下滚动 只需使用 ScrollRect horizontalNormalizedPosition value range 0 to 1 or
  • 从静态基类方法调用子类构造函数

    好的 在 Objective C 中 您可以使用 new this 从基类中的静态方法新建子类 因为在静态方法中 this 指的是类 而不是实例 当我第一次发现它时 这是一个非常酷的发现 并且我经常使用它 然而 在 C 中这是行不通的 该死
  • npm install 不会创建 node_modules 目录

    我正在尝试为 mongodb uni 课程做作业 他们给了我们一些文件 说明是 run npm install mongodb then node app js 由于某种原因 npm install 不会创建 node modules 目录
  • Python 绑定的 RPATH 传播失败

    我正在构建一个使用的库 Ubuntu 22 onnxruntime https github com microsoft onnxruntime在引擎盖下 反过来 onnxruntime使用CUDA 动态加载一些专用的 后端 我构建了除 C
  • 反向对象迭代 (javascript)

    如何从后到前迭代 javascript 对象 该物体看起来像这样 33 140 34 100 35 120 36 200 我希望它像这样显示 36 200 35 120 34 100 33 140 我尝试先排序然后显示 但它按第二个数字排序
  • 哪些单元测试框架可用于 F#

    我正在专门寻找允许我利用该语言的独特功能的框架 我知道FsUnit http fsunit codeplex com 您会推荐其他东西吗 为什么 我自己的单元测试库 Unquote http code google com p unquot
  • 使用 Jena 编写 SPARQL 查询来查询 IRI,例如:http://pt.dbpedia.org/

    我正在使用 Jena 写一个SPARQL查询以获取rdfs label来自作为方法参数接收的 URI 的属性 该方法仅接收如下 URI http pt dbpedia org 它应该返回给我rdfs label 但它没有给我任何回报 我查了