From 892b12e5d0a21a473445bb4a9fedfbd1ce33d922 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Aur=C3=A9lien=20Lamercerie?=
 <aurelien.lamercerie@tetras-libre.fr>
Date: Fri, 8 Sep 2023 16:20:03 +0200
Subject: [PATCH] New Generator Rule: OWL Relation Generation (2)

---
 .../owl_generation/owl_relation_generator.py  |  46 +++++--
 tenet/scheme/owl_amr_scheme_1.py              |   3 +-
 .../devGraph-relations-to-generate.result.ttl |   9 +-
 .../SolarSystemDev01_factoid.ttl              | 114 ++++++++---------
 .../technical-data/tenet.log                  | 107 ++++++++--------
 ...net.tetras-libre.fr_demo_01_Generation.ttl | 116 +++++++++---------
 .../tenet.tetras-libre.fr_demo_01_factoid.ttl | 114 ++++++++---------
 7 files changed, 274 insertions(+), 235 deletions(-)

diff --git a/tenet/scheme/amr_master_rule/owl_generation/owl_relation_generator.py b/tenet/scheme/amr_master_rule/owl_generation/owl_relation_generator.py
index 7aa256ec..a3f60d76 100644
--- a/tenet/scheme/amr_master_rule/owl_generation/owl_relation_generator.py
+++ b/tenet/scheme/amr_master_rule/owl_generation/owl_relation_generator.py
@@ -29,8 +29,13 @@ from transduction.query_builder import (
 def __search_relation_pattern(graph):
     
     # SPARQL query construction
-    select_data_list = ['?relation_net']
-    clause_list = [(f'?relation_net a net:Relation_Net.')]
+    select_data_list = ['?relation_net', '?subject_net', '?predicate_net', '?object_net']
+    clause_list = [
+        f'?relation_net a net:Relation_Net.', 
+        f'?relation_net net:hasSubjectNet ?subject_net.',
+        f'?relation_net net:hasPredicateNet ?predicate_net.',
+        f'?relation_net net:hasObjectNet ?object_net.'
+        ]
     query_code = generate_select_query(graph, select_data_list, clause_list)
 
     # SPARQL query execution
@@ -47,14 +52,28 @@ def __search_relation_pattern(graph):
 # -- Base Method to compute URI
 # ------------------------------------------
 
+# def __compute_individual_uri(individual_net):
+#     return rdflib.URIRef("http://example.org/defaultIndividual")
+
 def __compute_individual_uri(individual_net):
-    # TODO: À développer plus tard. Retourne un URI par défaut pour l'instant.
-    return rdflib.URIRef("http://example.org/defaultIndividual")
+    if isinstance(individual_net.individual_uri, list) and len(individual_net.individual_uri) > 0:
+        class_uri = individual_net.individual_uri[0]
+    else: # computation of individual_uri
+        net_naming = individual_net.get_attribute_first_value(individual_net.naming)
+        individual_uri = produce_uriref(individual_net.support_graph, f'ext-out:{net_naming}')
+    return individual_uri
+
 
+# def __compute_property_uri(property_net):
+#     return rdflib.URIRef("http://example.org/defaultProperty")
 
 def __compute_property_uri(property_net):
-    # TODO: À développer plus tard. Retourne un URI par défaut pour l'instant.
-    return rdflib.URIRef("http://example.org/defaultProperty")
+    if isinstance(property_net.property_uri, list) and len(property_net.property_uri) > 0:
+        property_uri = property_net.property_uri[0]
+    else: # computation of property_uri
+        net_naming = property_net.get_attribute_first_value(property_net.naming)
+        property_uri = produce_uriref(property_net.support_graph, f'ext-out:{net_naming}')
+    return property_uri
 
 
 # -- Base Method to define triple
@@ -67,11 +86,13 @@ def __define_relation_triple(subject, predicate, object):
 # -- Methods to generate OWL triple
 # -----------------------------------
 
-def __generate_owl_triple_definition(graph, relation_net):
-    # Fetch related nets
-    subject_net = relation_net
-    predicate_net = relation_net
-    object_net = relation_net
+def __generate_owl_triple_definition(
+        graph, subject_net, predicate_net, object_net):
+    
+    # --
+    subject_net = net.IndividualNet(graph, uri=subject_net)
+    predicate_net = net.PropertyNet(graph, uri=predicate_net)
+    object_net = net.IndividualNet(graph, uri=object_net)
     
     # Compute URIs for each component
     subject_uri = __compute_individual_uri(subject_net)
@@ -98,7 +119,8 @@ def generate_owl_relation(graph):
     pattern_set = __search_relation_pattern(graph)
     
     for pattern in pattern_set:
-        triple_list = __generate_owl_triple_definition(graph, pattern.relation_net)
+        triple_list = __generate_owl_triple_definition(
+            graph, pattern.subject_net, pattern.predicate_net, pattern.object_net)
         rule_triple_list += triple_list
 
     return rule_label, rule_triple_list
diff --git a/tenet/scheme/owl_amr_scheme_1.py b/tenet/scheme/owl_amr_scheme_1.py
index 49f4155a..5c17ce47 100644
--- a/tenet/scheme/owl_amr_scheme_1.py
+++ b/tenet/scheme/owl_amr_scheme_1.py
@@ -129,7 +129,8 @@ heuristic_deduction_sequence = ['heuristic dedeuction sequence',
 owl_generation_sequence = ['OWL Generation Sequence',
                            rule.generate_owl_class,
                            rule.generate_owl_property,
-                           rule.generate_owl_individual
+                           rule.generate_owl_individual,
+                           rule.generate_owl_relation
                            ]
 
 
diff --git a/tests/dev_owl_rule_tests/test_data/devGraph-relations-to-generate.result.ttl b/tests/dev_owl_rule_tests/test_data/devGraph-relations-to-generate.result.ttl
index d29f744b..3d754e35 100644
--- a/tests/dev_owl_rule_tests/test_data/devGraph-relations-to-generate.result.ttl
+++ b/tests/dev_owl_rule_tests/test_data/devGraph-relations-to-generate.result.ttl
@@ -1,7 +1,7 @@
 @prefix : <https://amr.tetras-libre.fr/rdf/schema#> .
 @prefix cprm: <https://tenet.tetras-libre.fr/config/parameters#> .
 @prefix net: <https://tenet.tetras-libre.fr/semantic-net#> .
-@prefix ns1: <http://example.org/> .
+@prefix ns1: <https://tenet.tetras-libre.fr/extract-result#> .
 @prefix ns11: <http://amr.isi.edu/rdf/amr-terms#> .
 @prefix ns2: <http://amr.isi.edu/rdf/core-amr#> .
 @prefix ns3: <http://amr.isi.edu/frames/ld/v1.2.2/> .
@@ -425,6 +425,8 @@ cprm:targetOntologyURI a rdf:Property ;
     rdfs:range xsd:string ;
     rdfs:subPropertyOf cprm:configParamProperty .
 
+ns1:gravitation-SSC-01-01 ns1:bind ns1:SolarSystem .
+
 <https://tenet.tetras-libre.fr/semantic-net> a owl:Ontology .
 
 net:Logical_Set_Net a owl:Class ;
@@ -673,8 +675,6 @@ ns4:planet a ns2:NamedEntity ;
 ns2:AMR a owl:Class ;
     rdfs:subClassOf :AMR_Linked_Data .
 
-ns1:defaultIndividual ns1:defaultProperty ns1:defaultIndividual .
-
 :AMR_Root a owl:Class ;
     rdfs:subClassOf :AMR_Structure .
 
@@ -800,6 +800,9 @@ sys:Feature a owl:Class ;
 
 sys:Out_AnnotationProperty a owl:AnnotationProperty .
 
+ns1:SolarSystem ns1:hasPart ns1:object-SSC-01-01,
+        ns1:sun-SSC-01-01 .
+
 net:Feature a owl:Class ;
     rdfs:subClassOf net:Net_Structure .
 
diff --git a/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/SolarSystemDev01_factoid.ttl b/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/SolarSystemDev01_factoid.ttl
index 0de660a6..92c96354 100644
--- a/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/SolarSystemDev01_factoid.ttl
+++ b/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/SolarSystemDev01_factoid.ttl
@@ -1,119 +1,123 @@
 @prefix ns1: <https://tenet.tetras-libre.fr/base-ontology#> .
+@prefix ns2: <https://tenet.tetras-libre.fr/extract-result#> .
 @prefix owl: <http://www.w3.org/2002/07/owl#> .
 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
 
-<https://tenet.tetras-libre.fr/extract-result#SolarSystem> a owl:Individual,
-        <https://tenet.tetras-libre.fr/extract-result#system>,
-        <https://tenet.tetras-libre.fr/extract-result#system-hasPart-object>,
-        <https://tenet.tetras-libre.fr/extract-result#system-hasPart-sun> ;
-    rdfs:label "SolarSystem" ;
-    ns1:fromStructure "SSC-01-01" .
-
-<https://tenet.tetras-libre.fr/extract-result#direct> a owl:ObjectProperty ;
+ns2:direct a owl:ObjectProperty ;
     rdfs:label "direct" ;
     rdfs:subPropertyOf ns1:Out_ObjectProperty ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#gravitation-SSC-01-01> a owl:Individual,
-        <https://tenet.tetras-libre.fr/extract-result#gravitation-bind-system> ;
+ns2:gravitation-SSC-01-01 a owl:Individual,
+        ns2:gravitation-bind-system ;
     rdfs:label "any gravitation" ;
-    ns1:fromStructure "SSC-01-01" .
+    ns1:fromStructure "SSC-01-01" ;
+    ns2:bind ns2:SolarSystem .
 
-<https://tenet.tetras-libre.fr/extract-result#hasManner> a owl:ObjectProperty ;
+ns2:hasManner a owl:ObjectProperty ;
     rdfs:label "hasManner" ;
     rdfs:subPropertyOf ns1:Out_ObjectProperty ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#not-direct> a owl:ObjectProperty ;
+ns2:not-direct a owl:ObjectProperty ;
     rdfs:subPropertyOf ns1:Out_ObjectProperty ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#object-SSC-01-01> a owl:Individual,
-        <https://tenet.tetras-libre.fr/extract-result#object>,
-        <https://tenet.tetras-libre.fr/extract-result#object-orbit-hasManner-direct-sun>,
-        <https://tenet.tetras-libre.fr/extract-result#object-orbit-hasManner-not-direct-sun> ;
-    rdfs:label "any object" ;
-    ns1:fromStructure "SSC-01-01" .
-
-<https://tenet.tetras-libre.fr/extract-result#sun-SSC-01-01> a owl:Individual,
-        <https://tenet.tetras-libre.fr/extract-result#sun> ;
-    rdfs:label "any sun" ;
-    ns1:fromStructure "SSC-01-01" .
+ns2:SolarSystem a owl:Individual,
+        ns2:system,
+        ns2:system-hasPart-object,
+        ns2:system-hasPart-sun ;
+    rdfs:label "SolarSystem" ;
+    ns1:fromStructure "SSC-01-01" ;
+    ns2:hasPart ns2:object-SSC-01-01,
+        ns2:sun-SSC-01-01 .
 
-<https://tenet.tetras-libre.fr/extract-result#bind> a owl:ObjectProperty ;
+ns2:bind a owl:ObjectProperty ;
     rdfs:label "bind" ;
     rdfs:subPropertyOf ns1:Out_ObjectProperty ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#gravitation> a owl:Class ;
+ns2:gravitation a owl:Class ;
     rdfs:label "gravitation" ;
     rdfs:subClassOf ns1:Entity ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#gravitation-bind-system> a owl:Class ;
+ns2:gravitation-bind-system a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#bind> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#system> ],
-        <https://tenet.tetras-libre.fr/extract-result#gravitation> ;
+            owl:onProperty ns2:bind ;
+            owl:someValuesFrom ns2:system ],
+        ns2:gravitation ;
+    ns1:fromStructure "SSC-01-01" .
+
+ns2:object-SSC-01-01 a owl:Individual,
+        ns2:object,
+        ns2:object-orbit-hasManner-direct-sun,
+        ns2:object-orbit-hasManner-not-direct-sun ;
+    rdfs:label "any object" ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#object-orbit-hasManner-direct-sun> a owl:Class ;
+ns2:object-orbit-hasManner-direct-sun a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#orbit-hasManner-direct> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#sun> ],
-        <https://tenet.tetras-libre.fr/extract-result#object> ;
+            owl:onProperty ns2:orbit-hasManner-direct ;
+            owl:someValuesFrom ns2:sun ],
+        ns2:object ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#object-orbit-hasManner-not-direct-sun> a owl:Class ;
+ns2:object-orbit-hasManner-not-direct-sun a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#orbit-hasManner-not-direct> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#sun> ],
-        <https://tenet.tetras-libre.fr/extract-result#object> ;
+            owl:onProperty ns2:orbit-hasManner-not-direct ;
+            owl:someValuesFrom ns2:sun ],
+        ns2:object ;
+    ns1:fromStructure "SSC-01-01" .
+
+ns2:orbit-hasManner-direct a owl:ObjectProperty ;
+    rdfs:subPropertyOf ns2:orbit ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#orbit-hasManner-direct> a owl:ObjectProperty ;
-    rdfs:subPropertyOf <https://tenet.tetras-libre.fr/extract-result#orbit> ;
+ns2:orbit-hasManner-not-direct a owl:ObjectProperty ;
+    rdfs:subPropertyOf ns2:orbit ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#orbit-hasManner-not-direct> a owl:ObjectProperty ;
-    rdfs:subPropertyOf <https://tenet.tetras-libre.fr/extract-result#orbit> ;
+ns2:sun-SSC-01-01 a owl:Individual,
+        ns2:sun ;
+    rdfs:label "any sun" ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#system-hasPart-object> a owl:Class ;
+ns2:system-hasPart-object a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#hasPart> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#object> ],
-        <https://tenet.tetras-libre.fr/extract-result#system> ;
+            owl:onProperty ns2:hasPart ;
+            owl:someValuesFrom ns2:object ],
+        ns2:system ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#system-hasPart-sun> a owl:Class ;
+ns2:system-hasPart-sun a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#hasPart> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#sun> ],
-        <https://tenet.tetras-libre.fr/extract-result#system> ;
+            owl:onProperty ns2:hasPart ;
+            owl:someValuesFrom ns2:sun ],
+        ns2:system ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#hasPart> a owl:ObjectProperty ;
+ns2:hasPart a owl:ObjectProperty ;
     rdfs:label "hasPart" ;
     rdfs:subPropertyOf ns1:Out_ObjectProperty ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#orbit> a owl:ObjectProperty ;
