public function link(string $name, IProperty $source, IProperty $target, bool $force = false): ISchema {
            if (isset($this->linkList[$name]) && $force === false) {
                throw new SchemaException(sprintf('Schema [%s] already contains link named [%s].', $this->getSchemaName(), $name));
            }
            $this->linkList[$name] = new Link($name, $source, $target);