protected function validateId($id, $fullCheck = false)
    {
        if (!$id) {
            throw new Exception\InvalidArgumentException('The item id must not be empty.');
        }
        if ($fullCheck) {
            if (!is_string($id)) {
                throw new Exception\UnexpectedTypeException($id, 'string', 'id');
            }
            if (!$this->isValidId($id)) {
                throw new Exception\InvalidArgumentException(
                    sprintf(
                        'The "%s" string cannot be used as the item id because it contains illegal characters. '
                        . 'The valid item id should start with a letter and only contain '
                        . 'letters, numbers, underscores ("_"), hyphens ("-") and colons (":").',
                        $id
                    )
                );
            }
        }
    }