2012-10-26 4 views
2

이름을 기반으로 프로그래밍 언어를 쿼리하는 일관된 방법이없는 것처럼 보입니다. 예 :프로그래밍 언어의 dbpedia를 이름으로 일관되게 쿼리하려면 어떻게합니까?

http://dbpedia.org/page/D_(programming_language) 
rdfs:label "D (programming language)"@en 
dbpprop:name "D programming language" 
owl:sameAs freebase:"D (programming language)" 
foaf:name "D programming language" 

http://dbpedia.org/page/C++ 
rdfs:label "C++"@en 
dbpprop:name "C++" 
owl:samwAs freebase:"C++" 
foaf:name "C++" 

여부 "프로그래밍 언어"에 대한 표준 규칙이 없기 때문에는, "(프로그래밍 언어)", "programming_language", "(programming_language", 또는 ""입니다

"D"에 대해 http://dbpedia.org/page/D_(programming_language을 반환하는 일종의 SPARQL 쿼리를 만들고 싶습니다. "C++"에 대해 http://dbpedia.org/page/C++을 반환하고 싶습니다. "그러나 나는 이것을 어떻게하는지 모른다.

프로그래밍 언어의 여러 트리플 중 적어도 하나가 일관된 명명 규칙을 사용하지 않는 한, 이름 + "(프로그래밍 언어)"에 대해 먼저 쿼리하고 이름 + "(프로그래밍 언어 ", 이름 +"프로그래밍 언어 "를 찾을 수 없을 때 더 튼튼한 방법을 원합니다.

+0

어쩌면 없습니까? 태그/의미 론적 표식의 어떤 형태로 이름을 사용하려고 시도하는 것 같습니다. C++은 이미 "잘 정립 된"반면에 D (프로그래밍 언어)는 상대적으로 새로운 언어입니다. 그것은 또한 웅장한 이유에서 끔찍한 공통 "이름"을 선택합니다. 예 : Ruby를 다룰 때 어떤 일이 일어날까요? –

+0

즉, 대신 온톨로지/속성을 사용하지 않으시겠습니까? 예 : http://dbpedia.org/page/Category:Programming_languages ​​ –

+0

@pst 큰 그림은 "Python"이나 "QML"과 같은 프로그래밍 언어 이름을 가진 시각적 그래프를 표시하는 프로그램을 만들고 싶다는 것입니다. 다른 프로그래밍 언어와의 관계. Programming_language 범주는 내 쿼리 결과가 모두 올바른 형식인지 확인하지만 이름으로 언어 리소스를 찾는 데 도움이되지 않습니다. – mcandre

답변

3

물론 기본 하위 문자열 일치 또는 정규식을 사용하여 일치시킬 수 있습니다 "C++"에 대한 일치 : 당신은 줘야하기 때문에 물론

SELECT DISTINCT ?pl ?label 
WHERE { 
    ?pl a dbpedia-owl:ProgrammingLanguage ; 
     rdfs:label ?label . 
    FILTER(langMatches(lang(?label), "en")) 
    FILTER(regex(str(?label), "C\\+\\+")) 
} 

는, 위에서 언급, "D"와 같은 프로그래밍 언어의 이름에 대한 문제가 될 것입니다 나는 여러 경기 ("D", "딜런", "MAD"등)를 되 찾는다. 이 경우 반환 된 레이블을 토큰 화하고 입력 문자열이 독립 실행 형 단어로 ​​나타나는지 확인하는 등 결과에 대한 영리한 후 처리를 원할 수 있습니다.

SPARQL의 정규식 검색은 평가 시간면에서 비싸지 만 특정 유형의 유형 제약 조건과 결합하기 때문에 DBPedia 엔드 포인트는 이러한 종류의 쿼리를 잘 처리 할 수 ​​있어야합니다.

+0

"약간의 영리한 후 처리를 원할 수도 있습니다"및 "SPARQL에서의 정규식 일치는 악명 높습니다"는 이것이 완전한 형식의 솔루션이 아님을 나타냅니다. – mcandre

+0

아마도 DBPedia 관리자에게 이것을 전처리 해달라고 요청할 수 있습니다. 즉, 레이블에서 일반적인 pre 또는 suffix를 잘라내어 (또는 추가하여) DBpedia 데이터베이스에서 더 규칙적 이도록 할 수 있습니다. 그러나 정규 표현식이나 영리한 후 처리 (잘 작동 할 것입니다) 또는 다른 접근법 (예 : 키워드 검색 필드 대신 사용자를위한 드롭 다운 목록). –

1

I은 ​​++가 잡음으로 처리하고, 실제 검색 패턴으로부터 배제 될 수 있기 때문에

SELECT distinct ?pl ?label 
WHERE { 
    ?pl a dbpedia-owl:ProgrammingLanguage ; 
     rdfs:label ?label. 
    ?label bif:contains "'C++'" . 
    filter (str (?label) like '%C++%') 
    filter (lang(?label)="en") 
} 

?label bif:contains "'C++'"는 C++, C, 오브젝티브 C 등을보다 구체적으로, 어느 정도 필터링 것이 사용하려는 . 그런 다음 C가 있고 두 개의 덧셈이 필요합니다. 따라서 filter (str (?label) like '%C++%')은 정규식보다 빠르게 확인합니다. filter (lang(?label)="en") 또는 filter (langmatches(lang(?label),"en"))을 추가하거나 맛으로 전혀 체크하지 않습니다.

관련 문제