+ns2:orbit a owl:ObjectProperty ;
     rdfs:label "orbit" ;
     rdfs:subPropertyOf ns1:Out_ObjectProperty ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#object> a owl:Class ;
+ns2:object a owl:Class ;
     rdfs:label "object" ;
     rdfs:subClassOf ns1:Entity ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#sun> a owl:Class ;
+ns2:sun a owl:Class ;
     rdfs:label "sun" ;
     rdfs:subClassOf ns1:Entity ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#system> a owl:Class ;
+ns2:system a owl:Class ;
     rdfs:label "system" ;
     rdfs:subClassOf ns1:Entity,
         ns1:Undetermined_Thing ;
diff --git a/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.log b/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.log
index 9629dc92..642f6a2b 100644
--- a/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.log
+++ b/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.log
@@ -76,25 +76,25 @@
 - DEBUG -  [P-1] ----- Total rule number: 0
 - INFO -  [P-1] -- Step 1: Preprocessing
 - INFO -  [P-1] --- Sequence: Bug fixing for some known anomalies of AMR-LD data
-- INFO -  [P-1] ----- fix AMR bug (1): 5/5 new triples (605, 0:00:00.015421)
+- INFO -  [P-1] ----- fix AMR bug (1): 5/5 new triples (605, 0:00:00.020734)
 - INFO -  [P-1] --- Sequence: AMR reification from AMR-Linked-Data to AMR (tenet) structure
