2013-03-29 17 views
0

我用Protégé創建了一個本體論。然後我創建了一個包含兩個編輯文本和一個按鈕的Android界面。我的代碼的主要功能是在我的應用程序和本體之間建立連接並將這些數據存儲在其中。我使用三重商店進行存儲。如何與我的本體聯繫?

但它沒有正常工作。我使用芝麻作爲服務器,但我不知道如何獲得「更新」服務的正確URL。我可能會做出其他錯誤,但這裏是我的活動代碼:

package com.example.ontologie1; 
import com.hp.hpl.jena.ontology.DatatypeProperty; 
import com.hp.hpl.jena.ontology.Individual; 
import com.hp.hpl.jena.ontology.OntClass; 
import com.hp.hpl.jena.ontology.OntModel; 
import com.hp.hpl.jena.ontology.OntModelSpec; 
import com.hp.hpl.jena.rdf.model.Literal; 
import com.hp.hpl.jena.rdf.model.ModelFactory; 
import com.hp.hpl.jena.rdf.model.Property; 
import java.io.BufferedInputStream; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.InputStream; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import java.io.IOException; 

import org.apache.commons.httpclient.NameValuePair; 
import org.apache.commons.httpclient.methods.PostMethod; 

import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
    private Button buttonconnexion; 
    private EditText editpseudo; 
    private EditText editpassword; 
    public String ps; 
    public String pa; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    editpseudo = (EditText) findViewById(R.id.welcomeedittextlogin); 
    editpassword = (EditText) findViewById(R.id.welcomeedittextpassword); 
    buttonconnexion = (Button) findViewById(R.id.welcomebuttonconnexion); 
    buttonconnexion.setOnClickListener(click1); 
    } 

    protected OnClickListener click1 = new OnClickListener() { 
    public void onClick(View arg0) { 
     ps= editpseudo.getText().toString(); 
     pa= editpassword.getText().toString(); 
     try { 
     connexion(ps , pa); 
     } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
    } 
    }; 

    protected void connexion(String pseudo,String password) throws IOException { 

    String requete = "<http://www.w3.org/2002/07/owl#> .\n" 
     + "INSERT DATA {\n" 
     + " <http://www.owl-ontologies.com/Ontology_profile.owl#USER> a onto:USER;\n" 
     + "  onto:Login " + pseudo + ";\n" 
     + "  onto:Password " + password + ";\n" 
     + "}"; 


    PostMethod post = new PostMethod("<http://www.openrdf.org/config/repository#>"); 
    NameValuePair[] paramRequete = { 
     new NameValuePair("query", requete), 
    }; 
    post.setRequestBody(paramRequete); 

    InputStream in = post.getResponseBodyAsStream(); 
    Toast t = null ; 
    t.setText(in.toString()); 
    t=new Toast(null); 
    } 
} 

回答

0

我沒有與Android編程經驗,但也存在一些問題,建議你需要重新考慮自己的目標。

本體不是數據庫。您不會將數據存儲在本體中,也不需要本體來將數據存儲在三重存儲中。

要將數據存儲在三重存儲(使用SPARQL)中,您的三重存儲需要SPARQL端點。該端點具有一個URI,您可以將其發送給您的POSTGET請求。如果您在本地機器上安裝了Sesame,則該URI可能看起來像http://localhost:8080/sparql。如果你想插入數據,triplestore需要允許。

您還需要一個有效的SPARQL查詢,而您的requete不是。第一行,

<http://www.w3.org/2002/07/owl#> . 

不完整。通常在SPARQL查詢的第一行有PREFIX es,但它們不以.結尾。例如:

PREFIX owl: <http://www.w3.org/2002/07/owl#> 

使用前綴onto:爲你做什麼,你需要以同樣的方式來定義它。有關完整的SPARQL教程,請參閱this

此外,線

Toast t = null ; 
t.setText(in.toString()); 
t=new Toast(null); 

會產生NullPointerException,您撥打的t的方法是null

+0

謝謝你本:)我解決了問題:) – safwen