Sort di un RDF tree

2 views
Skip to first unread message

f z

unread,
Nov 18, 2009, 5:12:42 AM11/18/09
to XUL Italia - Public Discussions
Prima di tutto, saluto tutti gli altri membri della list, è un piacere
avere l'opportunita di parlare un po di bottega :p
Ora, inauguriamo questa mailing list con uno dei problemi che mi hanno
causato un pò di mal di testa lavorando con xul.
Nella mia applicazione, devo mostrare una lunga lista di record agli
utenti. Per farlo ho utilizzato un widget tree, con sorgente di dati
rdf (il documento rdf e' generato dinamicamente a partire da una query
su database dal backend). Il problema che sto incontrando sorge quando
voglio provare ad utilizzare la funzione di sort nativa del tree:
sembra che funzioni regolarmente quando *tutti* i campi sono
compilati, ma se qualche riga ha valore nullo per quel campo, invece
di venire raggruppato, la riga viene messa in posizione casuale (o con
un criterio che non sono riuscito a determinare) in mezzo alle righe
valorizzate.
Per il momento ho scavalcato il problema attribuendo alle righe con
campo nullo un valore convenzionale vietato alle altre, in modo che
vengano raggruppate, e definendo una classe css per la cella in cui il
testo risulti invisibile, ma e' una soluzione poco elegante che non mi
piace molto, e che non necessariamente si potrà sempre applicare.
Mi piacerebbe sapere, se c'e' qualcuno che ne ha avuto esperienza, se
sono io che non so come dire a xul come ccomportarsi correttamente, o
se effettivamente è una limitazione a cui bisogna lavorare attorno...
Grazie a tutti

Luca Greco

unread,
Nov 18, 2009, 8:28:45 AM11/18/09
to xulit-...@googlegroups.com
2009/11/18 f z <fuzzyi...@gmail.com>:

>
> Prima di tutto, saluto tutti gli altri membri della list, è un piacere
> avere l'opportunita di parlare un po di bottega :p
> Ora, inauguriamo questa mailing list con uno dei problemi che mi hanno
> causato un pò di mal di testa lavorando con xul.
> Nella mia applicazione, devo mostrare una lunga lista di record agli
> utenti. Per farlo ho utilizzato un widget tree, con sorgente di dati
> rdf (il documento rdf e' generato dinamicamente a partire da una query
> su database dal backend).

Allora prima di affrontare il bug specifico che descrivi successivamente
è IMHO necessario affrontare prima il problema delle datasource RDF.

Anche se in molta della documentazione in circolazione RDF viene riportato
come formato consigliato per le sorgenti dati, questa pratica è ora deprecata
(o deprecabile :-D) e sono state implementate le modifiche necessarie per poter
utilizzare come sorgenti dati XML e SQLite (nativamente) e altri formati come ad
esempio JSON mediante l'implementazione di una particolare interfaccia IDL.

La dimostrazione pratica è il rapido refactoring in Firefox di hystory
e bookmarks
da RDF a SQLite.

Nel tuo caso essendo la sorgente dati remota io valuterei XML o
l'implementazione
di un custom Query Processor:

* https://developer.mozilla.org/en/XUL/Template_Guide/XML_Templates
* https://developer.mozilla.org/Talk:en/XUL/Template_Guide/XML_Templates
* https://developer.mozilla.org/en/How_to_implement_a_custom_XUL_query_processor_component
* https://developer.mozilla.org/en/XUL/Template_Guide/SQLite_Templates

Mentre per quanto riguarda il tag xul tree, personalmente l'ultima volta
che l'ho utilizzato intensivamente è stato su Firefox 2 (prima cioè che
introducessero le migliorie di cui sopra) e per driblare RDF convertivo
un formato XML ordinario attraverso una TreeView personalizzata:

* https://developer.mozilla.org/En/XUL/Tree
* https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsITreeView
* https://developer.mozilla.org/en/XUL_Tutorial/Custom_Tree_Views

