diff --git a/tenet/febTransduction/naming_computer.py b/tenet/febTransduction/naming_computer.py index 7daa0939c98f110513b552d8901f76107dfd1f60..3d3e46bc52022c701e7d45541a9ff5623bbe807c 100644 --- a/tenet/febTransduction/naming_computer.py +++ b/tenet/febTransduction/naming_computer.py @@ -23,7 +23,7 @@ PROPERTY_NAMING_3 = '-of' #============================================================================== -# Method to compute names +# Method to compute naming #============================================================================== def define_composite_naming_1(net_1, net_2, net_3, @@ -34,15 +34,4 @@ def define_composite_naming_1(net_1, net_2, net_3, name_3 = f'{net_3.naming}' return f'{name_1}_{name_2}_{name_3}' - - -#============================================================================== -# Method to compute URI -#============================================================================== - -def define_net_uri_1(target_net): - uri = None - if target_net.naming is not None: - uri = URIRef(f'net:{target_net.type_name}_{target_net.naming}') - return uri \ No newline at end of file diff --git a/tenet/febTransduction/net/net.py b/tenet/febTransduction/net/net.py index 6c8d455287fee532b0b6460496c1313604129563..78b76a69a1582976260c2a012de217549c5d8e51 100644 --- a/tenet/febTransduction/net/net.py +++ b/tenet/febTransduction/net/net.py @@ -9,6 +9,7 @@ import rdflib from rdflib import URIRef +from rdflib.namespace import NamespaceManager from febTransduction.net import SemanticNetReferenceHandle from febTransduction.query_builder import generate_select_query @@ -39,6 +40,11 @@ class Net: # -- Net URI self._uri = uri + if isinstance(uri, rdflib.term.URIRef): + self._uri = uri.n3(self.support_graph.namespace_manager) + elif isinstance(uri, str): + self._uri = URIRef(uri).n3(self.support_graph.namespace_manager) + # -- Net Attributes self._node = [] @@ -99,10 +105,8 @@ class Net: for attr_key, attr_value in attr.items(): if isinstance(attr_key, list): self.attr_key.append(attr_value) - print(f'{attr_key} | {attr_value} | {self.attr_key} | {self._base_node}') else: self.attr_key = attr_value - print(f'{attr_key} | {attr_value} | {self.attr_key} | {self._base_node}') #-------------------------------------------------------------------------- @@ -120,9 +124,9 @@ class Net: assert control, f'new_value does not a string or URIRef ({type(new_value)})' if isinstance(new_value, rdflib.term.URIRef): - self._uri = new_value + self._uri = new_value.n3(self.support_graph.namespace_manager) else: - self._uri = URIRef(new_value) + self._uri = URIRef(new_value).n3(self.support_graph.namespace_manager) @@ -194,4 +198,40 @@ class Net: # -- Node(s) Setting for n in nets: - self.node = n.node \ No newline at end of file + self.node = n.node + + + + #-------------------------------------------------------------------------- + # Consolidation Method (finalize) + #-------------------------------------------------------------------------- + + def __consolidate_uri(self): + if self.uri is None: + if self.naming is not None: + self.uri = URIRef(f'net:{self.type_name}_{self.naming}') + + def finalize(self): + self.__consolidate_uri() + + + + #-------------------------------------------------------------------------- + # Triple Generation Method + #-------------------------------------------------------------------------- + + def __generation_attribute_triple_definition(self): + triple_definition = [] + pass # TODO + return triple_definition + + + def generate_triple_definition(self): + + triple_definition = [] + + if self.uri is not None: + triple_definition.append(f'{self.uri} a {self.type_uri}.') + triple_definition += self.__generation_attribute_triple_definition() + + return triple_definition \ No newline at end of file diff --git a/tenet/febTransduction/phenomena_application_or.py b/tenet/febTransduction/phenomena_application_or.py index 023653228065beeda6e2f28e1b6bb970c11ed04f..9c4d881fb19972f2436ffbb2d7325f5780360ce7 100644 --- a/tenet/febTransduction/phenomena_application_or.py +++ b/tenet/febTransduction/phenomena_application_or.py @@ -20,8 +20,9 @@ if __name__ == '__main__': print(sys.path[0]) import febTransduction as transduction +from febTransduction import net from febTransduction.query_builder import generate_select_query -from febTransduction.naming_computer import * +from febTransduction.naming_computer import define_composite_naming_1 #============================================================================== @@ -81,7 +82,7 @@ def __define_restriction(net, op_set): # TODO def analyze_phenomena_or_1(graph): # -- Rule Initialization - rule_label = '"or" phenomena analysis 1 (targetting class)' + rule_label = '"or" phenomena analysis 1 [ property(class, or_phenomena) ]' print(f"--- *** February Transduction *** Sequence: {rule_label}") #logger.info(f"--- *** February Transduction *** Sequence: {rule_label}") @@ -105,22 +106,22 @@ def analyze_phenomena_or_1(graph): # etc # -- Restriction Computation - for num in range(1, 9+1): - query_code = __op_pattern_1(selection.phenomena_net, num) - op_set = graph.query(query_code) - composite_class_net = __define_restriction(composite_class_net, op_set) + pass # TODO + # for num in range(1, 9+1): + # query_code = __op_pattern_1(selection.phenomena_net, num) + # op_set = graph.query(query_code) + # composite_class_net = __define_restriction(composite_class_net, op_set) # -- Relation Propagation - for (n1, rel, _) in class_net.input_relation_list: - composite_class_net.add_input_relation(n1, rel) + pass # TODO + # for (n1, rel, _) in class_net.input_relation_list: + # composite_class_net.add_input_relation(n1, rel) # TODO: à voir si on veut d'autres relations + # -- Net Naming + composite_class_net.naming = define_composite_naming_1(class_net, property_net, phenomena_net) + # -- Finalization - composite_class_net.uri = naming_computer.define_composite_uri_1( - composite_class_net, - class_net, property_net, phenomena_net, - naming_computer.PROPERTY_NAMING_1 - ) composite_class_net.finalize() new_triples = composite_class_net.generate_triple_definition() new_triple_list.append(new_triples) @@ -135,7 +136,7 @@ def analyze_phenomena_or_1(graph): def __select_pattern_2(): # -- Select Data List - select_data_list = ['?property_net_0', '?property_net', '?phenomena_net'] + select_data_list = ['?property_net', '?property_net_0', '?phenomena_net'] # -- Clause List clause_list = [] @@ -152,10 +153,10 @@ def __select_pattern_2(): return query_code -def analyze_phenomena_or_2(): +def analyze_phenomena_or_2(graph): # -- Rule Initialization - rule_label = '"or" phenomena analysis 2 (targetting class)' + rule_label = '"or" phenomena analysis 2 [ property(property, or_phenomena) ]' print(f"--- *** February Transduction *** Sequence: {rule_label}") # -- Selection Pattern Application @@ -166,7 +167,37 @@ def analyze_phenomena_or_2(): new_triple_list = [] for selection in pattern_set: - pass + # -- Net Composition + property_net_0 = net.PropertyNet(graph, uri=selection.property_net_0) + property_net = net.PropertyNet(graph, uri=selection.property_net) + phenomena_net = net.PhenomenaNet(graph, uri=selection.phenomena_net) + composite_class_net = net.CompositeClassNet(graph) + composite_class_net.compose(property_net_0, property_net, phenomena_net) + + # -- Data Computation + composite_class_net.mother_class_net = property_net_0.uri + # etc + + # -- Restriction Computation + pass # TODO + # for num in range(1, 9+1): + # query_code = __op_pattern_1(selection.phenomena_net, num) + # op_set = graph.query(query_code) + # composite_class_net = __define_restriction(composite_class_net, op_set) + + # -- Relation Propagation + pass # TODO + # for (n1, rel, _) in class_net.input_relation_list: + # composite_class_net.add_input_relation(n1, rel) + # TODO: à voir si on veut d'autres relations + + # -- Net Naming + composite_class_net.naming = define_composite_naming_1(property_net_0, property_net, phenomena_net) + + # -- Finalization + composite_class_net.finalize() + new_triples = composite_class_net.generate_triple_definition() + new_triple_list += new_triples return rule_label, new_triple_list @@ -212,8 +243,13 @@ if __name__ == '__main__': result_str += f' {selection.phenomena_net.n3(graph.namespace_manager)}' print(result_str) - print('\n -- Rule') - # rule = analyze_phenomena_or_1() + print('\n -- Rule Test') + rule_label, new_triple_list = analyze_phenomena_or_2(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}') + # num = 0 # for query_label, query in rule.query_list: diff --git a/tenet/tenet.log b/tenet/tenet.log index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..12fc6b538f40b1e5eef897860c1dfe31746b9fb1 100644 --- a/tenet/tenet.log +++ b/tenet/tenet.log @@ -0,0 +1 @@ +- DEBUG - handle_close[691355e6ad1411ed842d14abc581ea52]({'header': {'msg_id': '92e4b518-67db9b9669f0b8d6c0247971_4398_201', 'msg_type': 'comm_close', 'username': 'lamenji', 'session': '92e4b518-67db9b9669f0b8d6c0247971', 'date': datetime.datetime(2023, 2, 15, 23, 15, 46, 180154, tzinfo=tzutc()), 'version': '5.3'}, 'msg_id': '92e4b518-67db9b9669f0b8d6c0247971_4398_201', 'msg_type': 'comm_close', 'parent_header': {}, 'metadata': {}, 'content': {'comm_id': '691355e6ad1411ed842d14abc581ea52', 'data': {}}, 'buffers': []}) diff --git a/tests/test_naming_computer.py b/tests/test_naming_computer.py index 4577318e768d4e706dd27096fa0280916bfbc516..15170c9b304f5620a33cc20f01f3296913bb124f 100644 --- a/tests/test_naming_computer.py +++ b/tests/test_naming_computer.py @@ -88,7 +88,7 @@ print(f' ----- Naming (3)): {naming_3}') print('\n -- Update composite net (with naming_1)') composite_net_1.naming = naming_1 -composite_net_1.uri = naming_computer.define_net_uri_1(composite_net_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', @@ -100,7 +100,7 @@ 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.uri = naming_computer.define_net_uri_1(composite_net_2) +composite_net_2.finalize() test_attribute_access(composite_net_2, 'net.uri', 'net.node', 'net.base_node', 'net.structure', 'net.naming', 'net.class_name', diff --git a/tests/test_semantic_net_1.py b/tests/test_semantic_net_1.py index a8a77f3b6dabc3b87078e9ca5539c04b7b20d4aa..1bdc45a87cb969b7d42eb2a1cfc4ace02dd84bc0 100644 --- a/tests/test_semantic_net_1.py +++ b/tests/test_semantic_net_1.py @@ -64,7 +64,8 @@ graph.parse(TEST_GRAPH) print(f" ----- Graph Loaded ({len(graph)})") print('\n -- Net') -net = Net(graph, uri='net:atomClass_sun_s2') +net_uri = 'https://tenet.tetras-libre.fr/semantic-net#atomClass_sun_s2' +net = Net(graph, uri=net_uri) test_attribute_access(net, 'net.uri', 'net.node', 'net.base_node', 'net.structure', 'net.naming')