Questa è una vecchia versione del documento!
Ricerca per Range
Il concetto di ricerca per range di termini nasce per consentire di esprimere intervalli di chiavi da selezionare da un vocabolario da utilizzare tutte insieme come se si trattasse di un unica chiave.
Per tale ragione si è concepita una sintassi che consentisse di esprimere queste condizioni. La sintassi, in seguito, è gradualmente evoluta comprendendo anche modalità che con gli intervalli di termini avevano ben poco a che fare ma che si prestavano per esprimere il tutto come se fosse un'unica chiave.
Al fine di meglio comprendere la finalità di questa forma d'estensione pensiamo all'adiacenza tra questo intervallo di termini ed un altro termine. Solo trattandolo come se fosse un termine singolo l'adiacenza ha ragionevole speranza di essere portata a termine e di riuscire in questo compito in tempi ragionevoli.
Nota: In tutti gli esempi successivi, quando si parla di estremo o termine, ci si riferisce ad una chiave utilizzata per compiere la ricerca. La risoluzione del range assumerà che la prima chiave abbia inizio subito dopo il carattere { e fine prima dell'identificatore di range e così per la seconda chiave, dal primo carattere che segue l'identificatore di range sino al carattere }. Ogni chiave può essere racchiusa tra doppi apici e deve essere racchiusa tra doppi apici quando il suo contenuto possa risultare ambiguo nei confronti di un identificatore di range. Non vale il ragionamento secondo il quale il primo identificatore incontrato viene preso in esame e gli altri trattati come semplici caratteri. |
Sintassi di base
La sintassi di base è estremamente semplice. Il termine viene rappresentato da qualcosa che va racchiuso tra parentesi graffe {} all'interno delle quali l'espressione cambia a seconda dei simboli e dei modificatori utilizzati.
Avremo quindi una condizione del tipo:
[campo]={espressione}
Le sintassi classiche
Quando parliamo di sintassi classica ci riferiamo al fatto che la sintassi rappresenti realmente un intervallo di termini.
L'intervallo può essere chiuso o aperto.
L'intervallo si dice chiuso quando entrambe gli estremi sono stati esplicitati e si dice invece aperto quando solo uno dei due estremi viene esplicitato.
La sintassi che ne deriva, per il range chiuso, è la seguente
[campo]={estemo inferioreidentificatore tipo rangeestemo superiore}
Analogamente avremo due possibili ranges aperti
[campo]={estemo inferioreidentificatore tipo range}
[campo]={identificatore tipo rangeestemo superiore}
Come detto gli estremi non sono entrambe obbligatori1) ed il significato del range cambia in virtù del suo identificatore.
Vediamo come
Identificatore tipo Range | Descrizione |
---|---|
| | Range inclusivo. Entrambe gli estremi indicati sono inclusi nei termini da ricercare. Si può esprimere un range aperto ed in tal caso il vocabolario viene investigato in tale direzione in modo completo. |
^ | Range esclusivo. Entrambe gli estremi indicati sono esclusi dai termini da ricercare. Esso si estende quindi dal primo termine superiore all'estremo inferiore sino all'ultimo termine inferiore l'estremo superiore. Anche in questo caso il range può essere aperto e palesemente l'estensione nella direzione dell'estremo non espresso ha luogo comunque in modo completo. |
! | Range negativo. I termini espressi come estremi vengono esclusi dalla selezione così come tutti i termini che ricadono tra di essi. In sostanza è una sorta di negazione del range inclusivo. Usarlo senza esprimere entrambe gli estremi non ha molto senso2) ed anche se si intende escludere un solo termine, il range deve indicare tale termine tanto come estremo inferiore quanto come estremo superiore. |
< | Range esclusivo a sinistra. Da utilizzarsi, ovviamente, indicando entrambe gli estremi3). In questo caso l'estremo di sinistra ovvero l'estremo inferiore viene escluso dal range mentre quello di destra, ovvero quello superiore, viene incluso nel range. |
> | Range esclusivo a destra. E' l'esatto opposto del caso precedente. Da utilizzarsi, ovviamente, indicando entrambe gli estremi4). In questo caso l'estremo di sinistra ovvero l'estremo inferiore viene incluso nel range mentre quello di destra, ovvero quello superiore, viene escluso dal range. |
Le sintassi speciali
Si intendono sintassi speciali quelle che sono state derivate dalla sintassi di base dei range per assolvere ad altre finalità pur avvalendosi della stessa logica e quindi producendo come risultato finale un'estensione di uno o più termini da usare dinamicamente con altre condizioni di ricerca come, ad esempio, un'adiacenza.
Ci sono solo due casi attualmente sviluppati: la ricerca per lista di termini e la ricerca per proiezione.
La ricerca per lista di termini prevede una sintassi in cui l'identificatore di tipo di range è la virgola (,). Essa viene usata per separare termini da porre tutti in OR tra di loro. Avremo quindi una forma come la seguente
[campo]={term1,term2,term3,term4,…termN}
Nota: In corrispondenza dell'emissione del server 22.1.3.5 tale sintassi è stata ampliata consentendo anche che l'elenco dei termini sia composto, di fatto, da un termine solo come nell'esempio che segue [campo]={term1} Tale sintassi non ha molto senso5) ed equivale pressoché in tutto alla sintassi [campo]=term1 |
La ricerca per proiezione