Strumenti Utente

Strumenti Sito


utenti:extraway_platform_server:extraway_tree_library

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
utenti:extraway_platform_server:extraway_tree_library [2023/03/08 14:16] – [Versioni eXtraWay Tree library] chiara.pavanatiutenti:extraway_platform_server:extraway_tree_library [2023/03/08 14:49] (versione attuale) – [Composizione del comando] chiara.pavanati
Linea 5: Linea 5:
 <color red>**:!: ####Not yet implemented/released#### **</color> <color red>**:!: ####Not yet implemented/released#### **</color>
  
-Con l'introduzione del server di classe '24si è fatto un più ampio uso delle librerie dinamiche, specialmente in forma di //PlugIn//.\\  +Con l'introduzione del **server** di classe **24** si è fatto un più ampio uso delle **librerie dinamiche**, specialmente in forma di **PlugIn**.
-Per accedere ad essi si fa uso di un comando XML generico col quale indicare parametri di varia natura ottenendo in risposta un corrispondente XML.\\ La ''libtree'' è una di questi //PlugIn// ed è finalizzata a navigare una gerarchia di nodi che si prestano per diversi scopi.+
  
-Di seguito l'elenco delle versioni e delle loro caratteristiche, [[#come_si_configurano_ed_utilizzano_i_nodi|in coda]] un breve tutorial.+Per accedere ad essi si fa uso di un **comando XML** generico col quale indicare **parametri** di varia natura ottenendo in risposta un corrispondente **XML**.
  
-**N.B.:** Per quanto concerne la numerazione dei moduli si rimanda alla ''[[tecnici:prodotti_e_servizi:extraway_platform_server:versioni_extraway_server|descrizione della numerazione adottata per il Server]]''+La ''libtree'' è una di questi **PlugIn** ed è finalizzata a navigare una **gerarchia** di **nodi** che si prestano per diversi scopi. 
 + 
 +Di seguito l'elenco delle **versioni** e delle loro **caratteristiche**, ''[[#come_si_configurano_ed_utilizzano_i_nodi|in coda]]'' un breve tutorial. 
 + 
 +**N.B** Per quanto concerne la **numerazione** dei **moduli** si rimanda alla ''[[tecnici:prodotti_e_servizi:extraway_platform_server:versioni_extraway_server|descrizione della numerazione adottata per il Server]]''
  
 ===== Versioni '1' ===== ===== Versioni '1' =====
Linea 16: Linea 19:
 ==== Versione 1.0.0 ==== ==== Versione 1.0.0 ====
  
-  * Prima versione. Introduce l'uso dei nodi standard e dei nodi //template//. +  * Prima versione. Introduce l'uso dei **nodi standard** e dei **nodi template**; 
-  * Adeguato il comportamento della libreria allo stesso risutato per alberi di nodi //template// //standard//. +  * Adeguato il **comportamento** della **libreria** allo stesso risultato per **alberi** di **nodi template** **standard**; 
-  * Introdotta la possibilità di filtrare ulteriormente gli alberi di tipo //template// impostando una precedente selezione come restrizione da applicarsi in analisi spettrale. +  * Introdotta la possibilità di filtrare ulteriormente gli **alberi** di tipo **template** impostando una precedente selezione come **restrizione** da applicarsi in analisi spettrale; 
-  * Introdotto il concetto di frequenza: Mentre negli alberi //template// di tipo ''voc'' essa è una conseguenza naturale, in quanto derivante dal vocabolario, negli alberi standard si applica solo là dove sia presente un'apposita ''action'' di tipo ''search''. Indicando nella richiesta del caricamento di un nodo la specifica che si desidera la frequenza, essa verrà tornata nell'attributo supplementare ''frequency''. +  * Introdotto il concetto di **frequenza**: Mentre negli **alberi template** di tipo ''voc'' essa è una conseguenza naturale, in quanto derivante dal **vocabolario**, negli **alberi standard** si applica solo là dove sia presente un'apposita ''action'' di tipo ''search''. Indicando nella richiesta del **caricamento** di un nodo la specifica che si desidera la **frequenza**, essa verrà tornata nell'**attributo** supplementare ''frequency'' ; 
-  * Corretto trattamento dei caratteri accentati o non validi e dei vocabolari double nei nodi di alberi //template// introducendo la codifica //Base 64// dove necessaria ed un più puntale trattamento dei vocabolari //double//.+  * Corretto trattamento dei **caratteri accentati** **non validi** e dei **vocabolari double** nei **nodi** di **alberi template** introducendo la **codifica Base 64** dove necessaria ed un più puntale trattamento dei vocabolari double.
  
 ===== Come si configurano ed utilizzano i Nodi ===== ===== Come si configurano ed utilizzano i Nodi =====
  
-Tutto il sistema degli alberi di navigazione si basa sul concetto di nodo.\\ Ogni nodo può rappresentare un punto intermedio, appunto nodo, ovvero un estremità del nostro albero, quindi una //foglia//.\\ Questi nodi altro non sono che unità informative che devono convivere nell'ambito dello stesso archivio con le unità informative che realmente lo caratterizzano.\\ Questo comporta che il file di configurazione dell'archivio, per poter operare correttamente con gli alberi di nodi, deve prevedere la configurazione di questa particolare unità informativa, come nell'esempio seguente:+Tutto il **sistema** degli **alberi** di **navigazione** si basa sul concetto di **nodo**. 
 + 
 +Ogni **nodo** può rappresentare un **punto intermedio**, appunto nodo, ovvero un estremità del nostro albero, quindi una **foglia**. 
 + 
 +Questi **nodi** altro non sono che **unità informative** che devono convivere nell'ambito dello stesso **archivio** con le unità informative che realmente lo caratterizzano. 
 + 
 +Questo comporta che il **file** di **configurazione** dell'**archivio**, per poter operare correttamente con gli **alberi** di **nodi**, deve prevedere la configurazione di questa particolare **unità informativa**, come nell'**esempio** seguente: 
 <code> <code>
    <primary_node ud_name="xwNodeRecord" ud_container="xwNodeRecordList">    <primary_node ud_name="xwNodeRecord" ud_container="xwNodeRecordList">
Linea 37: Linea 47:
 </code> </code>
  
-Esistono due tipologie di nodi, quelli statici e quelli dinamici, o //template//.\\ Se pure nulla escluda che si possano combinare in vario modo, di fatto essi sono sino ad ora stati realizzati solo distintamente, vale a dire alberi di soli nodi statici ed alberi di soli nodi dinamici.+Esistono due **tipologie** di **nodi**, quelli **statici** e quelli **dinamici**, o **template**.
  
-Introduciamo innanzitutto il concetto di nodo. Esso è rappresentato da un'unità informativa di tipo ''xwNodeRecord'' caratterizzata da un ''recordId'' univoco e da una serie di nodi al suo interno. Ciascuno di essi indicherà se conduce ad altri nodi o se si tratta di un elemento terminale, una //foglia//.+Se pure nulla escluda che si possano combinare in vario modo, di fatto essi sono sino ad ora stati realizzati solo distintamente, vale a dire **alberi** di soli **nodi statici** ed **alberi** di soli **nodi dinamici**.
  
-Il '' recordId'' di un albero si compone sempre di una //label// che lo identifica e da un nodo principale riconosciuto come ''root''. Da quel momento l'identificazione di tutti i successivi nodi dello stesso albero deve avere in comune solo la radice del ''recordId''. Ogni ''recordId'' è suddiviso quindi in due parti, radice ed estensione, separate dal carattere ':'.+Introduciamo innanzitutto il concetto di **nodo**. Esso è rappresentato da un'**unità informativa** di tipo ''xwNodeRecord'' caratterizzata da un ''recordId'' **univoco** e da una serie di **nodi** al suo interno. Ciascuno di essi indicherà se conduce ad altri nodi o se si tratta di un **elemento terminale**, una **foglia**. 
 + 
 +Il '' recordId'' di un **albero** si compone sempre di una **label** che lo identifica e da un **nodo principale** riconosciuto come ''root''. Da quel momento l'**identificazione** di tutti i successivi **nodi** dello stesso **albero** deve avere in comune solo la **radice** del ''recordId''. Ogni ''recordId'' è suddiviso quindi in due **parti****radice** ed **estensione**, separate dal **carattere** '':'
 + 
 +Prendiamo ad **esempio** un **albero** di **classificazione**:
  
