Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# recherche d'un "parent" dans un graphe RDF

Envoyé par : alexp

Date : 28/03/2006 16:27

Je pense pas être le seul à réflechir d'abord en arbre, et un parcours qui me revient souvent est de trouver le "parent" d'un noeud. Le parent n'a pas de sens dans le graphe RDF, mais cela en a un dans le fichier XML/RDF.
Voici un exemple appliqué à des groupe d'utilisateurs :

<Seq about="http://www/categories">
 <Seq about="urn:categories:cat1" r:nom="Administrateurs">
   <li resource="urn:users:user1"/>
   <li resource="urn:users:user2"/>
 </Seq>
</Seq>
<r:User about="http://www/users/user1" r:nom="alex" />
<r:User about="http://www/users/user2" r:nom="fred" />

Ainsi comment récupérer la catégorie d'un utilisateur ?

user=rdf.GetResource("http://www/users/user1");

var targets = datasource.ArcLabelsIn(user);
// targets permet de récupérer les arcs générés par les <li> :
// http://www.w3.org/1999/02/22-rdf-syntax-ns#_1 ...
while (targets.hasMoreElements()){
  var predicate = targets.getNext();
  if (predicate instanceof Components.interfaces.nsIRDFResource){
    var target = datasource.GetSource(predicate, user, true);
    // enfin GetSource permet de récupérer la Source de l'arc qui pointe sur notre utilisateur (ie la catégorie)
    if (target instanceof Components.interfaces.nsIRDFResource)
      categorieRS=target;
  }
}

/!\ Attention toutefois, suivant la compléxité de votre schéma RDF, ce script peut vous récupérer autre chose que la catégorie ... En effet ceci va récupérer tous les Seq ou Bag contenant votre utilisateurs.
Dans un tel cas de figure, il faudra faire un GetSourceS et faire des tests supplémentaire comme :

var typeRS=datasource.GetTarget(target, rdf.GetResource("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), true);
if (typeRS.EqualsNode(rdf.GetResource("http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq")))
  categorieRS=target;

A vous de trouver le test permettant de s'assurer que c'est le bon parent ...

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.