2012-01-13 7 views
1

GWTを使用して開発中のWebアプリケーションで作業しています。また、OWLオントロジーとJenaフレームワークを使用して、アプリケーション内の意味内容を構造化しています。GWTを使用してクライアントからサーバーにOWLデータを転送する

アプリケーションの単純な関数は、ユーザーからデータを取得し、サーバー側に送信してオントロジを使用してデータグラフとして保存することです。 1つの方法は、データをJavaクラスのオブジェクトとしてオントロジクラスに相当するものとして格納し、GWT非同期通信を使用してそれらを送信することです。 OWLクラスをJavaに変換するために、私はJastorを使用しました。

私の質問は、サーバーがJavaクラスを受け取った後、簡単にOWLの個人に変換して、それをデータグラフに追加することができるかどうかです.JenaやJastorの機能を使用していますか?例えば、サーバ側のインタフェースの実装で、私たちはこのような何かを呼び出す:

Public void StoreUser (User userObj) { 
    //User: a Jastor created java class. userObj is instantiated using the user data on the client side. 

    OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM); 
    //Open the ontology here using inputstream and ontModel.read! 

    Individual indiv = (Individual) userObj.resource(); 

    //Add the individual to the model here! } 

残念ながら、私はモデルに既存の個人を追加することができます任意のイエナの機能を見つけることができませんでした。

Jastorで作成したクラス(XMLファイルなど)を使用するのではなく、オントロジーデータをサーバー側に渡して保存する別の方法を提案しますか?

ありがとうございました

答えて

2

回答には2つの部分があります。まず、Individualは、Jena Resourceのサブクラスです。これは間違いなくモデルに追加できるものです。ただし、個別のリソース、プロパティまたはリテラルはModelに格納されません。 Modelは、Java APIにStatementオブジェクトとして表されるトリプルのみを格納します。だから、モデルにリソースを追加するには、それを3倍にする必要があります。

イエナでは、個人が述語がrdf:typeであり、そのオブジェクトが組み込み言語クラスの1つではないトリプルのサブジェクトとして定義されます。だから、あなたが持っている場合:

ex:my_car rdf:type ex:Ferrari . 
ex:Ferrari rdf:type owl:Class . 

(注:この例では完全に架空のですが)、そしてex:my_carは、個々のだろうが、(OWL Class内蔵タイプなので)ex:Ferrariはないでしょう。したがって、あなたのモデルをあなたのモデルに追加するには、それが何らかのタイプのものであると主張するだけです。私はGWTを知らず、Jastorを使用しないので、通常、Jena Individualの一部である型の関連付けは、シリアル化の後も保持されているかどうかは言えません。あなたが追加したい個体のタイプを決定する他の方法が必要な場合や、rdf:type以外の別の述語を使用してModelにリソースを追加する必要があります。

個人的には、私はおそらくこのようにあなたの問題を解決しないでしょう。通常、サーバーサイドのRDFのクライアント側の表現で作業している場合、JSONとしてクライアントに最小限の情報(URIやラベルなど)のみを送信します。特定のリソースに関するデータがさらに必要な場合は、最初のJSONシリアライズと一緒に送信するか、Ajaxコールだけを送信します。しかし、私が言っているように、私はGWTを使用しないので、アドバイスはあなたの役に立つものではないかもしれません。

+0

本当にありがとう、私はあなたの非常に有益な答えに基づいて私の問題を回避する方法を見つけることを試みることになります。再度、感謝します! – Ehsan

関連する問題