-- INFO -  [P-1] ----- reclassify AMR-LD concept (1): 10/10 new triples (615, 0:00:00.080709)
-- DEBUG -  [P-1] ----- reclassify AMR-LD concept (2): 0/0 new triple (615, 0:00:00.044051)
-- INFO -  [P-1] ----- reclassify AMR-LD concept (3): 12/12 new triples (627, 0:00:00.030094)
-- INFO -  [P-1] ----- reclassify AMR-LD concept (4): 16/16 new triples (643, 0:00:00.045990)
-- INFO -  [P-1] ----- reclassify AMR-LD concept (5): 2/4 new triples (645, 0:00:00.040377)
-- INFO -  [P-1] ----- reify roles as concept: 10/10 new triples (655, 0:00:00.058610)
-- INFO -  [P-1] ----- reclassify existing variable: 45/45 new triples (700, 0:00:00.096800)
-- INFO -  [P-1] ----- add new variable for reified concept: 8/8 new triples (708, 0:00:00.055498)
-- INFO -  [P-1] ----- add AMR leaf for reclassified concept: 33/33 new triples (741, 0:00:00.023910)
-- INFO -  [P-1] ----- add AMR leaf for reified concept: 8/8 new triples (749, 0:00:00.011742)
-- INFO -  [P-1] ----- add AMR edge for core relation: 27/27 new triples (776, 0:00:00.087139)
-- INFO -  [P-1] ----- add AMR edge for reified concept: 12/12 new triples (788, 0:00:00.065064)
-- INFO -  [P-1] ----- add AMR edge for name relation: 5/5 new triples (793, 0:00:00.025519)
-- DEBUG -  [P-1] ----- add AMR edge for quant relation: 0/0 new triple (793, 0:00:00.020558)
-- INFO -  [P-1] ----- add AMR edge for polarity relation: 5/5 new triples (798, 0:00:00.026026)
-- INFO -  [P-1] ----- update AMR edge role 1: 15/15 new triples (813, 0:00:00.071903)
-- INFO -  [P-1] ----- add AMR root: 5/5 new triples (818, 0:00:00.011116)
+- INFO -  [P-1] ----- reclassify AMR-LD concept (1): 10/10 new triples (615, 0:00:00.082527)
+- DEBUG -  [P-1] ----- reclassify AMR-LD concept (2): 0/0 new triple (615, 0:00:00.046103)
+- INFO -  [P-1] ----- reclassify AMR-LD concept (3): 12/12 new triples (627, 0:00:00.027606)
+- INFO -  [P-1] ----- reclassify AMR-LD concept (4): 16/16 new triples (643, 0:00:00.052660)
+- INFO -  [P-1] ----- reclassify AMR-LD concept (5): 2/4 new triples (645, 0:00:00.029949)
+- INFO -  [P-1] ----- reify roles as concept: 10/10 new triples (655, 0:00:00.035906)
+- INFO -  [P-1] ----- reclassify existing variable: 45/45 new triples (700, 0:00:00.021791)
+- INFO -  [P-1] ----- add new variable for reified concept: 8/8 new triples (708, 0:00:00.043916)
+- INFO -  [P-1] ----- add AMR leaf for reclassified concept: 33/33 new triples (741, 0:00:00.018901)
+- INFO -  [P-1] ----- add AMR leaf for reified concept: 8/8 new triples (749, 0:00:00.014984)
+- INFO -  [P-1] ----- add AMR edge for core relation: 27/27 new triples (776, 0:00:00.084435)
+- INFO -  [P-1] ----- add AMR edge for reified concept: 12/12 new triples (788, 0:00:00.065675)
+- INFO -  [P-1] ----- add AMR edge for name relation: 5/5 new triples (793, 0:00:00.018358)
+- DEBUG -  [P-1] ----- add AMR edge for quant relation: 0/0 new triple (793, 0:00:00.025163)
+- INFO -  [P-1] ----- add AMR edge for polarity relation: 5/5 new triples (798, 0:00:00.029763)
+- INFO -  [P-1] ----- update AMR edge role 1: 15/15 new triples (813, 0:00:00.067787)
+- INFO -  [P-1] ----- add AMR root: 5/5 new triples (818, 0:00:00.011561)
 - DEBUG -  [P-1] --- Serializing graph to tenet.tetras-libre.fr_demo_01_Preprocessing 
 - DEBUG -  [P-1] ----- step: Preprocessing
 - DEBUG -  [P-1] ----- id: https://tenet.tetras-libre.fr/demo/01/
