2012-04-04 10 views
8

Jakie są dostępne opcje, najlepiej w Javie?Język zapytań drzewa dla drzew obiektów w pamięci?

Widziałem JXPath który rozciąga XPath do obiektów. Czy jest coś jeszcze?

edit: przez język zapytań drzewo, mam na myśli język, który może tworzyć wyrażenia, które pasują do obiektów (przez jakiegokolwiek mienia), które zostały zorganizowane w drzewo.

Edit2: Przykład:

Powiedzmy mam drzewo z tych obiektów:

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

Teraz wyobraź sobie hierarchię tych. To, czego szukam, jest czymś, co może wyszukiwać instancje w tym drzewie. Takie jak „Daj mi wszystkie instancje węzła, w którym nazwa to«bar», wartość jest mniejsza niż 100, a rodzic jest«foo»i rodzic rodzica jest«Joe». Wszystko to w ładnym językiem zwięzłym.

Jak powiedziałem, JXPath jest jedną z opcji. Patrząc na innych. nie znalazłem żadnego.

BTW, myślę zapytanie JXPath będzie wyglądać jak "// Joe/foo/bar [@value < 100]" (czy coś takiego)

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

Proszę wyjaśnić, co chcesz osiągnąć za pomocą tego języka zapytań. Istnieje wiele opcji, które pomogłyby poznać twoje wymagania. –

+1

Jak mówi Michael Slade, Twój przypadek użycia określi, co będzie dla ciebie lepsze. Na przykład, JSoup ma wiele narzędzi do pracy z HTML, ale zakłada * wszystko * z czym pracuje jest HTML i nie jest odpowiednie dla większości XML (a drzewa mogą być wyrażone na wiele innych sposobów). – bdares

+1

Interesujący problem, ale dlaczego potrzebny jest do tego "język"? Wystarczy napisać drzewo algo, które sprawdza na podstawie określonych warunków. Język zapytań zrobi to samo dla ciebie, po prostu go rozwiąże. Ciekawy wiedzieć, jaki jest przypadek użycia? To zadziała dla DS jak Lista. Nie mam pewności co do struktury drzewa: http://code.google.com/p/sbql4j/ – zengr

Odpowiedz

1

Dla drzewiastych struktur tworzonych samemu można zastosować Visitor Pattern. Niech twoje węzły zaakceptować tematyce odwiedzających d napisz wszystkich odwiedzających, którzy sprawdzają kryteria i zbierają przedmioty.

Korzystanie z funkcji Visitor oznacza również, że kod będzie oznaczony jako jako bezpieczny w przeciwieństwie do zapytania wewnątrz łańcucha. Jeśli zmienisz nazwę metod pobierania, IDE zmieni nazwę na wszystkich odwiedzających, a Twój kod będzie nadal działał. Jeśli twoje zapytanie znajduje się w ciągu znaków, może się zepsuć.

Oprócz JXPath istnieje JoQL, który używa języka SQL do odpytywania obiektów, ale nie jest tak naprawdę stworzony dla struktur typu drzewa.

+0

Tak, wzór dla gości jest bardzo miły dla drzew. Bardzo łatwe do zrobienia przepływy DFS i BFS. – marathon

+0

. daje również bezpieczeństwo typu (zaktualizowana odpowiedź) – Andrejs

Powiązane problemy