latest semantic-db changes
							parent
							
								
									3358672e49
								
							
						
					
					
						commit
						aed24f5657
					
				| 
						 | 
				
			
			@ -1,14 +1,14 @@
 | 
			
		|||
! Copyright (C) 2008 Alex Chapman
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: semantic-db ;
 | 
			
		||||
USING: kernel semantic-db semantic-db.type ;
 | 
			
		||||
IN: semantic-db.context
 | 
			
		||||
 | 
			
		||||
: all-contexts ( -- contexts )
 | 
			
		||||
    has-type-relation context-type relation-object-subjects ;
 | 
			
		||||
! : all-contexts ( -- contexts )
 | 
			
		||||
!     has-type-relation context-type relation-object-subjects ;
 | 
			
		||||
! 
 | 
			
		||||
! : context-relations ( context -- relations )
 | 
			
		||||
!     has-context-relation swap relation-object-subjects ;
 | 
			
		||||
 | 
			
		||||
: context-relations ( context -- relations )
 | 
			
		||||
    has-context-relation swap relation-object-subjects ;
 | 
			
		||||
    
 | 
			
		||||
: get-context ( name -- context )
 | 
			
		||||
: ensure-context ( name -- context-id )
 | 
			
		||||
    context-type swap ensure-node-of-type ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,27 @@
 | 
			
		|||
! Copyright (C) 2008 Alex Chapman
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: kernel semantic-db ;
 | 
			
		||||
USING: accessors kernel new-slots semantic-db semantic-db.context sequences ;
 | 
			
		||||
IN: semantic-db.hierarchy
 | 
			
		||||
 | 
			
		||||
TUPLE: tree id children ;
 | 
			
		||||
C: <tree> tree
 | 
			
		||||
 | 
			
		||||
: 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> ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,9 +3,9 @@ IN: temporary
 | 
			
		|||
 | 
			
		||||
[
 | 
			
		||||
    create-node-table create-arc-table
 | 
			
		||||
    [ 1 ] [ "first node" create-node* ] unit-test
 | 
			
		||||
    [ 2 ] [ "second node" create-node* ] unit-test
 | 
			
		||||
    [ 3 ] [ "third node" create-node* ] unit-test
 | 
			
		||||
    [ 4 ] [ f create-node* ] unit-test
 | 
			
		||||
    [ 5 ] [ 1 2 3 create-arc* ] unit-test
 | 
			
		||||
    [ 1 ] [ "first node" create-node ] unit-test
 | 
			
		||||
    [ 2 ] [ "second node" create-node ] unit-test
 | 
			
		||||
    [ 3 ] [ "third node" create-node ] unit-test
 | 
			
		||||
    [ 4 ] [ f create-node ] unit-test
 | 
			
		||||
    [ 5 ] [ 1 2 3 create-arc ] unit-test
 | 
			
		||||
] with-tmp-sqlite
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,12 +18,9 @@ node "node"
 | 
			
		|||
: create-node-table ( -- )
 | 
			
		||||
    node create-table ;
 | 
			
		||||
 | 
			
		||||
: create-node* ( content -- id )
 | 
			
		||||
: create-node ( content -- id )
 | 
			
		||||
    <node> dup persist id>> ;
 | 
			
		||||
 | 
			
		||||
: create-node ( content -- )
 | 
			
		||||
    create-node* drop ;
 | 
			
		||||
 | 
			
		||||
TUPLE: arc relation subject object ;
 | 
			
		||||
 | 
			
		||||
: <arc> ( relation subject object -- arc )
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +38,6 @@ arc "arc"
 | 
			
		|||
 | 
			
		||||
: create-arc-table ( -- )
 | 
			
		||||
    arc create-table ;
 | 
			
		||||
    ! arc db-columns maybe-remove-id arc db-table create-sql sql-command ;
 | 
			
		||||
 | 
			
		||||
: insert-arc ( arc -- )
 | 
			
		||||
    dup delegate insert-tuple
 | 
			
		||||
| 
						 | 
				
			
			@ -53,15 +49,12 @@ arc "arc"
 | 
			
		|||
: delete-arc ( arc -- )
 | 
			
		||||
    dup delete-tuple delegate delete-tuple ;
 | 
			
		||||
 | 
			
		||||
: create-arc* ( relation subject object -- id )
 | 
			
		||||
: create-arc ( relation subject object -- id )
 | 
			
		||||
    <arc> dup persist-arc id>> ;
 | 
			
		||||
 | 
			
		||||
: create-arc ( relation subject object -- )
 | 
			
		||||
    create-arc* drop ;
 | 
			
		||||
 | 
			
		||||
: create-bootstrap-nodes ( -- )
 | 
			
		||||
    { "context" "relation" "is of type" "semantic-db" "is in context" }
 | 
			
		||||
    [ create-node ] each ;
 | 
			
		||||
    [ create-node drop ] each ;
 | 
			
		||||
 | 
			
		||||
: context-type 1 ; inline
 | 
			
		||||
: relation-type 2 ; inline
 | 
			
		||||
| 
						 | 
				
			
			@ -70,11 +63,11 @@ arc "arc"
 | 
			
		|||
: has-context-relation 5 ; inline
 | 
			
		||||
 | 
			
		||||
: create-bootstrap-arcs ( -- )
 | 
			
		||||
    has-type-relation has-type-relation relation-type create-arc
 | 
			
		||||
    has-type-relation semantic-db-context context-type create-arc
 | 
			
		||||
    has-context-relation has-type-relation semantic-db-context create-arc
 | 
			
		||||
    has-type-relation has-context-relation relation-type create-arc
 | 
			
		||||
    has-context-relation has-context-relation semantic-db-context create-arc ;
 | 
			
		||||
    has-type-relation has-type-relation relation-type create-arc drop
 | 
			
		||||
    has-type-relation semantic-db-context context-type create-arc drop
 | 
			
		||||
    has-context-relation has-type-relation semantic-db-context create-arc drop
 | 
			
		||||
    has-type-relation has-context-relation relation-type create-arc drop
 | 
			
		||||
    has-context-relation has-context-relation semantic-db-context create-arc drop ;
 | 
			
		||||
 | 
			
		||||
: init-semantic-db ( -- )
 | 
			
		||||
    create-node-table create-arc-table create-bootstrap-nodes create-bootstrap-arcs ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
! Copyright (C) 2008 Alex Chapman
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: kernel semantic-db ;
 | 
			
		||||
IN: semantic-db.type
 | 
			
		||||
 | 
			
		||||
: assign-type ( type nid -- arc-id )
 | 
			
		||||
    has-type-relation spin create-arc ;
 | 
			
		||||
 | 
			
		||||
: create-node-of-type ( type name -- node-id )
 | 
			
		||||
    create-node [ assign-type drop ] keep ;
 | 
			
		||||
 | 
			
		||||
: select-node-of-type ( type name -- node-id? )
 | 
			
		||||
    ! find a node with the given name, that is the subject of an arc with:
 | 
			
		||||
    !     relation = has-type-relation
 | 
			
		||||
    !     object = type
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
: ensure-node-of-type ( type name -- node-id )
 | 
			
		||||
    2dup select-node-of-type [ 2nip ] [ create-node-of-type ] if* ;
 | 
			
		||||
		Loading…
	
		Reference in New Issue