@@ -103,40 +103,40 @@
 - INFO -  [P-1] ----- 218 triples extracted during Preprocessing step
 - INFO -  [P-1] -- Step 2: Transduction
 - INFO -  [P-1] --- Sequence: atomic extraction sequence
-- INFO -  [P-1] ----- extract atom classes: 30/30 new triples (848, 0:00:00.153564)
-- INFO -  [P-1] ----- extract atom individuals: 8/8 new triples (856, 0:00:00.048222)
-- INFO -  [P-1] ----- extract atomic properties: 75/75 new triples (931, 0:00:00.198808)
-- INFO -  [P-1] ----- extract atom values: 10/10 new triples (941, 0:00:00.048026)
-- INFO -  [P-1] ----- extract atom phenomena: 14/14 new triples (955, 0:00:00.071701)
-- INFO -  [P-1] ----- propagate atom relations: 24/68 new triples (979, 0:00:01.331220)
+- INFO -  [P-1] ----- extract atom classes: 30/30 new triples (848, 0:00:00.156714)
+- INFO -  [P-1] ----- extract atom individuals: 8/8 new triples (856, 0:00:00.049079)
+- INFO -  [P-1] ----- extract atomic properties: 75/75 new triples (931, 0:00:00.207583)
+- INFO -  [P-1] ----- extract atom values: 10/10 new triples (941, 0:00:00.056586)
+- INFO -  [P-1] ----- extract atom phenomena: 14/14 new triples (955, 0:00:00.063514)
+- INFO -  [P-1] ----- propagate atom relations: 24/68 new triples (979, 0:00:01.047294)
 - INFO -  [P-1] --- Sequence: classification sequence (1)
-- DEBUG -  [P-1] ----- classify modality phenomena: 0/0 new triple (979, 0:00:00.030817)
-- INFO -  [P-1] ----- reclassify argument property to class: 11/14 new triples (990, 0:00:00.089195)
+- DEBUG -  [P-1] ----- classify modality phenomena: 0/0 new triple (979, 0:00:00.020573)
+- INFO -  [P-1] ----- reclassify argument property to class: 11/14 new triples (990, 0:00:00.075570)
 - INFO -  [P-1] --- Sequence: phenomena analyze sequence (1)
-- INFO -  [P-1] ----- analyze "polarity" phenomena (1): 32/36 new triples (1022, 0:00:00.117582)
-- DEBUG -  [P-1] ----- analyze "polarity" phenomena (2): 0/0 new triple (1022, 0:00:00.018019)
-- DEBUG -  [P-1] ----- analyze "polarity" phenomena (3): 0/0 new triple (1022, 0:00:00.016401)
-- DEBUG -  [P-1] ----- analyze "polarity" phenomena (4): 0/0 new triple (1022, 0:00:00.035798)
-- DEBUG -  [P-1] ----- analyze "polarity" phenomena (5): 0/0 new triple (1022, 0:00:00.039828)
-- DEBUG -  [P-1] ----- analyze modifier phenomena (mod): 0/0 new triple (1022, 0:00:00.008696)
-- DEBUG -  [P-1] ----- classify modality phenomena: 0/0 new triple (1022, 0:00:00.019519)
+- INFO -  [P-1] ----- analyze "polarity" phenomena (1): 32/36 new triples (1022, 0:00:00.102451)
+- DEBUG -  [P-1] ----- analyze "polarity" phenomena (2): 0/0 new triple (1022, 0:00:00.016337)
+- DEBUG -  [P-1] ----- analyze "polarity" phenomena (3): 0/0 new triple (1022, 0:00:00.016750)
+- DEBUG -  [P-1] ----- analyze "polarity" phenomena (4): 0/0 new triple (1022, 0:00:00.038235)
+- DEBUG -  [P-1] ----- analyze "polarity" phenomena (5): 0/0 new triple (1022, 0:00:00.040128)
+- DEBUG -  [P-1] ----- analyze modifier phenomena (mod): 0/0 new triple (1022, 0:00:00.008334)
+- DEBUG -  [P-1] ----- classify modality phenomena: 0/0 new triple (1022, 0:00:00.019297)
 - INFO -  [P-1] --- Sequence: phenomena analyze sequence (2)
