2014-09-09 10 views
0

나는 아직도 SPARQL에 약간 새로운 편이다. 우리 회사의 dbpedia 엔드 포인트를 설정했습니다. DBpedia가 대소 문자를 구별하기 때문에 최종 사용자가 어떤 질문을하고 있는지 알지 못합니다. 대문자와 사람과 같은 대문자 버전을 모두 대문자로 사용합니다 (예 : &). 예 : "Computer_programming"대 "Alcia_Keys". 2 개의 별도의 쿼리를 전달하는 대신이 작업을 수행하는 가장 효과적인 방법은 무엇입니까? 나는 this question에서 IN 연산자를 시도했지만 어딘가에 실패하는 것 같습니다.SPARQL 다른 케이스 쿼리를 어떻게 처리합니까?

select ?label ?abstract where { 
    IN (<http://dbpedia.org/resource/alicia_keys>, <http://dbpedia.org/resource/Alicia_Keys>) rdfs:label ?label; 
       dbpedia-owl:abstract ?abstract. 
       } 
       LIMIT 1""" 

답변

3

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 . 
} 
+0

을 더 많은 정보는 내 상황에서 실현 가능하지 않습니다. –

+2

트리플 저장소를 로컬에 설치 한 경우 (결국 DBpedia의 서버를 망치는 것은 예의 바르지 않으며 신뢰할만한 것도 아닙니다), 전체 텍스트 인덱싱을 사용하여 텍스트 쿼리를 멋지고 빠르게 수행 할 수 있습니다 . –

관련 문제