1 module fact_test; 2 3 import fact; 4 import std.stdio, 5 std.string; 6 import core.stdc.stdarg; 7 8 void print2Darray ( const char*** names ) { 9 writefln("[\n"); 10 int n=0; 11 const (char*)* syns = names[0]; 12 while ( syns != null ) 13 { 14 printf("["); 15 int m = 0; 16 const (char)* name; 17 while ( (name = syns[m++]) != null) 18 printf("%s ", name); 19 writefln("]\n"); 20 syns=names[++n]; 21 } 22 writefln("]\n"); 23 } 24 25 auto _fact_concept_actor_new(...) { 26 return fact_concept_actor_new(_argptr); 27 } 28 auto _fact_individual_actor_new(...) { 29 return fact_individual_actor_new(_argptr); 30 } 31 auto _fact_o_role_actor_new(...) { 32 return fact_o_role_actor_new(_argptr); 33 } 34 35 int main ( ) { 36 puts("Starting FaCT++ C interface tests"); 37 // create kernel 38 fact_reasoning_kernel* k = fact_reasoning_kernel_new(); 39 40 // create classes C,D, property R 41 puts("Creating entities"); 42 fact_concept_expression* c = fact_concept(k,"C"); 43 fact_concept_expression* d = fact_concept(k,"D"); 44 fact_individual_expression* i = fact_individual(k,"I"); 45 fact_o_role_expression* r = fact_object_role(k,"R"); 46 47 // create C [= ER.T, ER.T [= D 48 puts("Creating axioms"); 49 fact_concept_expression* some = fact_o_exists ( k, r, fact_top(k)); 50 fact_implies_concepts ( k, c, some ); 51 fact_implies_concepts ( k, some, d ); 52 fact_instance_of ( k, i, c ); 53 54 // classify KB is not necessary: it's done automatically depending on a query 55 puts("Classifying ontology"); 56 fact_classify_kb(k); 57 58 59 // check whether C [= D 60 puts("Is C subsumed by D?"); 61 if ( fact_is_subsumed_by(k,c,d) ) 62 puts("Yes!\n"); 63 else 64 puts("No...\n"); 65 66 // create a concept actor and use it to get all superclasses of C 67 puts("All superclasses of C:"); 68 fact_actor* actor = _fact_concept_actor_new(); 69 fact_get_sup_concepts(k,c,0,&actor); 70 print2Darray(fact_get_elements_2d(actor)); 71 fact_actor_free(actor); 72 73 // create an individual actor and use it to get all instances of C 74 puts("All instances of C:"); 75 fact_actor* i_actor = _fact_individual_actor_new(); 76 fact_get_instances(k, c, &i_actor); 77 print2Darray(fact_get_elements_2d(i_actor)); 78 fact_actor_free(i_actor); 79 80 // get all the properties 81 puts("All object properties:"); 82 fact_o_role_expression* o_top = fact_object_role_top(k); 83 actor = _fact_o_role_actor_new(); 84 fact_get_sub_roles(k,cast(fact_role_expression*)o_top,0,&actor); 85 print2Darray(fact_get_elements_2d(actor)); 86 fact_actor_free(actor); 87 88 // we done so let's free memory 89 puts("Destroying reasoning kernel"); 90 fact_reasoning_kernel_free(k); 91 puts("All done"); 92 return 0; 93 }