-- INFO -  [P-1] ----- analyze "or" phenomena (1): 1/1 new triple (1023, 0:00:00.071323)
-- INFO -  [P-1] ----- analyze "or" phenomena (2): 55/82 new triples (1078, 0:00:00.286773)
-- INFO -  [P-1] ----- analyze "and" phenomena (1): 2/14 new triples (1080, 0:00:00.281081)
-- DEBUG -  [P-1] ----- analyze "and" phenomena (2): 0/0 new triple (1080, 0:00:00.022078)
+- INFO -  [P-1] ----- analyze "or" phenomena (1): 1/1 new triple (1023, 0:00:00.076121)
+- INFO -  [P-1] ----- analyze "or" phenomena (2): 55/82 new triples (1078, 0:00:00.262627)
+- INFO -  [P-1] ----- analyze "and" phenomena (1): 2/14 new triples (1080, 0:00:00.151709)
+- DEBUG -  [P-1] ----- analyze "and" phenomena (2): 0/0 new triple (1080, 0:00:00.011420)
 - INFO -  [P-1] --- Sequence: composite class extraction sequence
-- INFO -  [P-1] ----- extract composite classes (1): 127/138 new triples (1207, 0:00:00.553363)
-- DEBUG -  [P-1] ----- extract composite classes (2): 0/0 new triple (1207, 0:00:00.029625)
+- INFO -  [P-1] ----- extract composite classes (1): 127/138 new triples (1207, 0:00:00.490171)
+- DEBUG -  [P-1] ----- extract composite classes (2): 0/0 new triple (1207, 0:00:00.032944)
 - INFO -  [P-1] --- Sequence: classification sequence (2)
-- INFO -  [P-1] ----- classify class net as entity from core arguments: 10/181 new triples (1217, 0:00:00.255023)
-- DEBUG -  [P-1] ----- classify class net as entity from :part relation: 0/0 new triple (1217, 0:00:00.009070)
-- DEBUG -  [P-1] ----- classify class net as entity from degree arguments: 0/0 new triple (1217, 0:00:00.018742)
-- INFO -  [P-1] ----- Associate mother to class net from :domain relation: 5/34 new triples (1222, 0:00:00.088250)
-- DEBUG -  [P-1] ----- Propagate individuals to net with same base node: 0/10 new triple (1222, 0:00:00.027594)
-- INFO -  [P-1] ----- Propagate individuals to net with domain link: 3/60 new triples (1225, 0:00:00.126402)
+- INFO -  [P-1] ----- classify class net as entity from core arguments: 10/181 new triples (1217, 0:00:00.255602)
+- DEBUG -  [P-1] ----- classify class net as entity from :part relation: 0/0 new triple (1217, 0:00:00.010647)
+- DEBUG -  [P-1] ----- classify class net as entity from degree arguments: 0/0 new triple (1217, 0:00:00.019184)
+- INFO -  [P-1] ----- Associate mother to class net from :domain relation: 5/34 new triples (1222, 0:00:00.084087)
+- DEBUG -  [P-1] ----- Propagate individuals to net with same base node: 0/10 new triple (1222, 0:00:00.028742)
+- INFO -  [P-1] ----- Propagate individuals to net with domain link: 3/60 new triples (1225, 0:00:00.107290)
 - INFO -  [P-1] --- Sequence: heuristic dedeuction sequence
-- INFO -  [P-1] ----- deduce individual and relation from restriction: 65/69 new triples (1290, 0:00:00.443904)
+- INFO -  [P-1] ----- deduce individual and relation from restriction: 65/69 new triples (1290, 0:00:00.356834)
 - DEBUG -  [P-1] --- Serializing graph to tenet.tetras-libre.fr_demo_01_Transduction 
 - DEBUG -  [P-1] ----- step: Transduction
 - DEBUG -  [P-1] ----- id: https://tenet.tetras-libre.fr/demo/01/
@@ -145,23 +145,24 @@
 - INFO -  [P-1] ----- 472 triples extracted during Transduction step
 - INFO -  [P-1] -- Step 3: Generation
 - INFO -  [P-1] --- Sequence: OWL Generation Sequence
-- INFO -  [P-1] ----- generate OWL class: 52/55 new triples (1342, 0:00:00.608542)
-- INFO -  [P-1] ----- generate OWL property: 29/29 new triples (1371, 0:00:00.280977)
-- INFO -  [P-1] ----- generate OWL individual: 20/21 new triples (1391, 0:00:00.240824)
+- INFO -  [P-1] ----- generate OWL class: 52/55 new triples (1342, 0:00:00.639166)
+- INFO -  [P-1] ----- generate OWL property: 29/29 new triples (1371, 0:00:00.294864)
+- INFO -  [P-1] ----- generate OWL individual: 20/21 new triples (1391, 0:00:00.214574)
+- INFO -  [P-1] ----- generate OWL relation (property): 3/3 new triples (1394, 0:00:00.101722)
 - DEBUG -  [P-1] --- Serializing graph to tenet.tetras-libre.fr_demo_01_Generation 
 - DEBUG -  [P-1] ----- step: Generation
 - DEBUG -  [P-1] ----- id: https://tenet.tetras-libre.fr/demo/01/
 - DEBUG -  [P-1] ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_Generation.ttl
 - DEBUG -  [P-1] ----- base: http://https://tenet.tetras-libre.fr/demo/01//Generation
