public function toString()
    {
        if (null === $this->composedURI) {
            $this->composedURI = '';

            if (null !== $this->scheme) {
                $this->composedURI .= $this->scheme;
                $this->composedURI .= ':';
            }

            if (null !== $this->host) {
                $this->composedURI .= '//';
                if (null !== $this->username) {
                    $this->composedURI .= $this->username;
                    if (null !== $this->password) {
                        $this->composedURI .= ':';
                        $this->composedURI .= $this->password;
                    }
                    $this->composedURI .= '@';
                }
                $this->composedURI .= $this->host;
            }

            $this->composedURI .= $this->path;

            if (null !== $this->query) {
                $this->composedURI .= '?';
                $this->composedURI .= $this->query;
            }

            if (null !== $this->fragment) {
                $this->composedURI .= '#';
                $this->composedURI .= $this->fragment;
            }
        }
        return $this->composedURI;
    }