SPARQL:如何将 owl:equivalentClass 传输到 rdfs:subClassOf (owl:Restriction) 属性?

2024-05-10

我的问题是关于使用 SPARQL 查询一些 owl 本体,其中owl:Restrictions被大量使用(在我的例子中,这是“细胞本体论 http://obofoundry.org/ontology/cl.html").

以下是一些典型条目的示例(以 Turtle 格式,从上述本体中提取):

###  http://purl.obolibrary.org/obo/CL_0000792
obo:CL_0000792 rdf:type owl:Class ;
           owl:equivalentClass [ owl:intersectionOf ( obo:CL_0000624
                                                      [ rdf:type owl:Restriction ;
                                                        owl:onProperty obo:RO_0002104 ;
                                                        owl:someValuesFrom obo:PR_000001380
                                                      ]
                                                      [ rdf:type owl:Restriction ;
                                                        owl:onProperty obo:RO_0002215 ;
                                                        owl:someValuesFrom obo:GO_0050777
                                                      ]
                                                      [ rdf:type owl:Restriction ;
                                                        owl:onProperty <http://purl.obolibrary.org/obo/cl#has_low_plasma_membrane_amount> ;
                                                        owl:someValuesFrom obo:PR_000001869
                                                      ]
                                                    ) ;
                                 rdf:type owl:Class
                               ] ;
           rdfs:subClassOf obo:CL_0000624 ,
                           obo:CL_0000815 ,
                           [ rdf:type owl:Restriction ;
                             owl:onProperty obo:RO_0002104 ;
                             owl:someValuesFrom obo:PR_000001380
                           ] ,
                           [ rdf:type owl:Restriction ;
                             owl:onProperty obo:RO_0002215 ;
                             owl:someValuesFrom obo:GO_0050777
                           ] ,
                           [ rdf:type owl:Restriction ;
                             owl:onProperty <http://purl.obolibrary.org/obo/cl#has_low_plasma_membrane_amount> ;
                             owl:someValuesFrom obo:PR_000001869
                           ] .

这里我的最终目标是将猫头鹰的等效属性转移到subClassOf特性:

CL_0000792 rdfs:subClassOf [
     rdf:type owl:Restriction ;
              owl:onProperty obo:RO_0002104 ;
              owl:someValueFrom obo:PR_000001380
 ] ;
 rdfs:subClassOf [
     rdf:type owl:Restriction ;
              owl:onProperty obo:cl#has_low_plasma_membrane_amount ;
              owl:someValueFrom obo:PR_000001869
 ] .

我没有实现的是从rdfs:subclass部分,然后将它们正确地绑定到subClassOf各种属性(然后过滤掉obo:RO_0002215会很容易)。

编辑:当我在这里取得一些进展时,一个新的 SPARQL 查询

EDIT2:按照 Damyan Ognyanov 的回答更新了 SPARQL 查询部分,该部分忽略了 owl:intersectionOf 部分中的集合,并且也更紧凑/优雅

这是我当前的 SPARQL 查询:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX tpo: <http://www.definiens.com/ontologies/TissuePhenomicsOntology>
PREFIX cl: <http://purl.obolibrary.org/obo/cl.owl>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX efo: <http://www.ebi.ac.uk/efo/efo.owl>

CONSTRUCT {
    ?cell rdfs:subClassOf [ rdf:type owl:Restriction ;
                            owl:onProperty ?cellProp ;
                            owl:someValuesFrom ?cellPropValue
                            ] .
    ?cellProp ?cellPropProp ?cellPropObj .
    ?cellPropValue ?cellPropValueProp ?cellPropValuePropValue .
    ?cell ?cellProp2 ?cellProp2Obj .
}

FROM named cl:
FROM named tpo:
WHERE {
    # query cl to get our information
    graph cl:
    {   
       ?cell (rdfs:subClassOf|(owl:equivalentClass/owl:intersectionOf/rdf:rest*/rdf:first)) ?x .
       ?x owl:onProperty ?cellProp ;
          owl:someValuesFrom ?cellPropValue .

        ?cellProp ?cellPropProp ?cellPropObj . 
        ?cellPropValue ?cellPropValueProp ?cellPropValuePropValue .
        ?cell ?cellProp2 ?cellProp2Obj .
    }

    # limit ?cell to the entries already present in TPO
    graph tpo:
    {
        ?cell rdfs:subClassOf* obo:CL_0000000 .
    }
}    

如果您更换CONSTRUCT部分与SELECT *那么看来所有变量都已正确分配,信息就在那里。

我仍然缺少的是一个适当的CONSTRUCT部分重建“有些复杂”owl:Property限制。因此,此查询主要返回一长串空白节点,例如 Protege 无法正确解析这些节点。

@AKSW 还正确地指出,SPARQL 可能不是查询和构建 OWL 图的首选工具。这里确实清楚地表明,人们需要知道精确的数据结构才能构建有效的查询,至少以这种方式。

?cell (rdfs:subClassOf|(owl:equivalentClass/owl:intersectionOf/rdf:rest*/rdf:first)) ?x 。 ?x owl:onProperty ?cellProp ; owl:someValuesFrom ?cellPropValue 。

?cellProp ?cellPropProp ?cellPropObj 。 ?cellPropValue ?cellPropValueProp ?cellPropValuePropValue 。 ?cell ?cellProp2 ?cellProp2Obj 。


的价值owl:intersectionOf是一个 RDF 列表,上面的 Turtle 片段使用 RDF 列表语法来枚举owl:intersectionOf集合(例如,条目包含在( and )).

所以,你还应该包括rdf:rest*/rdf:first属性路径中的属性,因为它们用于构造集合。

对于查询,我将引入一个附加变量,在其中绑定兴趣限制并使用它来获取owl:onProperty and owl:someValuesFrom,例如,你的WHERE子句可能看起来像:

?cell (rdfs:subClassOf|(owl:equivalentClass/owl:intersectionOf/rdf:rest*/rdf:first)) ?x .
?x owl:onProperty ?cellProp ;
   owl:someValuesFrom ?cellPropValue .

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

SPARQL:如何将 owl:equivalentClass 传输到 rdfs:subClassOf (owl:Restriction) 属性? 的相关文章

  • rdf:Bag、rdf:Seq 和 rdf:Alt 在使用时有何不同?

    我正在读RDF 模式 1 1 http www w3 org TR rdf schema ch bag建议 其中包括以下内容 强调是后加的 5 1 2 rdf 袋子 http www w3 org TR rdf schema ch bag
  • DBpedia SPARQL 查询美国大学

    我创建了一个正在运行的 SPARQL 查询DBpedia SNORQL SPARQL 端点 http dbpedia org snorql 查询的目的是获取美国大学或学院的列表 包括其经度 纬度和捐赠基金 该查询似乎有效 但似乎缺少一些记录
  • 从 sparql 查询返回面向对象的 json

    如果我想在SPARQL中询问一些不同的属性A和B 其中有一个唯一的 A 并且每个 A 可能有多个 B 我得到的查询结果如下 A1 B1 A1 B2 A1 B3 A1 B4 A2 B5 我希望这个查询结果的外观更多是这样的形式 A1 B1 B
  • SPARQL 查询根据语句的顺序返回不同的结果

    我有一个 SPARQL 查询 它返回两个资源的最具体的常见类 当我尝试运行它时https dbpedia org sparql https dbpedia org sparql 有时它什么也不返回 有时它返回我想要的类 我注意到它与查询中语
  • 数据导入期间超出 Fuseki GC 开销限制

    我正在尝试在启动时将 LinkedMDB 610 万个三元组 导入到我的本地版本的 jena fuseki 中 path to fuseki server file path to linkedmdb nt ds 它运行了一分钟 然后因以下
  • 如何开始使用 RDF? (特别是对于关系数据库开发人员?)

    我正在整理一个目录 目录本质上只是元数据 因此我没有使用数据库 而是使用 RDF 存储和 SPARQL 处理器来编译数据 我正处于模式匹配阶段 有趣的部分 因此 我想出了许多在 SPARQL 中定义起来很简单的模式 然后将该信息提供给使用该
  • 如何将 SPARQL 发布到 Virtuoso?

    我正在使用两种不同的HTTP POST公用事业 poster https addons mozilla org en US firefox addon poster 从 Firefox 以及Python requests http docs
  • 计算OWL本体中子类的深度

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

    我有以下删除语句 delete s p o
  • Sparql 查询永远运行

    我在耶拿执行 SPARQL 查询时遇到了困难 结果导致了我无法理解的行为 我正在尝试查询 Esco 本体 https ec europa eu esco download https ec europa eu esco download 我
  • SPARQL递归祖先查询

    我被 SPARQL 中的递归查询困住了 我无法理解它 我想获得一个实例的所有祖先 a a hasParent b b hasParent c c hasParent d 所以结果将是 b c and d 如果实例是 a 有什么想法如何构造父
  • 本体验证的耶拿规则

    我想验证本体并在有任何不正确的情况下抛出错误 我要做的最多的验证如下所示 我有一堂这样的课
  • OWL 限制 - 定义仅包含具有特定属性值的属性的类

    我目前正在玩 OWL 尤其是有限制的情况 我正在尝试创建一个执行以下操作的查询 假设我有一个类 Cinema 它具有属性 movies 包含 Movie 类型的对象 Movie 类包含一个名为 genre 的属性 现在我想创建一个 Acti
  • 通过计算属性来推断 OWL 中的知识

    我有一个包含 Person 和 City 类的本体 人们前往城市旅行 这种旅行在 TravelTo 对象属性中表示 我想添加一个 WorldTraveler 类 如果人们去过两个或更多城市 那么他们就是世界旅行者 我怎样才能在我的本体中做到
  • 从 RDF 节点拉出字符串

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

    我正在尝试使用以下方法提取 DBpedia 资源的 Wikipedia 类别或 Yago 分类的层次结构SPARQL端点 http dbpedia org sparql 例如 我想以实体的分层形式找出所有可能的类别和类 例如 http db
  • 在SPARQL中使用LIMIT时如何获取结果总数?

    我有一个 SPARQL 查询 它返回结果LIMIT共 20 个 在此查询中 我还想知道结果总数 而无需运行查询两次 一次运行LIMIT和一个没有LIMIT 例如 运行查询时 可能的结果总数为 500 个 其中LIMIT它一次只显示 20 个
  • SPARQL:如何将 owl:equivalentClass 传输到 rdfs:subClassOf (owl:Restriction) 属性?

    我的问题是关于使用 SPARQL 查询一些 owl 本体 其中owl Restrictions被大量使用 在我的例子中 这是 细胞本体论 http obofoundry org ontology cl html 以下是一些典型条目的示例 以
  • SPARQL 查询在 Fuseki 中有效,但在 Jena TDB 中无效

    我将数据组织在多个图表中 保存三元组的图表很重要 数据结构很复杂 但可以简化如下 我的商店包含蛋糕 其中有不同蛋糕类型的层次结构 所有子类
  • 在 SPARQL 中计算满足约束的值,并为不满足约束的值返回 0

    我想使用 SPARQL 查询检测满足属性值条件的所有值 例如 假设我想检测其中值的所有资源rdfs label有类型xsd string 逻辑上的定义可以是 x 字符串标签 x y rdfs 标签 x y xsd 字符串 y 我找到了一种在

随机推荐