0

我用 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);
  }
}
4

1 回答 1

0

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

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

要将数据存储在三重存储中(使用 SPARQL),您的三重存储需要一个 SPARQL 端点。该端点具有您发送POSTGET请求的 URI。如果您在本地计算机上安装了 Sesame,则该 URI 可能看起来像http://localhost:8080/sparql. 如果你想插入数据,triplestore 需要允许。

您还需要一个有效的 SPARQL 查询,而您requete不是。第一行,

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

不完整。通常在 SPARQL 查询的第一行有PREFIXes,但它们不以.. 例如:

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

要像您一样使用前缀onto:,您需要以相同的方式定义它。有关完整的 SPARQL 教程,请参阅

此外,线条

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

会生成一个NullPointerException,因为你调用的方法t就是null.

于 2013-03-30T12:27:15.457 回答