如何与我的本体连接?

时间:2013-03-29 21:20:19

标签: android ontology

我与Protégé创建了一个本体。然后我创建了一个Android界面,其中包含两个编辑文本和一个按钮。我的代码的主要功能是在我的应用程序和本体之间建立连接并将这些数据存储到其中。我使用三重商店存储。

但它无法正常工作。我使用Sesame作为服务器,但我不知道如何获得“更新”服务的正确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);
  }
}

1 个答案:

答案 0 :(得分:0)

我没有使用Android编程的经验,但有些问题表明您需要重新考虑目标。

本体不是数据库。您不会将数据存储在本体中,也不需要本体来将数据存储在三元库中。

要将数据存储在三元组中(使用SPARQL),您的三元组需要一个SPARQL端点。该端点具有您发送POSTGET请求的URI。如果您在本地计算机上安装了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