@startuml

class C_STRING {
  + constraint : List<String> [*]
  + default_value : String [0..1]
  + assumed_value : String [0..1]
  + prototype_value() : String [1]
  + valid_value( a_value : String [1] ) : Boolean [1]
  + any_allowed() : Boolean [1]
  + c_value_conforms_to( other : C_STRING [1] ) : Boolean [1]
  + c_value_congruent_to( other : C_STRING [1] ) : Boolean [1]
}

abstract class C_PRIMITIVE_OBJECT  #whitesmoke;line:gray;line.dotted;text:gray {
  + assumed_value : Any [0..1]
  + is_enumerated_type_constraint : Boolean [0..1]
  + constraint : Any [1]
  + has_assumed_value() : Boolean [1]
  + constrained_typename() : String [1]
  + c_conforms_to( other : C_PRIMITIVE_OBJECT [1], rmcc : FUNCTION<Boolean,TUPLE2<String,String>> [1] ) : Boolean [1]
  + {abstract} c_value_conforms_to( other : C_PRIMITIVE_OBJECT [1] ) : Boolean [1]
  + c_congruent_to( other : C_PRIMITIVE_OBJECT [1] ) : Boolean [1]
  + {abstract} c_value_congruent_to( other : C_PRIMITIVE_OBJECT [1] ) : Boolean [1]
}

abstract class C_DEFINED_OBJECT  #whitesmoke;line:gray;line.dotted;text:gray {
  + default_value : Any [0..1]
  + {abstract} any_allowed() : Boolean [1]
  + {abstract} valid_value( a_value : Any [1] ) : Boolean [1]
  + {abstract} prototype_value() : Any [1]
  + has_default_value() : Boolean [1]
}

abstract class C_OBJECT  #whitesmoke;line:gray;line.dotted;text:gray {
  + rm_type_name : String [1]
  + occurrences : Multiplicity_interval [0..1]
  + node_id : String [1]
  + is_deprecated : Boolean [0..1]
  + sibling_order : SIBLING_ORDER [0..1]
  + specialisation_depth() : Integer [1]
  + effective_occurrences() : Multiplicity_interval [1]
  + c_conforms_to( other : C_OBJECT [1], rmcc : FUNCTION<Boolean,TUPLE2<String,String>> [1] ) : Boolean [1]
  + c_congruent_to( other : ARCHETYPE_CONSTRAINT [1] ) : Boolean [1]
  + occurrences_conforms_to( other : C_OBJECT [1] ) : Boolean [1]
  + node_id_conforms_to( other : C_OBJECT [1] ) : Boolean [1]
  + is_prohibited() : Boolean [1]
}

abstract class ARCHETYPE_CONSTRAINT  #whitesmoke;line:gray;line.dotted;text:gray {
  + parent : ARCHETYPE_CONSTRAINT [0..1]
  + soc_parent : C_SECOND_ORDER [0..1]
  + {abstract} is_prohibited() : Boolean [1]
  + has_path( a_path : String [1] ) : Boolean [1]
  + path() : String [1]
  + {abstract} c_conforms_to( other : ARCHETYPE_CONSTRAINT [1], rmcc : FUNCTION<Boolean,TUPLE2<String,String>> [1] ) : Boolean [1]
  + {abstract} c_congruent_to( other : ARCHETYPE_CONSTRAINT [1] ) : Boolean [1]
  + is_second_order_constrained() : Boolean [1]
  + is_root() : Boolean [1]
  + is_leaf() : Boolean [1]
}

class ADL_CODE_DEFINITIONS  #whitesmoke;line:gray;line.dotted;text:gray {
  + codes_conformant( a_child_code : String [1], a_parent_code : String [1] ) : Boolean [1]
  + is_adl_code( a_code : String [1] ) : Boolean [1]
  + is_id_code( a_code : String [1] ) : Boolean [1]
  + is_value_code( a_code : String [1] ) : Boolean [1]
  + is_value_set_code( a_code : String [1] ) : Boolean [1]
  + is_redefined_code( a_code : String [1] ) : Boolean [1]
  + code_exists_at_level( a-code : String [1], a_level : Integer [1] ) : Boolean [1]
}

ADL_CODE_DEFINITIONS <|-- ARCHETYPE_CONSTRAINT

ARCHETYPE_CONSTRAINT <|-- C_OBJECT

C_OBJECT <|-- C_DEFINED_OBJECT

C_DEFINED_OBJECT <|-- C_PRIMITIVE_OBJECT

C_PRIMITIVE_OBJECT <|-- C_STRING


@enduml