SPARQL:Get";“最特殊的财产”;
我正在尝试获取类的最特定属性,但我被卡住了。我想提取适用于给定类的所有属性(包括从超类继承的属性),除了结果集中包含子属性的属性 例如,如果我有一个类Population,它的一个属性是atLocation,而Population的一个子类称为savents。难民有一个属性currentLocation,它是atLocation的子属性 因此,我想要的是一个通用查询,如果我输入人口,它将只给我一个位置,如果输入难民,它只给我当前位置。我所拥有的是:SPARQL:Get";“最特殊的财产”;,sparql,semantic-web,Sparql,Semantic Web,我正在尝试获取类的最特定属性,但我被卡住了。我想提取适用于给定类的所有属性(包括从超类继承的属性),除了结果集中包含子属性的属性 例如,如果我有一个类Population,它的一个属性是atLocation,而Population的一个子类称为savents。难民有一个属性currentLocation,它是atLocation的子属性 因此,我想要的是一个通用查询,如果我输入人口,它将只给我一个位置,如果输入难民,它只给我当前位置。我所拥有的是: prefix rdfs: <http:/
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
前缀rdfs:
前缀ex:
选择DISTINCT?prop WHERE{
例:难民RDF:子类*?领域。
?道具rdfs:域?域。
?子计划rdfs:域?域。
筛选器不存在{?subop rdfs:subpertyof?prop.}
}道具订购
这给了我atLocation和currentLocation
这在一个查询中可能吗?任何关于如何解决这个问题的想法都将受到赞赏 这比我自己尝试时预想的要复杂。 然而,您需要做的是稍微扩展一下notexists子句
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:Sarrainer或a的所有属性
ex的超类:难民(前两个BGP)。但是我们要过滤
输出存在子属性且子属性也具有
域(一个超类)例如:难民。请注意,我们使用的是
子属性(?d)域的不同变量,毕竟
不必与属性具有完全相同的域
我们正在选择
上述内容适用于简单(非蕴涵或RDF(S)蕴涵)
triplestore,前提是每个子属性只有其最特定的
定义了域类,也就是说,您有三个“ex:currentLocation”
rdfs:domain ex:sarrainer'但不明确'ex:currentLocation'
rdfs:domain ex:Population.同样的问题也发布(并回答)在W3C sparql开发人员邮件列表上,请参阅谢谢,Jeen。我正要把你的答案贴在这里,以防将来有其他人也有同样的问题。@Carsten,你没想到我会让你逃脱那些因果报应,对吗?:)