2012-04-04 32 views
8

Có các tùy chọn nào, tốt nhất là trong Java?Một ngôn ngữ truy vấn cây cho cây trong bộ nhớ của đối tượng?

Tôi đã thấy JXPath mở rộng XPath cho các đối tượng. Có gì khác?

chỉnh sửa: theo ngôn ngữ truy vấn cây, ý tôi là ngôn ngữ có thể tạo biểu thức khớp với đối tượng (theo bất kỳ thuộc tính nào) đã được sắp xếp thành cây.

Edit2: Ví dụ:

Hãy nói rằng tôi có một cây của các đối tượng:

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

Bây giờ hãy tưởng tượng một hệ thống phân cấp trong số này. Những gì tôi đang tìm kiếm là cái gì đó có thể truy vấn cho các trường hợp trong cây này. Chẳng hạn như "cung cấp cho tôi tất cả các trường hợp Node, trong đó tên là" bar ", giá trị nhỏ hơn 100 và cha mẹ là" foo "và cha mẹ của cha mẹ là" joe ", tất cả điều này trong một ngôn ngữ ngắn gọn.

như tôi đã nói, JXPath là một lựa chọn. nhìn cho người khác. tôi đã không tìm thấy bất kỳ.

BTW, tôi nghĩ rằng một truy vấn JXPath sẽ giống như "// joe/foo/bar [@value < 100]" (hoặc một cái gì đó tương tự)

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

Vui lòng giải thích những gì bạn muốn đạt được bằng ngôn ngữ truy vấn này. Có một số tùy chọn và nó sẽ giúp bạn biết yêu cầu của bạn là gì. –

+1

Như Michael Slade nói, trường hợp sử dụng của bạn sẽ xác định điều gì sẽ làm việc tốt hơn cho bạn. Ví dụ, JSoup có rất nhiều công cụ để làm việc với HTML, nhưng giả sử * mọi thứ * nó hoạt động với HTML và không phù hợp với hầu hết XML (và cây cũng có thể được thể hiện theo nhiều cách khác). – bdares

+1

Vấn đề thú vị, nhưng tại sao bạn cần một "ngôn ngữ" cho điều đó? Chỉ cần viết một cây đi qua, kiểm tra dựa trên các điều kiện được chỉ định. Một ngôn ngữ truy vấn sẽ làm tương tự cho bạn, sẽ chỉ trừu tượng nó ra. Tò mò để biết, trường hợp sử dụng là gì? Điều này sẽ làm việc cho DS như Danh sách. Không chắc chắn về cấu trúc cây: http://code.google.com/p/sbql4j/ – zengr

Trả lời

1

Đối với cấu trúc cây bạn tự tạo, bạn có thể áp dụng Visitor Pattern. d viết tất cả các loại khách truy cập để kiểm tra các tiêu chí và thu thập các đối tượng của bạn.

Sử dụng Khách truy cập cũng có nghĩa là mã của bạn sẽ là nhập an toàn thay vì truy vấn bên trong một chuỗi. Và nếu bạn đổi tên các phương thức getter của bạn, IDE sẽ đổi tên chúng trong tất cả các khách truy cập và mã của bạn sẽ vẫn hoạt động. Nếu truy vấn của bạn nằm bên trong một chuỗi nó có thể bị hỏng.

Ngoài JXPath có JoQL sử dụng ngôn ngữ giống SQL để truy vấn đối tượng, nhưng nó không thực sự được tạo cho cấu trúc kiểu cây.

+0

vâng, mô hình khách truy cập rất tốt cho cây cối. Rất dễ dàng để làm DFS và BFS traversals bằng cách sử dụng đó. – marathon

+0

thực sự. nó cũng cung cấp cho bạn loại an toàn (câu trả lời được cập nhật) – Andrejs

Các vấn đề liên quan