diff --git a/tenet/scheme/amr_rule/__init__.py b/tenet/scheme/amr_rule/__init__.py
index 5b457376e0b9b7596c305507b83b210ac05b8b34..a1d62cb4b8a31f4f91bf42593bc7f7d308107a25 100644
--- a/tenet/scheme/amr_rule/__init__.py
+++ b/tenet/scheme/amr_rule/__init__.py
@@ -1,9 +1,11 @@
 from scheme.amr_rule.preprocessing.amr_reification import *
 from scheme.amr_rule.preprocessing.amrld_correcting import * 
 
-from scheme.amr_rule.transduction.atomic_class_extractor import * 
-from scheme.amr_rule.transduction.atomic_individual_extractor import * 
-from scheme.amr_rule.transduction.atomic_property_extractor import * 
+from scheme.amr_rule.transduction.atom_class_extractor import * 
+from scheme.amr_rule.transduction.atom_individual_extractor import * 
+from scheme.amr_rule.transduction.atom_property_extractor import * 
+from scheme.amr_rule.transduction.atom_value_extractor import * 
+from scheme.amr_rule.transduction.atom_phenomena_extractor import * 
 
 from scheme.amr_rule.transduction.composite_class_extractor_1 import * 
 
diff --git a/tenet/scheme/amr_rule/transduction/atomic_class_extractor.py b/tenet/scheme/amr_rule/transduction/atom_class_extractor.py
similarity index 87%
rename from tenet/scheme/amr_rule/transduction/atomic_class_extractor.py
rename to tenet/scheme/amr_rule/transduction/atom_class_extractor.py
index b5b52f205df6eb19eafb4a8869f359bafbea65a3..b1b4c07ca991857f5d5a3785086aed9519b205cb 100644
--- a/tenet/scheme/amr_rule/transduction/atomic_class_extractor.py
+++ b/tenet/scheme/amr_rule/transduction/atom_class_extractor.py
@@ -17,24 +17,18 @@ from transduction.naming_computer import define_composite_naming_1, define_restr
 
 
 #==============================================================================
-# Select Pattern: leaf{variable, concept}
+# Pattern Search: leaf{variable, concept}
 #==============================================================================
-
-def __rule_pattern_query_code(graph):
-    select_data_list = ['?leaf', '?conceptName']
-    clause_list = []
-    clause_list.append(f'?leaf a amr:AMR_Leaf.')
-    clause_list.append(f'?leaf amr:hasConcept ?leafConcept.')
-    clause_list.append(f'?leafConcept rdfs:subClassOf amr:AMR_Term_Concept.')
-    clause_list.append(f'?leafConcept amr:label ?conceptName.')
-    query_code = generate_select_query(graph, select_data_list, clause_list)
-    return query_code
-    
        
 def __search_pattern(graph):
-    query_code = __rule_pattern_query_code(graph)  
-    rule_pattern_set = graph.query(query_code) 
-    return rule_pattern_set
+    select_data_list = ['?leaf', '?conceptName']
+    clause_list = [f'?leaf a amr:AMR_Leaf.',
+                   f'?leaf amr:hasConcept ?leafConcept.',
+                   f'?leafConcept rdfs:subClassOf amr:AMR_Term_Concept.',
+                   f'?leafConcept amr:label ?conceptName.']
+    query_code = generate_select_query(graph, select_data_list, clause_list)
+    result_set = graph.query(query_code) 
+    return query_code, result_set
 
 
 #==============================================================================
@@ -134,17 +128,17 @@ def __construct_atom_class_net(graph, leaf, concept_name):
 # Main Method
 #==============================================================================
 
-def extract_atomic_class(graph):
+def extract_atom_class(graph):
     
     # -- Rule Initialization 
-    rule_label = 'extract atomic classes [ leaf{variable, concept} ]' 
+    rule_label = 'extract atom classes' 
 
     # -- Search for patterns 
-    rule_pattern_set = __search_pattern(graph)
+    _, pattern_set = __search_pattern(graph)
     
     # -- Selection Analyzing (1)
     rule_triple_list = []