-Prendiamo ad esempio un albero di classificazione. 
 <code> <code>
 <xwNodeRecord recordId="MainClassif:root"> <xwNodeRecord recordId="MainClassif:root">
Linea 77: Linea 90:
 </code> </code>
  
-Come si può notare il ''recordId'' di questo nodo è identificato da una label principale, //MainClassif// e dal suffisso '':root'' ad identificare che si tratta del nodo principale dell'albero.\\ Essi contiene uno o più elementi ''node''. Vediamone uno nel dettaglio.+Come si può notare il ''recordId'' di questo **nodo** è identificato da una **label principale**''MainClassif'' e dal **suffisso** '':root'' ad identificare che si tratta del **nodo principale** dell'**albero**. 
 + 
 +Essi contiene uno o più **elementi** ''node''. Vediamone uno nel **dettaglio**: 
 <code> <code>
     <node nodeId="MainClassif:0" type="list" label="0 - TEMI GENERALI E CIRCOLAZIONE STRADALE">     <node nodeId="MainClassif:0" type="list" label="0 - TEMI GENERALI E CIRCOLAZIONE STRADALE">
Linea 83: Linea 99:
     </node>     </node>
 </code> </code>
-L'elemento ''node'' deve sempre avere un attributo ''type'' che indichi la sua natura. Il valore di questo attributo può essere:+ 
 +L'**elemento** ''node'' deve sempre avere un **attributo** ''type'' che indichi la sua **natura**. Il **valore** di questo **attributo** può essere: 
 ^ list | Indica che il nodo così identificato punta ad un ulteriore ''xwNodeRecord'' il cui ''recordId'' corrisponde al ''nodeId''| ^ list | Indica che il nodo così identificato punta ad un ulteriore ''xwNodeRecord'' il cui ''recordId'' corrisponde al ''nodeId''|
 ^ node | Indica che si tratta di una foglia, non destinata a condurre altrove| ^ node | Indica che si tratta di una foglia, non destinata a condurre altrove|
 ^ template | Indica che il nodo in esame è in forma di template e che quindi segue un comportamento del tutto differente che sarà spiegato in seguito| ^ template | Indica che il nodo in esame è in forma di template e che quindi segue un comportamento del tutto differente che sarà spiegato in seguito|
  
-Il ''node'' così identificato ha normalmente un ''nodeId''((per quanto esso sia realmente necessario solo se il nodo è di tipo ''list'')). Il valore di tale ''nodeId'' segue i criteri del ''recordId'' già visto ed impone, di fatto, solo la presenza della stessa radice del ''recordId'' cui si appartiene.\\ Analogamente può avere, e normalmente ha, un attributo ''label'' finalizzato alla sua rappresentazione esteriore in sede applicativa.\\  +Il ''node'' così identificato ha normalmente un ''nodeId''((per quanto esso sia realmente necessario solo se il nodo è di tipo ''list'')). Il **valore** di tale ''nodeId'' segue i **criteri** del ''recordId'' già visto ed impone, di fatto, solo la presenza della stessa **radice** del ''recordId'' cui si appartiene.
-Al ''node'' può essere associata un'azione. Attualmente la sola azione prevista (indicata dall'attributo ''type'') è l'azione di ricerca, codificata con il valore ''search''. L'elemento ''action'' a ciò preposto conterrà quindi l'espressione di ricerca che si intende utilizzare.+
  
-In condizioni normali tutti i nodi foglia hanno un'azione associata. Essa si associa sovente anche a nodi intermedi ma, mentre il primo caso rientra nella normalità, la presenza di un'azione in un nodo intermedio dipende totalmente dalle esigenze applicative e dalla natura dell'albero di nodi che si sta costituendo.+Analogamente può avere, e normalmente ha, un **attributo** ''label'' finalizzato alla sua **rappresentazione esteriore** in sede applicativa. 
 +  
 +Al ''node'' può essere associata un'**azione**. Attualmente la sola **azione** prevista (indicata dall'attributo ''type'') è l'azione di **ricerca**, codificata con il **valore** ''search''. L'**elemento** ''action'' a ciò preposto conterrà quindi l'**espressione** di **ricerca** che si intende utilizzare. 
 + 
 +In **condizioni normali** tutti i **nodi foglia** hanno un'azione associata. Essa si associa sovente anche a **nodi intermedi** ma, mentre il primo caso rientra nella normalità, la presenza di un'**azione** in un nodo intermedio dipende totalmente dalle **esigenze** applicative e dalla natura dell'**albero** di **nodi** che si sta costituendo.
  
 ==== Un albero di nodi statici ==== ==== Un albero di nodi statici ====
  
