我有描述子类型关系的数据。在Turtle中,它看起来像这样:
@prefix a: <#>
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
a:test1
a a:A ;
a a:B ;
a a:C ;
.
a:test2
a a:A ;
a a:D ;
.
a:B rdfs:subClassOf a:A .
a:C rdfs:subClassOf a:B .
a:D rdfs:subClassOf a:A .
在上面的示例中,a:C
是a:B
的子类型,而a:A
的子类型是a:D
的子类型。 a:A
也是a:test1
的子类型。我想选择a:C
的最小上限,即a:test1
。我可以编写一个查询,它选择prefix a: <#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select distinct ?type where {
a:test1 a ?type .
}
的所有上限,即:
?type
但我无法进一步限制setOfTypes.filter(type =>
not setOfTypes.exists(subtype =>
subtype.isSubClassOf(type) && subtype != type))
。在具有类似Java语法的函数式语言中,我会写:
prefix a: <#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select distinct ?type where {
a:test1 a ?type .
filter not exists {
?subtype rdfs:subClassOf ?type .
filter (?subtype in ?type && ?subtype != ?type)
}
}
我对SPARQL的翻译如下:
?subtype in ?tpe
不幸的是,a:C
语法无效。有人可以向我显示一个只会选择this.dataModel = "selectedClientModel";
的查询吗?