-- INFO -  [P-1] ----- 101 triples extracted during Generation step
+- INFO -  [P-1] ----- 104 triples extracted during Generation step
 - DEBUG -  [P-1] --- Serializing graph to factoid file (/home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_factoid.ttl)
-- DEBUG -  [P-1] ----- Number of factoids: 105
+- DEBUG -  [P-1] ----- Number of factoids: 108
 - DEBUG -  [P-1] ----- Graph base: http://https://tenet.tetras-libre.fr/demo/01//factoid
-- INFO -  [P-1] Success (105 extracted triple(s))
+- INFO -  [P-1] Success (108 extracted triple(s))
 - INFO - 
  === Final Ontology Generation  === 
 - INFO - -- Making complete factoid graph by merging the result factoids
-- INFO - ----- Total factoid number: 105
+- INFO - ----- Total factoid number: 108
 - INFO - -- Serializing graph to factoid string
 - INFO - ----- Graph base: http://https://tenet.tetras-libre.fr/demo/01//factoid
 - INFO - -- Serializing graph to factoid file
diff --git a/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_Generation.ttl b/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_Generation.ttl
index f34fdb9a..fca371ed 100644
--- a/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_Generation.ttl
+++ b/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_Generation.ttl
@@ -1,6 +1,7 @@
 @prefix : <https://amr.tetras-libre.fr/rdf/schema#> .
 @prefix cprm: <https://tenet.tetras-libre.fr/config/parameters#> .
 @prefix net: <https://tenet.tetras-libre.fr/semantic-net#> .
+@prefix ns1: <https://tenet.tetras-libre.fr/extract-result#> .
 @prefix ns11: <http://amr.isi.edu/rdf/amr-terms#> .
 @prefix ns2: <http://amr.isi.edu/rdf/core-amr#> .
 @prefix ns3: <http://amr.isi.edu/frames/ld/v1.2.2/> .
@@ -420,44 +421,26 @@ cprm:targetOntologyURI a rdf:Property ;
     rdfs:range xsd:string ;
     rdfs:subPropertyOf cprm:configParamProperty .
 
-<https://tenet.tetras-libre.fr/extract-result#SolarSystem> a owl:Individual,
-        <https://tenet.tetras-libre.fr/extract-result#system>,
-        <https://tenet.tetras-libre.fr/extract-result#system-hasPart-object>,
-        <https://tenet.tetras-libre.fr/extract-result#system-hasPart-sun> ;
-    rdfs:label "SolarSystem" ;
-    sys:fromStructure "SSC-01-01" .
-
-<https://tenet.tetras-libre.fr/extract-result#direct> a owl:ObjectProperty ;
+ns1:direct a owl:ObjectProperty ;
     rdfs:label "direct" ;
     rdfs:subPropertyOf sys:Out_ObjectProperty ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#gravitation-SSC-01-01> a owl:Individual,
-        <https://tenet.tetras-libre.fr/extract-result#gravitation-bind-system> ;
+ns1:gravitation-SSC-01-01 a owl:Individual,
+        ns1:gravitation-bind-system ;
     rdfs:label "any gravitation" ;
-    sys:fromStructure "SSC-01-01" .
+    sys:fromStructure "SSC-01-01" ;
+    ns1:bind ns1:SolarSystem .
 
-<https://tenet.tetras-libre.fr/extract-result#hasManner> a owl:ObjectProperty ;
+ns1:hasManner a owl:ObjectProperty ;
     rdfs:label "hasManner" ;
     rdfs:subPropertyOf sys:Out_ObjectProperty ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#not-direct> a owl:ObjectProperty ;
+ns1:not-direct a owl:ObjectProperty ;
     rdfs:subPropertyOf sys:Out_ObjectProperty ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#object-SSC-01-01> a owl:Individual,
-        <https://tenet.tetras-libre.fr/extract-result#object>,
-        <https://tenet.tetras-libre.fr/extract-result#object-orbit-hasManner-direct-sun>,
-        <https://tenet.tetras-libre.fr/extract-result#object-orbit-hasManner-not-direct-sun> ;
-    rdfs:label "any object" ;
-    sys:fromStructure "SSC-01-01" .
-
-<https://tenet.tetras-libre.fr/extract-result#sun-SSC-01-01> a owl:Individual,
-        <https://tenet.tetras-libre.fr/extract-result#sun> ;
-    rdfs:label "any sun" ;
-    sys:fromStructure "SSC-01-01" .
-
 <https://tenet.tetras-libre.fr/semantic-net> a owl:Ontology .
 
 net:Logical_Set_Net a owl:Class ;
@@ -834,57 +817,78 @@ sys:Out_AnnotationProperty a owl:AnnotationProperty .
 sys:Undetermined_Thing a owl:Class ;
     rdfs:subClassOf sys:Out_Structure .
 
-<https://tenet.tetras-libre.fr/extract-result#bind> a owl:ObjectProperty ;
+ns1:SolarSystem a owl:Individual,
+        ns1:system,
+        ns1:system-hasPart-object,
+        ns1:system-hasPart-sun ;
+    rdfs:label "SolarSystem" ;
+    sys:fromStructure "SSC-01-01" ;
+    ns1:hasPart ns1:object-SSC-01-01,
+        ns1:sun-SSC-01-01 .
+
+ns1:bind a owl:ObjectProperty ;
     rdfs:label "bind" ;
     rdfs:subPropertyOf sys:Out_ObjectProperty ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#gravitation> a owl:Class ;
+ns1:gravitation a owl:Class ;
     rdfs:label "gravitation" ;
     rdfs:subClassOf sys:Entity ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#gravitation-bind-system> a owl:Class ;
