从 RDF 节点拉出字符串

2024-04-12

在使用 Jena 的 SPARQL 查询时,我试图以更易读的格式获取数据,但是我不知道如何以正确的方式提取数据。 就目前而言,输出是:

"http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SaucelitoCanyon http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SaucelitoCanyon"

相反,只想将“Saucelito Canyon”作为输出。

public JenaQuery() {

    String wineRegion = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"
            + "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"
            + "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n"
            + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"
            + "PREFIX wine:<http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#>\n"
            + "SELECT  ?region ?winery \n"
            + "WHERE {?wine wine:locatedIn ?region . \n"
            + "?region wine:locatedIn wine:CaliforniaRegion  . \n"
            + "?wine wine:hasMaker  ?winery}";

    String inputFileName = "wine.rdf";
    // create an empty model

    Model model = ModelFactory.createDefaultModel();
    // use the FileManager to find the input file
    InputStream in;
    in = FileManager.get().open(inputFileName);
    if (in == null) {
        throw new IllegalArgumentException(
                "File: " + inputFileName + " not found");
    }
    // read the RDF/XML file
    model.read(in, null);
    try (QueryExecution qexec = QueryExecutionFactory.create(wineRegion, model)) {

        ResultSet results = qexec.execSelect();

        while (results.hasNext()) {
            QuerySolution row = results.next();
            RDFNode winery = row.get("winery");
            System.out.println(winery);
        }

        qexec.close();

    }

}

由于您已经在 SPARQL 查询中获得了前缀,因此可以使用strafter and str函数将 URI 转换为字符串并在前缀后面加上后缀。在下文中,我使用了values ?winery { ... }绑定?winery到特定的 URI,但您的查询已经处理了这个问题。重要的部分是bind之后负责字符串处理。

PREFIX wine: <http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#>
SELECT ?winery ?localname
WHERE {
  values ?winery { wine:SomeWinery }
  bind( strafter(str(?winery),str(wine:)) as ?localname )
}
winery                                                            localname
<http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#SomeWinery> "SomeWinery"

也就是说,在结构良好的本体中,个人通常会拥有一个rdfs:标签这应该为个人提供一个字符串标签。当它可用时,您可能会考虑简单地检索该值。例如。,

SELECT ?winery ?name
WHERE {
  #-- ... 
  ?winery rdfs:label ?name
}

这在之前已经描述过我的答案 https://stackoverflow.com/a/20845304/1281433 to 检索 owl 中特定子类的类名 https://stackoverflow.com/q/20830056/1281433,但该问题不涉及 Jena,因此它并不完全重复,即使相同的基于 SPARQL 的解决方案也有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 RDF 节点拉出字符串 的相关文章

