2012-04-04 17 views
8

Tercihen Java'da hangi seçenekler var?Nesnelerin bellek içi ağaçlarının ağaç sorgulama dili mi?

Ben nesnelere XPath uzanır JXPath gördük. Başka bir şey var mı?

düzenleme: ağaç sorgu dili ile, bir ağaca organize edildiğini (her ne özelliğiyle) nesneleri maç ifadeler oluşturabilirsiniz bir dil demek.

Edit2: Örnek:

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

Şimdi bunların bir hiyerarşi düşünün:

ı bu nesnelerin bir ağaç var diyelim. Aradığım şey, bu ağaçtaki örnekleri sorgulayabilen bir şey. Mesela çubuğu "Bana adıdır tüm Düğüm örneklerini vermek '' değer az 100 ve üstüdür 'foo' ve iki üst öğesi olan 'Joe'. Bütün bu güzel özlü dilde.

Dediğim gibi JXPath bir seçenektir. başkaları arıyorum. Ben herhangi bir bulamadım.

BTW, "[< 100 @value] // joe/foo/bar" a JXPath sorgusu gibi bir şey olacağını düşünüyorum (ya da böyle bir şey) Eğer Visitor Pattern geçerli olabilir sizin oluşturmuş ağaç yapıları için

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

Lütfen bu sorgu dili ile neyi başarmak istediğinizi açıklayın. Bir dizi seçenek var ve gereksinimlerinizin ne olduğunu bilmek yardımcı olacaktır. –

+1

Michael Slade'in dediği gibi, kullanım durumunuz sizin için neyin daha iyi çalışacağını belirleyecektir. Örneğin, JSoup HTML ile çalışmak için çok fazla araç içerir, ancak * herşeyin üzerinde çalıştığını varsayar * bu HTML'dir ve çoğu XML için uygun değildir (ve ağaçlar da birçok şekilde ifade edilebilir). – bdares

+1

İlginç bir problem, ama bunun için neden bir "dile" ihtiyacınız var? Sadece belirtilen koşullara göre kontrol eden bir ağaç traversal algo yazın. Bir sorgu dili sizin için aynısını yapacağız, sadece özetleyecektir. Bilmek merak, kullanım durumu nedir? Bu DS gibi Liste için çalışacaktır. Bir ağaç yapısı hakkında emin değilim: http://code.google.com/p/sbql4j/ – zengr

cevap

1

. edelim senin düğümler bir ziyaretçinin bir Accept d Ölçütleri kontrol eden ve eşyalarınızı toplayan her türlü ziyaretçiyi yazın.

Ziyaretçiyi kullanmak, bir dizenin içindeki bir sorgunun aksine, kodunuzun tip güvenli olduğunu gösterir. Ve alıcı yöntemlerinizi yeniden adlandırırsanız, IDE bunları tüm Ziyaretçilerde yeniden adlandırır ve kodunuz çalışmaya devam eder. Sorgunuz bir dizenin içinde ise kırılabilir.

JXPath dışında, nesneleri sorgulamak için SQL benzeri bir dil kullanan JoQL vardır, ancak ağaç türü yapıları için yapılmış değildir.

+0

evet, ziyaretçi modeli ağaçlar için çok güzel. Bunu kullanarak DFS ve BFS geçişlerini yapmak çok kolay. – marathon

+0

gerçekten. aynı zamanda size tip güvenlik sağlar (güncellenmiş cevap) – Andrejs

İlgili konular