+ns1:gravitation-bind-system a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#bind> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#system> ],
-        <https://tenet.tetras-libre.fr/extract-result#gravitation> ;
+            owl:onProperty ns1:bind ;
+            owl:someValuesFrom ns1:system ],
+        ns1:gravitation ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#object-orbit-hasManner-direct-sun> a owl:Class ;
+ns1:object-SSC-01-01 a owl:Individual,
+        ns1:object,
+        ns1:object-orbit-hasManner-direct-sun,
+        ns1:object-orbit-hasManner-not-direct-sun ;
+    rdfs:label "any object" ;
+    sys:fromStructure "SSC-01-01" .
+
+ns1:object-orbit-hasManner-direct-sun a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#orbit-hasManner-direct> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#sun> ],
-        <https://tenet.tetras-libre.fr/extract-result#object> ;
+            owl:onProperty ns1:orbit-hasManner-direct ;
+            owl:someValuesFrom ns1:sun ],
+        ns1:object ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#object-orbit-hasManner-not-direct-sun> a owl:Class ;
+ns1:object-orbit-hasManner-not-direct-sun a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#orbit-hasManner-not-direct> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#sun> ],
-        <https://tenet.tetras-libre.fr/extract-result#object> ;
+            owl:onProperty ns1:orbit-hasManner-not-direct ;
+            owl:someValuesFrom ns1:sun ],
+        ns1:object ;
+    sys:fromStructure "SSC-01-01" .
+
+ns1:orbit-hasManner-direct a owl:ObjectProperty ;
+    rdfs:subPropertyOf ns1:orbit ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#orbit-hasManner-direct> a owl:ObjectProperty ;
-    rdfs:subPropertyOf <https://tenet.tetras-libre.fr/extract-result#orbit> ;
+ns1:orbit-hasManner-not-direct a owl:ObjectProperty ;
+    rdfs:subPropertyOf ns1:orbit ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#orbit-hasManner-not-direct> a owl:ObjectProperty ;
-    rdfs:subPropertyOf <https://tenet.tetras-libre.fr/extract-result#orbit> ;
+ns1:sun-SSC-01-01 a owl:Individual,
+        ns1:sun ;
+    rdfs:label "any sun" ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#system-hasPart-object> a owl:Class ;
+ns1:system-hasPart-object a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#hasPart> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#object> ],
-        <https://tenet.tetras-libre.fr/extract-result#system> ;
+            owl:onProperty ns1:hasPart ;
+            owl:someValuesFrom ns1:object ],
+        ns1:system ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#system-hasPart-sun> a owl:Class ;
+ns1:system-hasPart-sun a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#hasPart> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#sun> ],
-        <https://tenet.tetras-libre.fr/extract-result#system> ;
+            owl:onProperty ns1:hasPart ;
+            owl:someValuesFrom ns1:sun ],
+        ns1:system ;
     sys:fromStructure "SSC-01-01" .
 
 net:Feature a owl:Class ;
@@ -1208,12 +1212,12 @@ ns2:or a ns2:Concept ;
 :value_SolarSystem a :AMR_Value ;
     rdfs:label "SolarSystem" .
 
-<https://tenet.tetras-libre.fr/extract-result#hasPart> a owl:ObjectProperty ;
+ns1:hasPart a owl:ObjectProperty ;
     rdfs:label "hasPart" ;
     rdfs:subPropertyOf sys:Out_ObjectProperty ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#orbit> a owl:ObjectProperty ;
+ns1:orbit a owl:ObjectProperty ;
     rdfs:label "orbit" ;
     rdfs:subPropertyOf sys:Out_ObjectProperty ;
     sys:fromStructure "SSC-01-01" .
@@ -1413,17 +1417,17 @@ ns3:FrameRole a ns2:Role,
     rdfs:subClassOf :AMR_Core_Role ;
     :label "ARG1" .
 
-<https://tenet.tetras-libre.fr/extract-result#object> a owl:Class ;
+ns1:object a owl:Class ;
     rdfs:label "object" ;
     rdfs:subClassOf sys:Entity ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#sun> a owl:Class ;
+ns1:sun a owl:Class ;
     rdfs:label "sun" ;
     rdfs:subClassOf sys:Entity ;
     sys:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#system> a owl:Class ;
+ns1:system a owl:Class ;
     rdfs:label "system" ;
     rdfs:subClassOf sys:Entity,
         sys:Undetermined_Thing ;
diff --git a/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_factoid.ttl b/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_factoid.ttl
index 0de660a6..92c96354 100644
--- a/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_factoid.ttl
+++ b/tests/main_tests/test_owl_output/SolarSystemDev01-20230908/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_factoid.ttl
@@ -1,119 +1,123 @@
 @prefix ns1: <https://tenet.tetras-libre.fr/base-ontology#> .
+@prefix ns2: <https://tenet.tetras-libre.fr/extract-result#> .
 @prefix owl: <http://www.w3.org/2002/07/owl#> .
 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
 
-<https://tenet.tetras-libre.fr/extract-result#SolarSystem> a owl:Individual,
-        <https://tenet.tetras-libre.fr/extract-result#system>,
-        <https://tenet.tetras-libre.fr/extract-result#system-hasPart-object>,
-        <https://tenet.tetras-libre.fr/extract-result#system-hasPart-sun> ;
-    rdfs:label "SolarSystem" ;
-    ns1:fromStructure "SSC-01-01" .
-
-<https://tenet.tetras-libre.fr/extract-result#direct> a owl:ObjectProperty ;
+ns2:direct a owl:ObjectProperty ;
     rdfs:label "direct" ;
     rdfs:subPropertyOf ns1:Out_ObjectProperty ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#gravitation-SSC-01-01> a owl:Individual,
-        <https://tenet.tetras-libre.fr/extract-result#gravitation-bind-system> ;
+ns2:gravitation-SSC-01-01 a owl:Individual,
+        ns2:gravitation-bind-system ;
     rdfs:label "any gravitation" ;
-    ns1:fromStructure "SSC-01-01" .
+    ns1:fromStructure "SSC-01-01" ;
+    ns2:bind ns2:SolarSystem .
 
