2012-01-13 2 views
1

Je travaille sur une application Web en cours de développement à l'aide de GWT. J'utilise aussi les ontologies OWL et le framework Jena pour structurer le contenu sémantique dans l'application.Transfert de données OWL du client vers le serveur à l'aide de GWT

Une fonction simple dans l'application serait d'obtenir des données de l'utilisateur et de les envoyer aux serveurs pour les stocker sous forme de graphe de données en utilisant l'ontologie. Je suppose qu'un moyen serait de stocker les données en tant qu'objets de classe java équivalents aux classes d'ontologie et de les envoyer en utilisant la communication asynchrone de GWT. Pour convertir les classes OWL en Java, j'ai utilisé Jastor. Ma question est que, après que le serveur reçoive la classe java, est-il possible de convertir facilement à un individu OWL et de l'ajouter au graphe de données, en utilisant les fonctions de Jena et/ou Jastor? Par exemple, dans la mise en œuvre de l'interface côté serveur que nous appelons quelque chose comme ceci:

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! } 

Malheureusement je ne pouvais trouver aucune fonction Jena qui peut ajouter un individu existant au modèle. Souhaitez-vous suggérer un autre moyen de transmettre les données d'ontologie au serveur et de les stocker plutôt que d'utiliser des classes créées par Jastor (par exemple en utilisant un fichier XML)?

Merci pour votre aide

Répondre

2

Il y a deux parties à la réponse. Tout d'abord, un Individual est une sous-classe d'un Jena Resource, ce qui est certainement quelque chose que vous pouvez ajouter à un modèle. Cependant, les ressources individuelles ou les propriétés ou les littéraux ne sont pas stockés dans un Model. Un Model stocke uniquement des triplets, représentés sous forme d'objets Statement dans l'API Java. Donc, pour ajouter une ressource à un modèle, vous devez l'inclure dans un triplet. Dans Iéna, un individu est défini comme un sujet d'un triplé dont le prédicat est rdf:type et dont l'objet ne fait pas partie des classes de langage intégrées. Donc, si vous avez:

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

(Note: cet exemple est tout à fait fictive), alors ex:my_car serait un individu, mais ex:Ferrari ne serait pas (parce OWL Class est un type intégré). Donc, pour ajouter votre individu à votre modèle, il vous suffit d'affirmer qu'il s'agit d'un type quelconque. Comme je ne connais pas GWT et que je n'utilise pas Jastor, je ne peux pas dire si l'association de type qui fait normalement partie d'un Iéna Individual est conservée après la sérialisation. Je ne pense pas, dans ce cas, vous devrez avoir d'autres moyens de déterminer le type de l'individu que vous souhaitez ajouter, ou utiliser un prédicat différent de rdf:type pour ajouter la ressource à la Model. Cela dit, personnellement, je ne résoudrais probablement pas votre problème de cette façon. En règle générale, lorsque je travaille avec des représentations côté client de RDF côté serveur, j'envoie juste les informations minimales (par exemple URI et étiquette) au client en tant que JSON. Si j'ai besoin de plus de données sur une ressource donnée, je l'envoie avec la sérialisation JSON initiale, ou c'est juste un appel Ajax. Mais, comme je le dis, je n'utilise pas GWT pour que ce conseil ne vous soit d'aucune utilité.

+0

Merci beaucoup Ian, je vais essayer de trouver un moyen de contourner mon problème basé sur votre réponse très utile. Merci encore! – Ehsan

Questions connexes