我的数据使用命名图进行分区。一张图包含我的本体和类的人类可读标签。数据又被分成许多图表,ex:data1
, ex:data2
, ... ex:data5000
。
现在我希望独立查询每个数据图,同时使用本体中的标签。首先,我认为这将是微不足道的,但后来我发现 SPARQL 中的范围界定可能有点令人困惑。举个简单的例子:
选择具有各自实例标签的所有实例。还从本体中检索与每个实例关联的可选类和类标签。
如果两个组的范围都class
延伸,我希望以下查询可以解决问题:
SELECT ?instance ?instanceLabel ?class ?classLabel
WHERE {
GRAPH ?data {
?instance rdfs:label ?instanceLabel .
OPTIONAL { ?instance a ?class }
}
GRAPH <http://myontology> {
OPTIONAL {
?class rdfs:label ?classLabel
}
}
}
如果类是绑定的,结果将是我想要的,因为这两个组是联合的;但是,由于作用域?class
可以绑定到本体中的任何内容,如果它未绑定在第一组中。
我正在编写的查询有大约 15 个类似的可选字段(非常昂贵的连接......)。当我尝试用它重写时UNION
,由于原始查询的大小,它很快变得非常笨拙。我也尝试过嵌套查询,但这给了我同样的范围问题。有没有人有一些我忽略的 SPARQL 技巧?任何有关如何解决此问题的建议将不胜感激。