gpt4 book ai didi

SPARQL:获取 "most specific property"

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

我试图获取一个类的最具体的属性,但我陷入了困境。我想提取适用于给定类的所有属性(包括从父类(super class)继承的属性),除了那些在结果集中具有子属性的属性。

例如,如果我有一个类 Population,其属性之一为 atLocation,并且 Population 的子类名为 难民。Refugees 有一个属性 currentLocation,它是 atLocation 的子属性。

所以我想要的是一个通用查询,如果我输入人口,并且仅<,它会 atLocation/strong> 当前位置 如果我输入难民。我所拥有的是这样的:

prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
prefix ex: <http://example.org/vocabulary#>

SELECT DISTINCT ?prop WHERE {
ex:Refugee rdfs:subClassOf* ?domain .
?prop rdfs:domain ?domain .
?subprop rdfs:domain ?domain .
FILTER NOT EXISTS { ?subprop rdfs:subPropertyOf ?prop . }
} ORDER BY ?prop

不过,这给了我atLocationcurrentLocation

这在一个查询中是否可能实现?任何有关如何解决此问题的想法表示赞赏!

最佳答案

这比我自己尝试时预期的要棘手。但是,您需要做的是稍微扩展您的 NOT EXISTS 子句。

SELECT ?prop WHERE {
?prop rdfs:domain ?domain .
?class rdfs:subClassOf* ?domain .
FILTER NOT EXISTS {
?sub rdfs:subPropertyOf ?prop.
?sub rdfs:domain ?d.
?class rdfs:subClassOf* ?d .
}
FILTER (?class = ex:Refugee)
}

我们正在选择域为 ex:Refugee 或 a 的所有属性ex:Refugee 的父类(super class)(前两个 BGP)。但接下来我们想要过滤找出那些存在子属性的属性,该子属性也具有域(父类(super class))例如:难民。请注意,我们使用的是子属性 (?d) 的域的不同变量,毕竟它不一定必须与属性具有完全相同的域我们正在选择。

以上适用于简单的(非蕴涵或 RDF(S) 蕴涵)Triplestore,前提是每个子属性只有最具体的定义的域类,也就是说,您有三元组 'ex:currentLocationrdfs:domain ex:Refugee' 但未明确显示 'ex:currentLocationrdfs:域 ex:人口'。

关于SPARQL:获取 "most specific property",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12181822/

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