2011-12-26 8 views
9

비슷한 제목을 가진 this question에 표시된 것처럼 이름의 일부를 알고 dbpedia 리소스를 검색하고 싶습니다. 저는 SPARQL과 같은 경우에 초보자입니다.하지만 저자가 "루마니아"를 검색 할 때 질문에있는 예제가 도움이되었습니다. 답변을받은 사람이 Sparql 요청으로이 일을 수행하도록 요청했습니다. 좋았지 만 여기에 문제가있다. SPARQL을 사용하여 문자열 이름으로 DBpedia 리소스를 검색하고 해당 유형을 모르는 경우

는 예를 들어, 그들은 이미 루마니아, 나라입니다 WHERE 절에 따라서

?c a dbpedia-owl:Country ; 

것을 "알고 있었다". 되는 전체 SPARQL 요청

SELECT ?c 
    WHERE { 
    ?c a dbpedia-owl:Country ; 
    foaf:name "Romania"@en . 
    FILTER NOT EXISTS {?c dbpedia-owl:dissolutionYear ?y} 
    } 

그러나,이 질문은 아주 완전히 따라서, "이름"자원의 실제 이름, 또는의 한 부분 인의 이름으로 모든 자원을 찾고, 우리의 필요에 응답하지 않습니다 그것의 (rdf :) 유형에 관계없이 . 목표는 이름이나 그 일부를 아는 "모든 것"을 검색하는 것입니다.

나는 너희들에게이 질문을하기 전에 몇 가지 조사를 해왔다. 그리고 나는 "이름의 일부"문제가 bif 함수 (sparql을 따르지 않기 때문에 나쁜 방법)로 해결 될 수 있다는 것을 이미 알고있다. CONTAINS 절을 사용했지만 사용법을 보여주는 예제를 찾을 수 없었습니다.

이제 dbpedia 자원 중에서 검색 할 "단어"가 있다고 가정 해 봅시다.이 단어는 일부 사용자의 입력이 될 것입니다. 그리고 그것을 "INPUT"이라고 부르 자.

  1. 이 유형 Dbpedia 자원을 설명 있나요 :

    SELECT ?something WHERE 
        { 
        ?something a (dbpedia Resource). 
        CONTAINS(?something,"INPUT") 
        } 
    

    내 주요 질문에 대한 두 가지 주요 측면이다

    요청, 나는 같을 것이다, 상상? 나는 그것이 온톨로지 또는 다른 것에 있다고 생각하지 않는다. 모든 리소스 중에서 일치하는 것을 찾을 수 있도록 검색하고 싶습니다.

  2. 제공 할 특정 이름 또는 일부 문자열. 나는 FILTER 옵션을 고려했다. 그러나 그것은 모든 리소스를 얻는 것을 의미 할 것이다. 그런 다음, 리트리 티가 끝나면 이름으로 필터링한다.

그래서이 "마스터 쿼리"는 그 이름이나 그 일부를 제공하여 리소스를 얻는 사람을 알고 있습니까? ("Obama"를 제공하고, Barrack뿐만 아니라 Michelle을 위해 결과를 얻는 한 예).

미리 감사드립니다.

답변

15

첫 번째 질문에서 인스턴스 리소스 만 보는 것에 관심이 있다고 가정합니다. RDF에서 모든 것이 리소스이기 때문에 일반적인 경우에 명시 적으로 인스턴스 리소스 만 요청할 수 있는지 여부는 알 수 없습니다. DBpedia 데이터 셋을 위해 특별히 이것을 필요로한다면 dcterms : subject를 가진 리소스를 쿼리 할 수 ​​있습니다 (DBPedia에서만 인스턴스 리소스는 dcterms : subject를가집니다). 그래서 당신은이 같은 쿼리 할 수 ​​있습니다 : 두 번째 질문에 대한 유사

SELECT DISTINCT ?s ?label WHERE { 
      ?s rdfs:label ?label . 
      FILTER (lang(?label) = 'en'). 
      ?label bif:contains "Obama" . 
      ?s dcterms:subject ?sub 
} 

을 - 방금 DBpedia 데이터 세트를 사용하는 경우 사용 할 수 있습니다 "BIF : 포함"SPARQL 호환되지 않지만.필자는이 작업을 수행하는 또 다른 최적의 방법이 있다고 생각하지 않으며 특히 FILTER를 사용하면 쿼리를 신속하게 실행해야하는 경우에 최적이 아닌 것으로 나타 났던 것처럼 말입니다. 키워드 검색 및 색인 생성은 각 트리플 스토어에서 임시로 처리되는 것으로 보지만 전체 텍스트 검색자에게 표준화 된 방법은 아직 없습니다.

요약하면 dbpedia로 작업하는 경우 상점의 기능과 데이터 세트의 특성을 사용하여 문제를 해결하십시오.

+0

사실 "트릭"(dcterms : subject)을 통과해야만하는 것이 부끄럽지 만 내 요청은 dbpedia 리소스에만 해당됩니다. 그래서 당신의 대답은 절대적으로 놀랍고 두통을 불러 일으켰습니다. 정말 고맙습니다. bif 함수에 관해서는 SPARQL을 준수하지 않기 때문에 CONTAINS를 찾은 이유입니다.하지만이 절을 사용하는 예제를 여전히 찾고있을 것입니다. 다시 답변 해 주신 dbpedia & rdf와의 여행은 이제 막 시작되었지만 필요한 시작을 내게 주셨습니다. –

+0

이 접근법에는 몇 가지 제한 사항이 있습니다. 공백은 허용되지 않습니다. 따라서 "Barak Obama"(또는 프로그래밍 방식으로, 당신이 만난 이름 문자열)에 대한 표준 엔티티 표현을 가져 오려고하면 bif : contains를 사용할 수 없습니다. 그리고 나서 URL 인코딩이 가능할까? '? label bif : "barak % 20obama"포함. 주사위가 없습니다. 구성 부분을 캡처하는 두 개의 별개의 문장일까요? 아니. :( '거장 37000 오류 SP031 : SPARQL 컴파일러 : 하나 이상의 BIF는 : 어떤 아이디어를 (포함) 또는 단일 그룹 '에서'$ 라벨 '변수에 대한 유사한 조건 당신이 할 수있는 – sands

+3

@sands 라벨 BIF을? : 'barak obama' '가 포함되어 있습니다 (추가 따옴표에 유의하십시오.) – MrM