计算OWL本体中子类的深度

2024-02-12

我正在寻找一个 SPARQL 查询,它可以返回 OWL 层次结构中指定子类的位置。我研究了几个例子,但我能达到的最好结果是计算指定超类与其子类之间的相对路径(感谢约书亚·泰勒 https://stackoverflow.com/a/23094961/2361497)。相反,我需要计算给定子类的“绝对”深度。

我的本体包含几个顶级类,每个类后面都有一个单独的子类树。这是我的 OWL 的一部分(使用 rdfcat 实用程序转换为 TTL):

@prefix :      <http://www.semanticweb.org/administrator/ontologies/2014/7/untitled-ontology-9#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .

:depression  a              owl:Class ;
    rdfs:subClassOf  :pit .

:pit    a                owl:Class ;
    rdfs:subClassOf  :on_the_road .

:on_the_road  a            owl:Class ;
    rdfs:subClassOf  :traffic_accident .

:traffic_accident  a  owl:Class .

在这种情况下,对于给定的depression我期望得到的课程3, pit -> 2, on_the_road -> 1, traffc_accident(顶级类)-> 0。


同样的方法在这里可以用于查找层次结构中类的深度(当然,假设每个类都有到根的唯一路径)。诀窍在于您首先需要找到层次结构的根。您可以使用以下查询来执行此操作以获得以下结果。

prefix : <http://www.semanticweb.org/administrator/ontologies/2014/7/untitled-ontology-9#>
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select ?class (count(?mid)-1 as ?depth) {
  #-- Select root classes (classes that have no
  #-- superclasses other than themselves).
  {
    select ?root {
      ?root a owl:Class
      filter not exists {
        ?root rdfs:subClassOf ?superroot 
        filter ( ?root != ?superroot )
      }
    }
  }

  ?class rdfs:subClassOf* ?mid .
  ?mid rdfs:subClassOf* ?root .
}
group by ?class
order by ?depth
-----------------------------
| class             | depth |
=============================
| :traffic_accident | 0     |
| :on_the_road      | 1     |
| :pit              | 2     |
| :depression       | 3     |
-----------------------------

请注意,如果您有推理机,事情可能会更复杂一些。如果你有一个推理者,那么every类(包括您的根)是 owl:Thing 的子类,因此实际上只有一个根,并且所有深度都将减少一(根据您在问题中提到的内容)。您可以通过调整查找 ?root 值的查询中的过滤器来避免这种情况。

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

计算OWL本体中子类的深度 的相关文章

  • 组图模式在 SPARQL 中如何工作

    首先 我不知道这是否真的称为组图模式 反正 请看看这个查询 select x y where x rdf type rs Recommendable union xd rs doesntexist y 有no rs doesntexist但
  • 如何使用 SPARQL 区分事物和无生命物体

    使用 SPARQL 我可以很轻松地获取有关某些资源的所有相关信息 但我很难弄清楚如何真正区分事物和资源things 其中Thing是所有类的超类 是无生命的物体 例如杯子 勺子 铅笔等 例如 下面是 DBPedia 中的一些无生命物体 Fo
  • W3C 验证器无法处理 RDF/XML

    我正在尝试描述一个非常基本的地铁火车站地图 其中包含站点和时间 这个 RDF 到 Turtle 转换器 http rdf translator appspot com 可以解析我的 XML 但 W3C 验证器抛出 Error Your do
  • OWL ObjectProperty 在 Protégé 中作为注释加载

    我正在尝试加载ontology http www bbc co uk ontologies wildlife 2010 11 04 shtml在 Prot g 中 但未按预期进行处理 最有问题的是所有对象和数据属性都显示为注释而不是数据属性
  • 限制 Factforge sparql 端点使用的图表

    Using http www sparql org sparql html http www sparql org sparql html运行此查询 prefix oxprop
  • 在 Protege 中使用 SPARQL 推断数据

    我正在尝试推断 RDF 数据 假设我有这些三元组 RDF Turtle 是我使用 Protege 创建的 prefix owl
  • 使用 SPARQL 提取 dbpedia 实体的层次结构

    我正在尝试使用以下方法提取 DBpedia 资源的 Wikipedia 类别或 Yago 分类的层次结构SPARQL端点 http dbpedia org sparql 例如 我想以实体的分层形式找出所有可能的类别和类 例如 http db
  • 通过SPARQL UPDATE从本体中删除空白节点

    我在 SPARQL UPDATE 插入 操作的帮助下将一些数据存储在 protege 中制作的本体模型中 以下是更新查询 PREFIX test
  • 如何使用 RDFLib 解析大数据集?

    我正在尝试使用 RDFLib 3 0 解析几个大图 显然它处理第一个图并在第二个图上死掉 MemoryError 看起来 MySQL 不再支持作为存储 您能建议一种以某种方式解析这些图的方法吗 Traceback most recent c
  • rdf:seeAlso 和 rdfs:seeAlso 之间的区别

    有什么区别rdf seeAlso and rdfs seeAlso 当我可以使用时rdf seeAlso当我可以使用时rdfs seeAlso 你能举出一些例子吗 首先 请注意rdf and rdfs分别是常用于引用 RDF 语法和 RDF
  • djangonic 处理 rdf 的方法?

    我正在寻找 django 的 RDF 项目 但找不到任何活动的项目 这似乎是一个不错的http code google com p django rdf http code google com p django rdf 但最后一次提交是在
  • 为什么 RDF 中对对象使用代码而不是字符串?

    例如 entity f06574 rdfs label Orioles 或者这样的格式 tt0268252 a Movie 在任一情况下 f06574 and tt0268252是代码 而不是实体或实例的实际字符串 原因之一可能是因为同一个
  • 如何从维基数据属性中获取最新值?

    假设我想获取每个国家 Q6256 及其最近记录的人类发展指数 P1081 值的列表 该国家 地区的人类发展指数属性包含在不同时间点获取的数据点列表 但我只关心最新的数据 此查询不起作用 因为它会为每个国家 地区获取多个结果 每个人类发展指数
  • SHACL 规则中的多路径和存在量化(我应该使用 sh:oneOrMorePath 吗?)

    我想了解如何处理 SHACL 规则中的多路径和存在量化 让我用一个示例本体来举例说明我的问题 本体包括 Approve Legal Result Man 和 Machine 类 所有类都是不相交的 它有两个属性 has theme 和 co
  • 将 rdfs:range 的 xsd:string 限制为 [A-Z]

    如何将数据类型属性的范围指定为文字形式与 A Z 匹配的 xsd strings OWL 限制对我来说不起作用 至少乍一看是这样 有没有办法用正则表达式来做到这一点 如果有的话 在哪里 我想你的意思是 单个大写字母 string patte
  • 使用 SPARQL 查询的 UNION 和交集

    我正在将用户定义的查询转换为 SPARQL 例如 当用户说 abc 时 这意味着给我给定类型的所有具有名为 abc 属性的节点 作为其扩展 如果用户说 abc 或 pqr 和 lmn 我需要查找给定类型的某些属性为 abc 或 pqr 和
  • 解析 SPARQL 查询中 AltLabel 的返回值

    在如下所示的 Wikidata SPARQL 查询中 我希望能够使用自定义分隔符作为返回值 placeOfBirthAltLabel 问题是下面的一些值 placeOfBirthAltLabel包含逗号 例如 纽约 的同义词包括作为单个条目
  • Java 中 OWLOntology 到 Jena 模型的转换

    我需要将数据从 OWLOntology 对象 OWL api 的一部分 转换为模型对象 Jena Api 的一部分 我的Java程序应该能够加载owl文件并将其内容发送到fuseki服务器 根据我读到的内容 只有使用 Jena Api 才能
  • rdf:type 令人费解的语义

    虽然我已经创建了几个本体并且拥有一些专业知识 但我有一段时间对 rdf type 的语义不清楚 W3C 规范规定 rdf type is an instance of rdf Property that is used to state t
  • DBpedia 数据集中的哪个 .nt 文件包含有关 DBpedia 类的三元组?

    我正在处理 DBpedia 数据集 并使用 Apache Jena 在本地 Jena TDB 数据集上执行 SPARQL 我只下载了部分文件数据库百科下载 http wiki dbpedia org Downloads38这样我就可以将数据

随机推荐

  • 如何解决 Gradle 构建中的存储库证书错误

    我安装了最新版本的android studio 我已经安装了jdk 8 当我打开 android studio 时 出现以下错误 Unable to resolve dependency for app debugUnitTest comp
  • 动画背景java游戏

    我正在编写一个类似于小行星的游戏 但我不明白如何在后台生成小行星 现在我在主类中生成了一个小行星 但我想为小行星创建一个类 我该怎么做 主班 public void paintComponent Graphics g super paint
  • 使用鼠标在 openGL 中移动绘图

    我试图在按住鼠标左键的同时在 openGL 中移动图像 我不想拖动物体 只是移动整个图片 它是分形的二维绘图 我被告知我可以使用 gluortho2d 但我找不到任何信息或类似的尝试如何做到这一点 我假设类似的事情 void mouse c
  • log4j休眠错误

    配置休眠时出现此错误 log4j WARN No appenders could be found for logger org hibernate cfg annotations Version log4j WARN Please ini
  • 如何将 Groovy 类导入 Jenkinsfile?

    如何在 Jenkinsfile 中导入 Groovy 类 我尝试了几种方法 但没有一个有效 这是我要导入的类 Thing groovy class Thing void doStuff 这些是行不通的事情 Jenkinsfile 1 nod
  • 如何在 application.yaml 中设置 logback.xml 属性

    I have logback xml像这样
  • 将小数字加载到 64 位 x86 寄存器中

    在 64 位 x86 CPU 下 通常我们将数字 1 加载到寄存器中 如下所示 mov rdx 1 48BAFFFFFFFFFFFFFFFF 该指令按照旧版本 NASM 的组装方式占用 10 个字节 另一种方法是 xor rdx rdx 4
  • MySQL服务器和MySQL客户端有什么区别

    在 Ubuntu 中 我通常安装两者 但是 MySQL 的客户端和服务器之间有什么区别 另外 当一个新的声明提到它需要 MySQL 5 x 时 它是指客户端 服务器还是两者都需要 例如这个链接https dev mysql com doc
  • 如果我在打字稿中使用 `module("somelib")`,它就无法在浏览器中运行

    我正在尝试在客户端使用带有 angularjs 的打字稿 我发现如果我使用外部模块 生成的js将无法在浏览器中运行 控制器 ts
  • 如何检查 ECMAScript 6 类和函数之间的差异?

    在 ECMAScript 6 中typeof根据规范 类的数量是 function 但是 根据规范 您也不允许将通过类语法创建的对象作为普通函数调用来调用 换句话说 您必须使用new关键字 否则会抛出 TypeError TypeError
  • iPad 上的 Swift Playgrounds 全屏显示

    尝试在 iPad 上创建一个全屏显示的 Swift Playground 我尝试使用获取屏幕的边界UIScreen main bounds 但显示对于默认的游乐场框架来说太大了 我知道这是可能的 因为所有示例游乐场都是全屏的 我只是不明白它
  • 通过命令行获取制表符大小

    是否有一种自动方法来检索 matlab 编辑器和命令窗口的选项卡大小 是的 您可以打开首选项窗口并自行查找 但我希望它是自动化的 实际上我认为这可以推广到检索any下面的屏幕截图中显示了这些用户偏好 我很快找到了解决方案 经过深思熟虑后 最
  • C++ 创建 Windows 屏幕保护程序

    我使用 OpenGL 和 SDL 在 C 中创建了一个动画 它不使用 Windows 库 并希望将其用作 Windows 系统的屏幕保护程序 我读过一个例子 它描述了你只需更改 exe延伸至 scr 我已经这样做了并将动画作为屏幕保护程序运
  • 如何使用 php echo 显示长轮询结果

    我正在使用一个长轮询脚本 如果我附加任何文本进行测试 该脚本可以很好地工作 现在我想显示 user php 从数据 update php 收集的长轮询结果 我在 user php 页面使用了我的轮询脚本 在这里 如果我使用如下的 测试轮询
  • 作为另一个用户安装共享文件夹(vbox)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 很抱歉在这里问这个问题 但我尝试了服务器故障 但 4 天都没有得到任何答复 那里的相关问题 https serverfault com questio
  • ASP.Net 5 类库包项目中的 dnxcore50 框架支持吗?

    我正在尝试开发我的第一个 ASP Net Web 应用程序 在我的解决方案中我有两个项目 AWeb Application and Class Library Package 并注意到 Web 应用程序的框架中有这个project json
  • 如何在 Dockerfile 中指定 ENTRYPOINT 的工作目录

    Docker 映像 基于 Windows 包含一个应用程序目录 位于C App 该目录内有几个子文件夹和文件 包括一个名为process bat Dockerfile 用于构建镜像 的结尾如下 ENTRYPOINT C App proces
  • DataGridView 可调整列大小,但最后一列无法调整得更大?

    For c 0 To grd Columns Count 1 grd Columns c Resizable DataGridViewTriState True Next c 这使得我的 DataGridView 中的所有列都可以调整大小
  • Azure 服务 TopicClient 线程安全且可重用吗?

    我们正在使用 Azure SDK 将消息发布到服务总线 在 Web API 调用中 我们对每个传入请求重复执行这些任务 MessagingFactory factory MessagingFactory CreateFromConnecti
  • 计算OWL本体中子类的深度

    我正在寻找一个 SPARQL 查询 它可以返回 OWL 层次结构中指定子类的位置 我研究了几个例子 但我能达到的最好结果是计算指定超类与其子类之间的相对路径 感谢约书亚 泰勒 https stackoverflow com a 230949