중요한 것부터 먼저, 당신은 정말, DISTINCT 사용을 선택해야합니다.
질문에 대답하기 위해 GRAPH {...}를 사용하여 SPARQL 쿼리의 특정 부분을 필터링하여 특정 데이터 집합의 데이터 만 일치시킬 수 있습니다. 이는 SPARQL 엔드 포인트가 GRAPH로 분할 된 경우에만 작동합니다 (이 중 하나는 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 두 관련된 것들입니다 것을 볼 수 있습니다
1 단계는 그래프 플레이 무엇인지 찾는 것입니다.
"장소"그래프에 따라 사이트 내에서 '물건'만 찾으려면 다음을 사용하십시오. SELECT DISTINCT? building_number? name? occupants 어디서? { ? site a org : Site; rdfs : label "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 사용 : 유형 I 위
귀하의 질문에 대답했지만,이 문제에 대한 답이 아니다. 이 솔루션은 실제로 의미하는 바대로 실제로는 '캠퍼스 내 건물 만'이라고 말하면서 더 의미가 있습니다.
매우 의미 론적이지 않은 그래프로 필터링하는 대신 리서치 시설이 아닌 'building'클래스로 제한 할 수 있습니다. 그들은 때때로 '사이트'내에있는 것으로 때때로 열거됩니다. 일반적으로 유니가 어떤 캠퍼스를 게시했는지 만 게시했는데 어느 건물이 아닌지 게시했습니다.서로 다른 그래프에서 데이터가 없을 수 있습니다 및 결과를 필터링하는 데 사용할 우아한 관계가되지 않을 수 있습니다 극단적 인 경우에는 필터
를 사용
?building a rooms:Building
.
FILTER regex(str(?building), "^http://id.southampton.ac.uk/building/")
이 훨씬 최악의 옵션을 바 당신이있는 경우에 그것을 사용하지 않는 것입니다 : 허용 것들에 맞게이 경우 필터를 사용할 수 있으며, 문자열로 건물 URI를 설정하고 정규 표현식을 사용 .
는 벨트와 중괄호
당신은 함께 이러한 restictions 그래프를 제한 플러스 모든 것을 보장의 조합 중 하나를 사용할 수 있습니까? 건물은 정말 건물 내 권장 솔루션이 될 것입니다.
당신의 예제에서 접두어'rooms :'은 정의되지 않았지만'PREFIX rooms :'그것은 절대적으로 완벽하게 작동했습니다! 고마워요! –