Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# [Solution] Peupler un tree a partir d'une chaine de caractères RDF

Envoyé par : Utilisateur anonyme

Date : 04/07/2005 13:29

Bonjour à tous,

mon sujet n'est pas une question mais une solution.

Je transfert, via XML-RPC, une chaine de caractères contenant le contenu d'un fichier RDF. J'ai eu pas mal de difficultés à générer un arbre avec ça parce que généralement on charge à partir d'une URL.

Voici le code que j'utilise :

// Load RDF Datasource from string
var datasource = Components
                   .classes['@mozilla.org/rdf/datasource;1?name=in-memory-datasource']
                   .createInstance(Components.interfaces.nsIRDFDataSource);

var baseUri = Components.classes['@mozilla.org/network/io-service;1']
                   .getService(Components.interfaces.nsIIOService)
                   .newURI('http://www.plestinlesgreves.com/all-category', null, null);

var parser = Components.classes['@mozilla.org/rdf/xml-parser;1']
                   .createInstance(Components.interfaces.nsIRDFXMLParser);

parser.parseString(datasource, baseUri, rslt);

var RDF = Components.classes['@mozilla.org/rdf/rdf-service;1']
                   .getService(Components.interfaces.nsIRDFService);

var tree = document.getElementById('submitnews-category');
tree.database.AddDataSource(datasource);
tree.builder.rebuild();

Ce code fonctionne chez moi. Le namespace est http://www.plestinlesgreves.com/all-category. La chaine de caractère se nomme rslt et elle contient un truc dans ce genre :

<?xml version="1.0" encoding="UTF-8"?>

<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:CATEGORY="http://www.plestinlesgreves.com/rdf#">

    <RDF:Description RDF:about="http://www.plestinlesgreves.com/news">
        <CATEGORY:name>Actualités</CATEGORY:name>
        <CATEGORY:idCategory>1</CATEGORY:idCategory>
    </RDF:Description>

        <RDF:Description RDF:about="http://www.plestinlesgreves.com/news/politique">
            <CATEGORY:name>Politique</CATEGORY:name>
            <CATEGORY:idCategory>2</CATEGORY:idCategory>
        </RDF:Description>

        <RDF:Description RDF:about="http://www.plestinlesgreves.com/news/environnement">
            <CATEGORY:name>Environnement</CATEGORY:name>
            <CATEGORY:idCategory>3</CATEGORY:idCategory>
        </RDF:Description>

        <RDF:Description RDF:about="http://www.plestinlesgreves.com/news/sociale">
            <CATEGORY:name>Sociale</CATEGORY:name>
            <CATEGORY:idCategory>4</CATEGORY:idCategory>
        </RDF:Description>

    <RDF:Seq RDF:about="http://www.plestinlesgreves.com/all-category">
        <RDF:li>
            <RDF:Seq RDF:about="http://www.plestinlesgreves.com/news">
                <RDF:li RDF:resource="http://www.plestinlesgreves.com/news/politique" />
                <RDF:li RDF:resource="http://www.plestinlesgreves.com/news/environnement" />
                <RDF:li RDF:resource="http://www.plestinlesgreves.com/news/sociale" />
            </RDF:Seq>
        </RDF:li>
    </RDF:Seq>
</RDF:RDF>

J'ai un seul petit problème : je renvois des données codées en UTF-8 (comme spécifié dans l'entête XML) mais à l'affichage le codage est cassé. Il me semble que tout ce qui passe par Javascript est considéré comme de l'ISO-8859. C'est bien dommage. Si quelqu'un voit comment faire, ça me dépannerait bien.

Voila, j'espère que ce code servira à quelqu'un.

# Re: [Solution] Peupler un tree a partir d'une chaine de caractères RDF

Envoyé par : Utilisateur anonyme

Date : 04/07/2005 13:46

Petit patch :

ne pas oublier :

tree.setAttribute('ref', 'http://www.plestinlesgreves.com/all-category');

Quand à la variable baseUri, j'ai pas vraiment compris à quoi elle sert. Si je l'initialise avec juste http: ça marche pareil. Je vais creuser un peu même si ça marche, j'aime bien comprendre les choses.

# Re: [Solution] Peupler un tree a partir d'une chaine de caractères RDF

Envoyé par : Utilisateur anonyme

Date : 04/07/2005 14:10

On continue dans les patchs, ce coup çi c'est sûr, c'est le dernier.

Tout le monde aura vu que la variable RDF ne sert à rien. Le nouveau code est donc :

// Load RDF Datasource from string
var datasource = Components
               .classes['@mozilla.org/rdf/datasource;1?name=in-memory-datasource']
               .createInstance(Components.interfaces.nsIRDFDataSource);

var baseUri = Components.classes['@mozilla.org/network/io-service;1']
               .getService(Components.interfaces.nsIIOService)
               .newURI('http://www.plestinlesgreves.com/', null, null);

var parser = Components.classes['@mozilla.org/rdf/xml-parser;1']
               .createInstance(Components.interfaces.nsIRDFXMLParser);

parser.parseString(datasource, baseUri, rslt);

var tree = document.getElementById('submitnews-category');
tree.setAttribute('ref', 'http://www.plestinlesgreves.com/all-category');
tree.database.AddDataSource(datasource);
tree.builder.rebuild();

Si le fichier RDF (donc le contenu de la chaine de caractères) contient des liens relatifs (le terme est pas terrible), le parser se servira de l'URI contenu dans baseUri pour les résoudre. Pour plus d'information : http://www.xulplanet.com/references/xpco(..)

Voila, c'est fini. Au faites, j'ai toujours pas trouvé comment résoudre mon problème de codage de caractères. Help me please :-)

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.