diff --git a/tenet/scheme/amr_master_rule/__init__.py b/tenet/scheme/amr_master_rule/__init__.py index b3b7be63a1f620598f1cc244163bb20336aa2165..ea60803b0ed2fc339495a837099f13d2d8465161 100644 --- a/tenet/scheme/amr_master_rule/__init__.py +++ b/tenet/scheme/amr_master_rule/__init__.py @@ -32,6 +32,7 @@ from scheme.amr_master_rule.transduction.phenomena_analyzer.and_analyzer_2 impor from scheme.amr_master_rule.owl_generation.owl_property_generator import * from scheme.amr_master_rule.owl_generation.owl_class_generator import * +from scheme.amr_master_rule.owl_generation.owl_individual_generator import * from scheme.amr_master_rule import * diff --git a/tenet/scheme/amr_master_rule/owl_generation/owl_individual_generator.py b/tenet/scheme/amr_master_rule/owl_generation/owl_individual_generator.py new file mode 100644 index 0000000000000000000000000000000000000000..c70c6f925f764959b107a64b08462c4e1bd0ef24 --- /dev/null +++ b/tenet/scheme/amr_master_rule/owl_generation/owl_individual_generator.py @@ -0,0 +1,212 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Rule to generate OWL individual +#------------------------------------------------------------------------------ +# Generative rule to build OWL individuals +# Rule: individualNet => OWL individual +#============================================================================== + +import rdflib +from rdflib import Graph, Namespace, BNode +from rdflib.namespace import FOAF, RDF, RDFS, OWL + +import transduction +from transduction import net +from transduction.rdfterm_computer import ( produce_uriref, produce_literal ) + +from transduction.query_builder import ( + generate_select_query, + generate_ask_query +) + +DEFAULT_CLASS_TYPE = 'base-out:Undetermined_Thing' + + +#============================================================================== +# Method(s) to search for patterns: Individual Net +#============================================================================== + +def __search_pattern(graph): + + # SPARQL query construction + select_data_list = ['?individual_net'] + clause_list = [(f'?individual_net a net:Individual_Net.')] + query_code = generate_select_query(graph, select_data_list, clause_list) + + # SPARQL query execution + rule_pattern_set = graph.query(query_code) + + # Result (pattern set) + return query_code, rule_pattern_set + + + +#============================================================================== +# Methods to ask about net (using SPARQL ASK query) +#============================================================================== + +# def is_class_net(graph, net_uri): + +# # SPARQL query construction +# clause_list = ['?classUri a [rdfs:subClassOf* net:Class_Net].'] +# query_code = generate_ask_query(graph, clause_list) + +# # SPARQL query execution +# result = graph.query(query_code, initBindings={'classUri': net_uri}) + +# # Result (True or False) +# return query_code, bool(result) + + +# def is_individual_net(graph, net_uri): + +# # SPARQL query construction +# clause_list = ['?classUri a [rdfs:subClassOf* net:Individual_Net].'] +# query_code = generate_ask_query(graph, clause_list) + +# # SPARQL query execution +# result = graph.query(query_code, initBindings={'classUri': net_uri}) + +# # Result (True or False) +# return query_code, bool(result) + + + +#============================================================================== +# Check Method(s) +#============================================================================== + +def __is_class_to_generate(class_net): + check_1 = class_net.is_deprecated() + if is_instance(class_net.mother_class_net, list): + check_2 = len(class_net.mother_class_net) > 0 + else: + check_2 = False + return not check_1 or check_2 + + + +#============================================================================== +# Generator Methods +#============================================================================== + +# -- Base Methods to compute URI +# ------------------------------------------ + +def __compute_individual_uri(individual_net): + 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 __get_mother_class_uri(graph, mother_class_net_uri): + mother_class_net = net.ClassNet(graph, uri=mother_class_net_uri) + return __compute_class_uri(mother_class_net) + + +def __compute_class_type_uri(class_net): + if isinstance(class_net.class_type, list) and len(class_net.class_type) > 0: + class_type = class_net.class_type[0] + else: # default class_type + class_type = f'{DEFAULT_CLASS_TYPE}' + return produce_uriref(class_net.support_graph, class_type) + + +def __compute_property_uri(property_net): + if isinstance(property_net.property_uri, list) and len(property_net.property_uri) > 0: + property_uri = property_net.property_uri[0] + else: # computation of class_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 +# -------------------------------- + +def __define_triple(subject_uri, relation, data): + triple_list = [] + for predicat in data: + triple_list.append((subject_uri, relation, predicat)) + return triple_list + + + +# -- Methods to generate OWL triple +# ----------------------------------- + +def __generate_owl_taxonomic_relation(graph, new_individual_uri, net): + + triple_list = [] + relation = produce_uriref(graph, 'rdfs:subClassOf') + predicat = None + + if net.type_id == 'Atom_Class_Net': + predicat = __compute_class_type_uri(net) + + if net.type_id == 'Composite_Class_Net': + mother_class_net_uri = net.get_attribute_first_value(net.mother_class_net) + if mother_class_net_uri is None: + predicat = __compute_class_type_uri(net) + else : + predicat = __get_mother_class_uri(graph, mother_class_net_uri) + + if predicat is not None: + triple_list.append((new_individual_uri, relation, predicat)) + + return triple_list + + + +# -- Main Generation Methods +# -------------------------------- + +def __generate_owl_triple_definition(graph, net): + + triple_list = [] + + new_individual_uri = __compute_individual_uri(net) + + rdf_type_uri = produce_uriref(graph, RDF.type) + individual_type_list = [produce_uriref(graph, 'owl:Individual')] + triple_list += __define_triple(new_individual_uri, rdf_type_uri, individual_type_list) + + relation = produce_uriref(graph, 'rdfs:label') + triple_list += __define_triple(new_individual_uri, relation, net.individual_label) + + relation = produce_uriref(graph, 'base-out:fromStructure') + triple_list += __define_triple(new_individual_uri, relation, net.structure) + + # triple_list += __generate_owl_taxonomic_relation(graph, new_individual_uri, net) + + return triple_list + + + +#============================================================================== +# Main Method: generate_owl_individual +#============================================================================== + +def generate_owl_individual(graph): + + # -- Rule Initialization + rule_label = 'generate OWL individual' + rule_triple_list = [] + + # -- Search for patterns + _, pattern_set = __search_pattern(graph) + + # -- OWL Generation + for pattern in pattern_set: + individual_net = net.IndividualNet(graph, uri=pattern.individual_net) + if not individual_net.is_deprecated(): + triple_list = __generate_owl_triple_definition(graph, individual_net) + rule_triple_list += triple_list + + return rule_label, rule_triple_list \ No newline at end of file diff --git a/tenet/scheme/owl_amr_scheme_1.py b/tenet/scheme/owl_amr_scheme_1.py index bb965b83e04c5abd1e25ad16bebda6d2fd43994c..ddc5d7ef08fa88287af35b7765f3385bccb31305 100644 --- a/tenet/scheme/owl_amr_scheme_1.py +++ b/tenet/scheme/owl_amr_scheme_1.py @@ -167,7 +167,7 @@ property_generation_sequence = ['property_generation_sequence', owl_generation_sequence = ['OWL Generation Sequence', rule.generate_owl_class, rule.generate_owl_property, - # rule.generate_owl_individual + rule.generate_owl_individual ] diff --git a/tenet/tenet.log b/tenet/tenet.log index 48e850eea0cef12b809741ca42825a32d11a8494..1ccd3900f50570900faa124655cdc189fd98a4e9 100644 --- a/tenet/tenet.log +++ b/tenet/tenet.log @@ -74,25 +74,25 @@ - DEBUG - ----- Total rule number: 87 - INFO - -- Step 1: Preprocessing - INFO - --- *** November Transduction *** Sequence: amrld-correcting-sequence -- INFO - ----- fix-amr-bug-about-system-solar-planet: 5/5 new triples (603, 0:00:00.027404) +- INFO - ----- fix-amr-bug-about-system-solar-planet: 5/5 new triples (603, 0:00:00.023569) - INFO - --- *** November Transduction *** Sequence: amr-reification-sequence -- INFO - ----- reclassify-concept-1: 10/10 new triples (613, 0:00:00.130204) -- DEBUG - ----- reclassify-concept-2: 0/0 new triple (613, 0:00:00.050778) -- INFO - ----- reclassify-concept-3: 12/12 new triples (625, 0:00:00.039706) -- INFO - ----- reclassify-concept-4: 16/16 new triples (641, 0:00:00.050183) -- INFO - ----- reclassify-concept-5: 2/4 new triples (643, 0:00:00.054968) -- INFO - ----- reify-roles-as-concept: 10/10 new triples (653, 0:00:00.049645) -- INFO - ----- reclassify-existing-variable: 45/45 new triples (698, 0:00:00.035618) -- INFO - ----- add-new-variable-for-reified-concept: 8/8 new triples (706, 0:00:00.052706) -- INFO - ----- add-amr-leaf-for-reclassified-concept: 33/33 new triples (739, 0:00:00.058790) -- INFO - ----- add-amr-leaf-for-reified-concept: 8/8 new triples (747, 0:00:00.030476) -- INFO - ----- add-amr-edge-for-core-relation: 27/27 new triples (774, 0:00:00.130285) -- INFO - ----- add-amr-edge-for-reified-concept: 12/12 new triples (786, 0:00:00.137288) -- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (791, 0:00:00.071310) -- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (791, 0:00:00.063266) -- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (796, 0:00:00.079597) -- INFO - ----- update-amr-edge-role-1: 15/15 new triples (811, 0:00:00.105109) -- INFO - ----- add-amr-root: 5/5 new triples (816, 0:00:00.022981) +- INFO - ----- reclassify-concept-1: 10/10 new triples (613, 0:00:00.164398) +- DEBUG - ----- reclassify-concept-2: 0/0 new triple (613, 0:00:00.059258) +- INFO - ----- reclassify-concept-3: 12/12 new triples (625, 0:00:00.050978) +- INFO - ----- reclassify-concept-4: 16/16 new triples (641, 0:00:00.061934) +- INFO - ----- reclassify-concept-5: 2/4 new triples (643, 0:00:00.046937) +- INFO - ----- reify-roles-as-concept: 10/10 new triples (653, 0:00:00.047763) +- INFO - ----- reclassify-existing-variable: 45/45 new triples (698, 0:00:00.031789) +- INFO - ----- add-new-variable-for-reified-concept: 8/8 new triples (706, 0:00:00.135965) +- INFO - ----- add-amr-leaf-for-reclassified-concept: 33/33 new triples (739, 0:00:00.042462) +- INFO - ----- add-amr-leaf-for-reified-concept: 8/8 new triples (747, 0:00:00.031325) +- INFO - ----- add-amr-edge-for-core-relation: 27/27 new triples (774, 0:00:00.105796) +- INFO - ----- add-amr-edge-for-reified-concept: 12/12 new triples (786, 0:00:00.218771) +- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (791, 0:00:00.095556) +- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (791, 0:00:00.068129) +- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (796, 0:00:00.063883) +- INFO - ----- update-amr-edge-role-1: 15/15 new triples (811, 0:00:00.074084) +- INFO - ----- add-amr-root: 5/5 new triples (816, 0:00:00.021905) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_Preprocessing - DEBUG - ----- step: Preprocessing - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ @@ -101,38 +101,38 @@ - INFO - ----- 218 triples extracted during Preprocessing step - INFO - -- Step 2: Transduction - INFO - --- Sequence: atomic extraction sequence -- INFO - ----- extract atom classes: 30/30 new triples (846, 0:00:00.168814) -- INFO - ----- extract atom individuals: 8/8 new triples (854, 0:00:00.048612) -- INFO - ----- extract atomic properties: 75/75 new triples (929, 0:00:00.217111) -- INFO - ----- extract atom values: 10/10 new triples (939, 0:00:00.058854) -- INFO - ----- extract atom phenomena: 14/14 new triples (953, 0:00:00.075223) -- INFO - ----- propagate atom relations: 24/68 new triples (977, 0:00:01.085414) +- INFO - ----- extract atom classes: 30/30 new triples (846, 0:00:00.123152) +- INFO - ----- extract atom individuals: 8/8 new triples (854, 0:00:00.038250) +- INFO - ----- extract atomic properties: 75/75 new triples (929, 0:00:00.200987) +- INFO - ----- extract atom values: 10/10 new triples (939, 0:00:00.042566) +- INFO - ----- extract atom phenomena: 14/14 new triples (953, 0:00:00.054644) +- INFO - ----- propagate atom relations: 24/68 new triples (977, 0:00:01.060328) - INFO - --- Sequence: classification sequence (1) -- DEBUG - ----- classify modality phenomena: 0/0 new triple (977, 0:00:00.022418) -- INFO - ----- reclassify argument property to class: 11/14 new triples (988, 0:00:00.068087) +- DEBUG - ----- classify modality phenomena: 0/0 new triple (977, 0:00:00.018022) +- INFO - ----- reclassify argument property to class: 11/14 new triples (988, 0:00:00.070267) - INFO - --- Sequence: phenomena analyze sequence (1) -- INFO - ----- analyze "polarity" phenomena (1): 32/36 new triples (1020, 0:00:00.094644) -- DEBUG - ----- analyze "polarity" phenomena (2): 0/0 new triple (1020, 0:00:00.016775) -- DEBUG - ----- analyze "polarity" phenomena (3): 0/0 new triple (1020, 0:00:00.013501) -- DEBUG - ----- analyze "polarity" phenomena (4): 0/0 new triple (1020, 0:00:00.028878) -- DEBUG - ----- analyze "polarity" phenomena (5): 0/0 new triple (1020, 0:00:00.030895) -- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (1020, 0:00:00.012143) -- DEBUG - ----- classify modality phenomena: 0/0 new triple (1020, 0:00:00.018754) +- INFO - ----- analyze "polarity" phenomena (1): 32/36 new triples (1020, 0:00:00.112682) +- DEBUG - ----- analyze "polarity" phenomena (2): 0/0 new triple (1020, 0:00:00.017356) +- DEBUG - ----- analyze "polarity" phenomena (3): 0/0 new triple (1020, 0:00:00.012094) +- DEBUG - ----- analyze "polarity" phenomena (4): 0/0 new triple (1020, 0:00:00.042035) +- DEBUG - ----- analyze "polarity" phenomena (5): 0/0 new triple (1020, 0:00:00.037639) +- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (1020, 0:00:00.009140) +- DEBUG - ----- classify modality phenomena: 0/0 new triple (1020, 0:00:00.018461) - INFO - --- Sequence: phenomena analyze sequence (2) -- INFO - ----- analyze "or" phenomena (1): 1/1 new triple (1021, 0:00:00.068259) -- INFO - ----- analyze "or" phenomena (2): 55/82 new triples (1076, 0:00:00.265417) -- INFO - ----- analyze "and" phenomena (1): 2/14 new triples (1078, 0:00:00.154309) -- DEBUG - ----- analyze "and" phenomena (2): 0/0 new triple (1078, 0:00:00.009720) +- INFO - ----- analyze "or" phenomena (1): 1/1 new triple (1021, 0:00:00.076282) +- INFO - ----- analyze "or" phenomena (2): 55/82 new triples (1076, 0:00:00.275210) +- INFO - ----- analyze "and" phenomena (1): 2/14 new triples (1078, 0:00:00.151296) +- DEBUG - ----- analyze "and" phenomena (2): 0/0 new triple (1078, 0:00:00.010309) - INFO - --- Sequence: composite class extraction sequence -- INFO - ----- extract composite classes (1): 127/138 new triples (1205, 0:00:00.483677) -- DEBUG - ----- extract composite classes (2): 0/0 new triple (1205, 0:00:00.031429) +- INFO - ----- extract composite classes (1): 127/138 new triples (1205, 0:00:00.545576) +- DEBUG - ----- extract composite classes (2): 0/0 new triple (1205, 0:00:00.106067) - INFO - --- Sequence: classification sequence (2) -- INFO - ----- classify class net as entity from core arguments: 10/181 new triples (1215, 0:00:00.266924) -- DEBUG - ----- classify class net as entity from :part relation: 0/0 new triple (1215, 0:00:00.009020) -- DEBUG - ----- classify class net as entity from degree arguments: 0/0 new triple (1215, 0:00:00.016216) -- INFO - ----- Associate mother to class net from :domain relation: 5/34 new triples (1220, 0:00:00.082572) -- DEBUG - ----- Propagate individuals to net with same base node: 0/10 new triple (1220, 0:00:00.025169) -- INFO - ----- Propagate individuals to net with domain link: 3/60 new triples (1223, 0:00:00.110614) +- INFO - ----- classify class net as entity from core arguments: 10/181 new triples (1215, 0:00:00.254621) +- DEBUG - ----- classify class net as entity from :part relation: 0/0 new triple (1215, 0:00:00.008901) +- DEBUG - ----- classify class net as entity from degree arguments: 0/0 new triple (1215, 0:00:00.015969) +- INFO - ----- Associate mother to class net from :domain relation: 5/34 new triples (1220, 0:00:00.084291) +- DEBUG - ----- Propagate individuals to net with same base node: 0/10 new triple (1220, 0:00:00.027996) +- INFO - ----- Propagate individuals to net with domain link: 3/60 new triples (1223, 0:00:00.106732) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_Transduction - DEBUG - ----- step: Transduction - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ @@ -141,31 +141,32 @@ - INFO - ----- 407 triples extracted during Transduction step - INFO - -- Step 3: Generation - INFO - --- Sequence: OWL Generation Sequence -- INFO - ----- generate OWL class: 52/55 new triples (1275, 0:00:00.550302) -- INFO - ----- generate OWL property: 29/29 new triples (1304, 0:00:00.278730) +- INFO - ----- generate OWL class: 52/55 new triples (1275, 0:00:00.588744) +- INFO - ----- generate OWL property: 29/29 new triples (1304, 0:00:00.269818) +- INFO - ----- generate OWL individual: 3/3 new triples (1307, 0:00:00.031770) - INFO - --- *** November Transduction *** Sequence: main-generation-sequence -- DEBUG - ----- generate-individual: 0/0 new triple (1304, 0:00:00.012292) -- DEBUG - ----- classify-individual-1: 0/0 new triple (1304, 0:00:00.008140) -- DEBUG - ----- classify-individual-2: 0/0 new triple (1304, 0:00:00.009686) -- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1304, 0:00:00.024252) -- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1304, 0:00:00.013201) -- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1304, 0:00:00.017938) -- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1304, 0:00:00.012958) -- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1304, 0:00:00.015493) -- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1304, 0:00:00.012323) +- DEBUG - ----- generate-individual: 0/0 new triple (1307, 0:00:00.010240) +- DEBUG - ----- classify-individual-1: 0/0 new triple (1307, 0:00:00.006150) +- DEBUG - ----- classify-individual-2: 0/0 new triple (1307, 0:00:00.008375) +- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1307, 0:00:00.018460) +- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1307, 0:00:00.016711) +- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1307, 0:00:00.016519) +- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1307, 0:00:00.014249) +- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1307, 0:00:00.014758) +- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1307, 0:00:00.015363) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_Generation - DEBUG - ----- step: Generation - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ - DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_Generation.ttl - DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/01//Generation -- INFO - ----- 81 triples extracted during Generation step +- INFO - ----- 84 triples extracted during Generation step - DEBUG - --- Serializing graph to factoid file (/home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_factoid.ttl) -- DEBUG - ----- Number of factoids: 84 +- DEBUG - ----- Number of factoids: 87 - DEBUG - ----- Graph base: http://https://tenet.tetras-libre.fr/demo/01//factoid - INFO - === Final Ontology Generation === - INFO - -- Making complete factoid graph by merging the result factoids -- INFO - ----- Total factoid number: 84 +- INFO - ----- Total factoid number: 87 - INFO - -- Serializing graph to factoid string - INFO - ----- Graph base: http://https://tenet.tetras-libre.fr/demo/01//factoid - INFO - -- Serializing graph to factoid file @@ -175,6 +176,6 @@ - INFO - *** Execution Time *** ----- Function: create_ontology_from_amrld_dir (tenet.main) ------ Total Time: 0:00:06.155432 ------ Process Time: 0:00:06.124055 +----- Total Time: 0:00:06.328614 +----- Process Time: 0:00:06.289077 *** - *** diff --git a/tests/dev_owl_rule_tests/test_data/devGraph-classes-to-generate-1.result.ttl b/tests/dev_owl_rule_tests/test_data/devGraph-classes-to-generate-1.result.ttl index 106b96c5ecfe3e1e6d62029c8ecdd313f655ba0a..c608f21d3b6f18792d39616452a4a377237c20e2 100644 --- a/tests/dev_owl_rule_tests/test_data/devGraph-classes-to-generate-1.result.ttl +++ b/tests/dev_owl_rule_tests/test_data/devGraph-classes-to-generate-1.result.ttl @@ -374,6 +374,9 @@ ns2:root a owl:AnnotationProperty . sys:Event a owl:Class ; rdfs:subClassOf sys:Out_Structure . +sys:Undetermined_Thing a owl:Class ; + rdfs:subClassOf sys:Out_Structure . + sys:fromStructure a owl:AnnotationProperty ; rdfs:subPropertyOf sys:Out_AnnotationProperty . @@ -423,29 +426,8 @@ cprm:targetOntologyURI a rdf:Property ; rdfs:range xsd:string ; rdfs:subPropertyOf cprm:configParamProperty . -ext-out:gravitation-bind-system a owl:Class ; - rdfs:subClassOf ext-out:gravitation ; - sys:fromStructure "SSC-01-01" . - -ext-out:object-orbit-hasManner-direct-sun a owl:Class ; - rdfs:subClassOf ext-out:object ; - sys:fromStructure "SSC-01-01" . - -ext-out:object-orbit-hasManner-not-direct-sun a owl:Class ; - rdfs:subClassOf ext-out:object ; - sys:fromStructure "SSC-01-01" . - -ext-out:sun a owl:Class ; - rdfs:label "sun" ; - rdfs:subClassOf sys:Undetermined_Thing ; - sys:fromStructure "SSC-01-01" . - -ext-out:system-hasPart-object a owl:Class ; - rdfs:subClassOf ext-out:system ; - sys:fromStructure "SSC-01-01" . - -ext-out:system-hasPart-sun a owl:Class ; - rdfs:subClassOf ext-out:system ; +ext-out:SolarSystem a owl:Individual ; + rdfs:label "Solar System" ; sys:fromStructure "SSC-01-01" . <https://tenet.tetras-libre.fr/semantic-net> a owl:Ontology . @@ -855,11 +837,6 @@ sys:Feature a owl:Class ; sys:Out_AnnotationProperty a owl:AnnotationProperty . -ext-out:gravitation a owl:Class ; - rdfs:label "gravitation" ; - rdfs:subClassOf sys:Undetermined_Thing ; - sys:fromStructure "SSC-01-01" . - net:Feature a owl:Class ; rdfs:subClassOf net:Net_Structure . @@ -1106,16 +1083,6 @@ ns2:or a ns2:Concept ; sys:Out_ObjectProperty a owl:ObjectProperty . -ext-out:object a owl:Class ; - rdfs:label "object" ; - rdfs:subClassOf sys:Undetermined_Thing ; - sys:fromStructure "SSC-01-01" . - -ext-out:system a owl:Class ; - rdfs:label "system" ; - rdfs:subClassOf sys:Undetermined_Thing ; - sys:fromStructure "SSC-01-01" . - net:Class_Net a owl:Class ; rdfs:subClassOf net:Net . @@ -1306,9 +1273,6 @@ ns3:FrameRole a ns2:Role, rdfs:subClassOf :AMR_Core_Role ; :label "ARG1" . -sys:Undetermined_Thing a owl:Class ; - rdfs:subClassOf sys:Out_Structure . - net:atomClass_system_p a net:Atom_Class_Net, net:Deprecated_Net ; :role_name net:value_SolarSystem_blankNode ; diff --git a/tests/dev_owl_rule_tests/test_rule_owl_generator_individual.py b/tests/dev_owl_rule_tests/test_rule_owl_generator_individual.py new file mode 100644 index 0000000000000000000000000000000000000000..c7aa98e313dff88b4d0c78f9a6e051adb648fdbd --- /dev/null +++ b/tests/dev_owl_rule_tests/test_rule_owl_generator_individual.py @@ -0,0 +1,156 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Extraction Rule Test +#------------------------------------------------------------------------------ +# Script to test rules under development +#============================================================================== + +import subprocess, os +from rdflib import Graph, Namespace +from rdflib.namespace import NamespaceManager, FOAF, RDF +from rdflib import URIRef, Literal, BNode + +FILE_PATH = f'{os.path.dirname(os.path.abspath(__file__))}' +INPUT_DIR_PATH = f'{FILE_PATH}/test_data/' +OUTPUT_DIR_PATH = f'{FILE_PATH}/test_data/' + +TEST_FILE_NAME_1 = 'devGraph-classes-to-generate-1' + +from context import tenet +from tenet.transduction import rdfterm_computer, prefix_handle, net +from tenet.scheme.amr_master_rule.owl_generation import owl_individual_generator as dev_rule +from tenet.scheme import amr_master_rule as amr_rule + + +from tenet.transduction.rdfterm_computer import __update_uri_with_prefix + + + +#============================================================================== +# Useful Methods +#============================================================================== + +def load_test_graph(test_file_name): + print(f'\n -- Test Graph Loading') + graph = Graph() + prefix_handle.update_graph_namespacemanager(graph) + graph_path = f'{INPUT_DIR_PATH}{test_file_name}.ttl' + graph.parse(graph_path) + print(f" ----- Graph Loaded ({len(graph)})") + return graph + + +def print_triple(graph, triple, num=-1): + num_str = f'[{num}]' if num > -1 else '[-]' + (s, p, o) = triple + s = __update_uri_with_prefix(graph, s) + p = __update_uri_with_prefix(graph, p) + o = __update_uri_with_prefix(graph, o) + print(f' {num_str} {s} {p} {o}') + + +def add_triples_in_graph(test_file_name, graph, triple_list): + print(f'\n -- Adding triple(s) in graph') + print(f" ----- Graph length before update: {len(graph)}") + print(f" ----- Number of triples to add: {len(triple_list)}") + + print(f" ----- Added triples:") + n = 0 + graph_length = len(graph) + for triple in triple_list: + graph.add(triple) + if graph_length < len(graph): + n += 1 + graph_length = len(graph) + print_triple(graph, triple, num=n) + + print(f" ----- Graph length after update: {len(graph)}") + + output_graph_path = f'{OUTPUT_DIR_PATH}{test_file_name}.result.ttl' + output_graph_uri = f'https://amr.tetras-libre.fr/rdf/{test_file_name}/result' + print(f'\n -- Serialize test graph to {output_graph_path}') + graph.serialize(destination=output_graph_path, + format='turtle', + base=output_graph_uri) + +#============================================================================== +# Development Test +#============================================================================== + +# -- Test: Methods to search for patterns + +def test_search_pattern(graph): + print('\n -- Search patterns') + _, pattern_result_set = dev_rule.__search_pattern(graph) + print(f'\n ----- number of selection found: {len(pattern_result_set)}') + for selection in pattern_result_set: + result_str = f'>>> ' + result_str += f'{selection.individual_net.n3(graph.namespace_manager)}' + print(result_str) + return pattern_result_set + + +# -- Test: Generator Methods + +def test_generate_owl_triple_definition(graph, individual_net): + print(f' ----- Generate OWL Triple Definition ({individual_net.uri.n3(graph.namespace_manager)})') + triple_list = dev_rule.__generate_owl_triple_definition(graph, individual_net) + print(f' -------- Net Individual URI: {individual_net.individual_uri}') + print(f' -------- number of triples: {len(triple_list)}') + n = 0 + for triple in triple_list: + n += 1 + print_triple(graph, triple, num=n) + return triple_list + + +#============================================================================== +# Unit Test +#============================================================================== + +def test_rule_application(test_file_name, graph, rule): + print('\n -- Rule Test') + + rule_label, new_triple_list = rule(graph) + print(f' ----- label: {rule_label}') + + add_triples_in_graph(test_file_name, graph, new_triple_list) + + + +#============================================================================== +# Test Script +#============================================================================== + +if __name__ == '__main__': + + print('\n *** Test Preparation ***') + graph_1 = load_test_graph(TEST_FILE_NAME_1) + print('\n \n') + + print('\n ///////////////////// Generator Rule 1') + + print('\n *** Step Test (1) ***') + + print('\n -- Step 1: search pattern') + pattern_set = test_search_pattern(graph_1) + + print('\n -- Step 2: generate OWL triple definition for individual net') + total_triple_list = [] + for pattern in pattern_set: + individual_net = net.IndividualNet(graph_1, uri=pattern.individual_net) + if not individual_net.is_deprecated(): + total_triple_list += test_generate_owl_triple_definition(graph_1, individual_net) + print(f' ----- Total Number of triples: {len(total_triple_list)}') + + print('\n \n') + + + print('\n *** Unit Test ***') + test_rule_application(TEST_FILE_NAME_1, graph_1, amr_rule.generate_owl_individual) + print('\n \n') + + + print('\n *** - ***') \ No newline at end of file diff --git a/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/SolarSystemDev01_factoid.ttl b/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/SolarSystemDev01_factoid.ttl index 884cb8ff65218422481565f2b46180b2aa3ba40c..03b66e2c0d91499b048582cc22f50645cf894511 100644 --- a/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/SolarSystemDev01_factoid.ttl +++ b/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/SolarSystemDev01_factoid.ttl @@ -3,6 +3,10 @@ @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 ; + rdfs:label "Solar System" ; + ns1:fromStructure "SSC-01-01" . + <https://tenet.tetras-libre.fr/extract-result#direct> a owl:ObjectProperty ; rdfs:label "direct" ; rdfs:subPropertyOf ns1:Out_ObjectProperty ; diff --git a/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.log b/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.log index 99f9ece3c0981274b99ea41b0de360e7cb29943a..2dbb0e50b6c5b62ab7648a59a45f64caebf27de3 100644 --- a/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.log +++ b/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.log @@ -74,25 +74,25 @@ - DEBUG - ----- Total rule number: 87 - INFO - -- Step 1: Preprocessing - INFO - --- *** November Transduction *** Sequence: amrld-correcting-sequence -- INFO - ----- fix-amr-bug-about-system-solar-planet: 5/5 new triples (603, 0:00:00.027404) +- INFO - ----- fix-amr-bug-about-system-solar-planet: 5/5 new triples (603, 0:00:00.023569) - INFO - --- *** November Transduction *** Sequence: amr-reification-sequence -- INFO - ----- reclassify-concept-1: 10/10 new triples (613, 0:00:00.130204) -- DEBUG - ----- reclassify-concept-2: 0/0 new triple (613, 0:00:00.050778) -- INFO - ----- reclassify-concept-3: 12/12 new triples (625, 0:00:00.039706) -- INFO - ----- reclassify-concept-4: 16/16 new triples (641, 0:00:00.050183) -- INFO - ----- reclassify-concept-5: 2/4 new triples (643, 0:00:00.054968) -- INFO - ----- reify-roles-as-concept: 10/10 new triples (653, 0:00:00.049645) -- INFO - ----- reclassify-existing-variable: 45/45 new triples (698, 0:00:00.035618) -- INFO - ----- add-new-variable-for-reified-concept: 8/8 new triples (706, 0:00:00.052706) -- INFO - ----- add-amr-leaf-for-reclassified-concept: 33/33 new triples (739, 0:00:00.058790) -- INFO - ----- add-amr-leaf-for-reified-concept: 8/8 new triples (747, 0:00:00.030476) -- INFO - ----- add-amr-edge-for-core-relation: 27/27 new triples (774, 0:00:00.130285) -- INFO - ----- add-amr-edge-for-reified-concept: 12/12 new triples (786, 0:00:00.137288) -- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (791, 0:00:00.071310) -- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (791, 0:00:00.063266) -- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (796, 0:00:00.079597) -- INFO - ----- update-amr-edge-role-1: 15/15 new triples (811, 0:00:00.105109) -- INFO - ----- add-amr-root: 5/5 new triples (816, 0:00:00.022981) +- INFO - ----- reclassify-concept-1: 10/10 new triples (613, 0:00:00.164398) +- DEBUG - ----- reclassify-concept-2: 0/0 new triple (613, 0:00:00.059258) +- INFO - ----- reclassify-concept-3: 12/12 new triples (625, 0:00:00.050978) +- INFO - ----- reclassify-concept-4: 16/16 new triples (641, 0:00:00.061934) +- INFO - ----- reclassify-concept-5: 2/4 new triples (643, 0:00:00.046937) +- INFO - ----- reify-roles-as-concept: 10/10 new triples (653, 0:00:00.047763) +- INFO - ----- reclassify-existing-variable: 45/45 new triples (698, 0:00:00.031789) +- INFO - ----- add-new-variable-for-reified-concept: 8/8 new triples (706, 0:00:00.135965) +- INFO - ----- add-amr-leaf-for-reclassified-concept: 33/33 new triples (739, 0:00:00.042462) +- INFO - ----- add-amr-leaf-for-reified-concept: 8/8 new triples (747, 0:00:00.031325) +- INFO - ----- add-amr-edge-for-core-relation: 27/27 new triples (774, 0:00:00.105796) +- INFO - ----- add-amr-edge-for-reified-concept: 12/12 new triples (786, 0:00:00.218771) +- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (791, 0:00:00.095556) +- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (791, 0:00:00.068129) +- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (796, 0:00:00.063883) +- INFO - ----- update-amr-edge-role-1: 15/15 new triples (811, 0:00:00.074084) +- INFO - ----- add-amr-root: 5/5 new triples (816, 0:00:00.021905) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_Preprocessing - DEBUG - ----- step: Preprocessing - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ @@ -101,38 +101,38 @@ - INFO - ----- 218 triples extracted during Preprocessing step - INFO - -- Step 2: Transduction - INFO - --- Sequence: atomic extraction sequence -- INFO - ----- extract atom classes: 30/30 new triples (846, 0:00:00.168814) -- INFO - ----- extract atom individuals: 8/8 new triples (854, 0:00:00.048612) -- INFO - ----- extract atomic properties: 75/75 new triples (929, 0:00:00.217111) -- INFO - ----- extract atom values: 10/10 new triples (939, 0:00:00.058854) -- INFO - ----- extract atom phenomena: 14/14 new triples (953, 0:00:00.075223) -- INFO - ----- propagate atom relations: 24/68 new triples (977, 0:00:01.085414) +- INFO - ----- extract atom classes: 30/30 new triples (846, 0:00:00.123152) +- INFO - ----- extract atom individuals: 8/8 new triples (854, 0:00:00.038250) +- INFO - ----- extract atomic properties: 75/75 new triples (929, 0:00:00.200987) +- INFO - ----- extract atom values: 10/10 new triples (939, 0:00:00.042566) +- INFO - ----- extract atom phenomena: 14/14 new triples (953, 0:00:00.054644) +- INFO - ----- propagate atom relations: 24/68 new triples (977, 0:00:01.060328) - INFO - --- Sequence: classification sequence (1) -- DEBUG - ----- classify modality phenomena: 0/0 new triple (977, 0:00:00.022418) -- INFO - ----- reclassify argument property to class: 11/14 new triples (988, 0:00:00.068087) +- DEBUG - ----- classify modality phenomena: 0/0 new triple (977, 0:00:00.018022) +- INFO - ----- reclassify argument property to class: 11/14 new triples (988, 0:00:00.070267) - INFO - --- Sequence: phenomena analyze sequence (1) -- INFO - ----- analyze "polarity" phenomena (1): 32/36 new triples (1020, 0:00:00.094644) -- DEBUG - ----- analyze "polarity" phenomena (2): 0/0 new triple (1020, 0:00:00.016775) -- DEBUG - ----- analyze "polarity" phenomena (3): 0/0 new triple (1020, 0:00:00.013501) -- DEBUG - ----- analyze "polarity" phenomena (4): 0/0 new triple (1020, 0:00:00.028878) -- DEBUG - ----- analyze "polarity" phenomena (5): 0/0 new triple (1020, 0:00:00.030895) -- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (1020, 0:00:00.012143) -- DEBUG - ----- classify modality phenomena: 0/0 new triple (1020, 0:00:00.018754) +- INFO - ----- analyze "polarity" phenomena (1): 32/36 new triples (1020, 0:00:00.112682) +- DEBUG - ----- analyze "polarity" phenomena (2): 0/0 new triple (1020, 0:00:00.017356) +- DEBUG - ----- analyze "polarity" phenomena (3): 0/0 new triple (1020, 0:00:00.012094) +- DEBUG - ----- analyze "polarity" phenomena (4): 0/0 new triple (1020, 0:00:00.042035) +- DEBUG - ----- analyze "polarity" phenomena (5): 0/0 new triple (1020, 0:00:00.037639) +- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (1020, 0:00:00.009140) +- DEBUG - ----- classify modality phenomena: 0/0 new triple (1020, 0:00:00.018461) - INFO - --- Sequence: phenomena analyze sequence (2) -- INFO - ----- analyze "or" phenomena (1): 1/1 new triple (1021, 0:00:00.068259) -- INFO - ----- analyze "or" phenomena (2): 55/82 new triples (1076, 0:00:00.265417) -- INFO - ----- analyze "and" phenomena (1): 2/14 new triples (1078, 0:00:00.154309) -- DEBUG - ----- analyze "and" phenomena (2): 0/0 new triple (1078, 0:00:00.009720) +- INFO - ----- analyze "or" phenomena (1): 1/1 new triple (1021, 0:00:00.076282) +- INFO - ----- analyze "or" phenomena (2): 55/82 new triples (1076, 0:00:00.275210) +- INFO - ----- analyze "and" phenomena (1): 2/14 new triples (1078, 0:00:00.151296) +- DEBUG - ----- analyze "and" phenomena (2): 0/0 new triple (1078, 0:00:00.010309) - INFO - --- Sequence: composite class extraction sequence -- INFO - ----- extract composite classes (1): 127/138 new triples (1205, 0:00:00.483677) -- DEBUG - ----- extract composite classes (2): 0/0 new triple (1205, 0:00:00.031429) +- INFO - ----- extract composite classes (1): 127/138 new triples (1205, 0:00:00.545576) +- DEBUG - ----- extract composite classes (2): 0/0 new triple (1205, 0:00:00.106067) - INFO - --- Sequence: classification sequence (2) -- INFO - ----- classify class net as entity from core arguments: 10/181 new triples (1215, 0:00:00.266924) -- DEBUG - ----- classify class net as entity from :part relation: 0/0 new triple (1215, 0:00:00.009020) -- DEBUG - ----- classify class net as entity from degree arguments: 0/0 new triple (1215, 0:00:00.016216) -- INFO - ----- Associate mother to class net from :domain relation: 5/34 new triples (1220, 0:00:00.082572) -- DEBUG - ----- Propagate individuals to net with same base node: 0/10 new triple (1220, 0:00:00.025169) -- INFO - ----- Propagate individuals to net with domain link: 3/60 new triples (1223, 0:00:00.110614) +- INFO - ----- classify class net as entity from core arguments: 10/181 new triples (1215, 0:00:00.254621) +- DEBUG - ----- classify class net as entity from :part relation: 0/0 new triple (1215, 0:00:00.008901) +- DEBUG - ----- classify class net as entity from degree arguments: 0/0 new triple (1215, 0:00:00.015969) +- INFO - ----- Associate mother to class net from :domain relation: 5/34 new triples (1220, 0:00:00.084291) +- DEBUG - ----- Propagate individuals to net with same base node: 0/10 new triple (1220, 0:00:00.027996) +- INFO - ----- Propagate individuals to net with domain link: 3/60 new triples (1223, 0:00:00.106732) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_Transduction - DEBUG - ----- step: Transduction - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ @@ -141,31 +141,32 @@ - INFO - ----- 407 triples extracted during Transduction step - INFO - -- Step 3: Generation - INFO - --- Sequence: OWL Generation Sequence -- INFO - ----- generate OWL class: 52/55 new triples (1275, 0:00:00.550302) -- INFO - ----- generate OWL property: 29/29 new triples (1304, 0:00:00.278730) +- INFO - ----- generate OWL class: 52/55 new triples (1275, 0:00:00.588744) +- INFO - ----- generate OWL property: 29/29 new triples (1304, 0:00:00.269818) +- INFO - ----- generate OWL individual: 3/3 new triples (1307, 0:00:00.031770) - INFO - --- *** November Transduction *** Sequence: main-generation-sequence -- DEBUG - ----- generate-individual: 0/0 new triple (1304, 0:00:00.012292) -- DEBUG - ----- classify-individual-1: 0/0 new triple (1304, 0:00:00.008140) -- DEBUG - ----- classify-individual-2: 0/0 new triple (1304, 0:00:00.009686) -- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1304, 0:00:00.024252) -- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1304, 0:00:00.013201) -- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1304, 0:00:00.017938) -- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1304, 0:00:00.012958) -- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1304, 0:00:00.015493) -- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1304, 0:00:00.012323) +- DEBUG - ----- generate-individual: 0/0 new triple (1307, 0:00:00.010240) +- DEBUG - ----- classify-individual-1: 0/0 new triple (1307, 0:00:00.006150) +- DEBUG - ----- classify-individual-2: 0/0 new triple (1307, 0:00:00.008375) +- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1307, 0:00:00.018460) +- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1307, 0:00:00.016711) +- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1307, 0:00:00.016519) +- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1307, 0:00:00.014249) +- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1307, 0:00:00.014758) +- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1307, 0:00:00.015363) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_Generation - DEBUG - ----- step: Generation - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ - DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_Generation.ttl - DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/01//Generation -- INFO - ----- 81 triples extracted during Generation step +- INFO - ----- 84 triples extracted during Generation step - DEBUG - --- Serializing graph to factoid file (/home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_factoid.ttl) -- DEBUG - ----- Number of factoids: 84 +- DEBUG - ----- Number of factoids: 87 - DEBUG - ----- Graph base: http://https://tenet.tetras-libre.fr/demo/01//factoid - INFO - === Final Ontology Generation === - INFO - -- Making complete factoid graph by merging the result factoids -- INFO - ----- Total factoid number: 84 +- INFO - ----- Total factoid number: 87 - 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-20230607/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-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_Generation.ttl index c2cbb29cb74694a780a4dcacc951687844f1985b..47402f55558a9c6ccc93b668289c5568ab78282d 100644 --- a/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/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-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_Generation.ttl @@ -421,6 +421,10 @@ cprm:targetOntologyURI a rdf:Property ; rdfs:range xsd:string ; rdfs:subPropertyOf cprm:configParamProperty . +<https://tenet.tetras-libre.fr/extract-result#SolarSystem> a owl:Individual ; + rdfs:label "Solar System" ; + sys:fromStructure "SSC-01-01" . + <https://tenet.tetras-libre.fr/extract-result#direct> a owl:ObjectProperty ; rdfs:label "direct" ; rdfs:subPropertyOf sys:Out_ObjectProperty ; diff --git a/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/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-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_factoid.ttl index 884cb8ff65218422481565f2b46180b2aa3ba40c..03b66e2c0d91499b048582cc22f50645cf894511 100644 --- a/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/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-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_factoid.ttl @@ -3,6 +3,10 @@ @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 ; + rdfs:label "Solar System" ; + ns1:fromStructure "SSC-01-01" . + <https://tenet.tetras-libre.fr/extract-result#direct> a owl:ObjectProperty ; rdfs:label "direct" ; rdfs:subPropertyOf ns1:Out_ObjectProperty ;