| 
									
										
										
										
											2008-02-18 20:12:10 -05:00
										 |  |  | ! Copyright (C) 2008 Alex Chapman | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2008-02-21 04:44:15 -05:00
										 |  |  | USING: accessors kernel new-slots semantic-db semantic-db.context sequences ;
 | 
					
						
							| 
									
										
										
										
											2008-02-18 20:12:10 -05:00
										 |  |  | IN: semantic-db.hierarchy | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-21 04:44:15 -05:00
										 |  |  | TUPLE: tree id children ;
 | 
					
						
							|  |  |  | C: <tree> tree | 
					
						
							| 
									
										
										
										
											2008-02-18 20:12:10 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-21 04:44:15 -05:00
										 |  |  | : hierarchy-context ( -- context-id )
 | 
					
						
							|  |  |  |     "hierarchy" ensure-context ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : has-parent-relation ( -- relation-id )
 | 
					
						
							|  |  |  |     ! find an arc with: | 
					
						
							|  |  |  |     !   type = relation (in semantic-db context) | 
					
						
							|  |  |  |     !   context = hierarchy | 
					
						
							|  |  |  |     !   name = "has parent" | 
					
						
							|  |  |  |     ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : find-children ( node-id -- children )
 | 
					
						
							|  |  |  |     ! find arcs with: | 
					
						
							|  |  |  |     !   relation = has-parent-relation | 
					
						
							|  |  |  |     !   object = node-id | 
					
						
							|  |  |  |     ! then load the subjects either as nodes or subtrees | 
					
						
							|  |  |  |     ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : get-node-hierarchy ( node-id -- tree )
 | 
					
						
							|  |  |  |     dup find-children <tree> ;
 |