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

Update AMR Rule: generation.odrl_rule_generator

parent 16cca79a
No related branches found
No related tags found
No related merge requests found
...@@ -21,10 +21,10 @@ from transduction.naming_computer import define_composite_naming_2 ...@@ -21,10 +21,10 @@ from transduction.naming_computer import define_composite_naming_2
#============================================================================== #==============================================================================
# Pattern Search: Rule and Action Nets # Pattern Search: Rule Nets
#============================================================================== #==============================================================================
def __search_pattern_1(graph): def __search_pattern(graph):
select_data_list = ['?rule_net'] select_data_list = ['?rule_net']
clause_list = [f'?rule_net a net:Rule_Net.'] clause_list = [f'?rule_net a net:Rule_Net.']
query_code = generate_select_query(graph, select_data_list, clause_list) query_code = generate_select_query(graph, select_data_list, clause_list)
...@@ -32,14 +32,6 @@ def __search_pattern_1(graph): ...@@ -32,14 +32,6 @@ def __search_pattern_1(graph):
return query_code, result_set return query_code, result_set
def __search_pattern_2(graph):
select_data_list = ['?action_net']
clause_list = [(f'?action_net a net:Action_Net.')]
query_code = generate_select_query(graph, select_data_list, clause_list)
result_set = graph.query(query_code)
return query_code, result_set
#============================================================================== #==============================================================================
# Check Methods # Check Methods
...@@ -59,6 +51,8 @@ def __is_property_to_generate(property_net): ...@@ -59,6 +51,8 @@ def __is_property_to_generate(property_net):
# Generator Methods # Generator Methods
#============================================================================== #==============================================================================
ACTION_SPACING_CODE = '\n '
def __compute_policy_uri(graph, net): def __compute_policy_uri(graph, net):
structure_name = net.get_attribute_first_value(net.structure) structure_name = net.get_attribute_first_value(net.structure)
return produce_uriref(graph, f'ext-out:policy_{structure_name}') return produce_uriref(graph, f'ext-out:policy_{structure_name}')
...@@ -70,21 +64,49 @@ def __compute_odrl_rule_type_uri(graph, net): ...@@ -70,21 +64,49 @@ def __compute_odrl_rule_type_uri(graph, net):
return produce_uriref(graph, odrl_rule_type_uri) return produce_uriref(graph, odrl_rule_type_uri)
def __compute_target_ref(graph, target_net_uri):
target_net = net.ClassNet(graph, target_net_uri)
individual_name = 'any'
class_name = target_net.get_attribute_first_value(target_net.class_name)
if class_name is None: class_name = 'unknown'
return f'<http://example.com/asset:{individual_name}.{class_name}>'
def __compute_odrl_action_code(graph, rule_net): def __compute_odrl_action_code(graph, rule_net):
action_net_uri = rule_net.get_attribute_first_value(rule_net.rule_action_net) action_net_uri = rule_net.get_attribute_first_value(rule_net.rule_action_net)
if action_net_uri is not None: if action_net_uri is not None:
print(action_net_uri)
action_net_uri = produce_uriref(graph, action_net_uri) action_net_uri = produce_uriref(graph, action_net_uri)
print(action_net_uri)
action_net = net.ActionNet(graph, action_net_uri) action_net = net.ActionNet(graph, action_net_uri)
return produce_literal(graph, 'net:x')
action_ref = ''
first = True
for ref in action_net.action_name:
action_ref = ref if first else f'odrl:{action_ref}, {ref}'
first = False
if action_ref != '': action_ref = f'{ACTION_SPACING_CODE} odrl:action {action_ref}'
target_ref = ''
first = True
for target_net_uri in action_net.target_net:
if first:
target_ref = __compute_target_ref(graph, target_net_uri)
first = False
else:
target_ref = f'odrl:{action_ref}, {__compute_target_ref(target_net)}'
if target_ref != '': target_ref = f'{ACTION_SPACING_CODE} odrl:target {target_ref} ;'
action_string = f"""[ {target_ref} {action_ref} ]"""
return produce_literal(graph, action_string)
def __generate_odrl_triple_definition(graph, rule_net): def __generate_odrl_triple_definition(graph, rule_net):
policy_uri = __compute_policy_uri(graph, rule_net) policy_uri = __compute_policy_uri(graph, rule_net)
odrl_rule_type_uri = __compute_odrl_rule_type_uri(graph, rule_net) odrl_rule_type_uri = __compute_odrl_rule_type_uri(graph, rule_net)
action_definition = __compute_odrl_action_code(graph, rule_net) action_definition = __compute_odrl_action_code(graph, rule_net)
# print(f'{policy_uri}, {odrl_rule_type_uri}, {action_definition}')
return [(policy_uri, odrl_rule_type_uri, action_definition)] return [(policy_uri, odrl_rule_type_uri, action_definition)]
...@@ -100,7 +122,7 @@ def generate_odrl_rule(graph): ...@@ -100,7 +122,7 @@ def generate_odrl_rule(graph):
rule_triple_list = [] rule_triple_list = []
# -- Get property net listings # -- Get property net listings
_, pattern_set = __search_pattern_1(graph) _, pattern_set = __search_pattern(graph)
# -- Triple Definition for 'not deprecated property net' # -- Triple Definition for 'not deprecated property net'
for pattern in pattern_set: for pattern in pattern_set:
......
This diff is collapsed.
...@@ -401,7 +401,9 @@ cprm:targetOntologyURI a rdf:Property ; ...@@ -401,7 +401,9 @@ cprm:targetOntologyURI a rdf:Property ;
rdfs:range xsd:string ; rdfs:range xsd:string ;
rdfs:subPropertyOf cprm:configParamProperty . rdfs:subPropertyOf cprm:configParamProperty .
ext-out:policy_document-01 ns1:permission "net:x" . ext-out:policy_document-01 ns1:permission """[
odrl:target <http://example.com/asset:any.movie> ;
odrl:action use ]""" .
<https://tenet.tetras-libre.fr/semantic-net> a owl:Ontology . <https://tenet.tetras-libre.fr/semantic-net> a owl:Ontology .
......
...@@ -92,7 +92,7 @@ def add_triples_in_graph(test_file_name, graph, triple_list): ...@@ -92,7 +92,7 @@ def add_triples_in_graph(test_file_name, graph, triple_list):
def test_search_pattern_1(graph): def test_search_pattern_1(graph):
print('\n -- Search patterns (1)') print('\n -- Search patterns (1)')
_, result_set = dev_rule.__search_pattern_1(graph) _, result_set = dev_rule.__search_pattern(graph)
print(f'\n ----- number of selection found: {len(result_set)}') print(f'\n ----- number of selection found: {len(result_set)}')
for selection in result_set: for selection in result_set:
result_str = f'>>> ' result_str = f'>>> '
......
...@@ -51,19 +51,19 @@ technical_dir_path = f'{out_dir_path}technical-data/' ...@@ -51,19 +51,19 @@ technical_dir_path = f'{out_dir_path}technical-data/'
os.chdir('..') os.chdir('..')
# -- Extraction from a file # -- Extraction from a file
factoids = tenet.create_ontology_from_amrld_file(amrld_file_path, # factoids = tenet.create_ontology_from_amrld_file(amrld_file_path,
onto_prefix=onto_prefix,
out_file_path=out_file_path,
technical_dir_path=technical_dir_path)
# -- Extraction from a directory (all files in a directory)
# factoids = tenet.create_ontology_from_amrld_dir(amrld_dir_path,
# onto_prefix=onto_prefix, # onto_prefix=onto_prefix,
# out_file_path=out_file_path, # out_file_path=out_file_path,
# technical_dir_path=technical_dir_path) # technical_dir_path=technical_dir_path)
# print(factoids)
# -- Extraction from a directory (all files in a directory)
factoids = tenet.create_ontology_from_amrld_dir(amrld_dir_path,
onto_prefix=onto_prefix,
out_file_path=out_file_path,
technical_dir_path=technical_dir_path)
print(factoids)
# ----------------------------------------------- # -----------------------------------------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment