gpt4 book ai didi

sparql - 删除 SPARQL 中不需要的父类(super class)答案

转载 作者:行者123 更新时间:2023-12-02 01:33:09 25 4
gpt4 key购买 nike

我有一个包含分类层次结构的 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 解决方案。

最佳答案

一个通用的解决方案是确保您只要求直接类型。 A类C是实例的直接类型 X如果:

  • X类型为 C
  • 没有C'使得:
  • 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/library,可能还有其他特定于工具的解决方案。例如,芝麻 API(披露:我在芝麻开发团队)可以选择禁用单个查询的推理:

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

    TupleQueryResult result = query.evaluate();

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

    关于sparql - 删除 SPARQL 中不需要的父类(super class)答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32935506/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com