In primo luogo vediamo cosa si intenda per ordinamento e cosa siano gli oggetti ordinati. Ad essere ordinate sono solitamente delle unità informative ma in alcuni casi particolari si può assumere che siano dei sottinsiemi di queste unità ad essere ordinati.
L'ordinamento viene effettuato sulal base di valori contenuti in attributi o elementi delle unità . A tali componenti possono essere applicati di volta in volta una serie di modificatori che vedremo di seguito.
La sintassi dell'ordinamento deriva da quella precedentemente concepita per il programma HigHway Server che basa il tutto sull'identificatore del campo sul cui conteuto effettuare l'ordinamento. In eXtraWay il concetto di Campo viene naturalmente sostituito dal concetto di Canale che è appunto riconducibile al contenuto degli attributi ed elementi dell'unità informativa.
In generale, comunque, la sintassi è rappresentata da
NomeCampo
[(eventuali modificatori)] [, altro
nome
campo
coi
suoi
modificatori
]
Come detto il concetto di NomeCampo
andrebbe sostituito da un concetto di Canale
che è di fatto rappresentato dal percorso XML che identifica la porzione di unità informativa che ci interessa sfruttare. Se in HighWay il nome del campo era sufficiente, in eXtraWay tale nome campo può assumere solo i valori NRECORD
, UD
e XML
. Il primo rappresenta il numero logico dell'unità informativa (Che tipicamente corrisponde al suo numero fisico), il secodo rappresenta il campo che ospita informazioni di servizio ed il terzo è quello che contiene la parte dell'unità informativa vera e propria corrispondente al frammento XML identificato dal catalogo. I valori dei percorsi XML validi entro tali Campi
può essere estratto dalla struttura dei canali rilevati in indicizzazione da parte del server e tornata al Client all'atto del caricamento dell'archivio. A tale nome campo va quindi sempre associato un modificatore, xpart, quello che rappresenta la porizione dell'XML di nostro interesse. Il percorso XML indicato può contenere degli asterischi per indicare che l'oggetto in esmae ha una posizione non nota o comunque non sempre uguale. In fine, il nome del campo porta ad un ordinamento crescente se esso viene espresso in caratteri maiuscoli (è sufficiente il primo) ed un ordinamento inverso, quindi decrescente, se espresso in caratteri minuscoli.
Ogni componente dell'ordinamento sarà separata dalla successiva da una virgola. Le componenti vengono considerate nell'ordine in cui sono state espresse, da sinistra verso destra: a valore uguale di un particolare componente si passa alla valutazione del suggessivo e così via. Si noti che due unità informative che contengano, per i Canali
espressi, esattamente lo stesso valore, avranno lo stesso valore nell'ordinamento ma, se pure adiacenti, potranno essere indicate in un qualsiasi ordine. In pratica, ordinando più volte la stessa selezione, la posizione entro di essa di unità informative equivalenti potrebbe essere invertito.
La regola di ordinamento viene indicata al server in due modi:
Configurazione
di
Default:
Un archivio può essere configurato per avere un particolare ordinamento predefinito. Esso trova posto nel file nomearchivio.conf.xml
in un elemento profile
che ha due attributi. Il primo attributo, type
, deve assumere il valore sort.default
. Il secondo, value
, assume il valore della regola espressa. A tale profilo ne può essere associato un'altro di avente tipo sort.defaultlimit
il cui valore deve rappresentare il numero di documenti oltre il quale l'ordinamento, considerato troppo oneroso, non viene effettuato.<profile type="sort.defaultrule" value="XML(xpart:/civile/@datdec:d), XML(xpart:/civile/@numdec:n)"/> <profile type="sort.defaultlimit" value="100"/>
Comandi
Specifici:
Nell'esecizione di ricerche oppure, ovviamente, di semplici ordinamenti, la regola di ordinamento viene inviata al server direttamente entro li comando di ricerca o ordinamento.Scopo dei modificatori è quello di dichiarare con che modalità eseguire l'ordinamento della componente identificata o di unire tra loro componenti da combinare.
I modificatori vengono espressi immediatamente dopo il NomeCampo
, senza alcuno spazio di separazione, e sono racchiusi tra parentesi tonde. Se all'interno delle parentesi tonde un valore può contenere a sua volta una tonda, in particolare una tonda chiusa, essa va escapata per mezzo del carattere '\'. L'ordine dei modificatori non è particolarmente significativo se pure si suggerisce di rifarsi se possibile all'ordine in cui essi sono presentati in questa documentazione. Anch'essi non sono separati da spazi ed in pratica è bene che non ci siano spazi lungo tutta la sintassi del Canale
di ordinamento.
Vediamo nel dettaglio la loro sintassi ed il loro significato:
YYYYMMDD
.offset:size
)
. L'offset
, indicato in base 0, esprime il punto di partenza e size
quanti caratteri prendere in considerazione. Se offset
è un valore negativo si assume di partire dal fondo del valore, quindi da destra, anziché dall'inizio (al quale corrisponde l'offset
0) ovvero da sinistra. La lettura avviene sempre da sinistra verso destra quindi velendo acquisire gli ultimi 4 caratteri avremo una forma del tipo:(part:-4:4) Canale
, se il valore risulta essere vuoto esso sarà messo in coda e quindi considerato al pari del più grande valore in caso di ordine crescente o del più piccolo in caso di ordine decrescente. Se corredato dall'ulteriore modificatore absolute esso indica che la posizione peggiore viene assunta anche nei confronti dei Canali
meno priotari, quelli indicati a destra del canale corrente nella regola di ordinamento. La forma è quindi (e_i_w) oppure (e_i_w:absolute) Canale
indicato funga da spartiacque per identificare le unità informative ridondanti. Sono considerate ridondanti le unità informative che siano uguali, in ordinamento, per tutti i Canali
precedenti quello attuale ed il Canale
stesso. Nella selezione finale le unità informative "spartiacque" saranno opportunamente identificati per scopi futuri. Se si applica anche l'ulteriore modificatore skip la selezione ordinata finale conterrà esclusivamente le unità informative non ridondanti, quindi la prima unità informativa avente le caratteristiche richieste mentre le altre equivalenti saranno ignorate. La forma sarà quindi (break) quando si vuole identificare lo spartiacque senza impattare sull'esito dell'ordinamento ovvero (break:skip) se vogliamo che la selezione ordinata finale contenga una sola unità informativa avente uguali valori nei canali sino ad ora espressi. A dire il vero, indicare altri canali a destra del canale che presenta questo modificatore non ha molto senso se non per l'elezione della prima unità documentaria nell'ordinamento e quindi quella che verrà eletta. Canali
attigui. Se nella sequenza di Canali
si intende ordinare per la somma dei valori presenti in due di essi o per il valore che può trovarsi in due Canali
alternativi e soltamente non compresenti nell'unità informativa. Si può quindi operare per somma o per sostituzione. Quest'ultimo è il comportamento di default ma è sempre possibile indicarlo per evitare dubbi aggiungendo i modificatori add o alt (per somma e sostituzione).Canali
indicati corrispondesse effettivamente solo uno di essi. Va da se che ciò differisce dall'ordinamento per canali successivi, in particolare nel caso alt Canale
indicato, se presente più volte nell'unità informativa comporti la presenza nell'ordinamento della stessa unità più volte, tante quante sono le ripetizioni del Canale
indicato. In questo caso il risultato dell'ordinamento presenterà un numero di unità informative maggiore o uguale alla selezione originale. Il risultato consente, con apposite modalità di interrogazione, di conoscere non solo l'unità informativa selezionata ma l'indice al suo interno della ripetizione del Canale
indicato.Esisteva anche il modificatore title che è divenuto obsoleto in eXtraWay. Se pure ancora supportato per compatibilità col passato non lo si documenta perché non ritenuto necessario.
Torna a Indice delle voci