Select Git revision
test_naming_computer.py 4.07 KiB
#!/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' + ' *** - ***')