-Secondo l'esempio precedente, vediamo il nodo puntato dal primo dei nodi citati nella radice dell'albero:+Secondo l'**esempio** precedente, vediamo il **nodo puntato** dal primo dei nodi citati nella **radice** dell'**albero**: 
 <code> <code>
 <xwNodeRecord recordId="MainClassif:0"> <xwNodeRecord recordId="MainClassif:0">
Linea 131: Linea 153:
 </code> </code>
  
-...ed in fine... il nodo di livello ulteriormente inferiore, sempre riferito al primo dei nodi qui citati...+ed infine il **nodo** di **livello** ulteriormente **inferiore**, sempre riferito al primo dei **nodi** qui citati:
  
 <code> <code>
Linea 165: Linea 187:
 </code> </code>
  
-In questo ultimo caso risulterà evidente come alcuni dei nodi citati siano ''list'' ed altri siano invece ''node'' in quanto non prevedono ulteriori livelli d'alberatura.+In questo ultimo caso risulterà evidente come alcuni dei **nodi citati** siano ''list'' ed altri siano invece ''node'' in quanto non prevedono ulteriori **livelli** d'**alberatura**.
  
 ==== Un albero di nodi template ==== ==== Un albero di nodi template ====
  
-Visto l'esempio di cui al caso precedente, vediamo ora come si componga e comporti un albero di nodi di tipo //template//.\\ Se è evidente che un albero composto di numerosi rami avrà un diverso record ''xwNodeRecord'' per ciascun ramo da percorrere, nel caso dell'albero di tipo //template// si avrà uno ed un solo nodo autoconsistente.+Visto l'**esempio** di cui al caso precedente, vediamo ora come si componga e comporti un **albero** di **nodi** di tipo **template**.
  
-Vediamo come si dichiara un simile nodo.+Se è evidente che un **albero** composto di numerosi rami avrà un diverso **record** ''xwNodeRecord'' per ciascun **ramo** da percorrere, nel caso dell'albero di tipo **template** si avrà uno ed un solo **nodo auto-consistente**. 
 + 
 +Vediamo come si dichiara un **simile nodo**:
  
 <code> <code>
Linea 183: Linea 207:
 </code> </code>
  
-Innanzitutto l'albero di tipo //template// ha un attributo omonimo che dichiara la modalità secondo la quale il suo contenuto dev'essere interpretato. Nella fattispecie esiste attualmente solo la modalità ''voc'' che comporta un accesso ai vocabolari potenziato dall'analisi spettrale.\\  +Innanzitutto l'**albero** di tipo **template** ha un **attributo omonimo** che dichiara la modalità secondo la quale il suo **contenuto** dev'essere interpretato. Nella fattispecie esiste attualmente solo la **modalità** ''voc'' che comporta un accesso ai **vocabolari** potenziato dall'analisi spettrale.
-Ogni ulteriore nodo dichiara, con un attributo ''voc'', quale vocabolario dell'archivio debba essere interessato.\\ +
  
-|**Nota: **Il tipo di nodo ritornato dalle funzioni della ''libtree'' quando si accede ad un nodo di questa fatta è del tutto analogo a quelli appena visti negli alberi staticicon la differenza che il ciascun nodo viene prodotto automaticamente e conduce al ramo sottostante che rappresenta, appunto, l'analisi spettrale desiderata.|+Ogni ulteriore **nodo** dichiara, con un **attributo** ''voc'', quale **vocabolario** dell'**archivio** debba essere interessato.
  
