28/10/2014

parsing d'un fichier mm de Freemind avec Processing

XML xml;
XML xml_mm;
int indent=0;
ArrayList liens;
ArrayList lien;
void setup() {

  //MM VERS RDF
  xml_mm = loadXML("Smag0versrdf.mm");
  //noeud principal
  XML child_mm = xml_mm.getChild("node");
  String ID_centre = child_mm.getString("ID");
  String texte_centre = child_mm.getString("TEXT");
  // String contenu = children_mm[i].getContent();
  println("Noeud central : "+ID_centre + ", " + texte_centre + ", ");

  list_node_rec( child_mm);
}

void list_node_rec(XML _noeud) {
  //branches racines
//println (indent);
  if (_noeud.hasChildren()) {
   
    XML[] children_mm_branches = _noeud.getChildren("node");
        print(children_mm_branches.length);
   // String indentation=calcul_indentation(indent);
    for (int i = 0; i < children_mm_branches.length; i++) {
      indent++;
      XML nouveauNoeud=children_mm_branches[i];
      String ID = nouveauNoeud.getString("ID");
      String texte = nouveauNoeud.getString("TEXT");
     // liens.add(new Lien());
   //  lien.add(_noeud.getString("ID"));
    // lien.add(ID);
    // liens.add(lien);
      // String contenu = children_mm[i].getContent();
     // print(indentation);
            println("");
            print(indent);
     for (int h=0; h< indent+1; h++){

       print(" ");}
      print(ID + ", " + texte + ", ");
      list_node_rec(nouveauNoeud );
      indent--;
      //print("\n");
    }
  }
}
String calcul_indentation(int indent) {​​
  String indentationTemp="";
  for (int j=1; j<indent; j++) {
    indentationTemp+="    ";
  }

  return indentationTemp;
}


le fichier Smag0versrdf.mm peut être vu /modifié grace à l'application Freemind

Derniers test d'interface, parsing MindMap en RDF, parsing ontologie owl, et igeo avec Processing



voir en détail le fichier Freemind dans le data du "mm_vers_rdf_28-10" pour plus de détails 

01/10/2014

Android , Fuseki & RDF. Utilisation de APPINVENTOR 2 pour envoyer des triplets au serveur Fuseki

Pour rappel :
Le but est de faciliter l'échange d'information entre les différents objets connectés.
On utilise un serveur Fuseki. Le serveur fuseki permet de stocker les informations sous forme de triplets  Sujet/propriété/Objet comme par exemple  ("Voiture" "couleur" "rouge")
voir RDF / web sémantique / Jena / Fuseki ... pour plus d'infos sur le sujet.

pour résumer : RDF permet aux machines d'inférer ou de déduire des informations qui n'existent pas , à partir des relations entre les informations qui existent.

Dans le cadre du projet, nous avons besoin d'un serveur où sont partagées les informations.
Attention, les données ne sont pour l'instant pas sécurisées et tout le monde peut y mettre / remplacer, effacer tout et n'importe quoi.
Ce serveur est un peu un tableau blanc où chacun peut poser tout type d'information.

Le serveur est accessible via l'adresse : http://fuseki-smag0.rhcloud.com

pour consulter les informations qui y sont présentes, vous pouvez utiliser :
-  les formulaires en cliquant sur "Control Panel", choisissez le dataset "ds" puis cliquez sur "Select".
ensuite dans la zone de texte "Sparql Query" saisissez la requete suivante :

select * WHERE { ?s ?p ?o} LIMIT 100

puis dans Output, choisissez "xml"
cliquez ensuite sur "Get Result"

ceci vous affiche  100  informations
On trouve des infos pour faire des requetes sparql un peu partout : exemple là http://rdf.myexperiment.org/howtosparql?page=Using+the+SPARQL+Endpoint#

- ou directement :
http://fuseki-smag0.rhcloud.com/ds/query?query=select+*+WHERE+%7B%3Fs+%3Fp+%3Fo%7D&output=xml&stylesheet=%2Fxml-to-html.xsl


Depuis un bout de temps, je cherche le moyen d'envoyer des informations au format RDF sur ce serveur depuis mon smartphone Android pour pouvoir transmettre des informations au système Smag qui est sensé gérer les objets connectés que nous aurons dans nos habitations.

Plusieurs tests avec APDE, androjena, arqoid, (voir articles précédents...) mais je ne trouve pas ce qu'il faut, car l'utilisation de Jena plante les applis android

Par contre avec Appinventor j'ai un début de solution.
Le serveur Fuseki, n'acceptant que les requetes Post ou Put pour updater les informations, il a fallu décortiquer la requete http :

PREFIX dc: <http://purl.org/dc/elements/1.1/>
 PREFIX ns: <http://example.org/ns#>
 INSERT DATA {
 GRAPH <http://example/bookStore> {
  <http://example/book14>  ns:price  6 }
 }


Pour tester, modifier l'appli, vous devez télécharger ce fichier : https://drive.google.com/file/d/0B0zEK4yLB5C6cTZvN01jemQ5bHM/edit?usp=sharing

et l'importer dans Appinventor : http://ai2.appinventor.mit.edu/

Reste maintenant à récupérer les Prefix, et proposer une liste de propriétés courantes, récupération des infos, recherches dans la base... modification des infos, et vote pour chaque info, pour valider leur véracité, sécurisation des données perso.

un coup de main pour l'utilisation de Appinventor ou de ce fichier ? n'hésitez pas à laisser un message