我正在使用以下SPARQL查询,这是my institution's SPARQL endpoint基于网络的一端的示例;
SELECT ?building_number ?name ?occupants WHERE {
?site a org:Site ;
rdfs:label "Highfield Campus" .
?building spacerel:within ?site ;
skos:notation ?building_number ;
rdfs:label ?name .
OPTIONAL {
?building soton:buildingOccupants ?occ .
?occ rdfs:label ?occupants .
} .
} ORDER BY ?name
问题在于,除了从“建筑物和地方”获取数据,我感兴趣的数据集,并期望使用该示例,它还从“设施和设备”数据集中获取数据,相关。如果您点击链接,您应该看到这一点。
我怀疑这个例子可能早于添加设施和设备数据集,但即使我已经对SPARQL进行了研究,我也看不到一种明确的方法来定义要包含的数据集。
任何人都可以建议一个起点,将其限制为仅显示“建筑物”,或者更具体地说,是“建筑物和地点”数据集的结果。
由于
答案 0 :(得分:4)
首先,你真的需要使用SELECT DISTINCT,否则你会得到重复的结果。
要回答您的问题,您可以使用GRAPH {...}过滤SPARQL查询的某些部分,以仅匹配特定数据集中的数据。这仅在SPARQL端点划分为GRAPH(此处为)时有效。您要求的解决方案不是最佳选择,因为它假设“地点”数据集中的网站内的内容将始终被重新安装到建筑物......这样做有风险 - 因为它可能最终会在某个时间包含树木和路标在将来。
第一步是找出正在播放的图表:
SELECT DISTINCT ?g1 ?building_number ?name ?occupants WHERE {
?site a org:Site ;
rdfs:label "Highfield Campus" .
GRAPH ?g1 { ?building spacerel:within ?site ;
skos:notation ?building_number ;
rdfs:label ?name .
}
OPTIONAL {
?building soton:buildingOccupants ?occ .
?occ rdfs:label ?occupants .
} .
} ORDER BY ?name
在此处试试:http://is.gd/WdRAGX
通过此,您可以看到http://id.southampton.ac.uk/dataset/places/latest和http://id.southampton.ac.uk/dataset/places/facilities是两个相关的。
要仅根据“地点”图表查找某个网站内的内容,请使用: SELECT DISTINCT?building_number?name?occupants WHERE { ?site a org:Site; rdfs:标签“Highfield Campus”。
GRAPH <http://id.southampton.ac.uk/dataset/places/latest> {
?building spacerel:within ?site ;
skos:notation ?building_number ;
rdfs:label ?name .
}
OPTIONAL {
?building soton:buildingOccupants ?occ .
?occ rdfs:label ?occupants .
} .
} ORDER BY ?name
替代解决方案:
使用rdf:输入
上面我已经回答了你的问题,但这不是你问题的答案。这个解决方案更具语义性,因为它实际上说“只给我校园内的建筑物”,这就是你的真正含义。
而不是按图形过滤,这不是非常“语义”,你也可以将建筑限制为“建筑”类,研究设施不是。它们有时仍被列为“在网站内”。通常当大学只发布他们所在的校园而不是哪个校区时。
?building a rooms:Building
使用FILTER
在极端情况下,您可能没有不同GRAPHS中的数据,并且可能没有优雅的关系来用于过滤结果。在这种情况下,您可以使用FILTER并将构建URI转换为字符串,并使用正则表达式匹配可接受的表达式:
FILTER regex(str(?building), "^http://id.southampton.ac.uk/building/")
这是最糟糕的选择,如果必须,请不要使用它。
腰带和大括号
您可以将这些限制中的任何一个一起使用,并且限制GRAPH以及确保所有建筑物确实是建筑物的组合将是我推荐的解决方案。