-Il nostro esempio fa accesso al vocabolario dell'anno e mostrerà quindi un nodo principale con tanti nodi di tipo ''list'' quante sono le diverse chiavi del vocabolario dell'annonel nostro caso, quanti articoli saranno stati pubblicati in un determinato anno con relativa cardinalità.\\  +|**N.B**: Il tipo di **nodo** ritornato dalle **funzioni** della ''libtree'' quando si accede ad un nodo di questa fatta è del tutto analogo a quelli appena visti negli **alberi statici**, con la differenza che il ciascun **nodo** viene prodotto automaticamente e conduce al **ramo** sottostante che rappresenta, appunto, l'**analisi spettrale** desiderata.|
-Per ciascuno di questi nodi, percorrendo il legame al nodo successivo tramite il ''nodeId'', avremo un'analisi spettrale sul vocabolario del numero della rivista.\\ Il nodo prodotto avrà tanti nodi di tipo ''list'' quanti saranno i numeri emessi nell'anno prescelto. Per ciascuno di essi verrà indicato il numero di articoli pubblicati quell'anno sulla rivista avente quel numero.\\  +
-Compiendo un ulteriore passo avantiovvero richiedendo l'analisi della rubrica, avremo un nuovo record che conterrà nodi questa volta di tipo ''node'', in quanto nodi //foglia//. Per ciascuno di essi verrà riportata la cardinalità di quanti articoli (pubblicati quell'anno nella rivista con quel numero) appartengano ad una data rubrica.+
  
-Quale che sia il livello del nodo, a ciascuno di essi viene associato d'ufficio un'azione atta a selezionare tutti i record che il nodo stesso descrive ed enumera.+Il nostro **esempio** fa accesso al **vocabolario** dell'anno e mostrerà quindi un **nodo principale** con tanti **nodi** di tipo ''list'' quante sono le diverse **chiavi** del **vocabolario** dell'anno, nel nostro caso, quanti articoli saranno stati pubblicati in un determinato anno con relativa **cardinalità**. 
 + 
 +Per ciascuno di questi **nodi**, percorrendo il legame al **nodo** successivo tramite il ''nodeId'', avremo un'**analisi spettrale** sul **vocabolario** del numero della rivista. 
 + 
 +Il **nodo** prodotto avrà tanti nodi di tipo ''list'' quanti saranno i **numeri emessi** nell'**anno** prescelto. Per ciascuno di essi verrà indicato il **numero** di **articoli pubblicati** quell'anno sulla **rivista** avente quel numero. 
 + 
 +Compiendo un ulteriore passo avanti, ovvero richiedendo l'**analisi** della **rubrica**, avremo un nuovo **record** che conterrà **nodi** questa volta di tipo ''node'', in quanto **nodi foglia**. Per ciascuno di essi verrà riportata la **cardinalità** di quanti **articoli** (pubblicati quell'anno nella rivista con quel numero) appartengano ad una data **rubrica**. 
 + 
 +Quale che sia il **livello** del **nodo**, a ciascuno di essi viene associato d'ufficio un'**azione** atta a selezionare tutti i **record** che il **nodo** stesso descrive ed enumera.
  
 ===== Composizione del comando ===== ===== Composizione del comando =====
  
-I comandi per questo Plug-In si rifanno alle [[documentazione_3di_riservata:extraway:comandi_extraway#comando_verso_plugin|regole standard per questo tipo di comandi XML]]Unifichiamo quindi nel concetto di parametro un valore che può essere espresso sia come attributo che come elemento.\\ \\  +**comandi** per questo **Plug-In** si rifanno alle ''[[tecnici:prodotti_e_servizi:extraway_platform_server:dettaglio_comandi_server_extraway#comando_verso_plugin|regole standard per questo tipo di comandi XML]]''  
-Vediamo comunque che comandi sono disponibili e quali sono i loro modificatori.+ 
 +Unifichiamo quindi nel concetto di **parametro** un **valore** che può essere espresso sia come **attributo** che come **elemento**. 
 + 
 +Vediamo comunque che **comandi** sono **disponibili** e quali sono i loro **modificatori**.
  
 ^ Comando  ^ Dettagli  ^ ^ Comando  ^ Dettagli  ^
/data/attic/utenti/extraway_platform_server/extraway_tree_library.1678281400.txt.gz · Ultima modifica: 2023/03/08 14:16 da chiara.pavanati