> Il problema che sto incontrando sorge quando
> voglio provare ad utilizzare la funzione di sort nativa del tree:
> sembra che funzioni regolarmente quando *tutti* i campi sono
> compilati, ma se qualche riga ha valore nullo per quel campo, invece
> di venire raggruppato, la riga viene messa in posizione casuale (o con
> un criterio che non sono riuscito a determinare) in mezzo alle righe
> valorizzate.
> Per il momento ho scavalcato il problema attribuendo alle righe con
> campo nullo un valore convenzionale vietato alle altre, in modo che
> vengano raggruppate, e definendo una classe css per la cella in cui il
> testo risulti invisibile, ma e' una soluzione poco elegante che non mi
> piace molto, e che non necessariamente si potrà sempre applicare.
> Mi piacerebbe sapere, se c'e' qualcuno che ne ha avuto esperienza, se
> sono io che non so come dire a xul come ccomportarsi correttamente, o
> se effettivamente è una limitazione a cui bisogna lavorare attorno...
> Grazie a tutti

Questo particolare bug nel mio usecase (che risale comunque alla versione 2
di Firefox... quindi praticamente un'implementazione del tree probabilmente
diversa) non l'ho incontrato, è fattibile per te ricavare uno snippet
ridotto che
riproduca il problema per poter toccare con mano anche noi il problema nella
sua manifestazione a runtime?

Spero nel frattempo che i link e le altre note contenute in questa mail possano
tornarti utili.

Happy hacking,
rpl

f z

unread,
Nov 20, 2009, 1:16:21 PM11/20/09
to XUL Italia - Public Discussions
Rieccomi, grazie per l' esaustiva risposta

> Anche se in molta della documentazione in circolazione RDF viene riportato
> come formato consigliato per le sorgenti dati, questa pratica è ora deprecata
> (o deprecabile :-D) e sono state implementate le modifiche necessarie per poter
> utilizzare come sorgenti dati XML e SQLite (nativamente) e altri formati come ad
> esempio JSON mediante l'implementazione di una particolare interfaccia IDL.

Accidenti, sarebbe stato interessante avere questa informazione quando
ho cominciato
a trafficare con XUL... purtroppo i tutorial su MDC e tutto quanto
riguarda specificamente
i tree ancora non fa menzione di questo fatto.
Cmq, ho provato a riadattare la mia sorgente dati a xml in qualcuno
dei tree che uso ed
effettivamente sembra aver quadagnato qualcosa in affidabilita e forse
anche in prestazioni.
Tanto per cominciare, il problema dei campi non valorizzati che non
venivano ordinati in
questo modo sparisce.
Purtroppo fa la sua comparsa un nuovo problema: con rdf, potevo
inserire dei meta-dati
per precisare la natura della colonna da ordinare, in modo che il
sorting dei numeri venisse
effettuato correttamente.
Da quando sono passato ad XML invece sembra che il sorting avvenga
strettamente su base
alfabetica, con il conseguente effetto che la lista 1,2,10 viene
ordinata 1,10,2.
Anche questo problema l'ho temporaneamente aggirato usando un campo
specifico di sorting,
nel quale i valori numerici vengono adeguatamente corretti (01,02,10
etc.), ma preferirei
essere in grado di comunicare a xul il tipo di dati correttamente...
come posso farlo in xml o con il template engine?