-    for pattern in rule_pattern_set:
+    for pattern in pattern_set:
         
         # -- New Net Construction (from 3 nets)
         new_class, triple_list = __construct_atom_class_net(
diff --git a/tenet/scheme/amr_rule/transduction/atom_individual_extractor.py b/tenet/scheme/amr_rule/transduction/atom_individual_extractor.py
new file mode 100644
index 0000000000000000000000000000000000000000..9fcf81ac3cd4d7477fd857ae2e7c309de863bdf1
--- /dev/null
+++ b/tenet/scheme/amr_rule/transduction/atom_individual_extractor.py
@@ -0,0 +1,172 @@
+#!/usr/bin/python3.10
+# -*-coding:Utf-8 -*
+
+#==============================================================================
+# TENET: Rule to extract atomic individuals
+#------------------------------------------------------------------------------
+# Net Expansion AMR rule to extract atomic individuals
+# Rule: leaf{variable, concept} => atomicClass
+#==============================================================================
+
+from rdflib import Graph
+
+import transduction
+from transduction import net
+from transduction.query_builder import generate_select_query
+from transduction.naming_computer import define_composite_naming_1, define_restriction_naming
+
+
+#==============================================================================
+# Pattern Search: Leaf{variable, concept} corresponding to individual
+#==============================================================================
+
+def __search_pattern(graph):
+    select_data_list = ['?baseLeaf', '?valueLabel', '?classNet']
+    clause_list = [f'?baseLeaf a amr:AMR_Leaf.',
+                   f'?baseLeaf amr:hasConcept ?leafConcept.',
+                   f'?baseLeaf ?edge ?value.',
+                   f'?edge amr:hasRoleID ?roleID.',
+                   f'VALUES ?roleID {{"name"}}',
+                   f'?value a amr:AMR_Value.',
+                   f'?value rdfs:label ?valueLabel.',
+                   f'?classNet a [rdfs:subClassOf* net:Class_Net].',
+                   f'?classNet net:coverBaseNode ?baseLeaf.']
+    query_code = generate_select_query(graph, select_data_list, clause_list)
+    result_set = graph.query(query_code) 
+    return query_code, result_set
+
+
+#==============================================================================
+# Useful Additional Search
+#==============================================================================
+
+def __structure_query_code(graph):
+    select_data_list = ['?sentenceId']
+    clause_list = []
+    clause_list.append(f'?root a amr:AMR_Root.')
+    clause_list.append(f'?root amr:hasSentenceID ?sentenceId.')
+    query_code = generate_select_query(graph, select_data_list, clause_list)
+    return query_code 
+    
+
+def __search_structure(graph):
+    query_code = __structure_query_code(graph)  
+    result_set = graph.query(query_code) 
+    return result_set
+  
+
+def __search_leaf_in_relation(graph, base_leaf_uri):
+    select_data_list = ['?inRelationRole', '?inNet']
+    clause_list = [f'?inNet a [rdfs:subClassOf* net:Net].',
+                   f'?inNet net:coverBaseNode ?inLeaf.', 
+                   ('?inLeaf', '?relation', base_leaf_uri),
+                   f'?relation amr:hasAmrRole ?inRelationRole.']
+    query_code = generate_select_query(graph, select_data_list, clause_list) 
+    result_set = graph.query(query_code) 
+    return query_code, result_set
+  
+
+def __search_leaf_out_relation(graph, base_leaf_uri):
+    select_data_list = ['?outRelationRole', '?outNet']
+    clause_list = [f'?outNet a [rdfs:subClassOf* net:Net].',
+                   f'?outNet net:coverBaseNode ?outLeaf.', 
+                   (base_leaf_uri, '?relation', '?outLeaf'),
+                   f'?relation amr:hasAmrRole ?outRelationRole.']
+    query_code = generate_select_query(graph, select_data_list, clause_list) 
+    result_set = graph.query(query_code) 
+    return query_code, result_set
+
+ 
+    
+#==============================================================================
+# Useful Computation Method(s)
+#==============================================================================  
+
+def __get_structure(graph):
+    structure = 'unknown'
+    structure_set = __search_structure(graph)
+    for row in structure_set: 
+        structure = row.sentenceId
+    return structure
+  
+
+def __define_naming(value_label):
+    value_label = value_label.replace(' ', '#')
+    value_label = value_label.replace('-', '#')
+    word_set = value_label.split('#')
+    first = True
+    for word in word_set:
+        if first:
+            naming = word
+            first = False
+        else:
+            naming += word.capitalize()
+    return naming
+
+
+def __propagate_relation(graph, target_net, base_leaf): 
+    _, in_relation_set = __search_leaf_in_relation(graph, base_leaf)
+    for row in in_relation_set:
+        target_net.input_relation_list += [(row.inNet, row.inRelationRole, _)]       
+    _, out_relation_set = __search_leaf_out_relation(graph, base_leaf)
+    for row in out_relation_set:
+        target_net.output_relation_list += [(_, row.outRelationRole, row.outNet)] 
+
+
+
+#==============================================================================
+# Construct Method(s)
+#============================================================================== 
+
+def __construct_individual_net(
+        graph, base_leaf, value_label, mother_class_net):
+
+    # -- Net Composition
+    individual_net = net.IndividualNet(graph)
+    
+    # -- Data Computation
+    individual_net.base_node = base_leaf
+    individual_net.node = base_leaf
+    individual_net.individual_label = value_label
+    individual_net.mother_class_net = mother_class_net
+    individual_net.structure = __get_structure(graph)
+
+    # -- Net Naming
+    individual_net.naming = __define_naming(value_label)
+    
+    # -- Relation Propagation
+    __propagate_relation(graph, individual_net, base_leaf) 
+    
+    # -- Finalization
+    individual_net.finalize()
+    triple_definition = individual_net.generate_triple_definition()
+    
+    return individual_net, triple_definition
+
+  
+    
+#==============================================================================
+# Main Method
+#==============================================================================
+
+def extract_atom_individual(graph):
+    
+    # -- Rule Initialization 
+    rule_label = 'extract atom individuals' 
+
+    # -- Search for patterns 
+    _, pattern_set = __search_pattern(graph)
+    
+    # -- Selection Analyzing (1)
+    rule_triple_list = []
+    for pattern in pattern_set:
+        
+        # -- New Net Construction (from 3 nets)
+        new_class, triple_list = __construct_individual_net(
+            graph, pattern.baseLeaf, pattern.valueLabel, pattern.classNet)
+            
+        # -- Resulting List Update
+        # class_net_list.append(new_class)
+        rule_triple_list += triple_list
+            
+    return rule_label, rule_triple_list
\ No newline at end of file
diff --git a/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py b/tenet/scheme/amr_rule/transduction/atom_phenomena_extractor.py
similarity index 83%
rename from tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py
rename to tenet/scheme/amr_rule/transduction/atom_phenomena_extractor.py
index e6bf8bbd4379c5aa8abffb9bc78dba52beb5729a..7a744ebcc7c14c0093adc62dcd2306831c6f4235 100644
--- a/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py
+++ b/tenet/scheme/amr_rule/transduction/atom_phenomena_extractor.py
@@ -20,27 +20,22 @@ from transduction.naming_computer import define_composite_naming_1, define_restr
 # Pattern Search: Leaf{variable, concept} corresponding to individual
 #==============================================================================
 
-def __rule_pattern_query_code(graph):
-    select_data_list = ['?baseLeaf', '?conceptName', '?valueLabel', '?classNet']
-    clause_list = []
-    clause_list.append(f'?baseLeaf a amr:AMR_Leaf.')
-    clause_list.append(f'?baseLeaf amr:hasConcept ?leafConcept.')
-    clause_list.append(f'?baseLeaf ?edge ?value.')
-    clause_list.append(f'?edge amr:hasRoleID ?roleID.')
-    clause_list.append(f'VALUES ?roleID {{"name"}}')
-    clause_list.append(f'?value a amr:AMR_Value.')
-    clause_list.append(f'?value rdfs:label ?valueLabel.')
-    clause_list.append(f'?classNet a [rdfs:subClassOf* net:Class_Net].')
-    clause_list.append(f'?classNet net:coverBaseNode ?baseLeaf.')
-    clause_list.append(f'?classNet net:hasClassName ?conceptName.')
-    query_code = generate_select_query(graph, select_data_list, clause_list)
-    return query_code
-    
-       
 def __search_pattern(graph):
-    query_code = __rule_pattern_query_code(graph)  
-    rule_pattern_set = graph.query(query_code) 
-    return rule_pattern_set
+    select_data_list = ['?baseLeaf', '?phenomenaLabel', '?relationConceptPhenomena', '?relationConceptLabel']
+    clause_list = [f'?baseLeaf a amr:AMR_Leaf.',
+                   f'?baseLeaf amr:hasConcept ?concept.',
+                   f'?baseLeaf amr:hasVariable ?variable.',
+                   f'?variable amr:label ?varLabel.',
+                   f'?concept rdfs:subClassOf amr:AMR_Relation_Concept.',
+                   f'?concept amr:hasPhenomenaLink ?relationConceptPhenomena.',
+                   f'?concept amr:label ?relationConceptLabel.',
+                   f'?relationConceptPhenomena amr:label ?phenomenaLabel.',
+                   f'?baseLeaf ?relation ?argLeaf.',
+                   f'?relation amr:hasAmrRole ?someArgRole.']
+    query_code = generate_select_query(graph, select_data_list, clause_list)
+    result_set = graph.query(query_code) 
+    return query_code, result_set
+
 
 
 #==============================================================================
@@ -156,17 +151,17 @@ def __construct_individual_net(
 # Main Method
 #==============================================================================
 
-def extract_atomic_individual(graph):
+def extract_atom_phenomena(graph):
     
     # -- Rule Initialization 
-    rule_label = 'extract atomic individuals [ leaf{variable, concept} ]' 
+    rule_label = 'extract atom phenomena' 
 
     # -- Search for patterns 
-    rule_pattern_set = __search_pattern(graph)
+    _, pattern_set = __search_pattern(graph)
     
     # -- Selection Analyzing (1)
     rule_triple_list = []
-    for pattern in rule_pattern_set:
+    for pattern in pattern_set:
         
         # -- New Net Construction (from 3 nets)
         new_class, triple_list = __construct_individual_net(
diff --git a/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py b/tenet/scheme/amr_rule/transduction/atom_property_extractor.py
similarity index 90%
rename from tenet/scheme/amr_rule/transduction/atomic_property_extractor.py
rename to tenet/scheme/amr_rule/transduction/atom_property_extractor.py
index 3304ed06cb86c0d7557f60b3376207ee47a6e2ff..f01e638b4114df8e414db23f60559ad487de44fc 100644
--- a/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py
+++ b/tenet/scheme/amr_rule/transduction/atom_property_extractor.py
@@ -21,21 +21,15 @@ from transduction.naming_computer import define_composite_naming_1, define_restr
 # Pattern Search: Leaf{variable, amrPrecicateConcept}
 #==============================================================================
 
-def __rule_pattern_query_code(graph):
+def __search_pattern(graph):
     select_data_list = ['?baseLeaf', '?predicateLabel']
-    clause_list = []
-    clause_list.append(f'?baseLeaf a amr:AMR_Leaf.')
-    clause_list.append(f'?baseLeaf amr:hasConcept ?leafConcept.')
-    clause_list.append(f'?leafConcept rdfs:subClassOf amr:AMR_Predicat_Concept.')
-    clause_list.append(f'?leafConcept amr:label ?predicateLabel.')
+    clause_list = [f'?baseLeaf a amr:AMR_Leaf.',
+                   f'?baseLeaf amr:hasConcept ?leafConcept.',
+                   f'?leafConcept rdfs:subClassOf amr:AMR_Predicat_Concept.',
+                   f'?leafConcept amr:label ?predicateLabel.']
     query_code = generate_select_query(graph, select_data_list, clause_list)
-    return query_code
-        
-
-def __search_pattern(graph):
-    query_code = __rule_pattern_query_code(graph)  
     result_set = graph.query(query_code) 
-    return result_set
+    return query_code, result_set
 
 
 #==============================================================================
@@ -168,17 +162,17 @@ def __construct_atom_property_net(graph, base_leaf, predicate_label):
 # Main Method
 #==============================================================================
 
-def extract_atomic_property(graph):
+def extract_atom_property(graph):
     
     # -- Rule Initialization 
-    rule_label = 'extract atomic properties [ leaf{variable, amrTermConcept} ]' 
+    rule_label = 'extract atomic properties' 
 
     # -- Search for patterns 
-    rule_pattern_set = __search_pattern(graph)
+    _, pattern_set = __search_pattern(graph)
     
     # -- Selection Analyzing (1)
     rule_triple_list = []
-    for pattern in rule_pattern_set:
+    for pattern in pattern_set:
         
         # -- New Net Construction (from 3 nets)
         new_net, triple_list = __construct_atom_property_net(
diff --git a/tenet/scheme/amr_rule/transduction/atom_value_extractor.py b/tenet/scheme/amr_rule/transduction/atom_value_extractor.py
new file mode 100644
index 0000000000000000000000000000000000000000..4bed1cb88082aaf540796a29a84572c653698803
--- /dev/null
+++ b/tenet/scheme/amr_rule/transduction/atom_value_extractor.py
@@ -0,0 +1,149 @@
+#!/usr/bin/python3.10
+# -*-coding:Utf-8 -*
+
+#==============================================================================
+# TENET: Rule to extract atomic individuals
+#------------------------------------------------------------------------------
+# Net Expansion AMR rule to extract atomic individuals
+# Rule: leaf{variable, concept} => atomicClass
+#==============================================================================
+
+from rdflib import Graph
+
+import transduction
+from transduction import net
+from transduction.query_builder import generate_select_query
+from transduction.naming_computer import define_composite_naming_1, define_restriction_naming
+
+
+#==============================================================================
+# Pattern Search: Leaf{variable, concept} corresponding to individual
+#==============================================================================
+       
+def __search_pattern(graph):
+    select_data_list = ['?valueLabel']
+    clause_list = [f'?value a amr:AMR_Value.',
+                   f'?value rdfs:label ?valueLabel.']
+    query_code = generate_select_query(graph, select_data_list, clause_list)
+    result_set = graph.query(query_code) 
+    return query_code, result_set
+
+
+#==============================================================================
+# Useful Additional Search
+#==============================================================================
+
+def __structure_query_code(graph):
+    select_data_list = ['?sentenceId']
+    clause_list = []
+    clause_list.append(f'?root a amr:AMR_Root.')
+    clause_list.append(f'?root amr:hasSentenceID ?sentenceId.')
+    query_code = generate_select_query(graph, select_data_list, clause_list)
+    return query_code 
+    
+
+def __search_structure(graph):
+    query_code = __structure_query_code(graph)  
+    result_set = graph.query(query_code) 
+    return result_set
+  
+
+def __search_leaf_in_relation(graph, base_leaf_uri):
+    select_data_list = ['?inRelationRole', '?inNet']
+    clause_list = [f'?inNet a [rdfs:subClassOf* net:Net].',
+                   f'?inNet net:coverBaseNode ?inLeaf.', 
+                   ('?inLeaf', '?relation', base_leaf_uri),
+                   f'?relation amr:hasAmrRole ?inRelationRole.']
+    query_code = generate_select_query(graph, select_data_list, clause_list) 
+    result_set = graph.query(query_code) 
+    return query_code, result_set
+  
+
+def __search_leaf_out_relation(graph, base_leaf_uri):
+    select_data_list = ['?outRelationRole', '?outNet']
+    clause_list = [f'?outNet a [rdfs:subClassOf* net:Net].',
+                   f'?outNet net:coverBaseNode ?outLeaf.', 
+                   (base_leaf_uri, '?relation', '?outLeaf'),
+                   f'?relation amr:hasAmrRole ?outRelationRole.']
+    query_code = generate_select_query(graph, select_data_list, clause_list) 
+    result_set = graph.query(query_code) 
+    return query_code, result_set
+
+ 
+    
+#==============================================================================
+# Useful Computation Method(s)
+#==============================================================================  
+
+def __get_structure(graph):
+    structure = 'unknown'
+    structure_set = __search_structure(graph)
+    for row in structure_set: 
+        structure = row.sentenceId
+    return structure
+  
+
+def __define_naming(value_label):
+    value_label = value_label.replace(' ', '#')
+    value_label = value_label.replace('-', '#')
+    word_set = value_label.split('#')
+    first = True
+    for word in word_set:
+        if first:
+            naming = word
+            first = False
+        else:
+            naming += word.capitalize()
+    return naming
+
+
+
+#==============================================================================
+# Construct Method(s)
+#============================================================================== 
+
+def __construct_value_net(
+        graph, value_label):
+
+    # -- Net Composition
+    value_net = net.ValueNet(graph)
+    
+    # -- Data Computation
+    value_net.value_label = value_label
+    value_net.structure = __get_structure(graph)
+
+    # -- Net Naming
+    value_net.naming = __define_naming(value_label)
+    
+    # -- Finalization
+    value_net.finalize()
+    triple_definition = value_net.generate_triple_definition()
+    
+    return value_net, triple_definition
+
+  
+    
+#==============================================================================
+# Main Method
+#==============================================================================
+
+def extract_atom_value(graph):
+    
+    # -- Rule Initialization 
+    rule_label = 'extract atom values' 
+
+    # -- Search for patterns 
+    _, pattern_set = __search_pattern(graph)
+    
+    # -- Selection Analyzing (1)
+    rule_triple_list = []
+    for pattern in pattern_set:
+        
+        # -- New Net Construction (from 3 nets)
+        new_class, triple_list = __construct_value_net(graph, pattern.valueLabel)
+            
+        # -- Resulting List Update
+        # class_net_list.append(new_class)
+        rule_triple_list += triple_list
+            
+    return rule_label, rule_triple_list
\ No newline at end of file
diff --git a/tenet/scheme/amr_scheme_1.py b/tenet/scheme/amr_scheme_1.py
index 535bb44e0f5503c8c9b5559a0cf3e04c930dfe1d..4ce4dd22864ea85aa1cf738b4f6b8c5a1a34da88 100644
--- a/tenet/scheme/amr_scheme_1.py
+++ b/tenet/scheme/amr_scheme_1.py
@@ -227,9 +227,11 @@ classification_sequence = {
     }
 
 atomic_extraction_sequence = ['atomic-extraction-sequence',
-                              rule.extract_atomic_class,
-                              rule.extract_atomic_individual,
-                              rule.extract_atomic_property]
+                              rule.extract_atom_class,
+                              rule.extract_atom_individual,
+                              rule.extract_atom_property,
+                              rule.extract_atom_value,
+                              rule.extract_atom_phenomena]
 
 phenomena_polarity_analyze_sequence = ['phenomena_polarity_analyze_sequence',
                                        rule.analyze_phenomena_polarity_1]
diff --git a/tenet/transduction/net/net.py b/tenet/transduction/net/net.py
index b1ab0264d6f796d6e16b28ad346cf1230b87d542..495735a4d7ecf8c3efe4678610da43a4a754d4ce 100644
--- a/tenet/transduction/net/net.py
+++ b/tenet/transduction/net/net.py
@@ -353,9 +353,9 @@ class Net:
             
             # -- Net Node Reference
             if self.base_node is None:
-                net_node_ref = f'blankNode1'
+                net_node_ref = f'blankNode'
             elif len(self.base_node) <= 0:
-                net_node_ref = f'blankNode2'
+                net_node_ref = f'blankNode'
             else:
                 assert len(self.base_node) > 0, f'Houston, we have a problem!'
                 net_node_ref = self.__get_node_value(self.base_node[0])                
diff --git a/tests/dev_tests/test_data/atom-extraction-devGraph-1.result.ttl b/tests/dev_tests/test_data/atom-extraction-devGraph-1.result.ttl
index f87267394544c131266b93c6325276f4427f6abf..67bb1f9a51f43f11e0beec1ad5699ef506d3f03d 100644
--- a/tests/dev_tests/test_data/atom-extraction-devGraph-1.result.ttl
+++ b/tests/dev_tests/test_data/atom-extraction-devGraph-1.result.ttl
@@ -440,9 +440,6 @@ net:Property_Direction a owl:Class ;
 net:Restriction_Net a owl:Class ;
     rdfs:subClassOf net:Net .
 
-net:Value_Net a owl:Class ;
-    rdfs:subClassOf net:Net .
-
 net:abstractionClass a owl:AnnotationProperty ;
     rdfs:label "abstraction class" ;
     rdfs:subPropertyOf net:objectValue .
@@ -708,6 +705,16 @@ net:unary_list a owl:Class ;
     rdfs:label "unary-list" ;
     rdfs:subClassOf net:list .
 
+net:value_SolarSystem_blankNode a net:Value_Net ;
+    net:hasNaming "SolarSystem" ;
+    net:hasStructure "SSC-01-01" ;
+    net:hasValueLabel "Solar System" .
+
+net:value_negative_blankNode a net:Value_Net ;
+    net:hasNaming "negative" ;
+    net:hasStructure "SSC-01-01" ;
+    net:hasValueLabel "negative" .
+
 net:verbClass a owl:AnnotationProperty ;
     rdfs:label "verb class" ;
     rdfs:subPropertyOf net:objectValue .
@@ -1079,6 +1086,9 @@ net:Class_Net a owl:Class ;
 net:Property_Net a owl:Class ;
     rdfs:subClassOf net:Net .
 
+net:Value_Net a owl:Class ;
+    rdfs:subClassOf net:Net .
+
 net:atomClass_system_s a net:Atom_Class_Net ;
     :role_domain net:individual_SolarSystem_p ;
     net:coverBaseNode :leaf_system_s ;
diff --git a/tests/dev_tests/test_rule_atomic_extractor.py b/tests/dev_tests/test_rule_atomic_extractor.py
index 46c56859f664ae1f0cda4badb6fbb807e2a43850..8fbd3fb5d2ea9c58a0f864900a308d5fdad9ee14 100644
--- a/tests/dev_tests/test_rule_atomic_extractor.py
+++ b/tests/dev_tests/test_rule_atomic_extractor.py
@@ -25,9 +25,11 @@ from context import tenet
 from tenet.transduction.rdfterm_computer import __update_uri_with_prefix
 from tenet.transduction import rdfterm_computer, prefix_handle
 from tenet.transduction import net
-from tenet.scheme.amr_rule.transduction import atomic_class_extractor as rule_1
-from tenet.scheme.amr_rule.transduction import atomic_individual_extractor as rule_2
-from tenet.scheme.amr_rule.transduction import atomic_property_extractor as rule_3
+from tenet.scheme.amr_rule.transduction import atom_class_extractor as rule_1
+from tenet.scheme.amr_rule.transduction import atom_individual_extractor as rule_2
+from tenet.scheme.amr_rule.transduction import atom_property_extractor as rule_3
+from tenet.scheme.amr_rule.transduction import atom_value_extractor as rule_4
+from tenet.scheme.amr_rule.transduction import atom_phenomena_extractor as rule_5
 from tenet.scheme import amr_rule
 
 
@@ -80,46 +82,55 @@ def add_triples_in_graph(graph, triple_list):
 #==============================================================================
         
 def test_search_pattern_1(graph):
-    pattern_result_set = rule_1.__search_pattern(graph)
-    print(f'\n ----- number of selection found: {len(pattern_result_set)}')
-    for selection in pattern_result_set: 
+    _, pattern_set = rule_1.__search_pattern(graph)
+    print(f'\n ----- number of selection found: {len(pattern_set)}')
+    for row in pattern_set: 
         result_str = f'>>> '
-        result_str += f'{selection.leaf.n3(graph.namespace_manager)}'
-        result_str += f' {selection.conceptName.n3(graph.namespace_manager)}'
+        result_str += f'{row.leaf.n3(graph.namespace_manager)}'
+        result_str += f' {row.conceptName.n3(graph.namespace_manager)}'
         print(result_str) 
-    return pattern_result_set
+    return pattern_set
 
         
 def test_search_pattern_2(graph):
-    pattern_result_set = rule_2.__search_pattern(graph)
-    print(f'\n ----- number of selection found: {len(pattern_result_set)}')
-    for selection in pattern_result_set: 
+    _, pattern_set = rule_2.__search_pattern(graph)
+    print(f'\n ----- number of selection found: {len(pattern_set)}')
+    for row in pattern_set: 
         result_str = f'>>> '
-        result_str += f'{selection.baseLeaf.n3(graph.namespace_manager)}'
-        result_str += f' {selection.conceptName.n3(graph.namespace_manager)}'
-        result_str += f' {selection.valueLabel.n3(graph.namespace_manager)}'
-        result_str += f' {selection.classNet.n3(graph.namespace_manager)}'
+        result_str += f'{row.baseLeaf.n3(graph.namespace_manager)}'
+        result_str += f' {row.valueLabel.n3(graph.namespace_manager)}'
+        result_str += f' {row.classNet.n3(graph.namespace_manager)}'
         print(result_str) 
-    return pattern_result_set
+    return pattern_set
 
         
 def test_search_pattern_3(graph):
-    pattern_result_set = rule_3.__search_pattern(graph)
-    print(f'\n ----- number of selection found: {len(pattern_result_set)}')
-    for selection in pattern_result_set: 
+    _, pattern_set = rule_3.__search_pattern(graph)
+    print(f'\n ----- number of selection found: {len(pattern_set)}')
+    for row in pattern_set: 
         result_str = f'>>> '
-        result_str += f'{selection.baseLeaf.n3(graph.namespace_manager)}'
-        result_str += f' {selection.predicateLabel.n3(graph.namespace_manager)}'
+        result_str += f'{row.baseLeaf.n3(graph.namespace_manager)}'
+        result_str += f' {row.predicateLabel.n3(graph.namespace_manager)}'
         print(result_str) 
-    return pattern_result_set
+    return pattern_set
+
+        
+def test_search_pattern_4(graph):
+    _, pattern_set = rule_4.__search_pattern(graph)
+    print(f'\n ----- number of selection found: {len(pattern_set)}')
+    for row in pattern_set: 
+        result_str = f'>>> '
+        result_str += f'{row.valueLabel.n3(graph.namespace_manager)}'
+        print(result_str) 
+    return pattern_set
 
         
 def test_search_structure(graph):
     result_set = rule_3.__search_structure(graph)
     print(f'\n ----- number of selection found: {len(result_set)}')
-    for selection in result_set: 
+    for row in result_set: 
         result_str = f'>>> '
-        result_str += f'{selection.sentenceId.n3(graph.namespace_manager)}'
+        result_str += f'{row.sentenceId.n3(graph.namespace_manager)}'
         print(result_str) 
     return result_set
     
@@ -158,7 +169,7 @@ if __name__ == '__main__':
     print('\n \n')
     
     print('\n *** Unit Test ***')
-    test_rule_application(graph, rule_1.extract_atomic_class)
+    test_rule_application(graph, rule_1.extract_atom_class)
     print('\n \n')
     
     print('\n ///////////////////// Extraction Rule 2')
@@ -170,7 +181,7 @@ if __name__ == '__main__':
     print('\n \n')
     
     print('\n *** Unit Test ***')
-    test_rule_application(graph, rule_2.extract_atomic_individual)
+    test_rule_application(graph, rule_2.extract_atom_individual)
     print('\n \n')
     print('\n \n')
     
@@ -184,7 +195,20 @@ if __name__ == '__main__':
     print('\n \n')
     
     print('\n *** Unit Test ***')
-    test_rule_application(graph, rule_3.extract_atomic_property)
+    test_rule_application(graph, rule_3.extract_atom_property)
+    print('\n \n')
+    
+    print('\n ///////////////////// Extraction Rule 4')
+    print('\n *** Step Test ***')
+    
+    print('\n -- Step 1: Search Pattern')
+    pattern_set = test_search_pattern_4(graph)
+    test_search_structure(graph)
+    
+    print('\n \n')
+    
+    print('\n *** Unit Test ***')
+    test_rule_application(graph, rule_4.extract_atom_value)
     print('\n \n')
 
     print('\n *** - ***')
\ No newline at end of file