private string GetTopicLinkUri(TopicType type, string objNamespace, XmlSchemaObject obj)
        {
            if (type == TopicType.Namespace)
                return objNamespace ?? string.Empty;

            var isGlobal = obj.Parent is XmlSchema;
            var parent = _topicUriStack.Peek();

            switch (type)
            {
                case TopicType.Schema:
                    return parent + "#" + obj.GetSchemaName();
                case TopicType.Element:
                    return isGlobal
                            ? parent + "#E/" + ((XmlSchemaElement)obj).QualifiedName.Name
                            : parent + "/" + ((XmlSchemaElement)obj).QualifiedName.Name;
                case TopicType.Attribute:
                    return isGlobal
                            ? parent + "#A/" + ((XmlSchemaAttribute)obj).QualifiedName.Name
                            : parent + "/@" + ((XmlSchemaAttribute)obj).QualifiedName.Name;
                case TopicType.AttributeGroup:
                    return parent + "#AG/" + ((XmlSchemaAttributeGroup)obj).QualifiedName.Name;
                case TopicType.Group:
                    return parent + "#G/" + ((XmlSchemaGroup)obj).QualifiedName.Name;
                case TopicType.SimpleType:
                case TopicType.ComplexType:
                    return parent + "#T/" + ((XmlSchemaType)obj).QualifiedName.Name;
                default:
                    throw ExceptionBuilder.UnhandledCaseLabel(type);
            }
        }
        private static string GetTopicLinkIdUri(TopicType type, XmlSchemaObject obj)
        {
            if (type == TopicType.Namespace ||
                type == TopicType.Schema)
            {
                return null;
            }

            var annotated = (XmlSchemaAnnotated)obj;
            if (string.IsNullOrEmpty(annotated.Id))
                return null;

            var targetNamespace = obj.GetSchema().TargetNamespace;
            var schemaName = obj.GetSchemaName();
            return string.Format("{0}#{1}#{2}", targetNamespace, schemaName, annotated.Id);
        }