#!/usr/bin/python3.10 # -*-coding:Utf-8 -* #============================================================================== # TENET: Semantic Net Class Test #------------------------------------------------------------------------------ # Script to test the semantic net classes #============================================================================== 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.net import AtomClassNet from tenet.febTransduction.net import CompositeClassNet from tenet.febTransduction.net import AtomPropertyNet from tenet.febTransduction.net import PhenomenaNet from tenet.febTransduction import naming_computer #============================================================================== # Utilities #============================================================================== def test_attribute_access(net, *attr_set): print(f'\n *** Net attributes ({net.type_id})) ***') for attr in attr_set: print(f' ----- {attr}: {eval(attr)}') #============================================================================== # Development Test #============================================================================== print('\n' + ' *** Development Test ***') print('\n *** TEST: Naming Computer ***') print(f'\n -- Test Graph Loading') graph = Graph() graph.bind('net', Namespace('https://tenet.tetras-libre.fr/semantic-net#')) graph.parse(TEST_GRAPH) print(f" ----- Graph Loaded ({len(graph)})") print('\n -- Test data: some semantic nets') net_1 = AtomClassNet(graph, uri='net:atomClass_object_o') print(f' ----- net_1: {net_1.uri} ({net_1.naming})') net_2 = AtomPropertyNet(graph, uri='net:atomProperty_orbit_o2') print(f' ----- net_2: {net_2.uri} ({net_2.naming})') net_3 = AtomClassNet(graph, uri='net:atomClass_sun_s2') print(f' ----- net_3: {net_3.uri} ({net_3.naming})') net_4 = PhenomenaNet(graph, uri='net:phenomena_conjunction-AND_a') print(f' ----- net_4: {net_4.uri} ({net_4.naming})') print('\n -- Test data: composite net') composite_net_1 = CompositeClassNet(graph) composite_net_1.compose(net_1, net_2, net_3) print(f' ----- composite_net_1: {composite_net_1.uri} ({composite_net_1.naming})') print('\n -- URI definition') naming_0 = naming_computer.define_composite_naming_1(net_1, net_2, net_3) print(f' ----- Naming (0)): {naming_0}') naming_1 = naming_computer.define_composite_naming_1(net_1, net_2, net_3, naming_computer.PROPERTY_NAMING_1) print(f' ----- Naming (1)): {naming_1}') naming_2 = naming_computer.define_composite_naming_1(net_1, net_2, net_3, naming_computer.PROPERTY_NAMING_2) print(f' ----- Naming (2)): {naming_2}') naming_3 = naming_computer.define_composite_naming_1(net_1, net_2, net_3, naming_computer.PROPERTY_NAMING_3) print(f' ----- Naming (3)): {naming_3}') print('\n -- Update composite net (with naming_1)') composite_net_1.naming = naming_1 composite_net_1.finalize() test_attribute_access(composite_net_1, 'net.uri', 'net.node', 'net.base_node', 'net.structure', 'net.naming', 'net.class_name', 'net.mother_class_net', 'net.restriction', 'net.restriction01') print('\n -- Advanced Test(s)') composite_net_2 = CompositeClassNet(graph) composite_net_2.compose(net_1, net_2, net_4) composite_net_2.naming = naming_computer.define_composite_naming_1(net_1, net_2, net_4) composite_net_2.finalize() test_attribute_access(composite_net_2, 'net.uri', 'net.node', 'net.base_node', 'net.structure', 'net.naming', 'net.class_name', 'net.mother_class_net', 'net.restriction', 'net.restriction01') print('\n' + ' *** - ***')