private static IdentifierInfo AnalizeStatement(IStatement statement)
        {
            var typeDeclarations         = new List <string>();
            var typePropertyDeclarations = new List <string>();

            foreach (var fact in statement.FactsEnumerable)
            {
                var predicate = fact.Predicate;
                if (predicate != null && predicate.FirstChild != null &&
                    predicate.FirstChild.GetTokenType() == NTriplesTokenType.A_KEYWORD)
                {
                    typeDeclarations.AddRange(
                        fact.ObjectsEnumerable.Select(expression => expression.ToUri()).Where(uri => uri != null));
                }
                else if (GetExpressionUri(fact.PredicateIdentifiersEnumerable) == TypePropertyDeclaration)
                {
                    typePropertyDeclarations.AddRange(fact.ObjectsEnumerable.SelectNotNull(e => e.ToUri()));
                }
            }

            bool isClass = typeDeclarations.Any(declaration => declaration == Class);

            if (isClass || typePropertyDeclarations.Count > 0)
            {
                return(IdentifierInfo.CreateClassDeclaration(isClass, typePropertyDeclarations.ToArray()));
            }

            if (typeDeclarations.Any())
            {
                return(IdentifierInfo.CreateClassInstantiation(typeDeclarations.ToArray()));
            }

            return(new IdentifierInfo(IdentifierKind.Subject));
        }