2012-04-04 2 views
8

Quali opzioni ci sono, preferibilmente in Java?Un linguaggio di query ad albero per alberi di oggetti in memoria?

Ho visto JXPath che estende XPath agli oggetti. C'è niente altro?

modifica: per linguaggio di interrogazione degli alberi, intendo un linguaggio che può creare espressioni che corrispondono agli oggetti (di qualsiasi proprietà) che sono stati organizzati in un albero.

Edit2: Esempio:

Diciamo che ho un albero di questi oggetti:

public interface Node { 
    String getName(); 
    int getValue(); 
    String getSomeOtherAttribute(); 
    List<Node> getChildren(); 
    Node getParent(); 
} 

Ora immaginate una gerarchia di questi. Quello che sto cercando è qualcosa che può interrogare istanze in questo albero. Ad esempio: "Dammi tutte le istanze del Nodo dove il nome è" bar ", il valore è inferiore a 100 e il genitore è" foo "e il genitore del genitore è" joe ".Tutto questo in un linguaggio conciso

come ho detto, JXPath è un'opzione. in cerca di altri. non ho trovato alcuna.

BTW, penso che una query JXPath sarebbe simile a "// joe/foo/bar [@value < 100]" (o qualcosa di simile)

someroot 
    | 
    joe 
/| \ 
c d foo 
    /\ 
    f bar,99 
+3

Spiegare cosa si desidera ottenere con questo linguaggio di query. Ci sono un certo numero di opzioni e sarebbe utile sapere quali sono le vostre esigenze. –

+1

Come dice Michael Slade, il tuo caso d'uso determinerà cosa funzionerà meglio per te. Ad esempio, JSoup ha molti strumenti per lavorare con HTML, ma presume che * tutto * con cui sta lavorando sia HTML e non sia adatto alla maggior parte di XML (e che gli alberi possano essere espressi anche in molti altri modi). – bdares

+1

Problema interessante, ma perché hai bisogno di una "lingua" per questo? Basta scrivere un algoritmo di attraversamento degli alberi, che verifica in base alle condizioni specificate. Un linguaggio di query farà lo stesso per te, sarà solo astratto. Curioso di sapere, qual è il caso d'uso? Funzionerà per DS come Elenco. Non sono sicuro di una struttura ad albero: http://code.google.com/p/sbql4j/ – zengr

risposta

1

Per strutture ad albero che si creano da soli si potrebbe applicare la Visitor Pattern. Lasciate che i vostri nodi accettare un visitatore d scrivere tutti i tipi di visitatori che controllano i criteri e raccolgono i tuoi oggetti.

L'utilizzo di Visitor indica anche che il codice sarà di tipo protetto anziché una query all'interno di una stringa. E se rinomini i tuoi metodi getter, IDE li rinominerà in tutti i visitatori e il tuo codice funzionerà ancora. Se la query è all'interno di una stringa, può interrompersi.

Oltre a JXPath è disponibile JoQL che utilizza un linguaggio simile a SQL per l'interrogazione di oggetti, ma non è realmente realizzato per strutture di tipo ad albero.

+0

sì, il modello visitatore è molto bello per gli alberi. Utilizzo di traversamenti DFS e BFS molto facile. – marathon

+0

davvero. ti dà anche sicurezza del tipo (risposta aggiornata) – Andrejs