我的数据使用命名图进行分区。一个图包含我的本体和类的人类可读标签。这些数据又分为多个图表,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技巧,我忽略了?任何有关如何处理此问题的建议将不胜感激。