public function buildKeyPath(Entity $obj_gds_entity, $bol_first_node = true)
    {
        $str_kind = $obj_gds_entity->getKind();
        if(null === $str_kind) {
            if($bol_first_node) {
                if($this->obj_schema instanceof Schema) {
                    $str_kind = $this->obj_schema->getKind();
                } else {
                    throw new \Exception('Could not build full key path, no Schema set on Mapper and no Kind set on Entity');
                }
            } else {
                throw new \Exception('Could not build full key path, no Kind set on (nth node) GDS Entity');
            }
        }

        // Build the first node in the Key Path from this entity
        $arr_full_path = [$this->createKeyPathElement([
            'kind' => $str_kind,
            'id' => $obj_gds_entity->getKeyId(),
            'name' => $obj_gds_entity->getKeyName()
        ])];

        // Add any ancestors to the Key Path
        $mix_ancestry = $obj_gds_entity->getAncestry();
        if(is_array($mix_ancestry)) {
            $arr_ancestor_path = [];
            foreach($mix_ancestry as $arr_ancestor_element) {
                $arr_ancestor_path[] = $this->createKeyPathElement($arr_ancestor_element);
            }
            $arr_full_path = array_merge($arr_ancestor_path, $arr_full_path);
        } elseif ($mix_ancestry instanceof Entity) {
            $arr_full_path = array_merge($this->buildKeyPath($mix_ancestry, false), $arr_full_path);
        }
        return $arr_full_path;
    }