240 likes | 330 Views
Navigation in Object Graphs. Mitch Wand and Karl Lieberherr. Searching for Reachable Objects. Task: Given an object o1 in an object graph, find all objects of type c1 that are reachable from o1.
E N D
Navigation in Object Graphs Mitch Wand and Karl Lieberherr
Searching for Reachable Objects • Task: Given an object o1 in an object graph, find all objects of type c1 that are reachable from o1. • Assumptions: we know the class structure that describes the object graph, but we know nothing else about the object graph except the class of the current object.
Classes and Objects: Basic Notations e c1 c2 Class c1 has a part e of type c2 c1 c2 Class c1 is an ancestor of class c2 o1 c1 Object o1 is of class c1 o1 c1 c2 Object o1 is of type c2 (i.e., its class is a subclass of c2) e o1 o2 Object o1 has a part e which is object o2
Finding the first step for the search C1 C2 o2 o1 o4 o3 Which arrows might lead to an object of type C2?
Relations between Classes e C1 C2 e(C1,C2) C1 C2 C(C1,C2) (that is, e(C1,C2) for some e) C1 C2 C1 <= C2 o1 C1 Class(o1) = C1 o1 C1 C2 Object o1 is of type C2: Class(o1) <= C2
Relations between Objects e o1 o2 e(o1,o2) o1 o2 O(o1,o2) (that is, e(o1,o2) for some e) o1 c1 Class(o1) = c1 o1 c1 c2 Object o1 is of type c2: Class(o1) <= c2
Operations on Relations • R.S = {(x,z) | exists y s.t. R(x,y) and S(y,z)} • R* = reflexive, transitive closure of R
Possible edges in the object graph e C1 C2 e(o1, o2) implies class(o1) (<= .e .=> ) class(o2) in the class graph “up, over, and down” O(o1, o2) implies class(o1) (<= .C .=> ) class(o2) in the class graph e o1 o2
Which edges to follow to C2? C2 • From o1 of class C1, follow edge e iff there is some object graph O and some o2, o3 s.t. • e(o1,o2), • O*(o2,o3), and • class(o3) <= C2 C1 o1 * o3 o2 e The existential represents our lack of knowledge about the rest of the object graph
From dynamic to static characterization • From o1 of class c1, follow edge e iff there is some object graph O and some o2, o3 s.t. • e(o1,o2), • O*(o2,o3), and • class(o3) <= c2 • From o1 of class c1, follow edge e iff there are classes c’, c’’ s.t. • c1 <=.e.=> c’ • c’ (<=.C.=>)* c’’ and • c’’ <= c2 Let c’ be class(o2), c’’ be class(o3)
Relational Formulation From object o of class c1, to get to c2, follow edges in the set {e | c1 <=.e.=> (<=.C.=>)* <= c2 } Can easily compute these sets for every c1, c2 via transitive-closure algorithms.
Generalizations • More complex strategies • “to c1 then to c2 then to c3” • Use “waypoint navigation”; get to a c2 object, then search for a c3 object. • Strategy graphs (a la Lieberherr) also doable in this framework
z Strategy S -> T x X1 Y1 Z1 y S X2 Y2 Z2 T t X3 Y3 Z3 x y z t s1:S x31:X3 y31:Y3 z31:Z3 t1:T go down e iff S <=.C C3 =>.(<=.C.=>)*.<=) T
z Strategy S -> T x X1 Y1 Z1 y S X2 Y2 Z2 T t X3 Y3 Z3 x y z t s1:S x31:X3 y31:Y3 z31:Z3 t1:T go down e iff S <=.C X1 =>.(<=.C.=>)*.<=) T
z Strategy S -> T x X1 Y1 Z1 y S X2 Y2 Z2 T t X3 Y3 Z3 x y z t s1:S x31:X3 y31:Y3 z31:Z3 t1:T <=,=> not used go down e iff S <=.C X1 =>.(<=.C.=><=.C.=><=.C=>).<=) T
class dictionary strategy A = [“x” X] [“r” R]. B = [“b” B] D. R = S. S = [“t” T] C C = D. X = B. T = R. D = . Example A -> T T -> D 0..1 X 0..1 B D A C 0..1 :D :C R S T :A 0..1 class graph object graph “r” :R :S
class dictionary strategy A = [“x” X] [“r” R]. B = [“b” B] D. R = S. S = [“t” T] C C = D. X = B. T = R. D = . Example A -> T T -> D POSS(A,T,a1) = 1 edge POSS(R,T,r1) = 1 edge POSS(S,T,s1) = 0 edges 0..1 X 0..1 B D A C 0..1 :D :C R S T a1:A 0..1 class graph object graph “r” r1:R s1:S
class dictionary strategy A = [“x” X] [“r” R]. B = [“b” B] D. R = S. S = [“t” T] C C = D. X = B. T = R. D = . Example A -> T T -> D POSS(A,T,a1) = 1 edge POSS(R,T,r1) = 1 edge POSS(S,T,s1) = 1 edge 0..1 X 0..1 B D A C c2:C d2:D 0..1 :D c1:C R S T a1:A 0..1 class graph r1:R s1:S t1:T r2:R
Only node paths shown for space reasons Example 1 strategy: {A -> B B -> C} Object graph Strategy s t :A A B C x1:X class graph S e1:Empty :R R A x2:X Empty B x c x c1:C X b OG : A X R X C OG’: A X B X C SG : A B C (CG: A X Bopt B X C) c2:C BOpt c c3:C C
Only node paths shown for space reasons Example 1A strategy: {A -> S S -> C} Object graph early termination Strategy s t :A A S C x1:X class graph S e1:Empty :R R A x2:X Empty B x c x c1:C X b OG : A X R X OG’: A X B X SG : A B (CG: A X Bopt B X) c2:C BOpt c c3:C C
S = from BusRoute through Bus to Person Example 2 busStops BusRoute BusStopList buses 0..* NGasPowered BusStop BusList waiting 0..* passengers Bus PersonList Person 0..* DieselPowered
OG : BR BL DP PL P OG’: BR BL B PL P SG : BR B P Example 2 Only node paths shown for space reasons BusList Route1:BusRoute buses busStops :BusStopList Bus15:DieselPowered passengers CentralSquare:BusStop waiting :PersonList :PersonList Joan:Person Paul:Person Seema:Person Eric:Person S = from BusRoute through Bus to Person
OG : BR BL OG’: BR BL SG : BR Example 3 Only node paths shown for space reasons early termination BusList Route1:BusRoute buses busStops :BusStopList Bus15:DieselPowered passengers CentralSquare:BusStop waiting :PersonList :PersonList Joan:Person Paul:Person Seema:Person Eric:Person S = from BusRoute via NGasPoweredto Person