Skip to content
Snippets Groups Projects
Commit ab8355fc authored by Aurélien Lamercerie's avatar Aurélien Lamercerie
Browse files

Update new transduction rule

parent 3b81f09b
No related branches found
No related tags found
No related merge requests found
...@@ -47,6 +47,7 @@ class Net: ...@@ -47,6 +47,7 @@ class Net:
# -- Net Attributes # -- Net Attributes
self.attr_list = ['node', 'base_node', 'structure', 'naming']
self._node = [] self._node = []
self._base_node = None self._base_node = None
self._structure = None self._structure = None
...@@ -142,6 +143,9 @@ class Net: ...@@ -142,6 +143,9 @@ class Net:
@node.setter @node.setter
def node(self, new_value): def node(self, new_value):
if isinstance(self._node, list): if isinstance(self._node, list):
if isinstance(new_value, list):
self._node += new_value
else:
self._node.append(new_value) self._node.append(new_value)
else: else:
self._node = new_value self._node = new_value
...@@ -154,7 +158,10 @@ class Net: ...@@ -154,7 +158,10 @@ class Net:
@base_node.setter @base_node.setter
def base_node(self, new_value): def base_node(self, new_value):
if isinstance(self._base_node, list): if isinstance(self._base_node, list):
self._base_node.append(new_value) if isinstance(new_value, list):
self._node += new_value
else:
self._node.append(new_value)
else: else:
self._base_node = new_value self._base_node = new_value
...@@ -166,7 +173,10 @@ class Net: ...@@ -166,7 +173,10 @@ class Net:
@structure.setter @structure.setter
def structure(self, new_value): def structure(self, new_value):
if isinstance(self._structure, list): if isinstance(self._structure, list):
self._structure.append(new_value) if isinstance(new_value, list):
self._node += new_value
else:
self._node.append(new_value)
else: else:
self._structure = new_value self._structure = new_value
...@@ -178,7 +188,10 @@ class Net: ...@@ -178,7 +188,10 @@ class Net:
@naming.setter @naming.setter
def naming(self, new_value): def naming(self, new_value):
if isinstance(self._naming, list): if isinstance(self._naming, list):
self._naming.append(new_value) if isinstance(new_value, list):
self._node += new_value
else:
self._node.append(new_value)
else: else:
self._naming = new_value self._naming = new_value
...@@ -220,9 +233,46 @@ class Net: ...@@ -220,9 +233,46 @@ class Net:
# Triple Generation Method # Triple Generation Method
#-------------------------------------------------------------------------- #--------------------------------------------------------------------------
def __generation_attribute_triple_definition(self): def __define_triple(self, uri, predicate, value):
triple = None
if isinstance(value, rdflib.term.URIRef):
value = value.n3(self.support_graph.namespace_manager)
triple = f'{uri} {predicate} {value}'
elif isinstance(value, str):
triple = f'{uri} {predicate} "{value}"'
return triple
def __define_triple_list(self, uri, attr_predicate, attr_value):
triples = []
if (isinstance(attr_value, rdflib.term.URIRef) or
isinstance(attr_value, str)):
new_triple = self.__define_triple(uri, attr_predicate, attr_value)
if new_triple is not None: triples.append(new_triple)
elif isinstance(attr_value, list):
for value in attr_value:
new_triple = self.__define_triple(uri, attr_predicate, value)
if new_triple is not None: triples.append(new_triple)
return triples
def __generate_attribute_triples(self, uri):
assert (self.uri is not None), 'URI must be set'
triple_definition = [] triple_definition = []
pass # TODO
for attr in self.attr_list:
attr_predicate = self.referenceHandle.get_predicate_uri(attr)
attr_value = eval(f'self._{attr}')
triple_definition += self.__define_triple_list(uri, attr_predicate, attr_value)
return triple_definition return triple_definition
...@@ -230,8 +280,9 @@ class Net: ...@@ -230,8 +280,9 @@ class Net:
triple_definition = [] triple_definition = []
if self.uri is not None: uri = self.uri
if uri is not None:
triple_definition.append(f'{self.uri} a {self.type_uri}.') triple_definition.append(f'{self.uri} a {self.type_uri}.')
triple_definition += self.__generation_attribute_triple_definition() triple_definition += self.__generate_attribute_triples(uri)
return triple_definition return triple_definition
\ No newline at end of file
...@@ -202,57 +202,3 @@ def analyze_phenomena_or_2(graph): ...@@ -202,57 +202,3 @@ def analyze_phenomena_or_2(graph):
return rule_label, new_triple_list return rule_label, new_triple_list
#==============================================================================
# Development Test
#==============================================================================
if __name__ == '__main__':
print('\n' + ' *** Development Test ***')
print(f'\n -- Test Graph Loading')
graph = Graph()
graph.bind('net', Namespace('https://tenet.tetras-libre.fr/semantic-net#'))
graph.parse('testGraph1.ttl')
print(f"----- Graph Loaded ({len(graph)})")
print('\n -- Select Pattern Application 1')
query_code = __select_pattern_1()
print(query_code)
pattern_result_set = graph.query(query_code)
print(f'\n ----- number of selection found: {len(pattern_result_set)}')
for selection in pattern_result_set:
result_str = f'>>> '
result_str += f'{selection.property_net.n3(graph.namespace_manager)}'
result_str += f' {selection.class_net.n3(graph.namespace_manager)}'
result_str += f' {selection.phenomena_net.n3(graph.namespace_manager)}'
print(result_str)
print('\n -- Select Pattern Application 2')
query_code = __select_pattern_2()
print(query_code)
pattern_result_set = graph.query(query_code)
print(f'\n ----- number of selection found: {len(pattern_result_set)}')
for selection in pattern_result_set:
result_str = f'>>> '
result_str += f'{selection.property_net.n3(graph.namespace_manager)}'
result_str += f' {selection.property_net_0.n3(graph.namespace_manager)}'
result_str += f' {selection.phenomena_net.n3(graph.namespace_manager)}'
print(result_str)
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:
# num += 1
# print(f'*** query {num} - {query_label} ***\n{query}\n')
\ No newline at end of file
#!/usr/bin/python3.10
# -*-coding:Utf-8 -*
#==============================================================================
# TENET: Naming Computer
#------------------------------------------------------------------------------
# Class grouping methods to compute URI for semantic nets (and their
# attributes)
#==============================================================================
from urllib.parse import quote_plus
from rdflib import URIRef, Graph, RDF, SDO
from rdflib.term import _is_valid_uri
class InvalidURIRef(Exception):
"""Raise when URIs are invalid."""
pass
def create_uriref(uri):
"""Create a URIRef with the same validation func used by URIRef
Except here an InvalidURIRef exception is raised.
The RDFLib _is_valid_uri only checks for invalid characters. You can also add your
own validation checks.
"""
if _is_valid_uri(uri):
return URIRef(uri)
raise InvalidURIRef(f'"{uri}" is not a valid URI.')
\ No newline at end of file
- 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': []}) - WARNING - <net:atomClass_sun_s2> does not look like a valid URI, trying to serialize this will break.
...@@ -18,16 +18,28 @@ OUTPUT_DIR_PATH = f'{FILE_PATH}/output/' ...@@ -18,16 +18,28 @@ OUTPUT_DIR_PATH = f'{FILE_PATH}/output/'
TEST_GRAPH = f'{INPUT_DIR_PATH}testGraph1.ttl' TEST_GRAPH = f'{INPUT_DIR_PATH}testGraph1.ttl'
from context import tenet from context import tenet
from tenet.febTransduction import phenomena_application_or from tenet.febTransduction import phenomena_application_or as test_rule
from tenet.febTransduction import query_builder
INDENT_STR = ' ' INDENT_STR = ' '
#============================================================================== #==============================================================================
# In-Progress Development Method(s) # Useful Methods
#============================================================================== #==============================================================================
def load_test_graph():
print(f'\n -- Test Graph Loading')
graph = Graph()
graph.bind('amr', Namespace('https://amr.tetras-libre.fr/rdf/schema#'))
graph.bind('net', Namespace('https://tenet.tetras-libre.fr/semantic-net#'))
graph.bind('base-out', Namespace('https://tenet.tetras-libre.fr/base-ontology#'))
graph.parse(TEST_GRAPH)
print(f" ----- Graph Loaded ({len(graph)})")
return graph
def define_clause_list(composition_pattern_list): def define_clause_list(composition_pattern_list):
clause_list = [] clause_list = []
for (net_1, relation, net_2) in composition_pattern_list: for (net_1, relation, net_2) in composition_pattern_list:
...@@ -35,51 +47,84 @@ def define_clause_list(composition_pattern_list): ...@@ -35,51 +47,84 @@ def define_clause_list(composition_pattern_list):
return clause_list return clause_list
#============================================================================== #==============================================================================
# Development Test # Development Test
#============================================================================== #==============================================================================
print('\n *** Development Test ***') def devtest_select_pattern_application_1(graph):
print('\n -- Select Pattern Application 1')
query_code = test_rule.__select_pattern_1()
print(query_code)
pattern_result_set = graph.query(query_code)
print(f'\n ----- number of selection found: {len(pattern_result_set)}')
for selection in pattern_result_set:
result_str = f'>>> '
result_str += f'{selection.property_net.n3(graph.namespace_manager)}'
result_str += f' {selection.class_net.n3(graph.namespace_manager)}'
result_str += f' {selection.phenomena_net.n3(graph.namespace_manager)}'
print(result_str)
print(f'\n -- Test Graph Loading')
work_graph = Graph() def devtest_select_pattern_application_2(graph):
work_graph.bind('net', Namespace('https://tenet.tetras-libre.fr/semantic-net#')) print('\n -- Select Pattern Application 2')
work_graph.parse(TEST_GRAPH) query_code = test_rule.__select_pattern_2()
print(f"----- Graph Loaded ({len(work_graph)})") print(query_code)
pattern_result_set = graph.query(query_code)
# print(f'\n -- Test Nets') print(f'\n ----- number of selection found: {len(pattern_result_set)}')
# property_net = '?property_net'
# class_net_0 = '?class_net_0'
# phenomena_net = '?phenomena_net'
print(f'\n -- Select Query Test')
# select_data_list = [class_net_0, property_net, phenomena_net]
# composition_pattern_list = []
# composition_pattern_list.append((property_net, 'amr:role_ARG0', class_net_0))
# composition_pattern_list.append((property_net, 'amr:role_ARG1', phenomena_net))
# clause_list = define_clause_list(composition_pattern_list)
# test_query = query_builder.generate_select_query(select_data_list, clause_list)
# print(test_query)
# query_result = work_graph.query(test_query)
pattern_result_set = phenomena_application_or.apply_or_phenomena_pattern_1(work_graph)
print(f'\n *** Select Result ***')
for selection in pattern_result_set: for selection in pattern_result_set:
result_str = f'>>> ' result_str = f'>>> '
result_str += f'{selection.class_net_0.n3(work_graph.namespace_manager)}' result_str += f'{selection.property_net.n3(graph.namespace_manager)}'
result_str += f' {selection.property_net.n3(work_graph.namespace_manager)}' result_str += f' {selection.property_net_0.n3(graph.namespace_manager)}'
result_str += f' {selection.phenomena_net.n3(work_graph.namespace_manager)}' result_str += f' {selection.phenomena_net.n3(graph.namespace_manager)}'
print(result_str) print(result_str)
def devtest_insert_query(graph):
print(f'\n -- Insert Query Test') print(f'\n -- Insert Query Test')
triple_list = ['net:net1 a net:ClassNet.', triple_list = ['net:net1 a net:ClassNet.',
'net:net2 a net:PropertyNet.', 'net:net2 a net:PropertyNet.',
'net:net3 a net:ClassNet.'] 'net:net3 a net:ClassNet.']
test_query = query_builder.generate_insert_query(triple_list) test_query = query_builder.generate_insert_query(triple_list)
print(test_query) print(test_query)
work_graph.update(test_query) graph.update(test_query)
print(f"----- Graph Updated ({len(work_graph)})") print(f"----- Graph Updated ({len(graph)})")
#==============================================================================
# Unit Test
#==============================================================================
def unittest_rule_analyze_phenomena_or_2(graph):
print('\n -- Rule Test')
rule_label, new_triple_list = test_rule.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}')
#==============================================================================
# Test Script
#==============================================================================
if __name__ == '__main__':
print('\n *** Test Preparation ***')
graph = load_test_graph()
print('\n \n')
print('\n *** Development Test ***')
devtest_select_pattern_application_1(graph)
devtest_select_pattern_application_2(graph)
devtest_insert_query(graph)
print('\n \n')
print('\n *** Unit Test ***')
unittest_rule_analyze_phenomena_or_2(graph)
print('\n \n')
print('\n' + ' *** - ***') print('\n *** - ***')
\ No newline at end of file \ No newline at end of file
...@@ -8,8 +8,9 @@ ...@@ -8,8 +8,9 @@
#============================================================================== #==============================================================================
import subprocess, os import subprocess, os
from rdflib import Graph
from rdflib import Namespace import rdflib
from rdflib import Graph, Namespace, URIRef
from rdflib.namespace import NamespaceManager from rdflib.namespace import NamespaceManager
FILE_PATH = f'{os.path.dirname(os.path.abspath(__file__))}' FILE_PATH = f'{os.path.dirname(os.path.abspath(__file__))}'
...@@ -40,9 +41,20 @@ from tenet.febTransduction.net import RestrictionNet ...@@ -40,9 +41,20 @@ from tenet.febTransduction.net import RestrictionNet
#============================================================================== #==============================================================================
# Utilities # Useful Methods
#============================================================================== #==============================================================================
def load_test_graph():
print(f'\n -- Test Graph Loading')
graph = Graph()
graph.bind('amr', Namespace('https://amr.tetras-libre.fr/rdf/schema#'))
graph.bind('net', Namespace('https://tenet.tetras-libre.fr/semantic-net#'))
graph.bind('base-out', Namespace('https://tenet.tetras-libre.fr/base-ontology#'))
graph.parse(TEST_GRAPH)
print(f" ----- Graph Loaded ({len(graph)})")
return graph
def test_attribute_access(net, *attr_set): def test_attribute_access(net, *attr_set):
print(f'\n *** Net attributes ({net.type_id})) ***') print(f'\n *** Net attributes ({net.type_id})) ***')
for attr in attr_set: for attr in attr_set:
...@@ -54,53 +66,58 @@ def test_attribute_access(net, *attr_set): ...@@ -54,53 +66,58 @@ def test_attribute_access(net, *attr_set):
# Development Test # Development Test
#============================================================================== #==============================================================================
print('\n' + ' *** Development Test ***') def devtest_set_uri_attribute(graph):
print('\n *** TEST: Semantic Net Getters ***') print('\n -- Set URI attribute')
uri = 'https://tenet.tetras-libre.fr/semantic-net#atomClass_sun_s2'
print(f' ----- uri (1): {uri}')
if isinstance(uri, rdflib.term.URIRef):
uri = uri.n3(graph.namespace_manager)
elif isinstance(uri, str):
uri = URIRef(uri).n3(graph.namespace_manager)
print(f' ----- uri (1): {uri}')
print(f'\n -- Test Graph Loading')
graph = Graph()
graph.bind('net', Namespace('https://tenet.tetras-libre.fr/semantic-net#'))
graph.parse(TEST_GRAPH)
print(f" ----- Graph Loaded ({len(graph)})")
#==============================================================================
# Unit Test
#==============================================================================
def unittest_get_attribute_net(graph, net_uri):
print('\n -- Net') print('\n -- Net')
net_uri = 'https://tenet.tetras-libre.fr/semantic-net#atomClass_sun_s2' net_uri = 'https://tenet.tetras-libre.fr/semantic-net#atomClass_sun_s2'
net = Net(graph, uri=net_uri) net = Net(graph, uri=net_uri)
test_attribute_access(net, 'net.uri', test_attribute_access(net, 'net.uri',
'net.node', 'net.base_node', 'net.structure', 'net.naming') 'net.node', 'net.base_node', 'net.structure', 'net.naming')
def unittest_get_attribute_class_net(graph, net_uri):
print('\n -- Class Net') print('\n -- Class Net')
net = ClassNet(graph, uri='net:atomClass_sun_s2') net = ClassNet(graph, uri='net:atomClass_sun_s2')
test_attribute_access(net, 'net.uri', test_attribute_access(net, 'net.uri',
'net.node', 'net.base_node', 'net.structure', 'net.naming', 'net.node', 'net.base_node', 'net.structure', 'net.naming',
'net.class_name') 'net.class_name')
def unittest_get_attribute_atom_class_net(graph, net_uri):
print('\n -- Atom Class Net') print('\n -- Atom Class Net')
net = AtomClassNet(graph, uri='net:atomClass_sun_s2') net = AtomClassNet(graph, uri='net:atomClass_sun_s2')
test_attribute_access(net, 'net.uri', test_attribute_access(net, 'net.uri',
'net.node', 'net.base_node', 'net.structure', 'net.naming', 'net.node', 'net.base_node', 'net.structure', 'net.naming',
'net.class_name') 'net.class_name')
print('\n -- Composite Class Net (1)') def unittest_get_attribute_composite_class_net(graph, net_uri):
print('\n -- Composite Class Net')
net = CompositeClassNet(graph, uri='net:compositeClass_orbit-hasManner-conjunction-OR_o2') net = CompositeClassNet(graph, uri='net:compositeClass_orbit-hasManner-conjunction-OR_o2')
test_attribute_access(net, 'net.uri', test_attribute_access(net, 'net.uri',
'net.node', 'net.base_node', 'net.structure', 'net.naming', 'net.node', 'net.base_node', 'net.structure', 'net.naming',
'net.class_name', 'net.class_name',
'net.mother_class_net', 'net.restriction', 'net.restriction01') 'net.mother_class_net', 'net.restriction', 'net.restriction01')
print('\n -- Composite Class Net (2)') def unittest_get_attribute_property_net(graph, net_uri):
net = CompositeClassNet(graph, uri='net:compositeClass_system-hasPart-sun-and-object_s')
test_attribute_access(net, 'net.uri',
'net.node', 'net.base_node', 'net.structure', 'net.naming',
'net.class_name',
'net.mother_class_net', 'net.restriction', 'net.restriction01')
print('\n -- Property Net') print('\n -- Property Net')
net = PropertyNet(graph, uri='net:atomProperty_orbit_o2') net = PropertyNet(graph, uri='net:atomProperty_orbit_o2')
test_attribute_access(net, 'net.uri', test_attribute_access(net, 'net.uri',
'net.node', 'net.base_node', 'net.structure', 'net.naming', 'net.node', 'net.base_node', 'net.structure', 'net.naming',
'net.property_name') 'net.property_name')
def unittest_get_attribute_atom_property_net(graph, net_uri):
print('\n -- Atom Property Net') print('\n -- Atom Property Net')
net = AtomPropertyNet(graph, uri='net:atomProperty_orbit_o2') net = AtomPropertyNet(graph, uri='net:atomProperty_orbit_o2')
test_attribute_access(net, 'net.uri', test_attribute_access(net, 'net.uri',
...@@ -109,6 +126,7 @@ test_attribute_access(net, 'net.uri', ...@@ -109,6 +126,7 @@ test_attribute_access(net, 'net.uri',
'net.core_role', 'net.target_argument_node', 'net.property_type', 'net.core_role', 'net.target_argument_node', 'net.property_type',
'net.property_name01', 'net.property_name10', 'net.property_name12') 'net.property_name01', 'net.property_name10', 'net.property_name12')
def unittest_get_attribute_composite_property_net(graph, net_uri):
print('\n -- Composite Property Net') print('\n -- Composite Property Net')
net = CompositePropertyNet(graph, uri='net:compositeProperty_not-direct_d2') net = CompositePropertyNet(graph, uri='net:compositeProperty_not-direct_d2')
test_attribute_access(net, 'net.uri', test_attribute_access(net, 'net.uri',
...@@ -116,34 +134,68 @@ test_attribute_access(net, 'net.uri', ...@@ -116,34 +134,68 @@ test_attribute_access(net, 'net.uri',
'net.property_name', 'net.property_name',
'net.core_role', 'net.target_argument_node', 'net.property_type', 'net.restriction') 'net.core_role', 'net.target_argument_node', 'net.property_type', 'net.restriction')
def unittest_get_attribute_individual_net(graph, net_uri):
print('\n -- Individual Net') print('\n -- Individual Net')
net = IndividualNet(graph, uri='net:individual_system_SolarSystem') net = IndividualNet(graph, uri='net:individual_system_SolarSystem')
test_attribute_access(net, 'net.uri', test_attribute_access(net, 'net.uri',
'net.node', 'net.base_node', 'net.structure', 'net.naming', 'net.node', 'net.base_node', 'net.structure', 'net.naming',
'net.base_class_name', 'net.mother_class_net', 'net.individual_label') 'net.base_class_name', 'net.mother_class_net', 'net.individual_label')
def unittest_get_attribute_value_net(graph, net_uri):
print('\n -- Value Net') print('\n -- Value Net')
net = ValueNet(graph, uri='net:value_SolarSystem_blankNode') net = ValueNet(graph, uri='net:value_SolarSystem_blankNode')
test_attribute_access(net, 'net.uri', test_attribute_access(net, 'net.uri',
'net.node', 'net.base_node', 'net.structure', 'net.naming', 'net.node', 'net.base_node', 'net.structure', 'net.naming',
'net.value_label') 'net.value_label')
print('\n -- Phenomena Net (1)') def unittest_get_attribute_phenomena_net(graph, net_uri):
print('\n -- Phenomena Net')
net = PhenomenaNet(graph, uri='net:phenomena_conjunction-AND_a') net = PhenomenaNet(graph, uri='net:phenomena_conjunction-AND_a')
test_attribute_access(net, 'net.uri', test_attribute_access(net, 'net.uri',
'net.node', 'net.base_node', 'net.structure', 'net.naming', 'net.node', 'net.base_node', 'net.structure', 'net.naming',
'net.phenomena_type', 'net.phenomena_ref') 'net.phenomena_type', 'net.phenomena_ref')
print('\n -- Phenomena Net (1)') def unittest_get_attribute_restriction_net(graph, net_uri):
net = PhenomenaNet(graph, uri='net:phenomena_conjunction-OR_o3')
test_attribute_access(net, 'net.uri',
'net.node', 'net.base_node', 'net.structure', 'net.naming',
'net.phenomena_type', 'net.phenomena_ref')
print('\n -- Restriction Net') print('\n -- Restriction Net')
net = RestrictionNet(graph, uri='net:restriction_hasPart_sun') net = RestrictionNet(graph, uri='net:restriction_hasPart_sun')
test_attribute_access(net, 'net.uri', test_attribute_access(net, 'net.uri',
'net.node', 'net.base_node', 'net.structure', 'net.naming', 'net.node', 'net.base_node', 'net.structure', 'net.naming',
'net.target_node', 'net.restriction_property', 'net.restriction_net_value') 'net.target_node', 'net.restriction_property', 'net.restriction_net_value')
print('\n' + ' *** - ***')
\ No newline at end of file #==============================================================================
# Test Script
#==============================================================================
if __name__ == '__main__':
print('\n *** Test Preparation ***')
graph = load_test_graph()
print('\n \n')
print('\n *** Development Test ***')
devtest_set_uri_attribute(graph)
print('\n \n')
print('\n *** Unit Test ***')
# unittest_get_attribute_net(graph, 'https://tenet.tetras-libre.fr/semantic-net#atomClass_sun_s2')
# unittest_get_attribute_class_net(graph, 'net:atomClass_sun_s2')
# unittest_get_attribute_atom_class_net(graph, 'net:atomClass_sun_s2')
# unittest_get_attribute_composite_class_net(graph, 'net:compositeClass_orbit-hasManner-conjunction-OR_o2')
# unittest_get_attribute_composite_class_net(graph, 'net:compositeClass_system-hasPart-sun-and-object_s')
# unittest_get_attribute_property_net(graph, 'net:atomProperty_orbit_o2')
# unittest_get_attribute_atom_property_net(graph, 'net:atomProperty_orbit_o2')
# unittest_get_attribute_composite_property_net(graph, 'net:compositeProperty_not-direct_d2')
# unittest_get_attribute_individual_net(graph, 'net:individual_system_SolarSystem')
# unittest_get_attribute_value_net(graph, 'net:value_SolarSystem_blankNode')
# unittest_get_attribute_phenomena_net(graph, 'net:phenomena_conjunction-AND_a')
# unittest_get_attribute_phenomena_net(graph, 'net:phenomena_conjunction-OR_o3')
# unittest_get_attribute_restriction_net(graph, 'net:restriction_hasPart_sun')
print('\n \n')
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment