三元组组合的递归 SPARQL 查询

2024-04-05

我使用onspy在Python中递归运行以下查询:

SELECT ?c WHERE {
    ?c rdfs:subClassOf ?restriction .
    ?restriction owl:onProperty :has_part ; owl:someValuesFrom ?p .
    VALUES ?p { <some_uri> }
}

基本上,我获取从中返回的值并重新运行查询以遵循本体中“具有部分”关系的层次结构。我希望通过向查询本身添加递归来避免进行多个 SPARQL 查询。我知道如何使用单个三元组来执行此操作rdfs:subClassOf*但无法弄清楚组合两个三元组的语法:

?c rdfs:subClassOf ?restriction .
?restriction owl:onProperty :has_part ; owl:someValuesFrom ?p .

这可能吗?


我无法给出正式的证明,但这看起来不可能。这不是属性路径的设计目的,也不是存在某些扩展的原因(1 https://wiki.blazegraph.com/wiki/index.php/PropertyPaths, 2 http://docs.openlinksw.com/virtuoso/rdfsparqlimplementatiotrans/).

在某些承诺下(例如,具有树状结构),它是possible https://stackoverflow.com/questions/44301893/how-to-check-for-a-sub-property-at-all-levels-expanded-from-a-sparql-wildcard找出一些东西使用FILTER NOT EXISTS然而,这不是一个通用的解决方案。

这个想法是通过两个查询来完成此操作。从本质上来说,这是SELECT over CONSTRUCT。顺便说一句,这样的 SPARQL 扩展已经proposed http://ceur-ws.org/Vol-749/paper19.pdf.


让我们使用rdflib /questions/tagged/rdflibOntospy 是基于它的,因为

Ontospy 不提供任何本体编辑功能,也不能用于询问三元组存储。

Input (ontology.ttl)

@prefix : <http://www.example.org/ontology#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://www.example.org/ontology> .

<http://www.example.org/ontology> rdf:type owl:Ontology .

:hasPart rdf:type owl:ObjectProperty .

:Country rdf:type owl:Class ;
         rdfs:subClassOf [ rdf:type owl:Restriction ;
                           owl:onProperty :hasPart ;
                           owl:someValuesFrom :State
                         ] .

:State rdf:type owl:Class ;
       rdfs:subClassOf [ rdf:type owl:Restriction ;
                         owl:onProperty :hasPart ;
                         owl:someValuesFrom :City
                       ] .

:City rdf:type owl:Class .

Python代码

import rdflib

g = rdflib.Graph()
g.parse("ontology.ttl", format="n3")

qres = g.update(
    """PREFIX : <http://www.example.org/ontology#> 
       INSERT { ?c :hasSome ?p } 
       WHERE  { ?c rdfs:subClassOf [ owl:onProperty :hasPart ; 
                                     owl:someValuesFrom ?p ] }""")

qres = g.query(
    """PREFIX : <http://www.example.org/ontology#> 
       SELECT ?a ?b WHERE {?a :hasSome+ ?b }""")

for row in qres:
    print("%s :hasSome+ %s" % row)

qres = g.update(
    """PREFIX : <http://www.example.org/ontology#> 
       DELETE { ?s :hasSome ?o } WHERE { ?s :hasSome ?o }""")

Output

:Country :hasSome+ :State
:State   :hasSome+ :City
:Country :hasSome+ :City

如果您不想修改初始 RDFLib 图,只需创建另一个图:

import rdflib

g1 = rdflib.Graph()
g1.parse("ontology.ttl", format="n3")

qres = g1.query(
    """PREFIX : <http://www.example.org/ontology#> 
       CONSTRUCT {?c :hasSome ?p } WHERE {
           ?c rdfs:subClassOf [ owl:onProperty :hasPart ;
                                owl:someValuesFrom ?p  ] }""")

g2 = rdflib.Graph();
for triple in qres: # quite a few triples
    g2.add(triple)

qres = g2.query(
    """PREFIX : <http://www.example.org/ontology#> 
       SELECT ?a ?b WHERE { ?a :hasSome+ ?b }""")

for row in qres:
    print("%s :hasSome+ %s" % row)

也许你可以使用transitiveClosure() http://rdflib.readthedocs.io/en/stable/apidocs/rdflib.html#rdflib.graph.Graph.transitiveClosure or transitive_objects() http://rdflib.readthedocs.io/en/stable/apidocs/rdflib.html#rdflib.graph.Graph.transitive_objects而不是这两种情况下的第二个查询。

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

三元组组合的递归 SPARQL 查询 的相关文章

  • 如何在Python的SciPy中更改稀疏矩阵中的元素?

    我构建了一个小代码 我想用它来解决涉及大型稀疏矩阵的特征值问题 它工作正常 我现在要做的就是将稀疏矩阵中的一些元素设置为零 即最顶行中的元素 对应于实现边界条件 我可以调整下面的列向量 C0 C1 和 C2 来实现这一点 不过我想知道是否有
  • 如何在python 3.7中生成条形码

    我正在使用 python 3 7 为了生成条形码 我尝试使用安装 pyBarcode 库pip install pyBarcode 但它显示以下错误 找不到满足 pyBarcode 要求的版本 来自版本 找不到 pyBarcode 的匹配分
  • Kivy - 有所有颜色名称的列表吗?

    在 Kivy 中 小部件 color属性允许输入其值作为字符串颜色名称 也 例如在 kv file Label color red 是否有所有可能的颜色名称的列表 就在这里 来自Kivy 的文档 https kivy org doc sta
  • 保留完整姓氏,在 pandas 列中获取名字的首字母(如果有的话,还有中间名)

    我有一个 pandas 数据框 其中有一列表示几位网球运动员的姓氏和姓名 如下所示 Player 0 Roddick Andy 1 Federer Roger 2 Tsonga Jo Wilfred 我想保留完整的姓氏并获取姓名的首字母和中
  • 删除 Django 1.7 中的应用程序(和关联的数据库表)

    是否可以使用 Django 1 7 迁移来完全删除 卸载应用程序及其所有跟踪 主要是其所有数据库表 如果没有 在 Django 1 7 中执行此操作的适当方法是什么 python manage py migrate
  • Python 2.7 中的断言对我来说不起作用示例assertIn

    我的 Mac 上安装了 python 2 7 通过在终端中运行 python v 进行验证 当我尝试使用任何新的 2 7 断言方法时 我收到 AtributeError 我看过http docs python org 2 library u
  • pyspark 数据框中的自定义排序

    是否有推荐的方法在 pyspark 中实现分类数据的自定义排序 我理想地寻找 pandas 分类数据类型提供的功能 因此 给定一个数据集Speed列 可能的选项是 Super Fast Fast Medium Slow 我想实现适合上下文的
  • 如果未引发异常,则通过 Python 单元测试

    在Python中unittest框架 是否有一种方法可以在未引发异常的情况下通过单元测试 否则会因 AssertRaise 而失败 如果我正确理解你的问题 你could做这样的事情 def test does not raise on va
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • 结构差异 sudo() run('sudo 命令')

    我想知道函数之间有什么区别sudo 和函数run sudo u user smth 文档上有 sudo 在所有运行方式上都是相同的 除了它总是换行 调用 sudo 程序中的给定命令以提供超级用户 特权 但有几次 sudo cmd 提示我输入
  • Django 的 request.FILES 出现 UnicodeDecodeError

    我在视图调用中有以下代码 def view request body u for filename f in request FILES items body body Filename filename n f read n 在某些情况下
  • Matplotlib 中 x 轴标签的频率和旋转

    我在下面编写了一个简单的脚本来使用 matplotlib 生成图形 我想将 x tick 频率从每月增加到每周并轮换标签 我不知道从哪里开始 x 轴频率 我的旋转线产生错误 TypeError set xticks got an unexp
  • Python:IndexError:修改代码后列表索引超出范围

    我的代码应该提供以下格式的输出 我尝试修改代码 但我破坏了它 import pandas as pd from bs4 import BeautifulSoup as bs from selenium import webdriver im
  • 在 keras 中保存和加载权重

    我试图从我训练过的模型中保存和加载权重 我用来保存模型的代码是 TensorBoard log dir output model fit generator image a b gen batch size steps per epoch
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • 如何与其他用户一起使用 pyenv?

    如何与其他用户一起使用 pyenv 例如 如果我在用户 test 的环境中安装了 pyenv 则当我以 test 身份登录时可以使用 pyenv 但是 当我以其他用户 例如 root 身份登录时如何使用 pyenv 即使你这么做了 我也会s
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que
  • 多个对象以某种方式相互干扰[原始版本]

    我有一个神经网络 NN 当应用于单个数据集时 它可以完美地工作 但是 如果我想在一组数据上运行神经网络 然后创建一个新的神经网络实例以在不同的数据集 甚至再次同一组数据 上运行 那么新实例将产生完全错误的预测 例如 对 XOR 模式进行训练
  • 查找总和为给定数字的值组合的函数

    这个帖子查找提供的 Sum 值的组合 https stackoverflow com a 20194023 1561176呈现函数subsets with sum 它在数组中查找总和等于给定值的值的组合 但由于这个帖子已经有6年多了 我发这
  • 如何为不同操作系统/Python 版本编译 Python C/C++ 扩展?

    我注意到一些成熟的Python库已经为大多数架构 Win32 Win amd64 MacOS 和Python版本提供了预编译版本 针对不同环境交叉编译扩展的标准方法是什么 葡萄酒 虚拟机 众包 我们使用虚拟机和Hudson http hud

随机推荐

  • 角度拦截器 - 类型“Observable”不可分配给类型“Observable>”

    我刚刚从一篇文章中复制了这段代码 import Injectable from angular core import HttpEvent HttpInterceptor HttpHandler HttpRequest HttpErrorR
  • 日期间隔不应超过 20 天

    我有起始日期和截止日期 如果用户输入起始日期和截止日期 它们之间的差距不应超过 20 天 即 如果用户从 date 30 08 2018 到 date 26 09 2018 输入 差距超过 20 天 所以我想使用 jquery 显示警报 下
  • 移动构造函数和初始化列表

    我想为需要成为值类型的特定类型实现移动构造函数 无复制构造函数 boost unordered map 我们称这种类型为Composite Composite有以下签名 struct Base Base stuff no default c
  • 如何在 SQL Server 中创建唯一的随机字母数字序列

    我想将唯一的随机字母数字序列作为数据库表的主键 序列中的每个字符都是字母 a z 或数字 0 9 我想要的示例 kl7jd6fgw zjba3s0tr a9dkfdue3 我想创建一个可以处理该任务的函数 您可以使用唯一标识符 https
  • React Native TouchableOpacity onPress 问题

    我有一个简单的图标按钮 如下所示 class SideIcon extends Component render return
  • 使用递归将列表分解为子列表

    我正在尝试使用类型声明编写一个函数 Int Bool gt Int 我希望该功能仅添加Ints 到同一个嵌套子列表 如果布尔值是True 但是如果布尔值是False 我想要Int与下一个相关联True要添加到 a 的布尔值new子列表 例如
  • 内存不足,无法继续运行 Java 运行时环境

    我的系统有 4 GB RAM 运行 Windows 操作系统 我安装了 VMWare 来设置具有 2GB RAM 的 Ubuntu 虚拟机 在 Ubuntu 中 我打开 Eclipse 并开始编码 Eclipse 开始一次又一次关闭 我开始
  • 如何将 HostControl 实例传递给 TopShelf 中的自定义主机服务?

    This 问题已在其他地方提出 https stackoverflow com questions 28740658 how to detect if topshelf is running in console mode 但没有迹象表明我
  • 如何更新 SQL 中的选择性字段(保留部分字段不变)?

    我想用两个日期更新记录 如果没有要更新的新值 则保持现有数据不变 这是一个示例表记录 id last foo last bar 1 2010 05 30 2010 05 30 我正在使用的查询 UPDATE sampledates SET
  • Android 使用 P12 证书签署数据

    因此 我搜索了一段时间 但找不到真正需要的东西 因为出现的每个结果都与签署实际的包有关 所以基本上我所做的就是 Web 服务受到会话管理器的保护 为了获取会话号 需要将 GUID 发送到 Web 服务 在 iOS 方面 我们能够获得此设置
  • 通过 AWS API Gateway 集成模板使用 DynamoDB 的 lastEvaluatedKey 进行扫描

    我使用 AWS APIGateway 集成模板直接扫描 dynamoDB 而不是编写单独的 lambda 来处理请求 响应 但是 扫描有 1MB 的限制 这导致扫描仅限于部分数据 根据文档 我们应该重新扫描 直到找到匹配项或使用 lastE
  • 如何将 .csv 文件导入 R?

    我有这个 csv 文件 ID GRADES GPA Teacher State 3 C 2 Teacher3 MA 1 A 4 Teacher1 California 我想做的是使用 R 统计软件读取文件 并将标题读入某种列表或数组 我是
  • 有没有具有这些功能的轻量级 JDBC 包装器?

    命名参数 就像 Spring 中的 JdbcTemplate JDBC 连接设置的 XML 配置 用于查询的 XML 配置 类似休眠的东西
  • ParDo 中的侧面输出 | Apache Beam Python SDK

    由于该文档仅适用于 JAVA 我无法真正理解它的含义 它指出 虽然 ParDo 始终生成一个主输出 PCollection 作为 apply 的返回值 但您也可以让 ParDo 生成任意数量的附加输出 PCollection 如果您选择有多
  • 如何从 SQL Server 更改跟踪获取所有已更改表的列表

    如何获取在给定版本之后有任何跟踪更改的所有表 已启用更改跟踪 的列表 这将返回自上一个跟踪版本以来已更改的所有表的列表 set nocount on We want to check for changes since the previo
  • 计算段:距绝对地址的偏移量

    我可以计算一个地址Segment Offset as Segment 0x10 Offset 但如何计算相反的情况呢 例如 我怎样才能从0xF4170 to F400 0170和来自0xACF04 to ABCD 1234 您需要具有起始基
  • 为什么控件不想被删除?

    我试图删除 winform 面板中包含的所有控件 但它们只是不想被删除 其中一些被删除 有些则没有 我已经尝试了两种方法 但什么也没有 foreach foreach Control controlEntry in this content
  • int [] 和 int* 作为函数参数的区别

    这是一道面试题 有什么区别int and int 它们都是函数的输入参数 f int a int b 我的回答 For f 它们具有相同的功能 第一个是第一个元素的开始位置a 第二个指向一个int 但是 如何在不传递其他参数的情况下区分它们
  • Git 提交针对没有分支的标签

    如果我在没有创建分支的情况下查看源代码的标记版本 Git 会指示我根本不与任何分支关联 不过 很高兴让我进行更改并检查它们 这些变化去哪里了 如果我切换回 master 它们就会消失 被 master 中的内容覆盖 而且我似乎无法再次找到它
  • 三元组组合的递归 SPARQL 查询

    我使用onspy在Python中递归运行以下查询 SELECT c WHERE c rdfs subClassOf restriction restriction owl onProperty has part owl someValues