随机推荐

  • 添加填充到谷歌地图bounds.contains()

    我有一个侧边栏 显示谷歌地图当前地图视图中的标记名称 侧边栏内容随着地图的移动而变化 google maps event addListener map bounds changed function document getElement
  • 相对路径如何在 Access 2007 中指定链接表?

    我有一个 Access 数据库的前端和后端 前端引用链接表 我需要进行相对链接而不是显式链接 即 database 被引用而不是 address database 是否可以这样做 或者我必须指定绝对路径 我已经尝试过上面的一些答案 尤其是马
  • 在 IE 8 中加速“:not”jQuery CSS 选择器?

    我在 IE 中遇到性能问题 并且正在执行一个包含以下选择器的大循环 td not some cell 在 IE 中是否有更有效的方法来做到这一点 IE8不支持 not选择器本身 所以如果您使用像 jQuery 内置的 Sizzle 这样的纯
  • 基于 Rails cookie 的会话:将会话范围与过期时间混合

    所以我以不同的方式问了这个问题here https stackoverflow com questions 14712968 session expiration not working in rails 14713390 14713390
  • 冒泡排序中的预期交换次数[重复]

    这个问题在这里已经有答案了 可能的重复 冒泡排序中的交换次数 https stackoverflow com questions 11331314 number of swaps in bubble sort 问题简述如下 给定一个数组 A
  • 调用网页的任务计划尽可能简单

    我有一个网页 它进行一些数据库更新 例如http www mysite com updates asp http www mysite com updates asp 我希望每天 09 00 自动调用此页面 我知道如何在IIS中安排任务 但
  • Azure AAD - 受众无效

    我创建了一个使用 azure Active Directory 保护的 Web api 我现在需要对此进行测试并尝试将 fiddler 与授权标头一起使用 我正在尝试使用以下代码生成令牌 Target obj Target cmbTarge
  • 如何处理无序拨打的“接听”电话?

    我有一个模拟销售漏斗的 WF4 服务 它的工作原理是从 注册 接收呼叫开始 之后 有 10 个类似的阶段 每个阶段包含 2 个接收 在当前阶段验证收到的数据之前 您无法前进到某个阶段 但我不确定的是 即使我的客户端应用程序不允许这样做 我怎
  • 如何使用实体框架使用序列在 Oracle 中插入标识值

    在 Oracle 数据库中 ID 列定义为数字 以及表的相应序列 如何确保 ID 列获取序列中的下一个值 using var db new MyOracleDb var user new User first name Abe last n
  • 服务器在渲染之前不会等到http调用完成 - Angular 4服务器端渲染

    我已经继续实现了角度通用 并且能够通过服务器端渲染来渲染 html 的静态部分 我面临的问题是 正在进行 API 调用 并且服务器正在渲染 html 而无需等待 http 调用完成 因此 我的模板依赖于从 api 调用获取的数据的部分不会在
  • 使用异步等待时无法获取对象的属性

    我正在使用 Node js 和 mongoose 但这个问题纯粹是关于async await部分 我写了这段代码 并且它有效 router get applications id async req res next gt var post
  • Hibernate 中的小写注释

    hibernate中有没有办法将实体的列注释为字符串小写 我的意思是例如 Entity public class User Column private String username 我希望休眠在所有未绑定到特定数据库的查询中将用户名转换
  • 如何在 gdb 中附加进程

    我有一个简单的 C 程序 它分叉一个进程 然后运行一个可执行文件 我想将子进程附加到 gdb 我在控制台中运行主程序并打开另一个控制台来查找子进程的 pid 然后使用以下命令启动 gdb gdb attach 12271 where 122
  • 不需要的空白导致列扭曲

    我正在尝试从间隔 非制表符 的 txt 文件导入化学品列表 NO FORMULA NAME CAS No A B C D TMIN TMAX code ngas TMIN ngas 25 C ngas TMAX 1 CBrClF2 brom
  • 如何在函数声明中声明 C++ mem_fn(member_function) ?

    我理解将成员函数的地址传递到类之外的基本问题 我感觉 mem fn 可能是解决方案 但我在具体细节上遇到了麻烦 我在类 p 中有一个成员函数 当前声明为 typedef void valNamedFlagsCallback const in
  • 创建半透明或透明窗口从透明到鼠标事件,添加到表单的控件除外

    您好 我试图获得像玻璃一样的透明形式 它可以使点击和每个鼠标事件传递到玻璃后面的窗口或项目 这是我用 Windows 窗体编写的代码 namespace ClickThroughMe public partial class ClickTh
  • 错误 1 ​​无法将类型“double”隐式转换为“int”。存在显式转换(您是否缺少转换?)[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我的 C 代码有一个错误 他们说 错误 1 无法将类型 double 隐式转换为 int 存在显式转换 是否缺少强制转换 错误在哪
  • 何时在 Java 中使用“this”

    我为我的琐碎且可能愚蠢的问题道歉 但我对在使用方法或访问某些内容时何时使用 this 前缀感到有点困惑 例如 如果我们看 4 这里 http apcentral collegeboard com apc public repository
  • 按钮和 GLSurfaceView

    我有一个 GLSurfaceView 我在其中使用 OpenGL 显示一些动画 我现在想向该视图添加一个按钮 这是如何实现的 不涉及xml布局可以做到吗 您可以手动构建视图并将其添加到活动的内容视图中 在 GLSurfaceView 上执行
  • 从 RDF 节点拉出字符串

    在使用 Jena 的 SPARQL 查询时 我试图以更易读的格式获取数据 但是我不知道如何以正确的方式提取数据 就目前而言 输出是 http www w3 org TR 2003 PR owl guide 20031209 wine Sau