2016-08-06 8 views
1

필자는 내 자신의 온톨로지 (클래스, 속성 등을 정의했다)를 개발했으며 sparql을 사용하여 내 온톨로지를 조사하려고합니다.python에서 sparql, rdflib로 온톨로지를 조사하는 방법

protégé 2000 (오픈 소스 온톨로지 편집기)에서 모든 것이 잘 작동하지만 파이썬에서 요청한 sparql을 구현할 때 몇 가지 문제가 발생했습니다.

나는 자바로 만들었지 만 효과가 있지만 원하는 것은 아니지만 pyjnius (파이썬 모듈로 파이썬 클래스로 자바 클래스에 액세스)하고 싶었다.하지만 아무 것도 작동하지 않았다.

내 온톨로지를 조사하기 위해 sparql을 어떻게 사용할 수 있습니까? 파이썬에서 jena를 사용할 방법이 있습니까?

try{  

    Model model = ModelFactory.createDefaultModel(); 
    String FName = "C:\\Users\\p\\Desktop\\protégé project jour\\jour.owl"; 
    InputStream inStr = FileManager.get().open(FName); 
    if (inStr == null) { throw new IllegalArgumentException("Fichier non trouvé");} 
    // Lire le fichier RDF vers le modèle précédemment créé. 
    model.read(inStr, ""); 

    //**************************** 


    String requete = 
    //***=====This is the query that works good in the ontology with  properties between classes 

    "PREFIX OntoJO:<http://www.owl-ontologies.com/Ontology1400008538.owl#>" +   
    "SELECT ?path " + 
    "WHERE { " 

    + " ?n OntoJO:signee_par '"+choixsignrech1.getText()+"' ." 
    + " ?s OntoJO:mot_cle '"+choixclrech1.getText()+"' ." 
    + " ?m OntoJO:secteur '"+choixsecrech1.getSelectedItem()+"' ." 
    + " ?f OntoJO:ministere '"+choixminisrech1.getSelectedItem()+"' ." 
    + " ?r OntoJO:synonymes '"+choixsyrech1.getText()+"' ." 


    + "?n OntoJO:a_un_chemin ?y . " 
    + "?s OntoJO:a_un_chemin ?y . " 
    + "?m OntoJO:a_un_chemin ?y . " 
    + "?f OntoJO:a_un_chemin ?y . " 
    + "?r OntoJO:a_un_chemin ?y . " 

    + "?y OntoJO:chemin ?path . }"; 



    Query query = QueryFactory.create(requete); 
    QueryExecution qexec = QueryExecutionFactory.create(query, model); 

    try { 
     ResultSet results = qexec.execSelect(); 
     while (results.hasNext()){ 
      QuerySolution soln = results.nextSolution(); 
      RDFNode name = soln.get("path"); 
      System.out.println(name); 
      javax.swing.JOptionPane.showMessageDialog(this,soln.get("path")); 
     } 
    } finally 
    { 
     qexec.close(); 
    } 

속성은 다음과 같습니다 : signee_par, mot_cle, SECTEUR, ministere 등 ..... (프랑스어)의 sqarql 요청이 이러한 속성

을 기반으로 내가 자바와 그것을 어떻게

은이다

저는 파이썬으로하고 싶습니다. 누구나 할 수있는 방법을 알고 있습니까?!

+2

"Protege 2000"이란 무엇입니까? 그리고 SPARQL 쿼리와 파이썬 코드와 같은 훨씬 더 많은 정보를 추가하십시오. 그리고 "어떤 문제"를 의미합니까? 당신에 대해 아무런 정보도없이 아무도 정말로 당신을 도울 수 없다고 상상할 수 없습니까? – AKSW

+0

@AKSW 미안하지만, 나는 요점을 설명하지 못했다. 나는 단지 포스트를 편집했다. 나는 자바 코드 coz를 보여 주었다. 파이썬으로 어떻게하는지 모르지만, 아무것도 시도하지 않았다. – Mehdi

+1

당신이 시도한 것을 보는 것이 도움이 될 것입니다 ... 저는 Kivy 프레임 워크를 조금 다루었으며 현재 파이썬 Android 앱을 작성 중입니다 ... Pyjnius는 Kivy.org에서 모르는 사람들을위한 것입니다 – Jarvis

답변

1

예나 푸세키를 사용하고 싶다면 이것을보십시오. Jena TDB in Python?

나는 rdflib를 사용하는 방법을 제안 할 수 있습니다. rdflib에 대한 저의 연구는 단순한 질의와 직렬화로 제한되어 왔습니다. 가장 간단한 방법은 그래프를로드하는 것입니다 (RDF 형식 nt, ttl 등). 그래프를 쿼리하고 필요에 따라 결과의 서식을 지정합니다.

import rdflib 

graph = rdflib.Graph() 
graph = graph.parse("triples.nt",format = "nt") 
query = "PREFIX OntoJO:<http://www.owl-ontologies.com /Ontology1400008538.owl#>" +\ 
"SELECT ?path " +\ 
"WHERE { "\ 
\ 
+ " ?n OntoJO:signee_par '"+choixsignrech1.getText()+"' ." \ 
+ " ?s OntoJO:mot_cle '"+choixclrech1.getText()+"' ." \ 
+ " ?m OntoJO:secteur '"+choixsecrech1.getSelectedItem()+"' ."\ 
+ " ?f OntoJO:ministere '"+choixminisrech1.getSelectedItem()+"' ."\ 
+ " ?r OntoJO:synonymes '"+choixsyrech1.getText()+"' ."\ 


+ "?n OntoJO:a_un_chemin ?y . "\ 
+ "?s OntoJO:a_un_chemin ?y . "\ 
+ "?m OntoJO:a_un_chemin ?y . "\ 
+ "?f OntoJO:a_un_chemin ?y . "\ 
+ "?r OntoJO:a_un_chemin ?y . "\ 
+ "?y OntoJO:chemin ?path . }" 
result = graph.query(query) 
#The result will be a QueryRow object because of the SELECT , look in the docs for further info. 
for i in result: 
    print i[0] 

나는 getText 호출을 대체하지 않으므로주의하십시오. 위의 코드는 python2 용이며 triple.nt 데이터에 대한 모든 쿼리 결과를 출력해야합니다.

이 답변에 대한 의견을 보내주십시오. rdflib에 대한 출처가 많지 않으므로 같은 질문과 관련하여 질문이 있으시면 ping 해 주시면 감사하겠습니다.

+0

예, yr 대답을 위해, 나는 무슨 짓을했는데 작동하지 않았다 : (이 오류 : IOError : [Errno 2] 그런 파일이나 디렉토리가 없습니다 : u'C : \\ Users \\ Mehdi \\ 작업 영역 \\ My_work \\ 테스트 \\ triples.nt '.제가 의해 대체 : 파일명 = graph.load (파일명 형식 = "XML") 그래프 = graph.parse (파일명 형식 = 'XML') 'JO 온톨로지 properties.owl 2014 6 월 09 변성' 또한 오류가 : + "? 로이스 OntoJO :. a_un_chemin Y"\ 형식 오류는 : + 단항 나쁜 피연산자 타입 'STR' – Mehdi

+0

그래프 = rdflib.Graph()는 파일명 = r'JO 온톨로지 09 변형 2014 년 6 월 ' graph.load (파일명 형식 = "XML") qres = graph.query ( ""properties.owl와 "* WHERE {S2 [P를?} O 5를 선택 제한" ""을 )qres.result의 고해상도에 대한 : 인쇄 고해상도 이 작품이 내가 다시 결과를 얻을,하지만 난 어떤 SPARQL 요청을 할 싶어 할 때, 나는 약간의 오차했습니다 :( – Mehdi

+0

을 당신은 필요 없다 @Mehdi 있는지 확인하는 것입니다 쿼리에서 단항 오류를 사용하면 두 개의 문자열을 추가하지 않으면 +를 제거 할 수 있습니다. 그리고 두 번째 주석에 대해서는 SPARQL 요청이 무엇을 의미합니까? –