删除 SPARQL 中不需要的超类答案

2023-12-24

我有一个 OWL 文件,其中包含一个分类层次结构,我想编写一个查询,其中答案包括每个个体及其直接分类父级。这是一个示例(完整的查询相当混乱)。

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http:://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <urn:ex:> .

:fido rdf:type :Dog .
:Dog rdfs:subClassOf :Mammal .
:Mammal rdfs:subClassOf :Vertebrate .
:Vertebrate rdfs:subClassOf :Animal .
:fido :hasToy :bone

:kitty rdf:type :Cat .
:Cat rdfs:subClassOf :Mammal .
:kitty :hasToy :catnipMouse .

这个查询做了我想要的。

prefix rdf: <http:://www.w3.org/1999/02/22-rdf-syntax-ns#> .
prefix : <urn:ex:> .

SELECT ?individual ?type 
WHERE {
   ?individual :hasToy :bone .
   ?individual rdf:type ?type .
}

问题是我宁愿使用 OWL 文件的经过推理的版本,不出所料,它包含附加语句:

:fido rdf:type :Mammal .
:fido rdf:type :Vertebrate .
:fido rdf:type :Animal .
:kitty rdf:type :Mammal .
:kitty rdf:type :Vertebrate .
:kitty rdf:type :Animal .

现在,查询结果会产生有关 Fido 是哺乳动物等的附加答案。我可以放弃使用该文件的推理版本,或者,由于 SPARQL 查询是从 java 调用的,我可以执行一堆附加查询找到出现的包容性最小的类型。我的问题是是否有一个合理的纯 SPARQL 解决方案仅返回 Dog 解决方案。


一个通用的解决方案是你确保你要求direct仅键入。一类C是实例的直接类型x if:

  1. x属于类型C
  2. there is no C' such that:
    • x属于类型C'
    • C'是一个子类C
    • C'不等于C

(顺便说一句,最后一个条件是必要的,因为在 RDF/OWL 中,子类关系是自反的:每个类都是其自身的子类)

在 SPARQL 中,这变成了这样:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX : <urn:ex:> .

SELECT ?individual ?type 
WHERE {
   ?individual :hasToy :bone .
   ?individual a ?type .
   FILTER NOT EXISTS { ?individual a ?other .
                       ?other rdfs:subClassOf ?type .
                       FILTER(?other != ?type)
   }
}

根据您用来执行这些查询的 API/triplestore/库,可能还有其他特定于工具的解决方案。例如,Sesame API(披露:我是 Sesame 开发团队的成员)可以选择禁用单个查询的推理:

TupleQuery query = conn.prepareTupleQuery(SPARQL, "SELECT ...");
query.setIncludeInferred(false); 

TupleQueryResult result = query.evaluate();

Sesame 还提供了一个可选的附加推理器(称为“直接类型推理器”),它引入了您可以查询的附加“虚拟”属性,例如sesame:directType, sesame:directSubClassOf等等。其他工具无疑也会有类似的选项。

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

删除 SPARQL 中不需要的超类答案 的相关文章

