Select Git revision
test_rule.py
test_rule.py 4.46 KiB
#!/usr/bin/python3.10
# -*-coding:Utf-8 -*
#==============================================================================
# TENET: Extraction Rule Test
#------------------------------------------------------------------------------
# Script to test rules under development
#==============================================================================
import subprocess, os
from rdflib import Graph
from rdflib import Namespace
from rdflib.namespace import NamespaceManager
FILE_PATH = f'{os.path.dirname(os.path.abspath(__file__))}'
INPUT_DIR_PATH = f'{FILE_PATH}/input/'
OUTPUT_DIR_PATH = f'{FILE_PATH}/output/'
TEST_GRAPH = f'{INPUT_DIR_PATH}testGraph1.ttl'
from context import tenet
from tenet.febTransduction import phenomena_application_or as test_rule
from tenet.febTransduction import query_builder
from tenet.febTransduction import prefix_handle
INDENT_STR = ' '
#==============================================================================
# Useful Methods
#==============================================================================
def load_test_graph():
print(f'\n -- Test Graph Loading')
graph = Graph()
prefix_handle.update_graph_namespacemanager(graph)
graph.parse(TEST_GRAPH)
print(f" ----- Graph Loaded ({len(graph)})")
return graph
def define_clause_list(composition_pattern_list):
clause_list = []
for (net_1, relation, net_2) in composition_pattern_list:
clause_list.append(f'{net_1} {relation} {net_2}.')
return clause_list
#==============================================================================
# Development Test
#==============================================================================
def devtest_select_pattern_application_1(graph):
print('\n -- Select Pattern Application 1')
query_code = test_rule.__select_pattern_1()
print(query_code)
pattern_result_set = graph.query(query_code)
print(f'\n ----- number of selection found: {len(pattern_result_set)}')
for selection in pattern_result_set:
result_str = f'>>> '
result_str += f'{selection.property_net.n3(graph.namespace_manager)}'
result_str += f' {selection.class_net.n3(graph.namespace_manager)}'
result_str += f' {selection.phenomena_net.n3(graph.namespace_manager)}'
print(result_str)
def devtest_select_pattern_application_2(graph):
print('\n -- Select Pattern Application 2')
query_code = test_rule.__select_pattern_2()
print(query_code)
pattern_result_set = graph.query(query_code)
print(f'\n ----- number of selection found: {len(pattern_result_set)}')
for selection in pattern_result_set:
result_str = f'>>> '
result_str += f'{selection.property_net.n3(graph.namespace_manager)}'
result_str += f' {selection.property_net_0.n3(graph.namespace_manager)}'
result_str += f' {selection.phenomena_net.n3(graph.namespace_manager)}'
print(result_str)
def devtest_insert_query(graph):
print(f'\n -- Insert Query Test')
triple_list = ['net:net1 a net:ClassNet.',
'net:net2 a net:PropertyNet.',
'net:net3 a net:ClassNet.']
test_query = query_builder.generate_insert_query(triple_list)
print(test_query)
graph.update(test_query)
print(f"----- Graph Updated ({len(graph)})")
#==============================================================================
# Unit Test
#==============================================================================
def unittest_run_rule(graph, rule):
print('\n -- Rule Test')
rule_label, new_triple_list = rule(graph)
print(f' ----- label: {rule_label}')
print(f' ----- new_triple_list: {len(new_triple_list)}')
for new_triple in new_triple_list:
print(f' | {new_triple}')
#==============================================================================
# Test Script
#==============================================================================
if __name__ == '__main__':
print('\n *** Test Preparation ***')
graph = load_test_graph()
print('\n \n')
print('\n *** Development Test ***')
devtest_select_pattern_application_1(graph)
devtest_select_pattern_application_2(graph)
devtest_insert_query(graph)
print('\n \n')
print('\n *** Unit Test ***')
unittest_run_rule(graph, test_rule.analyze_phenomena_or_1)
unittest_run_rule(graph, test_rule.analyze_phenomena_or_2)
print('\n \n')
print('\n *** - ***')