-<https://tenet.tetras-libre.fr/extract-result#hasManner> a owl:ObjectProperty ;
+ns2:hasManner a owl:ObjectProperty ;
     rdfs:label "hasManner" ;
     rdfs:subPropertyOf ns1:Out_ObjectProperty ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#not-direct> a owl:ObjectProperty ;
+ns2:not-direct a owl:ObjectProperty ;
     rdfs:subPropertyOf ns1:Out_ObjectProperty ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#object-SSC-01-01> a owl:Individual,
-        <https://tenet.tetras-libre.fr/extract-result#object>,
-        <https://tenet.tetras-libre.fr/extract-result#object-orbit-hasManner-direct-sun>,
-        <https://tenet.tetras-libre.fr/extract-result#object-orbit-hasManner-not-direct-sun> ;
-    rdfs:label "any object" ;
-    ns1:fromStructure "SSC-01-01" .
-
-<https://tenet.tetras-libre.fr/extract-result#sun-SSC-01-01> a owl:Individual,
-        <https://tenet.tetras-libre.fr/extract-result#sun> ;
-    rdfs:label "any sun" ;
-    ns1:fromStructure "SSC-01-01" .
+ns2:SolarSystem a owl:Individual,
+        ns2:system,
+        ns2:system-hasPart-object,
+        ns2:system-hasPart-sun ;
+    rdfs:label "SolarSystem" ;
+    ns1:fromStructure "SSC-01-01" ;
+    ns2:hasPart ns2:object-SSC-01-01,
+        ns2:sun-SSC-01-01 .
 
-<https://tenet.tetras-libre.fr/extract-result#bind> a owl:ObjectProperty ;
+ns2:bind a owl:ObjectProperty ;
     rdfs:label "bind" ;
     rdfs:subPropertyOf ns1:Out_ObjectProperty ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#gravitation> a owl:Class ;
+ns2:gravitation a owl:Class ;
     rdfs:label "gravitation" ;
     rdfs:subClassOf ns1:Entity ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#gravitation-bind-system> a owl:Class ;
+ns2:gravitation-bind-system a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#bind> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#system> ],
-        <https://tenet.tetras-libre.fr/extract-result#gravitation> ;
+            owl:onProperty ns2:bind ;
+            owl:someValuesFrom ns2:system ],
+        ns2:gravitation ;
+    ns1:fromStructure "SSC-01-01" .
+
+ns2:object-SSC-01-01 a owl:Individual,
+        ns2:object,
+        ns2:object-orbit-hasManner-direct-sun,
+        ns2:object-orbit-hasManner-not-direct-sun ;
+    rdfs:label "any object" ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#object-orbit-hasManner-direct-sun> a owl:Class ;
+ns2:object-orbit-hasManner-direct-sun a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#orbit-hasManner-direct> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#sun> ],
-        <https://tenet.tetras-libre.fr/extract-result#object> ;
+            owl:onProperty ns2:orbit-hasManner-direct ;
+            owl:someValuesFrom ns2:sun ],
+        ns2:object ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#object-orbit-hasManner-not-direct-sun> a owl:Class ;
+ns2:object-orbit-hasManner-not-direct-sun a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#orbit-hasManner-not-direct> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#sun> ],
-        <https://tenet.tetras-libre.fr/extract-result#object> ;
+            owl:onProperty ns2:orbit-hasManner-not-direct ;
+            owl:someValuesFrom ns2:sun ],
+        ns2:object ;
+    ns1:fromStructure "SSC-01-01" .
+
+ns2:orbit-hasManner-direct a owl:ObjectProperty ;
+    rdfs:subPropertyOf ns2:orbit ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#orbit-hasManner-direct> a owl:ObjectProperty ;
-    rdfs:subPropertyOf <https://tenet.tetras-libre.fr/extract-result#orbit> ;
+ns2:orbit-hasManner-not-direct a owl:ObjectProperty ;
+    rdfs:subPropertyOf ns2:orbit ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#orbit-hasManner-not-direct> a owl:ObjectProperty ;
-    rdfs:subPropertyOf <https://tenet.tetras-libre.fr/extract-result#orbit> ;
+ns2:sun-SSC-01-01 a owl:Individual,
+        ns2:sun ;
+    rdfs:label "any sun" ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#system-hasPart-object> a owl:Class ;
+ns2:system-hasPart-object a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#hasPart> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#object> ],
-        <https://tenet.tetras-libre.fr/extract-result#system> ;
+            owl:onProperty ns2:hasPart ;
+            owl:someValuesFrom ns2:object ],
+        ns2:system ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#system-hasPart-sun> a owl:Class ;
+ns2:system-hasPart-sun a owl:Class ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:onProperty <https://tenet.tetras-libre.fr/extract-result#hasPart> ;
-            owl:someValuesFrom <https://tenet.tetras-libre.fr/extract-result#sun> ],
-        <https://tenet.tetras-libre.fr/extract-result#system> ;
+            owl:onProperty ns2:hasPart ;
+            owl:someValuesFrom ns2:sun ],
+        ns2:system ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#hasPart> a owl:ObjectProperty ;
+ns2:hasPart a owl:ObjectProperty ;
     rdfs:label "hasPart" ;
     rdfs:subPropertyOf ns1:Out_ObjectProperty ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#orbit> a owl:ObjectProperty ;
+ns2:orbit a owl:ObjectProperty ;
     rdfs:label "orbit" ;
     rdfs:subPropertyOf ns1:Out_ObjectProperty ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#object> a owl:Class ;
+ns2:object a owl:Class ;
     rdfs:label "object" ;
     rdfs:subClassOf ns1:Entity ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#sun> a owl:Class ;
+ns2:sun a owl:Class ;
     rdfs:label "sun" ;
     rdfs:subClassOf ns1:Entity ;
     ns1:fromStructure "SSC-01-01" .
 
-<https://tenet.tetras-libre.fr/extract-result#system> a owl:Class ;
+ns2:system a owl:Class ;
     rdfs:label "system" ;
     rdfs:subClassOf ns1:Entity,
         ns1:Undetermined_Thing ;
-- 
GitLab