随机推荐

  • 如何设置谷歌图表API区域设置

    我想将 google 图表 API 的语言设置为一个值 它当前使用访问该页面的浏览器的语言 如何将其设置为我的应用程序的语言 请参阅谷歌文档使用特定区域设置加载图表 https developers google com chart int
  • HTML 电子邮件 - 使图像适合表格单元格

    我有一张桌子 三个人td他们每个人都需要有图像 的宽度和高度td是固定的 但图像尺寸可能会变化 目标是在不扭曲细胞或图像本身的情况下拟合图像 不能用background image财产 我知道很糟糕 这是代码 table cellpaddi
  • 为什么预连接资源提示不起作用?

    我创建了一个测试页面crenshaw dev demo hints html http crenshaw dev demo hints html浏览器提示请求 dns prefetch 并预连接到 mac9416 com
  • PHP:对象类型转换为数组后出现奇怪的数组行为

    当你这样做时array的类型转换json decoded 值 与 assoc false PHP 创建一个带有字符串索引的数组 a array json decode 7 value1 8 value2 9 value3 13 value4
  • Spring Data Rest - PUT 存储库在子引用上静默失败

    I use Spring Data Rest with Spring Boot2 1 1 发布 我有课User with a ManyToMany与类的关系Skill 当我做一个POST用他的技能创建一个用户 一切都很顺利 当我做一个PUT
  • 公共常量字符串?

    可以使用这样的类 特定于设计 指南 吗 我正在使用 MVVM 模式 public static class Pages public const string Home Home xaml public const string View2
  • gets() 接受输入而不实际给它任何输入?

    我对 C 相当陌生 如果这是一个愚蠢的问题 我很抱歉 但是当我运行以下代码时 include
  • jsonp 没有在发送之前触发?

    我正在开发一个项目 使用 ajax 并将 dataType 设置为 jsonp 从不同域调用 Web 服务 ajax type GET url testService asmx async true contentType applicat
  • 你怎么知道何时使用左折叠和右折叠?

    我知道向左折叠会产生左倾树 而向右折叠会产生右倾树 但是当我伸手去寻找折叠时 有时我会发现自己陷入了令人头痛的想法中 试图确定哪种折叠是合适的 我通常最终会解开整个问题 并逐步完成适用于我的问题的折叠函数的实现 所以我想知道的是 确定向左折
  • 如何将 JCE 算法名称转换为 AlgorithmIdentifier 对象?

    我正在使用 BouncyCastle 1 54 我有一个 JCE 算法字符串 例如 ECDSAwithSHA256 我需要一个 org bouncycastle asn1 x509 AlgorithmIdentifier 对象 或者 我可以
  • 找到 Django URL 所需的权限而不调用它们?

    我的 Django 应用程序当前具有受 permission required 函数保护的 URL 该函数以三种不同的方式调用 作为views py中的装饰器 具有硬编码的参数 作为一个简单的函数 具有自动生成的参数 在自定义的基于类的通用
  • 切换到远程分支以分离头部[重复]

    这个问题在这里已经有答案了 这是我所有分支的列表 git branch a temp remotes heroku master remotes origin dev remotes origin master 当我打字时git check
  • 跳过 fgetcsv 方法的第一行

    我有一个 CSV 文件 我从 CSV 文件读取数据 然后我想跳过 CSV 文件的第一行 其中将包含任何标头 我正在使用这段代码 while emapData fgetcsv file 10000 FALSE Code to insert i
  • 放弃 C# 7.0 中功能的重要性?

    在体验新的 C 7 0 功能时 我坚持了下来discard特征 它说 丢弃是可以分配但无法读取的局部变量 从 即它们是 只写 局部变量 然后 示例如下 if bool TryParse TRUE out bool 当这有益时 真正的用例是什
  • Android 7.0中如何从相机或图库中选择图像进行裁剪?

    从图库和相机中选择图像进行裁剪 它是在 Android 7 0 以下完成的 但在 Android Naught 中它会在相机中崩溃 我使用 fileprovider 但不起作用 MainActivity java public class
  • 配对 t 检验导致应用循环崩溃(已编辑)

    为了回应有用的评论 我编辑了原来的问题 我假设 for 循环和 apply 循环给出不同的结果 我正在使用 R 运行大量 2 组 t 检验 使用来自分隔表的输入 根据这里和其他地方的建议 我尝试了 for loops 和 apply 来实现
  • Woocommerce - 用户注销时清除购物车[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在 WordPress 网站中使用 woocommerce 当用户注销时 我需要清除登录用户的购物车内容 我在插件设置中找不到任何相
  • 重用材质对话框内现有的角度组件

    我有一个现有的组件ResultGridComponent这是通过传递数据 Input 我想使用相同的组件MatDialog 因此我添加了 Inject MAT DIALOG DATA data在构造函数中ResultGridComponen
  • scala 中的“隐式”现在已被弃用或至少不再需要了吗?

    检查 fs2 教程 我偶然发现了以下代码 def client F MonadCancelThrow Console Network F Unit Network F client SocketAddress host localhost
  • 删除 SPARQL 中不需要的超类答案

    我有一个 OWL 文件 其中包含一个分类层次结构 我想编写一个查询 其中答案包括每个个体及其直接分类父级 这是一个示例 完整的查询相当混乱 prefix rdfs