选择最具体的子类型(最小上限)

时间:2016-12-21 19:23:56

标签: sparql rdf

我有描述子类型关系的数据。在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:Ca: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"; 的查询吗?

0 个答案:

没有答案