2010-06-29 5 views
1

저는 SPARQL, OWL, Jena에 새로 입문 했으므로 어리석은 질문을하는 것이 좋습니다. 나는 이틀이 지나서야 너를 괴롭히는 문제를 겪고있다. 나는 단지 FOAF 네임 스페이스의 속성에 대한 요구대로 한 일 아침까지하는 예나 QueryFactory.create(queryString)에 대한 쿼리로SPARQL - 온톨로지를 찾기 위해 무엇이 필요합니까?

queryString = "PREFIX foaf: <http://xmlns.com/foaf/0.1/>"+ 
"PREFIX ho: <http://www.flatlandfarm.de/fhtw/ontologies/2010/5/22/helloOwl.owl#>" + 
"SELECT ?name ?person ?test ?group "+ 
"WHERE { ?person foaf:name ?name ; "+ 
"   a ho:GoodPerson ; "+ 
"   ho:isMemberOf ?group ; "+ 
"}"; 

을 다음과 같은 문자열을 사용하고 있습니다. 내 네임 스페이스에서 속성을 요청하자마자 나는 항상 빈 결과를 얻었습니다. 이 질문을 여기에 올리려고하고 가능한 한 정확하게 게시 할 수있는 몇 가지 최종 테스트를 수행했지만 갑자기 작동했습니다. 그래서 정확히 무엇을 요구해야할지 정확히 알지 못했기 때문에 질문을 게시하기 전에 삭제했습니다. 2 시간 후에 나는 Protege의 Pellet 플러그인을 사용하여 유추 된 모델을 생성하고 내보냈습니다. 나는 helloOwlInferred.owl이라고 불렀고 helloWl.owl이 아직 거주하고있는 서버의 디렉토리에 업로드했다. 추론 된 온톨로지를로드하고 위 쿼리를 변경하여 접두사 ho :가 추론 된 온톨로지에 할당되도록 내 방법을 조정했습니다. 즉시, 아무것도 더 이상 일하지 않았다. 정확히 말하면 더 이상 효과가있는 것은 아니었지만 오늘 아침까지 원래 쿼리와 동일한 증상이었습니다. 내 접두사가 더 이상 작동하지 않았다. 나는 간단한 테스트를 수행했다 : 모든 helloWorldInferred.owl 파일 (접두어와 내 로컬 복사본에 대한 내 서버의 파일 이름)을 helloWorld.owl로 변경했다. 이상하게도 모든 것이 고쳐졌습니다.

다시 helloWorldInferred.owl로 이름을 바꾸면 모든 것이 손상되었습니다. 등등. 거기 무슨 일 이니? 내 온톨로지가 "유효한 접두어로 등록"될 때까지 2 주 정도 기다려야합니까?

답변

2

에 당신의 질문을 가치가있을 수 있습니다 귀하의 문제가 예나 뭔가로 인해 일 수있다되고 그건 로 rdf:about="#something")?

rdf:ID이고 상대 URL은 OWL 파일의 기본 URL을 사용하여 http://whatever/file.owl#something과 같은 완전한 절대 URL로 확장됩니다. 기본 URL이 파일에 명시 적으로 지정되어 있지 않으면 (예 : xml:base="http://whatever/file.owl"을 사용) 웹 서버 또는 로컬 파일을로드하면 파일 시스템의 파일 위치가 기본 URI로 사용됩니다.

그래서 파일을 옮기거나 여러 위치에 사본이있는 경우 파일의 URI가 변경되므로 적절하게 SPARQL 쿼리를 변경해야합니다.

명시적인 xml:base을 포함하거나 상대 URI를 피하고 rdf:ID을 피하면 문제가 해결됩니다.

+0

고맙습니다. 당신의 대답은 올바른 방향으로 나를 잡았습니다. – Tom

1

접두어와 QNames의 전체적인 생각은 공간을 절약하고 가독성을 높이기 위해 URI를 압축하는 것인데, 가장 일반적인 문제는 정의 자체 또는 QName에서 오류를 철자하는 것입니다.

쿼리에서 사용하는 접두어 정의가 사용자의 온톨로지 속성의 실제 URI와 일치하지 않는 URI를 생성하고있는 것 같습니다.

가 아니라 같은, 어쩌면 당신의 OWL 파일이 rdf:ID="something" 구조 (또는 상대 URL의 다른 형태를 포함하는 Jena Mailing List

1

Protege의 버그 (또는 기능?)가 원인 인 것 같습니다. 추론 된 온톨로지를 새로운 이름으로 내보낼 때 Protege는 xmlns(blank)xml:base의 정의를 새 파일의 이름으로 변경했지만 실제 네임 스페이스의 정의는 변경하지 않았습니다.

xmlns="http://xyz.com/helloOwl.owl" => xmlns="http://xyz.com/helloOwlInferred.owl" 
xml:base="http://xyz.com/helloOwl.owl" => xml:base="http://xyz.com/helloOwlInferred.owl" 

xmlns:helloOwl="http://xyz.com/helloOwl.owl" => xml:base="http://xyz.com/helloOwl.owl" 
<!ENTITY helloOwl "http://wxyz.com/helloOwl.owl#" > => <!ENTITY helloOwl "http://wxyz.com/helloOwl.owl#" > 

나는 그 것으로 보인다고 고정 시켰습니다.
실제적인 출처를 조사하지 않은 것에 대한 내 잘못.

관련 문제