DBpedia 내가 모두 제목 케이스를 & 대문자 사람 같은 대 주제에 대한 버전을 통과 대소 문자이기 때문에; 예 : "Computer_programming"vs "Alcia_Keys". 2를 전달하기보다는 쿼리를 수행하는 가장 효과적인 방법은 무엇입니까?
URI는 불투명해야합니다. DBpedia는 일반적으로 http://dbpedia.org/resource
과 _
을 연결하여 운이 좋다면
을 대체 할 수있는 좋은 구조를 가지고 있지만 실제로는 그렇게 할 수있는 강력한 방법이 아닙니다. 더 좋은 아이디어는 여러분이 얻는 문자열이 아마도 자원의 레이블, 경우에 따라 변하는 변수와 동일하다는 것을 주목하는 것입니다. 주어진 점을 감안할 때, 가장 좋은 생각은 동일한 라벨, 모듈 법 (modulo case)을 가진 무언가를 찾는 것입니다. 예를 들어,
실제로,
마다 자원을 찾아야 라벨에 일부 문자열 처리를 할 것이기 때문에,하지만, 아주 느린 것
select ?resource where {
values ?input { "AliCIA KeYS" }
?resource rdfs:label ?label .
filter (ucase(str(?label)) = ucase(?input))
}
. 그것은 원칙적으로 OK 접근법입니다.
더 나아질 수있는 방법은 무엇입니까? 글쎄, 당신이 뭘 찾고 친절한 알고 있다면, 그것은 많이 도움이 될 것입니다. 예를 들어, 당신은 사람에 대한 쿼리를 제한 할 수 있습니다 :
select distinct ?resource where {
values ?input { "AliCIA KeYS" }
?resource rdf:type dbpedia-owl:Person ;
rdfs:label ?label .
filter (ucase(str(?label)) = ucase(?input))
}
개선, 그러나 그것은 여전히 빠르게 모든 아니다. 적어도 개념적으로는 각 사람을 만져보고 이름을 조사해야합니다. 일부 SPARQL 엔드 포인트는 텍스트 인덱싱을 지원합니다. 이렇게하면 효율적으로 수행하기를 원할 것입니다.
물론 가장 좋은 옵션은 사용자에게 조금 더 많은 정보를 요청하고 데이터를 미리 정상화하는 것입니다. 사용자가 "알리샤 키스"를 제공하는 경우 다음이 정상화 "알리샤 키스"@en을 할 수 다음 뭔가 이케 할 : 난 정말 더 효율적인 방법은 사용자 요청으로 있었으면
select distinct ?resource where {
values ?input { "Alicia Keys"@en }
?resource rdfs:label ?input .
}
을 더 많은 정보는 내 상황에서 실현 가능하지 않습니다. –
트리플 저장소를 로컬에 설치 한 경우 (결국 DBpedia의 서버를 망치는 것은 예의 바르지 않으며 신뢰할만한 것도 아닙니다), 전체 텍스트 인덱싱을 사용하여 텍스트 쿼리를 멋지고 빠르게 수행 할 수 있습니다 . –