Includo uno snippet di quest'ultimo problema per completezza, nel caso
il mio errore fosse banale...
file test.xml:
<schedules>
<schedule description = 'Task 1' priority = '01' severity = '1' /
>
<schedule description = 'Task 2' priority = '02' severity = '1' /
>
<schedule description = 'Task 3' priority = '03' severity = '1' /
>
<schedule description = 'Task 4' priority = '04' severity = '4' /
>
<schedule description = 'Task 5' priority = '05' severity = '15' /
>
<schedule description = 'Task 6' priority = '06' severity = '6' /
>
<schedule description = 'Task 7' priority = '07' severity = '7' /
>
<schedule description = 'Task 8' priority = '08' severity = '8' /
>
<schedule description = 'Task 9' priority = '09' severity = '9' /
>
<schedule description = 'Task 10' priority = '10' severity = '1' /
>
<schedule description = 'Task 11' priority = '11' severity = '11' /
>
<schedule description = 'Task 12' priority = '12' severity = '2' /
>
<schedule description = 'Task 13' priority = '13' severity = '3' /
>
<schedule description = 'Task 14' priority = '14' severity = '14' /
>
<schedule description = 'Task 15' priority = '15' severity = '5' /
>
<schedule description = 'Task 16' priority = '16' severity = '16' /
>
<schedule description = 'Task 17' priority = '17' severity = '7' /
>
</schedules>

File test.xul:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<window title="XUL Tree"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/
there.is.only.xul">
<vbox flex="1" style="overflow: auto">
<hbox>
<groupbox flex="1">
<caption label="test" />
<tree datasources='test.xml' querytype='xml' ref='*' flex='1'
rows='20'>
<treecols>
<treecol label='Task' flex='4' sortActive='true'
sortDirectionIndicator='ascending' sort='?description' />
<treecol label='Priorita' flex='1' sortActive='true'
sortDirectionIndicator='ascending' sort='?priority' />
<treecol label='Gravita' flex='1' sortActive='true'
sortDirectionIndicator='ascending' sort='?severity' />
</treecols>
<template>
<query expr='schedule' />
<action>
<treechildren>
<treeitem uri='?'>
<treerow>
<treecell label='?description' />
<treecell label='?priority' />
<treecell label='?severity' />
</treerow>
</treeitem>
</treechildren>
</action>
</template>
</tree>
</groupbox>
</hbox>
</vbox>
</window>



Luca Greco

unread,
Nov 20, 2009, 3:17:03 PM11/20/09
to xulit-...@googlegroups.com
2009/11/20 f z <fuzzyi...@gmail.com>:

>
> Rieccomi, grazie per l' esaustiva risposta

figurati... in fondo e' il motivo per cui abbiamo rimesso su una ml
italiana per xul ;-)

> Accidenti, sarebbe stato interessante avere questa informazione quando
> ho cominciato
> a trafficare con XUL... purtroppo i tutorial su MDC e tutto quanto
> riguarda specificamente
> i tree ancora non fa menzione di questo fatto.

Già... appena il lavoro mi lascia un po' di respiro vorrei tallonare
qualcuno di MDC per capire se e come poter fixare questa questione
dell'RDF

> Purtroppo fa la sua comparsa un nuovo problema: con rdf, potevo
> inserire dei meta-dati
> per precisare la natura della colonna da ordinare, in modo che il
> sorting dei numeri venisse
> effettuato correttamente.

Come sempre succede per la legge di Murphy :-D

> Da quando sono passato ad XML invece sembra che il sorting avvenga
> strettamente su base
> alfabetica, con il conseguente effetto che la lista 1,2,10 viene
> ordinata 1,10,2.
> Anche questo problema l'ho temporaneamente aggirato usando un campo
> specifico di sorting,
> nel quale i valori numerici vengono adeguatamente corretti (01,02,10
> etc.), ma preferirei
> essere in grado di comunicare a xul il tipo di dati correttamente...
> come posso farlo in xml o con il template engine?

Hai provato con la funzione xpath 'number'?
http://www.w3.org/TR/1999/REC-xpath-19991116#function-number

Dovrebbe essere possibile fare qualcosa del tipo:

<treecols>
<treecol label='Task'           flex='4' sortActive='true'
sortDirectionIndicator='ascending' sort='?description'  />
<treecol label='Priorita'       flex='1' sortActive='true'

sortDirectionIndicator='ascending' sort='number(?priority)' />


<treecol label='Gravita'        flex='1' sortActive='true'

sortDirectionIndicator='ascending' sort='number(?severity)' />
</treecols>

Happy XUL-ing,
rpl

Reply all
Reply to author
Forward
0 new messages